c语言中,if语句括号里到底能放什么

我写了一个判断成绩等级的程序:
#include <stdio.h>
void main()
{
int a,i;
printf("请输入分数:");
scanf("%d",&a);
if(90<=a<100) i=0;
else i=1;
switch(i)
{
case 0:
printf("成绩等级为A\n");
break;
case 1:
printf("成绩等级为B\n");
break;
}
}

这个程序有问题,就是无论我输入什么数字,最后的结果都是"成绩等级为A"。
但是我有个同学,他是这样想的:
#include <stdio.h>
void main()
{
int a,i;
printf("请输入分数:");
scanf("%d",&a);
if(90<=a&&a<100) i=0;
else i=1;
switch(i)
{
case 0:
printf("成绩等级为A\n");
break;
case 1:
printf("成绩等级为B\n");
break;
}
}
他用了个逻辑运算符,我输入[90,100)这个区间的数字时结果为"成绩等级为A",输入这个区间以外的数字就能成功得到"成绩等级为B"这个结果,我搞不懂这是为什么。
所以我有个疑问,if语句的那个小括号里到底能填什么,我也是刚开始学,不是很懂,我用的编译器是visual c++。如果能告诉我if语句该怎么用,那就更好啦!

第1个回答  2018-01-12
表达是90<=a<100,即(90<=a)<100
无论子表达式90<=a的值为真(1)还是假(0),1<100和0<100都成立,所以if部分必然执行追问

那这个程序该怎么处理才好呢?

追答

改成90<=a&&a<=100

本回答被提问者和网友采纳
相似回答