c语言的看不明白了

来源:百度知道 编辑:UC知道 时间:2024/05/21 13:18:09
#include <stdio.h>
void main()
{
int a,b=0,n=1;

for(a=1;b<1000;a++)

{
n=a*a;
b+=n;
}
printf("%d\n",a);

}
为什么b的初值是0?
为什么不是1呢?

其实这个很简单的了...
其实如果你遇到这类问题了,你可以不断的调试程序,就可以验证你的想法了.
首先是一般情况下,变量的都要赋初值的了.
但是这个程序中a在循环中有了,而b可以在定义的时候赋初值了.如果你不赋的话,也可以执行,这个是c语言的弊病,就有可能导致结果不准确了.
其实你仔细分析一下for循环就可以发现你的b初值给多少比较合理!
你的变量a是统计1,2,3,4.......而b是统计他们的平方和的了!
就是每次1*1+2*2.....
所以你可以得到如果你给它的初值定为非0的话,肯定影响结果了啊!!
所以,b的初值必须为0 了...

该程序是得到接近1000的平方和,一开始只能设置为0,才可以累加计算,得到平方和。

这个程序是求 1+4+9+16+...+n^2 的和最接近1000的时候,n应该是多少
b用来累加,当然不能是 1

慢慢读读程序,因为如果是1的话b的值就变成了1+1+4+9+16+...+999*999,而不是1+4+9+16+...+999*999了。累加就赋初值为1,累乘就赋初值为0。

若是b的初值为1的话,那么第一次运行到b+=b,这时b的值就为2了,也就相当于b从2开始的。所以,b的初值是0,OK!!!!

因为你赋的初始值就是0啊.怎么可能是1呢??