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

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

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


10 个回复

倒序浏览
if(a % 2 == 0)
{
    sum = sum - a;
    a++;
}
这个块a++后a的值就变了,本来a%2=0, +1后就不等了,所以下个判断就成立了也。
回复 使用道具 举报
从今以后 发表于 2014-12-18 00:57
if(a % 2 == 0)
{
    sum = sum - a;

对头。上面的elseif 后面没必要加条件了
回复 使用道具 举报
赞同上面两楼的看法
a++可以放到while循环里面,这样避免出错
放在if...else...里面确实有改变计算结果的问题
回复 使用道具 举报
1.while(a <= n)
    {
        if(a % 2 == 0)
        {
            sum -=  a;
        }
        else
        {
            sum +=  a;
        }
             a++;
    }
2. while(a<=n)
{

}

评分

参与人数 1黑马币 +1 收起 理由
Koyou + 1 赞一个!

查看全部评分

回复 使用道具 举报
1.while(a <= n)
    {
            sum = a%2 ? sum + a : sum - a;
             a++;
    }

评分

参与人数 1黑马币 +1 收起 理由
Koyou + 1 很给力!

查看全部评分

回复 使用道具 举报
Koyou 中级黑马 2014-12-18 17:32:29
7#

我喜欢你这个方式,使用三目运算。
晚上回去,我去写一下。
回复 使用道具 举报
Koyou 中级黑马 2014-12-18 17:35:02
8#

是呀,a++;不是在判断里,直接在 while中循环 {:3_56:}
回复 使用道具 举报
zsling 中级黑马 2014-12-18 17:36:28
9#
我个人觉得三目表达式简洁,我看老师视频中有好几处都是使用的if-else,想着怎么简洁就想到它了
回复 使用道具 举报
Koyou 中级黑马 2014-12-18 17:42:01
10#
邓明 发表于 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:16
11#
从今以后 发表于 2014-12-18 00:57
if(a % 2 == 0)
{
    sum = sum - a;

是呀, 我懂了 :)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马