用c++编写程序实现某学生姓名、年龄(合理范围:6~26)、五分制成绩(合理范围:0~5)的输入,调用函数实现检查年龄和成绩是否合理,抛出相应的异常信息;如果无异常,则返回对应的百分制成绩。要求主函数中检测和捕获异常,并输出该学生的姓名、年龄和百分制成绩。
时间: 2024-10-16 16:10:38 浏览: 39
在C++中,你可以通过以下步骤实现这个功能:
首先,定义一个包含姓名、年龄和成绩的结构体(struct),以及两个用于检查年龄和成绩是否合理的辅助函数,它们会抛出异常。
```cpp
#include <iostream>
#include <stdexcept>
struct Student {
std::string name;
int age;
int score;
};
// 辅助函数,检查年龄合理性
void checkAge(int age) {
if (age < 6 || age > 26) {
throw std::invalid_argument("年龄超出范围");
}
}
// 辅助函数,检查成绩合理性
void checkScore(int score) {
if (score < 0 || score > 5) {
throw std::invalid_argument("成绩超出范围");
}
}
// 计算百分制成绩并处理异常
int calculatePercentage(Student student) {
try {
checkAge(student.age);
checkScore(student.score);
return student.score * 20; // 假设满分100分,五分制即为20分制
} catch (const std::invalid_argument& e) {
std::cerr << "异常:" << e.what() << '\n';
return -1; // 或者返回一个特定值表示无效输入
}
}
int main() {
try {
std::cout << "请输入学生姓名: ";
std::getline(std::cin, Student::name);
std::cout << "请输入年龄: ";
std::cin >> Student::age;
std::cout << "请输入五分制成绩: ";
std::cin >> Student::score;
int percentage = calculatePercentage(Student{Student::name, Student::age, Student::score});
if (percentage != -1) {
std::cout << "百分制成绩: " << percentage << "%\n";
}
} catch (const std::exception& e) {
std::cerr << "程序运行错误: " << e.what() << '\n';
}
return 0;
}
```
在这个例子中,`checkAge` 和 `checkScore` 函数负责检查输入的合理性,如果发现异常就会抛出`std::invalid_argument`。主函数`main`捕获这些异常并进行适当的错误处理。如果没有异常,计算百分制成绩并输出结果。
阅读全文