关于for循环语句后的分号问题

关于for循环语句后的分号问题
#include "Stdio.h"
int main(void)
{
long sum=0L;
int count=0;
int i=0;
printf("\nplease enter the number of integers you want to sum:");
scanf("%d",&count);
for(i=count; i >=1 ;sum += i--) ;
printf("\nTotal of the first %d number is %ld;\ni=%d.\n",count,sum,i);
}
for语句后的分号不加的话,sum的结果就是从2加到count,但是加的话,sum的结果就是从1加到count.
为什么会这样!
其他人气:570 ℃时间:2020-05-09 02:31:45
优质解答
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终值没有被打出来而已.
我来回答
类似推荐
请使用1024x768 IE6.0或更高版本浏览器浏览本站点,以保证最佳阅读效果。本页提供作业小助手,一起搜作业以及作业好帮手最新版!
版权所有 CopyRight © 2012-2024 作业小助手 All Rights Reserved. 手机版