用c语言代码实现:用结构体的形式编写程序,实现可以存储20个班,每个班40名学生的5门课程的成绩(学生的成绩用随机函数随机生成 ),然后按从高到低的顺序显示出每个班、每门课程的平均分。
下面有个简单的C语言示例来满足您的需求:
#include <stdio.h>#include <stdlib.h>#include <time.h> // for rand() and srand()// 定义一个学生类typedef struct { int class; // 班级编号 char name[50]; // 学生姓名 float scores[5]; // 成绩数组} Student;// 定义一个班级类typedef struct { int num_students; // 班级人数 Student students[40]; // 学生数组} Class;int main(){ srand(time(NULL)); // 初始化随机数种子 Class classes[20]; printf("请输入班级数量(最多20): "); scanf("%d", &classes_num); if (classes_num > 20) { printf("错误! 最多只能有20个班级.\n"); return -1; } for(int i = 0; i< classes_num ;i++) {
printf("\nEnter details of Class %d\n", i + 1); printf("Enter number of students in the class : "); scanf("%d",&classes[i].num_students);
for(int j = 0; j< classes[i].num_students ;j++) {
strcpy(classes[i].students[j].name, "Student"); // 假设所有学生的名字都是"Student" for(int k = 0;k<5;k++){ classes[i].students[j].scores[k] = ((float)(rand()%100))/((float)RAND_MAX/100)+1; // 随机生成分数 } }
} for(int i = 0;i< classes_num ;i++) {
printf("\nClass %d:\n", i + 1); for(int j = 0;j< classes[i].num_students ;j++) {
printf("Name: %s \tScore: %.2f\n", classes[i].students[j].name , classes[i].students[j].scores[0]); } for(int j = 0;j< 5 ;j++) {
float avg_score = 0; for(int k = 0;k< classes[i].num_students ;k++) { avg_score += classes[i].students[k].scores[j]; } avg_score /= classes[i].num_students; printf("Average score of Subject %d is %.2f\n", j + 1, avg_score ); } } return 0;}
这个程序定义了Student和Class的数据类型,然后用它们创建了一些数据。
注意:随机数是基于当前时间戳作为种子进行初始化的。
每个学生都有五个科目,他们的成绩数组长度为五。
计算平均分时,遍历了所有的学生累加他们在这个科目的得分,最后除以学生总数目得到平均值。