HansonCPT 发表于 2017-6-24 12:17:37

if语句的嵌套,条件顺序改变而已,但结果却完全不同,为什么?

      在做一个课后题:给出一个百分制的成绩,要求输出成绩等级,90分以上为A,80-89为B,70-79为C,60-69为D,低于60为E。

      我分别写了两个(其实只是改变了else if里面内容的顺序,结果却完全不同,按逻辑应该结果一样的):

      1.正确结果代码(就叫first吧):

      #include<stdio.h>
int main(void)
{
        int score;
        printf("请输入成绩:");
        scanf("%d",&score);
        if(score>=90)          printf("%d的成绩等级为A",score);
        else if(score<60) printf("%d的成绩等级为E",score);
        else if(60<=score<=69) printf("%d的成绩等级为D",score);
        else if(70<=score<=79) printf("%d的成绩等级为C",score);
        else                   printf("%d的成绩等级为B",score);
       
        return 0;
}

      2.与预期不一样的代码(second):
   #include<stdio.h>
int main(void)
{
        int score;
        printf("请输入成绩:");
        scanf("%d",&score);
        if(score>=90)          printf("%d的成绩等级为A",score);
        else if(80<=score<=89) printf("%d的成绩等级为B",score);
        else if(70<=score<=79) printf("%d的成绩等级为C",score);
        else if(60<=score<=69) printf("%d的成绩等级为D",score);
        else                   printf("%d的成绩等级为E",score);
       
        return 0;
}


两个运行(使用的编译器为DEV C++),输入34

第一个first代码成功输出等级E


但第二个second代码却输出等级B


请问是什么原因?
第二个second代码问题出在哪里?
菜鸟先飞

HansonCPT 发表于 2017-6-24 12:48:58

#include<stdio.h>
int main(void)
{
        int score;
        printf("请输入成绩:");
        scanf("%d",&score);
        if(score>=90)          printf("%d的成绩等级为A",score);
        else if(80<=score&&score<=89) printf("%d的成绩等级为B",score);
        else if(70<=score&&score<=79) printf("%d的成绩等级为C",score);
        else if(60<=score&&score<=69) printf("%d的成绩等级为D",score);
        else                   printf("%d的成绩等级为E",score);
       
        return 0;
}


找到问题所在了,原来区间是不能用平时数学那样表示的,应该用&&连接起来{:5_91:}

shuofxz 发表于 2017-6-24 19:15:47

HansonCPT 发表于 2017-6-24 12:48
找到问题所在了,原来区间是不能用平时数学那样表示的,应该用&&连接起来

是这样的。在C中写区间不可以偷懒,只能两个相比
组合判断需要用到以下逻辑符号
与&&   或||   非!

1b1n1m 发表于 2017-6-24 20:21:25

话说我用Vim和gcc编译又是正确的。{:5_97:}

Messj 发表于 2017-6-24 21:32:26

两个代码都错了吧。
60<=score<=69其实就是等于(60<=score)<=69,而(60<=score)是个判断语句,只能返回true或者fault,即0与1。因此只要是大于60就成立

C语言中写区间,只能两个相比组合判断需要用逻辑符号&& 、||、!
页: [1]
查看完整版本: if语句的嵌套,条件顺序改变而已,但结果却完全不同,为什么?