【C语言】结构体应用:统计成绩最低分
目的:N个学生成绩已知,统计获得最低分的人数个数,以及基本个人信息。
#include <stdio.h>
#include<string.h>
/* 功能:结构体的应用 按成绩信息排名
时间:2024年10月
地点:贤者楼129
作者:LChen
*/
/* N名学生成绩及个人信息放在stua中
将分数最低的学生数据放在stb所指的数组中
方法一:所有学生按成绩排序,找到最低成绩的学生个数
参考上一个程序
时间复杂度:排序复杂度最低NlogN
空间复杂度:交换的1
方法二:记录当前最低分,并存储学生
时间复杂度:遍历学生N
空间复杂度:最低成绩的学生人数,最高N
*/
struct student{
int ID; // 学号
char name[20]; // 姓名
double score; // 成绩
};
typedef struct student Student;
int main() {
int i,j,n;
scanf("%d",&n);
Student stua[n]; // 定义
Student stub[n]; // 极端情况,所有人分数相同
int count=0; // 记录最低分人数,初始下标为0
double minScore=101; // 初始化最低分为极大值
for(i=0;i<n;i++)
scanf("%d %s %lf",&stua[i].ID,stua[i].name,&stua[i].score);
for(i=0;i<n;i++){
if(stua[i].score<minScore){
count=0; // 重新计数
stub[count]=stua[i];
minScore=stua[i].score; // 更新最低分
}
else if(stua[i].score==minScore){ // 是最低分
count++;
stub[count]=stua[i]; // 累加
}
}
// 输出最低成绩人数
printf("共%d个最低分\n",count+1); // 下标从0开始
for(i=0;i<=count;i++)
printf("%d %s %.2lf\n",stub[i].ID,stub[i].name,stub[i].score);
return 0;
}