C语言编写程序:有6个学生,每个学生的数据包括学号、姓名、3门课的成绩,编写函数,实现功能: (1)从键盘输入学生信息,存入到一个结构体数组中; (2)计算学生三门课程的平均成绩,并存入到结构体数组中; (3)打印出每门课的班级平均成绩; (4)打印出最高分的学生的数据(包括学号、姓名、3门课的成绩)。 要求: 设计一个能保存学生信息的结构,包括学生的学号,姓名,成绩数组和平均分;在主函数中输入学生的学号,姓名和三门课成绩;在主函数中调用各函数实现功能,并显示相应结果。
时间: 2024-01-01 22:04:42 浏览: 134
下面是一份C语言的程序,用于实现上述要求:
```
#include <stdio.h>
#include <string.h>
#define NUM_STUDENTS 6
#define NUM_COURSES 3
struct student {
int id;
char name[20];
int grades[NUM_COURSES];
float average;
};
void input_students(struct student students[]);
void calculate_averages(struct student students[]);
void print_class_averages(struct student students[]);
void print_highest_scoring_student(struct student students[]);
int main() {
struct student students[NUM_STUDENTS];
input_students(students);
calculate_averages(students);
print_class_averages(students);
print_highest_scoring_student(students);
return 0;
}
void input_students(struct student students[]) {
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("Enter student #%d's ID: ", i+1);
scanf("%d", &students[i].id);
printf("Enter student #%d's name: ", i+1);
scanf("%s", students[i].name);
for (int j = 0; j < NUM_COURSES; j++) {
printf("Enter student #%d's grade for course #%d: ", i+1, j+1);
scanf("%d", &students[i].grades[j]);
}
}
}
void calculate_averages(struct student students[]) {
for (int i = 0; i < NUM_STUDENTS; i++) {
int sum = 0;
for (int j = 0; j < NUM_COURSES; j++) {
sum += students[i].grades[j];
}
students[i].average = (float) sum / NUM_COURSES;
}
}
void print_class_averages(struct student students[]) {
float course_averages[NUM_COURSES] = {0.0};
for (int i = 0; i < NUM_STUDENTS; i++) {
for (int j = 0; j < NUM_COURSES; j++) {
course_averages[j] += students[i].grades[j];
}
}
for (int i = 0; i < NUM_COURSES; i++) {
printf("Class average for course #%d: %.2f\n", i+1, course_averages[i] / NUM_STUDENTS);
}
}
void print_highest_scoring_student(struct student students[]) {
struct student highest_scoring_student = students[0];
for (int i = 1; i < NUM_STUDENTS; i++) {
if (students[i].average > highest_scoring_student.average) {
highest_scoring_student = students[i];
}
}
printf("Highest scoring student:\n");
printf("ID: %d\n", highest_scoring_student.id);
printf("Name: %s\n", highest_scoring_student.name);
for (int i = 0; i < NUM_COURSES; i++) {
printf("Grade for course #%d: %d\n", i+1, highest_scoring_student.grades[i]);
}
}
```
在这个程序中,我们定义了一个结构体 `student`,它包含了学生的学号、姓名、成绩数组和平均分。我们使用一个结构体数组来存储所有学生的信息。
程序中包含了四个函数:`input_students`、`calculate_averages`、`print_class_averages` 和 `print_highest_scoring_student`。这些函数分别用于实现上述要求的不同功能。
在 `main` 函数中,我们首先定义了一个 `students` 数组来存储学生信息。然后,我们依次调用了输入学生信息、计算平均分、打印班级平均分和打印最高分学生信息的函数。
在 `input_students` 函数中,我们使用循环依次输入每个学生的信息,并将其存储到结构体数组中。
在 `calculate_averages` 函数中,我们使用循环依次计算每个学生的平均分,并将其存储到结构体数组中。
在 `print_class_averages` 函数中,我们使用两个循环分别计算每门课的总成绩和班级平均分,并将其打印出来。
在 `print_highest_scoring_student` 函数中,我们使用循环找到平均分最高的学生,并将其信息打印出来。
最后,我们在程序的末尾返回了 0,表示程序正常结束。
阅读全文