题目:给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,8090分为’B’,7079分为’C’,60~69分为’D’,60分以下为’E’。
我也不知道为什么输入一个小于90的数,不管是什么,只要小于90它就输出“B”
问题出在,80 <= X <= 90 这种条件的写法上面,改为形如x>=80 && x<=90 即可,分析如下:
因为如果是80 <= X <= 90这种形式的写法,根据运算符的结合律,从左到右运算,输入X=70 ,首先判断 80<=70,结果为假,即0,再判断0<=90,它是<=90的,为真,最后表达式的结果就会真,就执行这个分支,就会打印'B';
若是大于等于80但小于等于90的数,如输入80, 首先判断 80<=80,为真,即1,再判断,1<=90, 为真,这个条件也满足,也打印'B';
解决办法是把类似条件分开写用逻辑与运算符&&连接即可,修改如下:
#include <stdio.h>
int main(void){
int x=0;
char c1,c2,c3,c4,c5;
c1='A';
c2='B';
c3='C';
c4='D';
c5='E';
printf("请输入一个百分制成绩:");
scanf("%d",&x);
if(90<x)
printf("%c\n",c1);
else if(80<=x && x<=90)
printf("%c\n",c2);
else if(70<=x && x<=79)
printf("%c\n",c3);
else if(60<=x && x<=69)
printf("%c\n",c4);
else
printf("%c\n",c5);
}
供参考:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if (n >= 0 && n < 60) printf("E\n");
else if (n >= 60 && n < 70) printf("D\n");
else if (n >= 70 && n < 80) printf("C\n");
else if (n >= 80 && n < 90) printf("B\n");
else if (n >= 90 && n <= 100) printf("A\n");
else printf("Data error\n");
return 0;
}