qq_悲伤可以自行处理_03427709
2016-08-08 15:07
虽然输出的结果都是-50 但是前两个代码表示的是不是2-3+4-5+……-101
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
int flag=1;
while(i<=100)
{
i++;
sum+=i*flag;
flag*=-1;
}
printf("%d",sum);
return 0;
}
/*如果i++ 在 sum+=i*flag; 中i 的值是2,那么循环过程是,2-3+4-5+6-7+8.。。。。。。
问题来了,当 i=100时,while(i<=100)判断成立,那么 sum+=i*flag;中 i 的值就是101,再
乘以flag.这时slag为负1.因为每逢 i 的值为奇数时flag中都为负1.那么101为负值。-101.
你写一个程序。计算2-3+4-5+6-7+8-9。。。。。直到100。计算结果。再减去101.
我可以告诉你结果。也是-50.
从最后两个程序中 i++位置变化 结果也不同。
得出结论。虽然本题中两种算法得出结果都是-50
但是 结果是偶然的。
老师之所以这么做 ,我想他是故意的,没有问题就不会有答案 。
谢谢提问者,找出了问题 !!!!
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
int flag=1;
while(i<=10)
{
i++;
sum+=i*flag;
flag*=-2;
printf("i=%d\t",i);
printf("sum=%d\n",sum);
}
printf("sum=%d",sum);
return 0;
}
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
int flag=1;
while(i<=10)
{
sum+=i*flag;
flag*=-2;
i++;
printf("i=%d\t",i);
printf("sum=%d\n",sum);
}
printf("sum=%d",sum);
return 0;
}
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
int flag=1;
while(i<=100)
{
i++;
sum+=i*flag;
flag*=-1;
printf("i=%d\t",i);
printf("sum=%d\n",sum);
}
printf("sum=%d",sum);
return 0;
}
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
int flag=1;
while(i<=100)
{
sum+=i*flag;
flag*=-1;
i++;
printf("i=%d\t",i);
printf("sum=%d\n",sum);
}
printf("sum=%d",sum);
return 0;
}
我想明白了你们看看对不对。
我在vs2013调试了下,结果都是-50,我和你考虑的一样,我觉得代码i++;应该放在flag*=-1;后。
凑三个字
这是哪期的?额。。
?不是这期问题啊
C语言入门
926206 学习 · 20797 问题
相似问题