编写程序从键盘输入5个学生的信息,包括学生学号、姓名、性别、出生年月及成绩,用结构体数组保存学生的信息,要求用函数实现结构体数组的输入输出及求成绩最高学生的序号。
时间: 2023-12-16 07:22:29 浏览: 112
好的,我可以帮您解决这个问题。请看以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 5
// 定义学生信息结构体
typedef struct {
int id;
char name[20];
char gender;
int birth_year;
float score;
} Student;
// 输入学生信息
void input_students(Student *students, int num) {
for (int i = 0; i < num; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &(students + i)->id);
printf("姓名:");
scanf("%s", (students + i)->name);
printf("性别:");
scanf("%s", &(students + i)->gender);
printf("出生年份:");
scanf("%d", &(students + i)->birth_year);
printf("成绩:");
scanf("%f", &(students + i)->score);
}
}
// 输出学生信息
void print_students(const Student *students, int num) {
printf("学号\t姓名\t性别\t出生年份\t成绩\n");
for (int i = 0; i < num; i++) {
printf("%d\t%s\t%c\t%d\t\t%.2f\n",
(students + i)->id, (students + i)->name, (students + i)->gender,
(students + i)->birth_year, (students + i)->score);
}
}
// 求成绩最高学生的序号
int find_highest_score(const Student *students, int num) {
float highest_score = (students + 0)->score;
int highest_score_index = 0;
for (int i = 1; i < num; i++) {
if ((students + i)->score > highest_score) {
highest_score = (students + i)->score;
highest_score_index = i;
}
}
return highest_score_index;
}
int main() {
Student students[MAX_STUDENT_NUM];
input_students(students, MAX_STUDENT_NUM);
print_students(students, MAX_STUDENT_NUM);
int highest_score_index = find_highest_score(students, MAX_STUDENT_NUM);
printf("成绩最高的学生是第%d个\n", highest_score_index + 1);
return 0;
}
```
这个程序定义了一个 `Student` 结构体,包括学生的学号、姓名、性别、出生年月和成绩。程序中使用了三个函数:`input_students` 用于输入学生信息,`print_students` 用于输出学生信息,`find_highest_score` 用于求成绩最高学生的序号。在 `main` 函数中,我们先调用 `input_students` 输入学生信息,然后调用 `print_students` 输出学生信息,最后调用 `find_highest_score` 求成绩最高学生的序号,并输出结果。
希望这个程序对您有所帮助!
阅读全文