1个年级8个班,每个班40人,将学生某科成绩分数高低排列(学生分数分布在40-100),并得到每个班的平均数,最后将结果显示出来
https://blog.csdn.net/wangchinlung/article/details/79524298
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct student {
int grade;
} Student;
typedef struct class {
int index;
Student student[40];
} Class;
Class MySchool[8];
int main() {
//初始化随机数
srand((unsigned int)time(NULL));
//随机生成成绩(惨不忍睹)
int i;
for (i = 0; i <= 7; i++) {
MySchool[i].index = i;
int i2;
for (i2 = 0; i2 <= 39; i2++) {
MySchool[i].student[i2].grade = rand() % 61 + 40;
}
}
//遍历班级
for (i = 0; i <= 7; i++) {
Student tmp[41];//多余一个保留用,在后移排名时tmp[39]将会移至tmp[40]
memset(tmp, 0, sizeof(Student) * 41);
int i2;
for (i2 = 0; i2 <= 39; i2++) {
int i3 = 40;
while (i3-- > 0 && MySchool[i].student[i2].grade >= tmp[i3].grade) {//降序
tmp[i3 + 1].grade = tmp[i3].grade;//后移低排名
}
//当成绩高于tmp[i3].grade或i3==0时将值放进去
tmp[i3 + 1].grade = MySchool[i].student[i2].grade;
}
//打印出排列的成绩,顺便求总和
int sum = 0;
printf("Class:%d\n", i);
for (i2 = 0; i2 <= 39; i2++) {
sum += tmp[i2].grade;
printf("--%d:%d\n", i2 + 1, tmp[i2].grade);//名次:成绩
}
printf("-Average:%g\n", (double)sum / 40);
}
return 0;
}
效果:
不知道你这个问题是否已经解决, 如果还没有解决的话:大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70位C;
小于70且大于等于60为D;
小于60为E;
#include <stdio.h>
int main()
{
int N,score,A,B,C,D,E,i;
A=B=C=D=E=0;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&score);
switch(score/10)
{
case 10:
case 9:A++; break;
case 8: B++;break;
case 7: C++;break;
case 6: D++;break;
default: E++;break;
}
}
printf("%d %d %d %d %d\n",A,B,C,D,E);
return 0;
}