为了账号安全,请及时绑定邮箱和手机立即绑定

关于三种循环的比较

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

}

为什么出错了?


正在回答

3 回答

我重新贴一下

#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;
}


1 回复 有任何疑惑可以回复我~
#1

doublekosd

  i*=flag;                       //这一步改变了i的值,这使得无法满足i>100         sum+=i; 直接改成:sum+=i*flag应该可以。
2017-01-18 回复 有任何疑惑可以回复我~
#2

gjfLeo 回复 doublekosd

嗯貌似是这样_(:зゝ∠)_
2017-01-18 回复 有任何疑惑可以回复我~
#3

qq_小MEI_0 提问者

非常感谢!
2017-01-22 回复 有任何疑惑可以回复我~

i*=flag这里不对,i的作用是控制循环,你这个完成了直接上去执行for循环,如果i值变为负的,再上去执行i++就没有意义了。可以把i*=flag;sum+=i;改成sum+=i*flag; 


2 回复 有任何疑惑可以回复我~

不知道


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926020    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

关于三种循环的比较

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信