#include <stdio.h>int main(){ int sum = 0; //定义计算结果变量sum int i = 1; //定义循环数字变量i int flag = 1; //定义符号状态变量flag //使用for循环 for(i=1;i<=100;i++) { sum += i*flag; flag *= -1; } printf("sum=%d\n",sum); return 0;}/1.*flag *= -1; 第一次循环结果为什么不是-1 ??2. { flag *= -1; sum += i*flag; } 为什么调换顺序后才是第一次循环flag为-1?与调换顺序之前有啥区别?
3 回答
明阳青昀
TA贡献7条经验 获得超3个赞
代码是按照你写的顺序从上往下执行的,sum += i*flag; (sum+=1*1,sum=1), 肯定第一次打印出来的不是-1,调换后,flag变成了-1,sum+=1*(-1)
张小明丶
TA贡献6条经验 获得超0个赞
兄dei,你应该顺着你写的代码一行一行的往下走,你的初始化数据是这样的:
int sum = 0; //定义计算结果变量sum
int i = 1; //定义循环数字变量i
int flag = 1; //定义符号状态变量flag
例如第一个问题,第一次循环结果为什么不是-1 ??
for(i=1;i<=100;i++)
{
sum += i*flag; //0+=1*1
flag *= -1; //1*=-1
}
printf("sum=%d\n",sum); //输出的是sum的值为1
这样想,第二个问题是不是简单多了?
{
flag *= -1; //1*=-1
sum += i*flag; //0+=1*(-1)
}
printf("sum=%d\n",sum); //输出的是sum的值为-1
奔跑的虫子
TA贡献33条经验 获得超21个赞
定义sum为结果 初始化为0; 而表达式为sum=sum+num; < == > sum=1-2; //则此时sum已经为1; 所以第一步应该是 sum=0+1; //此时符号变量flag应为正数[初始化为正] 第二步 sum=1-2; //此时flag为负 < == >sum=1+(-1*2)=1+(-2) 如果你想flag初始化为正,可以最开始赋值:sum=1; 嗯~~~大概是这么个意思
- 3 回答
- 0 关注
- 2664 浏览
添加回答
举报
0/150
提交
取消