C语言程序设计问题求解决

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;
}

效果:

图片说明

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7549801
  • 这篇博客你也可以参考下:C语言队列解决舞伴匹配问题
  • 这篇博客也不错, 你可以看下C语言队列解决舞伴匹配问题
  • 除此之外, 这篇博客: C语言编程题(基础)中的 七十一、编写程序读入N个学生的百分制成绩,统计等级制成绩的分布(即各等级的人数)。百分制成绩到等级制成绩的转换规则: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    大于等于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; 
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^