要求定义结构体数据类型,包括num(学号),name(姓名), scorer51(5门课成绩),aver(S门课平均成绩),和sum(门课总成绩),要求将下面功能都编写成独立的函数。 1输入口个学生S门成绩的函数 2.计算每个学生的S门的总成绩和平均成绩。 3.计算n个学生的最高总分和最高平均分。 4.输入一个学号,输出该学生的学号、姓名和总分。 5编写主函数集成上面4项功能。 6.程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如 类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性
时间: 2024-01-02 19:01:51 浏览: 59
基于C#、ML.NET、ONNX实现YOLOv5对象检测(源码+说明文档).rar
5星 · 资源好评率100%
好的,根据你的要求,我可以为你编写以下几个独立的函数:
1. 定义结构体数据类型:
```c++
struct student {
int num; // 学号
char name[20]; // 姓名
float score[5]; // 5门课成绩
float aver[5]; // 平均分
float sum[5]; // 总分
};
```
2. 输入五名同学的S门成绩,并计算每个学生的S门总成绩和平均成绩:
```c++
void inputStudentScore(student *stu, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的S门成绩:", i+1);
scanf("%f", &stu[i].score[S]);
stu[i].sum[S] += stu[i].score[S];
stu[i].aver[S] = stu[i].sum[S] / 1;
}
}
```
3. 计算n个学生的最高总分和最高平均分:
```c++
void calcHighest(student *stu, int n) {
float maxSum = 0;
float maxAver = 0;
for (int i = 0; i < n; i++) {
if (stu[i].sum[S] > maxSum) {
maxSum = stu[i].sum[S];
}
if (stu[i].aver[S] > maxAver) {
maxAver = stu[i].aver[S];
}
}
printf("最高总分:%f\n", maxSum);
printf("最高平均分:%f\n", maxAver);
}
```
4. 输入一个学号,输出该学生的学号、姓名和总分:
```c++
void searchStudent(student *stu, int n) {
int searchNum;
printf("请输入要查找的学生学号:");
scanf("%d", &searchNum);
for (int i = 0; i < n; i++) {
if (stu[i].num == searchNum) {
printf("学号:%d\n", stu[i].num);
printf("姓名:%s\n", stu[i].name);
printf("总分:%f\n", stu[i].sum[S]);
return;
}
}
printf("没有找到该学生!\n");
}
```
5. 主函数集成上面4项功能:
```c++
int main() {
int n = 5; // 学生数量
student stu[n];
inputStudentScore(stu, n);
calcHighest(stu, n);
searchStudent(stu, n);
return 0;
}
```
6. 程序异常处理:
在输入学生S门成绩时,如果用户输入的不是浮点数,可以使用如下代码进行异常处理:
```c++
void inputStudentScore(student *stu, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的S门成绩:", i+1);
float input;
while (scanf("%f", &input) != 1) {
printf("输入有误,请重新输入:");
while (getchar() != '\n');
}
stu[i].score[S] = input;
stu[i].sum[S] += stu[i].score[S];
stu[i].aver[S] = stu[i].sum[S] / 1;
}
}
```
这样即可保证程序在遇到输入错误时不会中断执行。
阅读全文