关于三种循环的比较

来源:4-10 循环结构之三种循环比较

qq_小MEI_0

2017-01-17 15:51

#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回答

  • gjfLeo
    2017-01-17 20:27:03
    已采纳

    我重新贴一下

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


    qq_小ME...

    非常感谢!

    2017-01-22 15:32:05

    共 3 条回复 >

  • 张贰
    2017-01-17 20:35:14

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


  • 渣良
    2017-01-17 20:07:03

    不知道


C语言入门

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

926207 学习 · 20797 问题

查看课程

相似问题