一个超级简单C语言问题,整的我很惨啊

来源:百度知道 编辑:UC知道 时间:2024/07/04 17:58:13
开始是怀疑VC,后来换TC,哎~~~
请分析意图和实际运行结果:
main()
{
int n;
int i;
printf("input number:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
n=n+i;
printf("n=%d\n",n);

}
input number:
5←

很明显n的值会越来越大,所以i的值也会越来越大,一直到n溢出(即变成负数)后,for循环才能退出,所以n的值一定是个负数
=================================================
比如:n原来是5,i=0
循环1次过后,n=5,i=1
循环2次过后,n=6,i=2
循环3次过后,n=7,i=3
.......
就这样i一直都比n小,所以循环一直进行下去
直到n>65535(因为n为int,占用2个字节,即能表示最大无符整数为65535)
这时n就发生溢出,即变成一个负数,循环退出

求自然数n的累加和!

main()
{
int n;// n没有初值
int i;
printf("input number:\n");
scanf("%d",&n);
for(i=0;i<n;i++) //n,i都增加i<n永远成立,程序是死循环
n=n+i;
printf("n=%d\n",n);

}

改成这样
main()
{
int n=10,s=0;
int i;
printf("input number:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
s=s+i;
printf("n=%d\n",s);

}

毫无疑问,这个程序不是死循环就是数据溢出。

没事玩死循环啊?

不过二楼说得有理

到了65535 n会发生溢出,然后退出

2楼 正解