有5个学生,每个学生的数据包括学号姓名和成绩。要求分别用三个函数实现以下功能。1.用 input函数输入所有学生数据。2.用sort函数将学生数据按照成绩,由高到低排序后输出。3.用max函数找到成绩最高学生并输出其信息。
5条回答 默认 最新
- hello_world&& 2022-11-25 14:48关注
先定义一个结构体类型student,包含成员学号num,姓名name,成绩score。在排序部分可使用冒泡排序,最大值部分可用“擂台法”找到最大值,也可用排序后的结果来找最大值,本代码采用第一种方法。在main函数中定义一个结构体数组,用数组名作参数来分别调用上述函数。
#include<stdio.h> struct student{ int num; char name[20]; float score; }; void input(int n,struct student stu[]) { int i; for(i=0;i<n;i++) { printf("请输入第%d个同学的学号,姓名,成绩\n",i+1); scanf("%d %s %f",&stu[i].num,stu[i].name,&stu[i].score); } } void sort(int n,struct student stu[]) { struct student t; int i,j; for(i=0;i<n-1;i++)//n个数的数列总共扫描n-1次 { for(j=0;j<n-i-1;j++)//每一趟扫描到stu[n-i-2]与stu[n-i-1]比较为止结束 { if(stu[j].score<stu[j+1].score)//后一位数比前一位数大的话,就交换两个数的位置(降序) { t=stu[j+1]; stu[j+1]=stu[j]; stu[j]=t; } } } printf("成绩由高到低为:"); for(i=0;i<n;i++) printf("%.2f ",stu[i].score); printf("\n"); } void max(int n,struct student stu[]) { struct student max1; max1=stu[0]; int i; for(i=0;i<n;i++) { if(stu[i].score>max1.score) max1=stu[i]; } printf("最高分学生信息: "); printf(" 学号:%d 姓名:%s 成绩:%.2f",max1.num,max1.name,max1.score); } int main() { struct student stu[5]; input(5,stu); sort(5,stu); max(5,stu); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用