#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;
不知道