求助c语言代码

用c语言代码实现:用结构体的形式编写程序,实现可以存储20个班,每个班40名学生的5门课程的成绩(学生的成绩用随机函数随机生成 ),然后按从高到低的顺序显示出每个班、每门课程的平均分。

首先,我们需要定义一个结构体来存储学生的成绩信息,然后创建一个二维数组来存储20个班的40名学生的5门课程的成绩。接着,我们需要编写一个函数来生成随机成绩,并计算每个班、每门课程的平均分。最后,我们需要对平均分进行排序并输出结果。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义结构体
typedef struct {
int class_id;
int student_id;
int score;
} Student;
// 生成随机成绩
void generate_scores(Student students[], int num_students) {
for (int i = 0; i < num_students; i++) {
students[i].score = rand() % 101;
}
}
// 计算平均分
float calculate_average(Student students[], int num_students) {
int total_score = 0;
for (int i = 0; i < num_students; i++) {
total_score += students[i].score;
}
return (float)total_score / num_students;
}
// 按成绩从高到低排序
void sort_scores(Student students[], int num_students) {
for (int i = 0; i < num_students - 1; i++) {
for (int j = 0; j < num_students - 1 - i; j++) {
if (students[j].score < students[j + 1].score) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int main() {
const int num_classes = 20;
const int num_students = 40;
const int num_courses = 5;
Student students[num_classes][num_students];
// 初始化随机数种子
srand(time(NULL));
// 生成成绩并计算平均分
for (int i = 0; i < num_classes; i++) {
students[i][0].class_id = i + 1;
generate_scores(students[i], num_students);
printf("班级%d的平均分:%.2f
", students[i][0].class_id, calculate_average(students[i], num_students));
}
// 按成绩从高到低排序
for (int i = 0; i < num_classes; i++) {
sort_scores(students[i], num_students);
}
// 输出排序后的结果
for (int i = 0; i < num_classes; i++) {
printf("班级%d的成绩排名:
", students[i][0].class_id);
for (int j = 0; j < num_students; j++) {
printf("学生%d:%d分
", students[i][j].student_id, students[i][j].score);
}
}
return 0;
}
这段代码首先定义了一个结构体Student来存储学生的成绩信息,然后创建了一个二维数组students来存储20个班的40名学生的5门课程的成绩。接着,我们编写了一个函数generate_scores来生成随机成绩,并计算每个班、每门课程的平均分。然后,我们编写了一个函数sort_scores来对平均分进行排序。最后,在main函数中,我们调用这些函数来生成成绩、计算平均分和排序,并输出结果。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2024-01-05

下面有个简单的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的数据类型,然后用它们创建了一些数据。

注意:随机数是基于当前时间戳作为种子进行初始化的。

每个学生都有五个科目,他们的成绩数组长度为五。

计算平均分时,遍历了所有的学生累加他们在这个科目的得分,最后除以学生总数目得到平均值。

第2个回答  2024-01-05
以下是一个使用C语言和结构体实现的示例代码,可以存储20个班,每个班40名学生的5门课程的成绩,并按照从高到低的顺序显示每个班、每门课程的平均分。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_CLASSES 20
#define NUM_STUDENTS 40
#define NUM_COURSES 5
struct student {
int id;
int scores[NUM_COURSES];
};
int main() {
srand(time(NULL)); // 使用当前时间作为随机数生成器的种子
struct student students[NUM_CLASSES][NUM_STUDENTS]; // 存储所有学生的成绩
int total_scores[NUM_CLASSES][NUM_COURSES]; // 存储每个班级、每门课程的总分数
int avg_scores[NUM_CLASSES][NUM_COURSES]; // 存储每个班级、每门课程的平均分数
// 初始化总分数和平均分数数组
for (int i = 0; i < NUM_CLASSES; i++) {
for (int j = 0; j < NUM_COURSES; j++) {
total_scores[i][j] = 0;
avg_scores[i][j] = 0;
}
}
// 生成随机成绩并计算总分数和平均分数
for (int i = 0; i < NUM_CLASSES; i++) {
for (int j = 0; j < NUM_STUDENTS; j++) {
for (int k = 0; k < NUM_COURSES; k++) {
students[i][j].scores[k] = rand() % 100; // 生成0-99的随机成绩
total_scores[i][k] += students[i][j].scores[k]; // 计算总分数
}
}
for (int k = 0; k < NUM_COURSES; k++) {
avg_scores[i][k] = total_scores[i][k] / NUM_STUDENTS; // 计算平均分数
}
}
// 按从高到低的顺序显示每个班、每门课程的平均分
printf("班级\t"); // 表头,表示班级信息
for (int j = 0; j < NUM_COURSES; j++) {
printf("课程%d\t", j + 1); // 表头,表示课程信息
}
printf("\n"); // 换行符,分隔表头和表格内容
for (int i = NUM_CLASSES - 1; i >= 0; i--) { // 从最后一个班级开始显示,方便阅读表格内容从上到下的顺序是降序的平均分
printf("%d\t", i + 1); // 显示班级信息
for (int j = 0; j < NUM_COURSES; j++) { // 显示每门课程的平均分
printf("%.2f\t", avg_scores[i][j]); // 使用 %.2f 控制小数点后两位的精度显示平均分,增加可读性
}
printf("\n"); // 换行符,分隔表格内容行和行之间的空行(这里不需要显示其他信息)
}
return 0;
}
```