
# include
int main()
{
float grade;
scanf("%f", &grade);
if (grade > 100)
printf("Illegal input!\n");
else if (grade >= 90 && grade <= 100)
printf("A\n");
else if (grade >= 80 && grade < 90)
printf("B\n");
else if (grade >= 70 && grade < 80)
printf("C\n");
else if (grade >= 60 && grade < 70)
printf("D\n");
else if (grade >= 0 && grade < 60)
printf("You have failed the exam!\n");
else
printf("Illegal input!\n");
return 0;
}
初学时的错误:
将else if (grade >= 90 && grade <= 100)写成else if (90 <= grade <= 100)。由于受到数学不等式的影响,没有考虑到计算机语言的逻辑,所以犯了这样的错误。
分析原因可知,90 <= grade <= 100中有两个相同的关系运算符,所以它们优先级也是相同的,于是整个语句会先执行左边的90 <= grade,但不管我们输入的grade是否在90之间,90 <= grade表达式的值要么是0要么是1,当开始执行右边时,整个表达式已经变为0 <= 100或1 <= 100。毋庸置疑,这两个表达式的值永远是1,也就意味着整个表达式90 <= grade <= 100的值永远是1。所以,无论我们输入的值是多少,都会执行printf("A\n");语句。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)