分数 15
全屏浏览题目
切换布局
作者 沈睿
单位 浙江大学
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90
输出样例:
A
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
我的答案:
二、分析
为了使用 switch
语句实现这个功能,我们首先需要将百分制成绩转换为一个可以由 switch
语句处理的值。一种方法是将分数除以10,然后用结果来决定输出哪一个五分制的成绩。
以下是使用C语言和C++的实现:
#include <stdio.h>
int main() {
int score;
scanf("%d", &score);
switch (score / 10) {
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
break;
}
return 0;
}
C语言:
#include <iostream>
using namespace std;
int main() {
int score;
cin >> score;
switch (score / 10) {
case 10:
case 9:
cout << "A" << endl;
break;
case 8:
cout << "B" << endl;
break;
case 7:
cout << "C" << endl;
break;
case 6:
cout << "D" << endl;
break;
default:
cout << "E" << endl;
break;
}
return 0;
}
这些程序使用了 switch
语句来检查给定成绩的十位数,并根据其值输出对应的五分制成绩。
总结:
从这种方法——将分数除以10,然后使用结果来决定输出哪一个五分制的成绩——我们可以学到以下几点:
1. **简化问题**:通过对问题的简化,我们可以使解决方案更加直观和容易实现。在这种情况下,我们使用除法来将一个连续的范围(0-100)转化为一个较小的离散集(0-10),从而简化了 `switch` 语句的实现。
2. **离散化连续数据**:在某些情况下,我们可以将连续的数据离散化,使其更容易处理。在此示例中,我们将连续的分数转化为离散的等级。
3. **利用 `switch` 语句的特性**:`switch` 语句最适合处理有限、离散的情况。在这种方法中,我们充分利用了 `switch` 语句的这一特性。
4. **使用case的穿透性**:在 `switch` 语句中,如果不使用 `break`,控制会“穿透”到下一个 `case`。在此例中,我们利用了这一特性来同时处理分数为90到100的情况(即将其映射到'A')。
5. **思维的转变**:不总是要直接地应对问题。有时,转变思路、间接地解决问题可能会更加高效。
6. **减少错误**:直接使用连续范围的 `if-else` 语句更容易出错(例如,不小心错写范围边界),而通过离散化连续数据并使用 `switch` 语句可以降低这种错误的概率。
总的来说,这种方法不仅提供了一个有效的解决方案,而且还教给我们如何简化和转变问题,以及如何充分利用某些编程结构的特性。