黑马程序员技术交流社区

标题: while循环练习中,使用if和else if,计算结果不一致 ? [打印本页]

作者: Koyou    时间: 2014-12-18 00:41
标题: while循环练习中,使用if和else if,计算结果不一致 ?
while循环练习中,遇到问题。
练习题是:
/*
练习1:提示用户输入一个正整数n,计算1-2+3-4+5-6+…+n的和
*/

#include <stdio.h>

int main()
{
    int n;
   
    printf("请输入一个正整数:\n");
    scanf("%d", &n);
   
    while( n <= 0)
    {
        printf("您输入错误,请重新输入:\n");
        scanf("%d", &n);
    }
   
    int a = 1;
    int sum = 0;
   
    while(a <= n)
    {
        if(a % 2 == 0)
        {
            sum = sum - a;
            a++;
        }
        else if(a % 2 != 0)
        {
            sum = sum + a;
            a++;
        }
   
    }
    printf("计算结果是:%d\n", sum);
   
    return 0;
}

以上代码执行时正常的,然后尝试 使用if不同的表达方式,机会不使用else if 而直接用 连个 if函数。
如下
#include <stdio.h>

int main()
{
    int n;
   
    printf("请输入一个正整数:\n");
    scanf("%d", &n);
   
    while( n <= 0)
    {
        printf("您输入错误,请重新输入:\n");
        scanf("%d", &n);
    }
   
    int a = 1;
    int sum = 0;
   
    while(a <= n)
    {
        if(a % 2 == 0)
        {
            sum = sum - a;
            a++;
        }
        if(a % 2 != 0)
        {
            sum = sum + a;
            a++;
        }
   
    }
    printf("计算结果是:%d\n", sum);
   
    return 0;
}

输出的结果是不一样的 ?问题出在哪里 ?



作者: 从今以后    时间: 2014-12-18 00:57
if(a % 2 == 0)
{
    sum = sum - a;
    a++;
}
这个块a++后a的值就变了,本来a%2=0, +1后就不等了,所以下个判断就成立了也。
作者: chasedream    时间: 2014-12-18 08:30
从今以后 发表于 2014-12-18 00:57
if(a % 2 == 0)
{
    sum = sum - a;

对头。上面的elseif 后面没必要加条件了
作者: 邓明    时间: 2014-12-18 09:45
赞同上面两楼的看法
a++可以放到while循环里面,这样避免出错
放在if...else...里面确实有改变计算结果的问题
作者: zsling    时间: 2014-12-18 10:04
1.while(a <= n)
    {
        if(a % 2 == 0)
        {
            sum -=  a;
        }
        else
        {
            sum +=  a;
        }
             a++;
    }
2. while(a<=n)
{

}

作者: zsling    时间: 2014-12-18 10:06
1.while(a <= n)
    {
            sum = a%2 ? sum + a : sum - a;
             a++;
    }
作者: Koyou    时间: 2014-12-18 17:32
zsling 发表于 2014-12-18 10:06
1.while(a

我喜欢你这个方式,使用三目运算。
晚上回去,我去写一下。
作者: Koyou    时间: 2014-12-18 17:35
zsling 发表于 2014-12-18 10:04
1.while(a

是呀,a++;不是在判断里,直接在 while中循环 {:3_56:}
作者: zsling    时间: 2014-12-18 17:36
我个人觉得三目表达式简洁,我看老师视频中有好几处都是使用的if-else,想着怎么简洁就想到它了
作者: Koyou    时间: 2014-12-18 17:42
邓明 发表于 2014-12-18 09:45
赞同上面两楼的看法
a++可以放到while循环里面,这样避免出错
放在if...else...里面确实有改变计算结果的问 ...

谢谢呀,使用else if的时候,if执行后 else if不会执行,但是 使用if 。。 if.。。 的时候第一个因为 都有 a++; 所以,其实 两个if 语句 都是在执行。这样导致 最终的计算总值,其实是 超过了 用户输入的 n 而是 n +1 个数进行 计算。

作者: Koyou    时间: 2014-12-18 17:43
从今以后 发表于 2014-12-18 00:57
if(a % 2 == 0)
{
    sum = sum - a;

是呀, 我懂了 :)




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