用c语言写按要求定义结构体数据类型,包括num(学号),name(姓名),score[5](5门课成绩),aver(5门课平均成绩),和sum(5门课总成绩),要求将下面功能都编写成独立的函数。1.输入n个学生5门成绩的函数2.计算每个学生的5门的总成绩和平均成绩。3.计算n个学生的最高总分和最高平均分。4.输入一个学号,输出该学生的学号、姓名和总分。5.编写主函数集成上面4项功能。6.程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。
时间: 2024-03-02 08:51:39 浏览: 263
下面是按要求定义结构体数据类型的代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define MAX_STUDENT_NUM 100 // 最大学生数量
#define COURSE_NUM 5 // 课程数量
// 定义学生结构体
struct student {
int num; // 学号
char name[20]; // 姓名
float score[COURSE_NUM]; // 5门课成绩
float aver[COURSE_NUM]; // 5门课平均成绩
float sum[COURSE_NUM]; // 5门课总成绩
};
// 输入n个学生5门成绩的函数
void input_scores(struct student *stu, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &(stu+i)->num);
printf("姓名:");
scanf("%s", (stu+i)->name);
for (int j = 0; j < COURSE_NUM; j++) {
printf("第%d门课成绩:", j+1);
scanf("%f", &(stu+i)->score[j]);
}
}
}
// 计算每个学生5门的总成绩和平均成绩
void calc_sum_aver(struct student *stu, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < COURSE_NUM; j++) {
(stu+i)->sum[j] = 0;
for (int k = 0; k < COURSE_NUM; k++) {
(stu+i)->sum[j] += (stu+i)->score[k];
}
(stu+i)->aver[j] = (stu+i)->sum[j] / COURSE_NUM;
}
}
}
// 计算n个学生的最高总分和最高平均分
void calc_highest(struct student *stu, int n, float *highest_sum, float *highest_aver) {
*highest_sum = 0;
*highest_aver = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < COURSE_NUM; j++) {
if ((stu+i)->sum[j] > *highest_sum) {
*highest_sum = (stu+i)->sum[j];
}
if ((stu+i)->aver[j] > *highest_aver) {
*highest_aver = (stu+i)->aver[j];
}
}
}
}
// 输入一个学号,输出该学生的学号、姓名和总分
void output_student_info(struct student *stu, int n, int num) {
bool found = false;
for (int i = 0; i < n; i++) {
if ((stu+i)->num == num) {
found = true;
printf("学号:%d,姓名:%s,总分:%.2f\n", (stu+i)->num, (stu+i)->name, (stu+i)->sum[0]);
break;
}
}
if (!found) {
printf("未找到该学号对应的学生信息!\n");
}
}
// 主函数
int main() {
struct student stu[MAX_STUDENT_NUM];
int n, num;
float highest_sum, highest_aver;
printf("请输入学生数量:");
scanf("%d", &n);
input_scores(stu, n);
calc_sum_aver(stu, n);
calc_highest(stu, n, &highest_sum, &highest_aver);
printf("最高总分为:%.2f,最高平均分为:%.2f\n", highest_sum, highest_aver);
printf("请输入要查询的学生的学号:");
scanf("%d", &num);
output_student_info(stu, n, num);
return 0;
}
```
异常处理部分可能需要根据具体情况进行编写。
阅读全文