二级C语言程序问题 急求解!

int a,b,c,d,i,j,k;
a=10;b=c=d=5;i=j=k=0;
for(;a>b;++b)i++;
while(a>++c)j++;
do k++; while(a>d++);
执行此程序后i j k的值分别为几?
求详细解释!

在每个循环中间输出i,j,k的值
cout<<"i="<<i<<" j="<<j<<" k="<<k<<endl;
第一个循环得到的值:

i=1 j=0 k=0
i=2 j=0 k=0
i=3 j=0 k=0
i=4 j=0 k=0
i=5 j=0 k=0
第二个循环得到的值:

i=5 j=1 k=0
i=5 j=2 k=0
i=5 j=3 k=0
i=5 j=4 k=0
第三个循环得到的值:

i=5 j=4 k=1
i=5 j=4 k=2
i=5 j=4 k=3
i=5 j=4 k=4
i=5 j=4 k=5
i=5 j=4 k=6
最后得到的结果是:

i=5 j=4 k=6
你可以写在编译器上跑一下。
希望能帮助到你。追问

k为什么循环了6次?不是10-5=5次么?

追答

do while循环语句,是先走完一遍程序,再做判断。第六次不符合条件,但是程序韩式走的,所以还是走6次。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-17
i=5;
原因:for循环中看循环次数,和这里的前置++和后置++无关系,所以循环了5次,
j=4;
原因:while循环中,先执行前置加加,所以满足条件有10>6,10>7,10>8>10>9.4次
k=6
原因:和while循环不同,do while循环中先执行一次循环体语句再来判断while条件,所以先执行k++之后k=1,再来判断a>d++,由于是后置++,先判断10>5执行K++,10>6,k++依次类推,到最后一次K++后,10>10不满足,中间执行了6次k++本回答被提问者采纳
第2个回答  2012-08-17
i=5,j=4,k=6
这道题主要是检查你对循环及i++与++i之间的区别的认识程度
只要记住i++是先用i然后再加,++i是i先加1再用,比如i=0;j=i++;k=++i;则最后i=2;j=0;k=2;
对循环的解释主要还是while与do while的循环的理解,记住while先判断再循环,do whlie先循环在判断就好了
第3个回答  2012-08-17
首先,此语句for(;a>b;++b)i++;不会写错
其次解此题最好的办法是将其写至程序中运行,调试,观擦,这样才能学到更多的知识
这道题并不复杂,也可以学着自已纸上分析,这样才能有所进步

本人是教软件开发的追问

……我就是想知道为啥k=6 考试时候你能上机看看是个啥啊?

追答

for(;a>b;++b)i++; 这里的++b中的++操作放前放后无所谓,因为没有使用b作为操作数进行其他计算,10>5++,可执行5次,即i=5

while(a>++c)j++; 这里的++放前面就有作用了,因为用c作为条件操作数,++放前,即表示每判断前先+1,固10>++5相当于10>6++,则循环4次,j=4

do k++; while(a>d++); 因用do while,所以k++先执行,即k=1,而后10>5++,又相当于普通循环了5次,即k++执行5次,k = 6

我很同意 wangliang08的答案

考试虽无法运行,但在平时可以多练

追问

喵 也很感谢你的解释~ 很详细~

追答

互相帮助

第4个回答  2012-08-17
for(;a>b;++b)i++;

这儿打错了吧?追问

没错 前面应该是可以为空的吧……?

追答

不好意思 太久没看了。
for循环到b=10,就进行五次i++,i=5
while是真就一直循环,直到判断条件为假。
依然是五次,j=5
后面应该是do{ k++; }while(a>d++);?
k应该是6

。。。很久没看过了 不知道是不是完全正确。。。

相似回答