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代码问题出在哪里?
菜鸟先飞 #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:} HansonCPT 发表于 2017-6-24 12:48
找到问题所在了,原来区间是不能用平时数学那样表示的,应该用&&连接起来
是这样的。在C中写区间不可以偷懒,只能两个相比
组合判断需要用到以下逻辑符号
与&& 或|| 非! 话说我用Vim和gcc编译又是正确的。{:5_97:} 两个代码都错了吧。
60<=score<=69其实就是等于(60<=score)<=69,而(60<=score)是个判断语句,只能返回true或者fault,即0与1。因此只要是大于60就成立
C语言中写区间,只能两个相比组合判断需要用逻辑符号&& 、||、!
页:
[1]