任务:学生成绩统计。从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。
#include <stdio.h>
#define N 30
int main() {
//声明结构体student
struct student {
char name[20];//学生姓名
float score; //学生成绩
};
int count0 = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0;
int n, i, a, count = 0, k = 0;
float average, sum = 0;
struct student stu[100];//定义结构体数组
for (int i = 0; i < N; i++) { //利用循环输入学生的姓名,成绩
scanf("%s%f", &stu[i].name, &stu[i].score);
sum += stu[i].score; //计算总成绩
if (stu[i].score < 60) { //判断是否及格,统计不及格人数
count++;
printf("不及格的学生名单有:%s:%d", stu[i].name, stu[i].score);
}
if (stu[i].score < 0)
break;
}
printf("不及格人数为%d", count);
average = sum / N; //求平均成绩
for (int i = 0; i < N; i++) { //打印成绩在全班平均分及平均分之上的学生
if (stu[i].score > average) {
k++;
printf("成绩在全班平均分及平均分之上的学生有:%s:%d", stu[i].name, stu[i].score);
}
}
printf("成绩在全班平均分及平均分之上的学生人数有:%d", k); //输出成绩在全班平均分及平均分之上的学生人数
for (i = 0; i < N; i++) {
if (stu[i].score >= 90)
count0++;
if (80 <= stu[i].score && stu[i].score <= 89)
count1++;
if (70 <= stu[i].score && stu[i].score <= 79)
count2++;
if (60 <= stu[i].score && stu[i].score <= 69)
count3++;
if (stu[i].score < 60)
count4++;
}
printf("%d", count0, count1, count2, count3, count4);
printf("60分以下的学生人数是%d,所占百分比是%d", count0, (float)count0 / N * 100);
printf("60分以上的学生人数是%d,所占百分比是%d", count1, (float)count1 / N * 100);
printf("70分以上的学生人数是%d,所占百分比是%d", count2, (float)count2 / N * 100);
printf("80分以上的学生人数是%d,所占百分比是%d", count3, (float)count3 / N * 100);
printf("90分以上的学生人数是%d,所占百分比是%d", count4, (float)count4 / N * 100);
return 0;
}