qq_小MEI_0
2017-01-17 15:51
#include <stdio.h>
int main()
{
/* 小伙伴们:
选择你们认为最合理的循环结构完成功能吧 */
int sum = 0; //定义计算结果变量sum
int i = 1; //定义循环数字变量i
int flag = 1; //定义符号状态变量flag
//使用for循环
for(i=1;i<=100;i++)
{
if(i%2==0)
{
flag=-1;
}
else
{
flag=1;
}
i*=flag;
sum+=i;
}
printf("sum=%d\n",sum);
return 0;
}
为什么出错了?
我重新贴一下
#include <stdio.h> int main() { int sum = 0; int i = 1; int flag = 1; for(i=1;i<=100;i++) //i为循环变量,每次循环i++,i>100时不循环 { if(i%2==0) { flag=-1; } else { flag=1; } i*=flag; //这一步改变了i的值,这使得无法满足i>100 sum+=i; } printf("sum=%d\n",sum); return 0; }
也就是说,按照想法i从1~100循环各执行一次,一共执行100次。但是循环中i的值被改变了,所以和本意不符。
修改方式:不要在循环体里面修改变量,而是创造一个“替身”变量。
#include <stdio.h> int main() { int sum = 0; int i = 1; int flag = 1; int temp; //定义一个“替身”变量 for(i=1;i<=100;i++) { if(i%2==0) { flag=-1; } else { flag=1; } temp = i * flag; //这里如此修改 sum += temp; //从而i的值不被改变,循环如意进行 } printf("sum=%d\n",sum); return 0; }
i*=flag这里不对,i的作用是控制循环,你这个完成了直接上去执行for循环,如果i值变为负的,再上去执行i++就没有意义了。可以把i*=flag;sum+=i;改成sum+=i*flag;
不知道
C语言入门
926207 学习 · 20797 问题
相似问题