本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例: 90
输出样例: A
#include <stdio.h>
int main()
{
int x,y;
scanf("%d", &x);
char a[] = "ABCDE";
if (x >= 90) {
y = 1;
} else if (80<=x && x<90) {
y = 2;
} else if (70<=x && x<80) {
y = 3;
} else if (60<=x && x<70) {
y = 4;
} else {
y = 5;
}
switch (y) {
case 1: printf("%c", a[0]);
break;
case 2: printf("%c", a[1]);
break;
case 3: printf("%c", a[2]);
break;
case 4: printf("%c", a[3]);
break;
case 5: printf("%c", a[4]);
break;
}
return 0;
}
//字符数组怎么定义? 字符数组怎么赋值(如a[0]赋值为A)? A不能直接输出,该怎么定义?
这是一个比较简单的题目,但也遇到了几个问题。
1. 定义一串字符,有两种形式:字符数组或者字符指针。
char a[] = "ABCDE"; //字符数组
char *a = "ABCDE"; //字符指针
区别是:数组可以被赋值、被修改,指针是只读的,不能被修改。 这道题只需要读取字符,因此数组和指针都可以。
2. <、>、<=、>=是C语言中的关系运算符,关系表达式的值是真
和假
,在C程序用整数1
和0
表示。
在程序中,不能用 `80 <= x < 90` 这个表达式来表示80 ≤ x < 90的意思。需要用到逻辑运算符&&
因为 `80 <= x < 90` 这个表达式在 C 语言中会被解释为两个条件的逻辑运算,而不是对 `x` 进行范围判断。具体如下,
①先判断x是否大于等于80。如果是,则80 <= x的结果为 `1`,否则结果为 `0`。
②将上面得到的结果和90进行比较,相当于对一个布尔值和一个整数进行比较,而这个比较在 C 语言中是合法的。由于布尔值 `1` 在 C 语言中被认为是等于整数 `1`,所以这个表达式总是为真的,不管 `x` 是多少。
因此,正确的表达式应该是 `if (80<=x && x<90)`,它能够正确地判断x是否在80到90的范围之内,并且避免了逻辑错误。
3. switch语句中,在case子句后要加上break,跳出switch语句,否则会一直往后执行。