7-17 成绩转换

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

  • 大于等于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程序用整数10表示。

在程序中,不能用 `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语句,否则会一直往后执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值