有10名学生,每名学生的数据包含学号、姓名、3门课程的成绩,从键盘输入10名学生的数据。 要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数) 创建四个函数input, print,aver,excelent接受结构体数组指针。 void input (stu *p)
时间: 2023-12-15 22:16:26 浏览: 119
编程实现:(1) 键入某组学生(共 10 人)的学号、姓名、组成原理考试 成绩、数据结构考试成绩、汇编语言考试成绩
好的,这是一个C语言的程序,实现了输入10名学生的数据,计算3门课程的平均成绩,以及输出最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_STUDENTS 10
#define MAX_GRADES 3
typedef struct {
int id;
char name[MAX_NAME_LEN];
int grades[MAX_GRADES];
float average;
} student;
void input(student *p);
void print(student *p);
void aver(student *p);
void excelent(student *p);
int main() {
student students[MAX_STUDENTS];
student *p = students;
input(p);
aver(p);
excelent(p);
return 0;
}
void input(student *p) {
for (int i = 0; i < MAX_STUDENTS; i++) {
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &(p + i)->id);
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", (p + i)->name);
for (int j = 0; j < MAX_GRADES; j++) {
printf("请输入第%d个学生的第%d门课程成绩:", i + 1, j + 1);
scanf("%d", &(p + i)->grades[j]);
}
}
}
void print(student *p) {
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
printf("%d\t%s\t", (p + i)->id, (p + i)->name);
for (int j = 0; j < MAX_GRADES; j++) {
printf("%d\t", (p + i)->grades[j]);
}
printf("%.2f\n", (p + i)->average);
}
}
void aver(student *p) {
float sum[MAX_GRADES] = {0};
for (int i = 0; i < MAX_STUDENTS; i++) {
for (int j = 0; j < MAX_GRADES; j++) {
sum[j] += (p + i)->grades[j];
}
(p + i)->average = (sum[0] + sum[1] + sum[2]) / (MAX_STUDENTS * MAX_GRADES);
}
printf("3门课程的平均分数为:%.2f\t%.2f\t%.2f\n", sum[0] / MAX_STUDENTS, sum[1] / MAX_STUDENTS, sum[2] / MAX_STUDENTS);
}
void excelent(student *p) {
int max_index = 0;
float max_score = (p + 0)->average;
for (int i = 1; i < MAX_STUDENTS; i++) {
if ((p + i)->average > max_score) {
max_score = (p + i)->average;
max_index = i;
}
}
printf("最高分的学生的学号:%d\n姓名:%s\n成绩1:%d\n成绩2:%d\n成绩3:%d\n平均分数:%.2f\n",
(p + max_index)->id, (p + max_index)->name, (p + max_index)->grades[0], (p + max_index)->grades[1],
(p + max_index)->grades[2], (p + max_index)->average);
}
```
其中,第一个函数`input`实现了输入10名学生的数据,第二个函数`print`可以输出所有学生的数据,但本题中没有要求,所以可以省略;第三个函数`aver`实现了计算3门课程的平均成绩,最后一个函数`excelent`实现了输出最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
阅读全文