注册 登录
编程论坛 C语言论坛

萌新求详细的解析十万火急谢谢大佬们

陈锦鹏 发布于 2019-10-27 22:14, 2424 次点击

 #include <stdio.h>
int main()
{
    int sum = 0;  
    int i = 1;   
    int flag = 1;
for(i=1;i<=100;i++)
    {
        sum=sum+flag*i;
        flag=-flag;printf("%d",flag);
        
    }  
    printf("sum=%d\n",sum);
    return 0;   
}
9 回复
#2
c小白23332019-10-27 22:25
sum=sum+flag*i; // i从1递增到100
flag=-flag;     // 正负不断转变
即是 0 + 1*1 + (-1)*2 + 1*3 + (-1)*4。。。。。。
即0 + 1 - 2 + 3 - 4 + 5 。。。。。。
#3
陈锦鹏2019-10-27 22:41
回复 2楼 c小白2333
首先谢谢
嗯我还是懵懵懂懂+3怎么来的往下执行不是又转换为-嘛希望大佬能详细讲解+3是怎么来的非常感谢!
#4
bcbbcclbbc2019-10-28 06:40
一个一个数带入循环中就好了啊
可以列个表格
            i   flag   i*flag   sum   -flag
初始值      1    1               0   

循环1次     1    1       1       1     -1
循环2次     2   -1      -2      -1      1
循环3次     3    1       3       2     -1  
循环4次     4   -1      -4      -2      1   
循环5次     5    1       5       3     -1  
循环6次     6   -1      -6      -3      1   
依次。。。。。。。
#5
陈锦鹏2019-10-28 12:52
回复 4楼 bcbbcclbbc
就是到-2往下执行为什么fagl会转换为1不是-1吗我就这里搞不懂为什么能转正新手望理解谢谢啦
#6
兔先生2019-10-28 15:32
回复 5楼 陈锦鹏
仔细看四楼的表格
flag=-flag;//符号就变成了负的
#7
c小白23332019-10-28 20:12
回复 3楼 陈锦鹏
这问题四楼的表已经很详细了
每次进入循环flag都要进行一次正负变换
i就是一个一次加一增加的数正负不变
所以最终的符号由flag决定
第一次进入时为正所以  + 1
第二次进入时变为负所以- 2
第三次进入时变为正所以+ 3
。。。
#8
陈锦鹏2019-10-28 21:34
回复 7楼 c小白2333
为啥能变正往下执行不是还是转换负的吗我就理解不懂怎么变正
#9
c小白23332019-10-28 22:16
回复 8楼 陈锦鹏
flag=-flag;
负数乘-1 不就变正了吗

兄弟 都被你整的有点蒙了

[此贴子已经被作者于2019-10-28 22:18编辑过]

#10
forever742019-10-29 17:24
楼主:
你是小学生?
不晓得偶数个负号是正的?
还是不了解循环就是反复执行的道理?
1