黑马程序员技术交流社区

标题: while 循环语句中的一个疑问。求解惑。 [打印本页]

作者: zero-xiao    时间: 2015-3-12 11:08
标题: while 循环语句中的一个疑问。求解惑。
//提示用户输入一个整数,计算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;
        }
我想问得是,这两个感觉没什么区别,为什么第一个不能运行呢?求大神解答。

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

非常感谢!
作者: zero-xiao    时间: 2015-3-12 21:52
zhangjianbin 发表于 2015-3-12 11:57
number变成负数你没给变回来 算法不合理

非常感谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2