使用循环计算1-2+3-4+5-6+…-100的值?

#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?

与调换顺序之前有啥区别?

K_JasmineTea
浏览 2512回答 3
3回答

明阳青昀

代码是按照你写的顺序从上往下执行的,sum += i*flag;    (sum+=1*1,sum=1), 肯定第一次打印出来的不是-1,调换后,flag变成了-1,sum+=1*(-1)

张小明丶

兄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

奔跑的虫子

定义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; 嗯~~~大概是这么个意思
打开App,查看更多内容
随时随地看视频慕课网APP