有10名学生,每名学生的 数据包含学号、姓名、3门 课程的成绩,从键盘输入 10名学生的数据 要求输出3门课程总平均成 绩,以及最高分的学生的 数据(包括学号、姓名、3 门课程成绩、平均分数) 创建四个函数input, print,aver,excelent接受结构体数组指针。
时间: 2023-12-15 09:11:05 浏览: 65
好的,下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_STUDENT_NUM 10 // 学生数量
#define COURSE_NUM 3 // 课程数量
// 学生结构体
struct Student {
char name[MAX_NAME_LEN]; // 姓名
int number; // 学号
int scores[COURSE_NUM]; // 三门课程成绩
float average; // 三门课程平均成绩
};
// 输入学生信息
void input(struct Student *students) {
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
printf("请输入第%d名学生的信息:\n", i + 1);
printf("姓名:");
scanf("%s", students[i].name);
printf("学号:");
scanf("%d", &students[i].number);
printf("三门课程成绩:");
for (int j = 0; j < COURSE_NUM; j++) {
scanf("%d", &students[i].scores[j]);
}
}
}
// 计算平均成绩
void aver(struct Student *students) {
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
float sum = 0;
for (int j = 0; j < COURSE_NUM; j++) {
sum += students[i].scores[j];
}
students[i].average = sum / COURSE_NUM;
}
}
// 输出学生信息
void print(struct Student *students) {
printf("学号\t姓名\t课程1\t课程2\t课程3\t平均成绩\n");
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", students[i].number, students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average);
}
}
// 查找最高分学生
void excellent(struct Student *students, struct Student *excellent_student) {
float max_average = 0;
int max_index = 0;
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
if (students[i].average > max_average) {
max_average = students[i].average;
max_index = i;
}
}
*excellent_student = students[max_index];
}
int main() {
struct Student students[MAX_STUDENT_NUM];
input(students);
aver(students);
print(students);
struct Student excellent_student;
excellent(students, &excellent_student);
printf("最高分学生:\n");
printf("姓名:%s\n", excellent_student.name);
printf("学号:%d\n", excellent_student.number);
printf("课程1:%d\n", excellent_student.scores[0]);
printf("课程2:%d\n", excellent_student.scores[1]);
printf("课程3:%d\n", excellent_student.scores[2]);
printf("平均成绩:%.2f\n", excellent_student.average);
return 0;
}
```
注意:以上代码仅供参考,具体实现方式可能因编译器版本、操作系统、硬件平台等因素而有所不同。
阅读全文