用c语言写代码,要求(1)学生记录由学号和成绩组成,结构体类型定义如下: typedef struct { char num[10]; double s; } STREC; 功能:a所指向的数组中有N名学生的数据,请编写函数int fun(STREC a[],STREC b[]),把a数组中分数最高的学生数据放在b所指的数组中。分数最高的学生可能不止一个,函数返回分数最高的学生人数。 要求在main函数完成数据输入,及输出最高分和所有分数最高的学生相关信息。
时间: 2024-04-02 10:32:37 浏览: 113
C语言利用结构体数组实现学生成绩管理系统
5星 · 资源好评率100%
好的,可以为您提供代码实现。请注意,我会在代码中注释以帮助您理解代码的执行过程。
```c
#include <stdio.h>
typedef struct {
char num[10];
double s;
} STREC;
int fun(STREC a[], STREC b[]) {
int i, max_count = 0;
double max_score = a[0].s; // 初始化最高分数为第一个学生的分数
for (i = 0; a[i].s != -1; i++) { // 循环遍历学生数据,-1为数据输入结束标志
if (a[i].s > max_score) { // 如果当前学生分数大于最高分数
max_score = a[i].s; // 更新最高分数
max_count = 0; // 重置最高分数的学生人数为0
b[max_count] = a[i]; // 把当前学生数据放入b数组中
max_count++; // 最高分数的学生人数加1
} else if (a[i].s == max_score) { // 如果当前学生分数等于最高分数
b[max_count] = a[i]; // 把当前学生数据放入b数组中
max_count++; // 最高分数的学生人数加1
}
}
return max_count; // 返回最高分数的学生人数
}
int main() {
int n, i, max_count;
double max_score;
STREC a[100], b[100];
printf("请输入学生人数:");
scanf("%d", &n);
printf("请依次输入每个学生的学号和成绩:\n");
for (i = 0; i < n; i++) {
scanf("%s %lf", a[i].num, &a[i].s);
}
a[n].s = -1; // 数据输入结束标志
max_count = fun(a, b); // 调用fun函数,获取最高分数的学生人数
max_score = b[0].s; // 初始化最高分数为第一个学生的分数
printf("最高分数为:%.2lf\n", max_score);
printf("所有最高分数的学生信息如下:\n");
for (i = 0; i < max_count; i++) {
printf("学号:%s,分数:%.2lf\n", b[i].num, b[i].s);
}
return 0;
}
```
运行结果:
```
请输入学生人数:5
请依次输入每个学生的学号和成绩:
1001 89.5
1002 92.0
1003 86.5
1004 92.0
1005 90.5
最高分数为:92.00
所有最高分数的学生信息如下:
学号:1002,分数:92.00
学号:1004,分数:92.00
```
阅读全文