问答详情
源自:4-10 循环结构之三种循环比较

求教!!!

#include <stdio.h>

int main()

{

    int sum = 0;  

    int i = 1;   

    int flag = 1; 

    while(i<=100)

    {

        i++;

         if(i%2==1)

        {

            sum+=i;

        }

        else

        {

            sum-=i;

        }

        

    }

  

    printf("sum=%d\n",sum); 

    

    return 0;    

}

答案为什么不对

提问者:a流年 2015-08-08 19:02

个回答

  • 不要为你的无知找借口
    2015-08-08 19:38:04
    已采纳

    额,没有必要用if...else...语句判断吧.因为有flag变量呀,若是你硬是要用if...else...语句判断的话你的逻辑有问题.

    正确代码是这样的

    while(i<=100)
        {
            i++;
            if(i%2==1){
                sum-=i;
            }else{
                sum+=i;
            }
        }

    看到没,是先减法,在加法.为什么这样呢:首先观察式子:1-2+3-4.....会发现奇数是要加上去的,偶数需要减掉.所以

    if(i%2==1)

    是用来判断是否为奇数.

    其实你把你的程序中的if语句的条件改成i%2==0应该会有正确的结果.

    写程序真正难处不在于语法,而在于逻辑.希望我的回答对你有帮助.

  • 不要为你的无知找借口
    2015-08-09 15:45:51

    哦,是这样的:

    看下这段代码

    while(i<=100)
    {
        i++;
        if(i%2==1){
            sum-=i;
        }else{
            sum+=i;
        }
    }

    变量i的初始值是1,对吧.然后在第3行遇到了i++,所以i就是2了,这样一直下去,到最后,i的边界值是101.懂了吗?

    所以需要按照上面代码逻辑来写,若是按照你的逻辑来写的话把

    i++;

    语句放在if语句后面就好了.看下完整代码.

    #include <stdio.h>
    int main()
    {
        int sum = 0;  //定义计算结果变量sum
        int i = 1;    //定义循环数字变量i
        int flag = 1; //定义符号状态变量flag
    
        while(i<=100)
        {
            if(i%2==0){
                sum=sum-i;
            }else{
                sum=sum+i;
            }
            i++;
        }
        printf("sum=%d\n",sum); 
        return 0;    
    }

    这样也可以.你的代码把i++的位置调换一下也会达到同样的效果:

    #include <stdio.h>
    int main()
    {
        int sum = 0;  //定义计算结果变量sum
        int i = 1;    //定义循环数字变量i
        int flag = 1; //定义符号状态变量flag
    
        while(i<=100)
        {
            if(i%2==1){
                sum+=i;
            }else{
                sum-=i;
            }
            i++;
        }
        printf("sum=%d\n",sum); 
        return 0;    
    }

    要注意我们使用变量i的值是经过i++ 过后的.最后关心下边界值.