建立学生信息的数据结构,每个学生信息包含学号、姓名、语数外三门课的成绩。编写input函数,用于输入学生的信息;编写max1函数,用于找单科成绩最高的学生;编写max3函数,用于找总分最高的学生;编写print函数,用于输出学生的信息。
由键盘输入5个学生的信息,找出单科成绩最高及总分最高的学生,并输出在屏幕上。
基于部分chartgpt编写
以下是一个基于结构体的C语言示例代码,实现了学生信息的录入、最高单科成绩和总分计算、以及学生信息的输出等功能:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 20 // 字符串最大长度
#define NUM_SUBJECTS 3 // 科目数量
// 定义学生结构体
struct student {
int id;
char name[MAX_LEN];
int grades[NUM_SUBJECTS];
int total;
};
// 读取学生信息
void input(struct student *s) {
printf("请输入学生的学号、姓名和三门课程的成绩(用空格分隔):");
scanf("%d %s %d %d %d", &(s->id), s->name, &(s->grades[0]), &(s->grades[1]), &(s->grades[2]));
// 计算总分
s->total = s->grades[0] + s->grades[1] + s->grades[2];
}
// 找出最高单科成绩的学生
void max1(struct student *stu_arr, int n) {
int max_grade = 0;
int max_index = -1;
int i, j;
for (i = 0; i < NUM_SUBJECTS; i++) { // 遍历科目
for (j = 0; j < n; j++) { // 遍历学生
if (stu_arr[j].grades[i] > max_grade) {
max_grade = stu_arr[j].grades[i];
max_index = j;
}
}
// 输出该科目最高分学生的信息
printf("单科成绩最高的学生(科目%d): %d, %s, %d\n", i+1, stu_arr[max_index].id, stu_arr[max_index].name, max_grade);
max_grade = 0; // 重置最高分,即将计算下一个科目
}
}
// 找出总分最高的学生
void max3(struct student *stu_arr, int n) {
int max_total = 0;
int max_index = -1;
for (int i = 0; i < n; i++) {
if (stu_arr[i].total > max_total) {
max_total = stu_arr[i].total;
max_index = i;
}
}
// 输出总分最高学生的信息
printf("总分最高的学生: %d, %s, %d\n", stu_arr[max_index].id, stu_arr[max_index].name, max_total);
}
// 输出学生信息
void print(struct student s) {
printf("学生信息:%d, %s, %d, %d, %d, %d\n", s.id, s.name, s.grades[0], s.grades[1], s.grades[2], s.total);
}
int main() {
struct student s[5];
int i;
// 读入5个学生的信息
for (i = 0; i < 5; i++) {
input(&s[i]);
}
// 输出每个学生的信息
printf("所有学生的信息如下:\n");
for (i = 0; i < 5; i++) {
print(s[i]);
}
// 找出单科成绩最高的学生
max1(s, 5);
// 找出总分最高的学生
max3(s, 5);
return 0;
}
在实现最高单科成绩和总分计算函数 max1 和 max3 时,我们使用了嵌套的循环结构来遍历学生信息,并用变量 max_grade 和 max_total 分别记录最高单科成绩和总分,并记录最高分所对应的学生索引 max_index。最后输出该学生的信息即可。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢