关于for循环语句后的分号问题
发布网友
发布时间:2022-04-29 01:25
我来回答
共4个回答
热心网友
时间:2022-06-27 13:08
for(表达式1;表达式2;表达式3) 语句
执行过程如下:
1) 先求解表达式1。
2) 求解表达式2,若其值为真,则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假,则结束循环,转到第5)步。
3) 求解表达式3。
4) 转回上面第2)步继续执行。
5) 循环结束,执行for语句下面的一个语句。
有分号时就是没有循环体时,等于是直接跳到3)步,去求表达式3了,也就是表达式3成为循环体,等价于
for(i=count; i >=1 ;i--)
sum=sum+i;
此后printf打出的是它执行完时sum的终值.
而没分号时循环体为printf语句,也就是说第一次并不是求表达式3,而是先去执行printf了,----这就是为什么第一次打出的sum总为0!!!也就是printf先于sum += i--执行了.
总之,两种情况下,sum += i--语句执行次数是一样的,但在没分号情况下,因printf要比它早执行一次,因而最后sum终值没有被打出来而已.
热心网友
时间:2022-06-27 13:09
这是因为如果加了分号,那么最后一次是I=0,显然此时不满足i>=1因此循环体printf("\nTotal of the first %d number is %ld;\ni=%d.\n",count,sum,i)不执行,但是实际上SUM的值仍然是正确的,可以在程序最后加一句PRINTF语句以验证,关于FOR语句的更多资料请查阅自己的C语言教材。
热心网友
时间:2022-06-27 13:09
楼上两个说的都是对的.
有没有分号都会加到1. 只是当i=1时进入循环体,这时printf语句执行的是加到2的结果,printf语句执行之后才会执行sum+=i--,然后sum才加到1了,这时i=0,不会再执行printf语句显示加到1的结果.
如楼上所说,你可以再加一条printf语句查看最后结果.
热心网友
时间:2022-06-27 13:10
不是的,不管时候有分号,都会加到1的.
执行流程是先判断是否i>=1然后sum += i--,也就是说在i=1的时候还要进入循环体内执行一次."sum += i--"就是循环体