A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zero-xiao 中级黑马   /  2015-3-12 11:08  /  1183 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//提示用户输入一个整数,计算1-2+3-4+、、、+n的和。
//奇数的时候是正,偶数的时候为负,求他们的和。


#include<stdio.h>
int main()
{
    int n = 0;
    while (n<=0)
    {
        printf ("请输入一个正整数: ");
        scanf("%d",&n );
        
    }
    int sum=0;
    int number = 0;
    while (number < n )
    {
        
        
        
        number++;
        if (number%2 == 0)
        {
            number = number * (-1);
            sum +=number;
            
        }else
        {
            sum += number;
        }
        
        
        
        
        
    }
    printf ("sum =%d\n",sum );
   
   
   
    return 0;
}

//以上是错误代码,但是不会报错,就是输入一个整数后,没有反应了。
将第二个循环体中得if语句换成这个就能正常运行:
if (number%2 == 0)
        {
            //number = number * (-1);
            sum -=number;
            
        }else
        {
            sum += number;
        }
我想问得是,这两个感觉没什么区别,为什么第一个不能运行呢?求大神解答。

4 个回复

倒序浏览
这个不是while的问题,是你对函数作用域理解的问题。
我们来看看当number = 2是,执行number = number * (-1),此时number = -2.那么在第二次循环时,执行
number ++之前,number = -2.执行后为-1。如果你想要代码没=问题,可以在  sum -=number后面再number = number * (-1),就好了,不过感觉没有必要,第二种方法代码要精简的多。
回复 使用道具 举报
number变成负数你没给变回来 算法不合理
回复 使用道具 举报
喧闹的世界 发表于 2015-3-12 11:36
这个不是while的问题,是你对函数作用域理解的问题。
我们来看看当number = 2是,执行number = number * (- ...

非常感谢!
回复 使用道具 举报
zhangjianbin 发表于 2015-3-12 11:57
number变成负数你没给变回来 算法不合理

非常感谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马