(在线等待)一道2级C的简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 03:38:19
main()
{
int i=0,sam=1;

do{sam+=i;i++;} while(i<5);
printf("sam=%d\ni=%d\n",sam,i);
}

这样输出的sam=11 i=5

我想问的是,我把i的初值定为1,为什么输出结果不变?
初学C语言,
如果哪位前辈能仔细点说。我会给追分的。

因为你用的是do...while循环。

i=1时循环了4次sum分别被累加为
第1次 sum=1 i=1 sum+=i就是2
第2次 sum=2 i=2 sum+=i就是4
第3次 sum=4 i=3 sum+=i就是7
第4次 sum=7 i=4 sum+=i就是11
接下来i++后为5不满足循环条件,跳出

再看把i初始为0的情况。
i=0时循环了5次sum分别被累加为
第1次 sum=1 i=0 sum+=i就是1
第2次 sum=1 i=1 sum+=i就是2
第3次 sum=2 i=2 sum+=i就是4
第4次 sum=4 i=3 sum+=i就是7
第5次 sum=7 i=4 sum+=i就是11

看出区别了吗,第二种情况比第一种多了一加0的循环,所以结果是一样的

sam+=i
等价于 sam=sam+i
你起初定义的i为零
当执行第一次循环时sam=1+0=1
你起初定义的sam就为1
所以这一步的计算是多余的,结果是不变的

do循环是先运算再判断是否符合条件
当程序运行到i等于5的时候,发现不符合while的条件,就停止了
但是i的值依然是5

i=0与i=1的区别只在于多加了一次i=0.输出结果当然不变。