编写根据输入的学生成绩判断等级的程序,即从键盘上输入一个学生的百分制成绩赋值给变量c,按下列要求输出其等级。 c≥90 等级为A 80<c<90 等级为B 70≤c<80 等级为C 60≤c<70 等级为D C<60 等级为E 要求用f..else语句和switch语句两种方式来编程。
时间: 2024-03-09 20:46:37 浏览: 101
使用 if..else 语句的程序:
```python
c = float(input("请输入学生成绩:"))
if c >= 90:
print("等级为A")
elif 80 < c < 90:
print("等级为B")
elif 70 <= c < 80:
print("等级为C")
elif 60 <= c < 70:
print("等级为D")
else:
print("等级为E")
```
使用 switch 语句的程序:
```python
c = float(input("请输入学生成绩:"))
grade = ""
if c >= 90:
grade = "A"
elif 80 < c < 90:
grade = "B"
elif 70 <= c < 80:
grade = "C"
elif 60 <= c < 70:
grade = "D"
else:
grade = "E"
switch = {
"A": "等级为A",
"B": "等级为B",
"C": "等级为C",
"D": "等级为D",
"E": "等级为E"
}
print(switch.get(grade))
```
相关问题
编写一程序P744.C实现以下功能 (1)从键盘输入一个一百分制成绩,如果不在0~100范围内,则要求重新输入数据,直到输入的数据在0~100范围内。 (2)将输入的数据转换成等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。 (3)要求使用switch、case、default语句,结果赋值给变量grade,并将变量grade的值输出到屏幕上。 (4)变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。 编程可用素材:printf("please input the score(0-100): ")、printf("\nscore=…,grade=…。 程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。
<think>好的,我现在要解决这个问题,编写一个C程序满足给定的要求。首先,我需要仔细阅读题目,确保每个条件都满足。让我逐一分析各个要求:
第一个要求是从键盘输入一个0到100的成绩,如果输入不在范围内,要重新输入直到正确。这需要使用循环结构,比如do-while循环,先获取输入,然后检查是否在有效区间。如果不在,继续提示输入。这一步需要注意输入验证,防止用户输入非数字的情况,但题目中可能没有提到处理非数字输入,所以可能只需要处理数值范围的问题。
第二个要求是将分数转换为等级。90以上是A,80-89是B,70-79是C,60-69是D,60以下是E。这里需要用switch语句,而switch的参数通常是整数,所以可能需要将分数除以10,得到一个整数部分,如90分以上是9或10,对应不同的case。例如,当分数是95,除以10得到9,进入case 9或10的情况。但需要处理各个区间的边界,比如80-89分除以10得到8,对应case 8,这样处理比较方便。
第三个要求是必须使用switch、case和default语句,并将结果赋值给变量grade,然后输出。这里要注意,如何将分数转换为switch的条件。可能的做法是将分数除以10,得到十位上的数字,例如85/10=8,这样case 8和case 9处理A的情况可能有问题,因为90分及以上需要处理。所以可能需要调整case的顺序,比如case 10和case 9对应A,case 8对应B,依此类推。
第四个要求是变量类型的选择要适当,节省内存和时间。分数可以用整型,因为分数是整数。grade用char类型。所以变量选择应该是int score; char grade;
接下来,程序的结构大致是:
1. 显示提示信息,输入成绩。
2. 使用循环确保输入在0-100之间。
3. 根据分数转换为等级,使用switch。
4. 输出结果。
关于输入验证部分,使用do-while循环,当输入不在范围内时继续循环。例如:
do {
printf("please input the score(0-100): ");
scanf("%d", &score);
} while (score < 0 || score > 100);
这样,用户必须输入正确的数值才能继续。
然后,处理分数转换。例如:
switch(score / 10) {
case 10:
case 9: grade = 'A'; break;
case 8: grade = 'B'; break;
case 7: grade = 'C'; break;
case 6: grade = 'D'; break;
default: grade = 'E'; break;
}
这里需要注意的是,当分数是100的时候,除以10得到10,所以case 10和case 9都处理为A。而分数在90到99之间是9,所以也进入case9。对于60分以下,即score/10得到的值小于6,所以default对应E。
然后输出结果,使用printf("\nscore=%d,grade=%c\n", score, grade);这样的格式。
现在要考虑变量类型是否正确。score是int,grade是char,这没问题。
测试一下边界情况,比如0分、59分、60分、69、70、79、80、89、90、100,是否正确。例如,60分时score/10=6,对应D;59分是5,进入default,得到E。100分除以10是10,进入case10,然后case9的处理,所以没问题。
可能的错误点:在输入的时候,如果用户输入非整数,比如字符,会导致scanf失败,程序进入死循环。但题目可能未要求处理这种情况,所以暂时不考虑,假设用户输入的是整数。
综上,完整的代码应该是这样的:
#include <stdio.h>
int main() {
int score;
char grade;
do {
printf("please input the score(0-100): ");
scanf("%d", &score);
} while (score < 0 || score > 100);
switch (score / 10) {
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
case 6:
grade = 'D';
break;
default:
grade = 'E';
break;
}
printf("\nscore=%d,grade=%c\n", score, grade);
return 0;
}
现在检查是否满足所有条件:
1. 输入验证:使用do-while循环,确保输入在0-100之间。
2. 转换使用switch,正确。
3. 变量类型正确,int和char。
4. 输出符合要求的格式。
现在测试一些情况,比如输入85,输出B;输入59,输出E;输入100,输出A;输入60,输出D。这些情况都应该正确。</think><<
以下是实现题目要求的C语言程序:
```c
#include <stdio.h>
int main() {
int score;
char grade;
// 输入验证循环
do {
printf("please input the score(0-100): ");
scanf("%d", &score);
} while (score < 0 || score > 100);
// 使用switch进行等级划分
switch (score / 10) {
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
case 6:
grade = 'D';
break;
default:
grade = 'E';
break;
}
printf("\nscore=%d,grade=%c\n", score, grade);
return 0;
}
```
解释说明:
1. 输入验证:使用`do-while`循环确保输入在0-100之间,不符合条件时会持续要求重新输入
2. 等级转换:通过`score/10`将分数转换为十位数的整数值,利用switch-case结构进行区间判断
3. 变量选择:使用`int`存储分数(满足精度且节省空间),用`char`存储等级(字符类型)
4. 边界处理:case 10和case 9合并处理100分和90-99分的情况,default处理60分以下的全部情况
5. 输出格式:严格遵循题目要求的输出格式,包含换行符和变量占位符
编写一程序P744.C实现以下功能 (1)从键盘输入一个一百分制成绩,如果不在0~100范围内,则要求重新输入数据,直到输入的数据在0~100范围内。 (2)将输入的数据转换成等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。 (3)要求使用switch、case、default语句,结果赋值给变量grade,并将变量grade的值输出到屏幕上。 (4)变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。 编程可用素材:printf("please input the score(0-100): ")、printf("\nscore=…,grade=…。 程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。 please input the score(0-100): 103 please input the score(0-100): 55.3 score=55.3,grade=E
以下是实现题目要求的功能的C语言程序代码以及解释:
### 程序代码
```c
#include <stdio.h>
int main() {
float score;
char grade;
// (1) 输入成绩并验证范围是否合法
do {
printf("please input the score(0-100): ");
scanf("%f", &score);
if(score < 0 || score > 100){
printf("Input error! Please re-enter.\n");
}
} while(score < 0 || score > 100);
// (2) 使用 switch-case 转换分数为等级
int tempScore = (int)(score + 0.5); // 四舍五入取整
switch(tempScore / 10) { // 根据十位数判断等级
case 10:
case 9:
grade = 'A'; break;
case 8:
grade = 'B'; break;
case 7:
grade = 'C'; break;
case 6:
grade = 'D'; break;
default:
grade = 'E';
}
// 输出结果
printf("\nscore=%.1f,grade=%c\n", score, grade);
return 0;
}
```
---
### 功能说明及逻辑分析
#### **步骤解析**
1. **输入检查**
- 首先通过 `do...while` 循环让用户反复输入成绩,只有当用户输入的成绩在 `[0, 100]` 区间内时才退出循环。
- 如果用户的输入超出范围,则提示错误信息。
2. **四舍五入处理**
- 将浮点型的 `score` 强转为整形时采用 `(int)(score + 0.5)` 的方式完成四舍五入操作,避免直接强转会截断小数部分导致误差。
3. **等级转换**
- 利用 `switch-case-default` 结构对成绩进行分类处理。这里的 `tempScore / 10` 表示取出成绩的“十位”数值来进行匹配。
- 成绩大于等于 `90` 分对应 `'A'`
- 成绩介于 `80~89` 对应 `'B'`
- 类推至最低级 `'E'`。
4. **输出结果**
- 最终使用 `printf()` 函数按照指定格式打印出原始成绩和对应的等级。
#### **注意事项**
- 浮点数输入可能含有小数部分,因此需要考虑如何合理地映射到整数区间。
- 变量选择上,由于成绩范围已明确限定为 `0 ~ 100` ,故选用 `float` 或者 `double` 来保存输入值即可满足需求;而最终的等级则存放在单字节大小的字符变量 `char` 中。
---
### 示例运行效果
假设用户按以下流程输入数据:
```
please input the score(0-100): 103
Input error! Please re-enter.
please input the score(0-100): -5
Input error! Please re-enter.
please input the score(0-100): 76.8
score=76.8,grade=C
```
---
阅读全文
相关推荐













