#include<stdio.h>
#define LEN 100 /*学生人数上限*/
#define FAIL 60 /*及格分数下限*/
struct student {
int no; /*学号*/
float score; /*成绩*/
};
void inputScore (struct student stu[], int n) { /*录入学生成绩*/
int i,error;
for (i = 0; i < n; i ++) {
do {
printf ("请输入第%d名学生信息:\n",i+1);
printf ("学号:");
scanf ("%d",&stu[i].no);
printf ("成绩:");
scanf ("%f",&stu[i].score);
error = 0;
if (stu[i].score > 100 || stu[i].score < 0) {
error = 1;
printf ("\n成绩输入错误,请重新输入!\n");
}
printf ("\n");
} while (error);
}
printf ("%d名的学生信息均已输入完毕!\n",n);
putchar ('\n');
}
void printScore (struct student stu[], int n) { /*输出学生成绩*/
int i;
printf ("学号\t成绩\n");
for (i = 0; i < n; i ++)
printf ("%d\t%.2f\n",stu[i].no,stu[i].score);
}
void printAverage (struct student stu[], int n) { /*输出平均分*/
float average=0;
int i;
for (i = 0; i < n; i ++)
average += stu[i].score;
average/=n;
printf ("%d名学生的平均成绩为:%.2f\n",n,average);
putchar ('\n');
}
void printMaxMin (struct student stu[], int n) { /*输出最高分、最低分*/
float max=stu[0].score,min=stu[0].score;
int i;
for (i = 0; i < n; i ++) {
if (stu[i].score > max)
max = stu[i].score;
if (stu[i].score < min)
min = stu[i].score;
}
printf ("%d名学生\n最高分:%.2f\n最低分:%.2f\n",n,max,min);
putchar ('\n');
}
void printPassRate (struct student stu[], int n) { /*计算并输出合格率*/
int i,count;
for (i = 0,count = 0; i < n; i ++)
if (stu[i].score > FAIL)
count ++;
printf ("%d名学生\n%d名学生成绩合格\n合格率:%.2f%%\n",n,count,(float)count/n*100);
putchar ('\n');
}
void printSort (struct student stu[], int n) { /*从高到低排序*/
int i,j;
struct student temp;
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - 1 - i; j++)
if (stu[j].score < stu[j + 1].score) {
temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
printf ("%d名学生成绩从高到低排序:\n",n);
printScore (stu,n);
putchar ('\n');
}
int main(void) {
int stuNum,key=0;
struct student stu[LEN]; /*学生结构体数组*/
printf ("请输入学生人数:");
scanf ("%d",&stuNum);
putchar ('\n');
while (key!=6) {
system ("cls"); /*清屏*/
puts ("=====================================================================");
printf("序号\t功能详情\n");
puts ("---------------------------------------------------------------------");
printf("1\t输入%d名同学成绩\n",stuNum);
printf("2\t输出%d名同学的平均成绩\n",stuNum);
printf("3\t输出最高分和最低分\n");
printf("4\t计算及格率并输出\n");
printf("5\t将%d名同学成绩按从高分到低分的顺序输出\n",stuNum);
printf("6\t退出\n");
puts ("=====================================================================");
printf("请输入功能序号以开启操作:");
scanf("%d",&key);
printf("\n");
system ("cls"); /*清屏*/
switch (key){
case 1: inputScore (stu,stuNum); break;
case 2: printAverage (stu,stuNum); break;
case 3: printMaxMin (stu,stuNum); break;
case 4: printPassRate (stu,stuNum); break;
case 5: printSort (stu,stuNum);break;
case 6: printf("程序结束!\n\n");;break;
default:printf("输入错误,请重新输入!\n\n");break;
}
if (key!=6) {
printf("按回车键继续\n");fflush (stdin);getch ();
}
}
getch ();
return 0;
}
运行结果
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/bf096b63f6246b603b4c808de1f81a4c500fa28c?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/48540923dd54564e00ced6c0b9de9c82d0584f9b?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)