各位看看我哪里出问题了

题目:给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,8090分为’B’,7079分为’C’,60~69分为’D’,60分以下为’E’。

img

我也不知道为什么输入一个小于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);
} 

img

供参考:

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