键盘上输入n个学生的信息,每个学生的信息包括学号、姓名、3门课的成绩,然后输出:每个学生的信息以及总分最高的学生的信息(注意:学生信息包括学号、姓名、3门课成绩、总分以及平均成绩)。要求采用动态内存分配和函数实现
时间: 2024-01-06 07:05:35 浏览: 95
以下是一个简洁的 C 语言程序,可以实现键盘上输入 n 个学生的信息,计算每个学生的总分和平均分,并输出每个学生的信息和总分最高的学生的信息:
#include <stdio.h>
#include <stdlib.h>
struct Student {
char id[20];
char name[20];
float scores[3];
float total_score;
float avg_score;
};
void input(struct Student *students, int n);
void compute_scores(struct Student *students, int n);
void output(struct Student *students, int n, int max_index);
int main() {
int n;
struct Student *students;
printf("请输入学生人数:");
scanf("%d", &n);
students = (struct Student *) malloc(n * sizeof(struct Student));
if (students == NULL) {
printf("动态内存分配失败!\n");
exit(1);
}
input(students, n);
compute_scores(students, n);
int max_index = 0;
for (int i = 1; i < n; i++) {
if (students[i].total_score > students[max_index].total_score) {
max_index = i;
}
}
output(students, n, max_index);
free(students);
return 0;
}
void input(struct Student *students, int n) {
printf("请输入每个学生的信息(学号、姓名、3门课的成绩):\n");
for (int i = 0; i < n; i++) {
printf("学生%d:", i + 1);
scanf("%s%s%f%f%f", students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
}
}
void compute_scores(struct Student *students, int n) {
for (int i = 0; i < n; i++) {
students[i].total_score = 0;
for (int j = 0; j < 3; j++) {
students[i].total_score += students[i].scores[j];
}
students[i].avg_score = students[i].total_score / 3;
}
}
void output(struct Student *students, int n, int max_index) {
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总分\t平均分\n");
for (int i = 0; i < n; i++) {
printf("%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].total_score, students[i].avg_score);
if (i == max_index) {
printf("\t(最高分)");
}
printf("\n");
}
}
程序中,结构体 Student
包含了学生的基本信息和成绩信息。函数 input
用于输入每个学生的信息,函数 compute_scores
用于计算每个学生的总分和平均分,函数 output
用于输出每个学生的信息和总分最高的学生的信息。程序中采用了动态内存分配的方法,可以根据需要分配不同大小的内存空间。
相关推荐


















