鱼C论坛

 找回密码
 立即注册
查看: 2023|回复: 4

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

[复制链接]
发表于 2017-6-24 12:17:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

     
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int score;
  5.         printf("请输入成绩:");
  6.         scanf("%d",&score);
  7.         if(score>=90)          printf("%d的成绩等级为A",score);
  8.         else if(score<60) printf("%d的成绩等级为E",score);
  9.         else if(60<=score<=69) printf("%d的成绩等级为D",score);
  10.         else if(70<=score<=79) printf("%d的成绩等级为C",score);
  11.         else                   printf("%d的成绩等级为B",score);
  12.          
  13.         return 0;
  14. }
复制代码


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



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

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


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


请问是什么原因?
第二个second代码问题出在哪里?
最佳答案
2017-6-24 19:15:47
HansonCPT 发表于 2017-6-24 12:48
找到问题所在了,原来区间是不能用平时数学那样表示的,应该用&&连接起来

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

first代码运行结果

first代码运行结果

second代码运行结果

second代码运行结果

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-24 12:48:58 | 显示全部楼层
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int score;
  5.         printf("请输入成绩:");
  6.         scanf("%d",&score);
  7.         if(score>=90)          printf("%d的成绩等级为A",score);
  8.         else if(80<=score&&score<=89) printf("%d的成绩等级为B",score);
  9.         else if(70<=score&&score<=79) printf("%d的成绩等级为C",score);
  10.         else if(60<=score&&score<=69) printf("%d的成绩等级为D",score);
  11.         else                   printf("%d的成绩等级为E",score);
  12.          
  13.         return 0;
  14. }
复制代码



找到问题所在了,原来区间是不能用平时数学那样表示的,应该用&&连接起来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-24 19:15:47 | 显示全部楼层    本楼为最佳答案   
HansonCPT 发表于 2017-6-24 12:48
找到问题所在了,原来区间是不能用平时数学那样表示的,应该用&&连接起来

是这样的。在C中写区间不可以偷懒,只能两个相比
组合判断需要用到以下逻辑符号
与&&   或||   非!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-24 20:21:25 | 显示全部楼层
话说我用Vim和gcc编译又是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-24 21:32:26 | 显示全部楼层
两个代码都错了吧。
60<=score<=69其实就是等于(60<=score)<=69,而(60<=score)是个判断语句,只能返回true或者fault,即0与1。因此只要是大于60就成立

C语言中写区间,只能两个相比组合判断需要用逻辑符号&& 、||、!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表