原本的代码:
#include<stdio.h>
#include<stdlib.h>
/* for语句算1加到n.c */
/* written by Chen Gengru */
/* updated on 2018-11-1 */
int main()
{
int i, iN, iTotal;
i = 0;
iTotal = 0;
printf("请输入n\n");
scanf("%d", &iN);
for (i; i<iN; i++)
{
iTotal = iTotal + i;
}
printf("得数为:%d\n", iTotal);
return 0;
}
调试结果:
问题出在哪里?原来,程序在计算第二个表达式的之后,如果表达式的值为真,程序就执行循环体的内容,即:iTotal = iTotal + i; 再计算第三个表达式,即:i++。 因此,在判断i == 99 < 100为真后,iTotal得到前99项之和4950,下一步i更改为100,此时第二个表达式的值为假,总和便不能再加100,导致错误。究其原因还是循环语句和第三个表达式执行计算的先后顺序没搞清。
更改:
#include<stdio.h>
#include<stdlib.h>
/* for语句算1加到n.c */
/* written by Chen Gengru */
/* updated on 2018-11-1 */
int main()
{
int i, iN, iTotal;
i = 0;
iTotal = 0;
printf("请输入n\n");
scanf("%d", &iN);
for (i; i<=iN; i++)
{
iTotal = iTotal + i;
}
printf("得数为:%d\n", iTotal);
return 0;
}
调试结果: