c语言程序里的一个小问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 00:04:21
例如我想计算1*2*3+3*4*5+……+99*100*100
我做一个循环用do while
开始i=1;
后来do{
x=i*(i++)*(i++)
}while(i<101);
输出的x值为什么不对(我没算那么多项,就算了前一两项)
但改成x=i*(i+1)*(i+2)就对了。
哪位高手帮我解答一下,谢了

你的X值已经超出int型范围了。

那是一定的了 因为i++是先取值 然后自加 例如 i=1;
a=i++;
printf(“%d”,a);
此时输出的值是1 而不是二
但 i的值是二了

do{
x=i*(i++)*(i++) //自加会改变变量i的值,会减少循环次数
}while(i<101);

x=i*(i+1)*(i+2) //i的值没有改变只是参与运算,所以不会影响循环次数.

结果不对的原因,就是你用了i做循环计数,并且在循环体内改变了i的值.

i++是自增啊,i+2的i没有改变
最好一步一步来,可能由于编译器不同有不同结果

这个问题由来已久,歧义!

应该改成i*(++i)*(++i);但不建议这样用,代码尽量简洁易懂,别人看起来也舒服。