这个才讲了二维数组的概念 这个没思路🤔️ 到底是怎么用的呢?学生的学号和成绩是一起用二维数组表示么?

照这样的思路该怎么写呢 每个函数的作用是啥

这个才讲了二维数组的概念 这个没思路🤔️ 到底是怎么用的呢?学生的学号和成绩是一起用二维数组表示么?


定义变量:
int scoretable[40][6]; // 假定有40个学生,每个学生有一个学号和5个成绩。读入数据:
void genernddata(int scoretable[][ITEM], int row, int col);scoretable。统计处理数据:
void calstatisticdata(float statistics[][ITEM], const int row, const int col);打印数据:
void printallscoredata(float statistics[][ITEM], const int row, const int col);接下来是具体实现的步骤:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_STUDENTS 40
#define QUIZZES 5
#define ITEM 6 // 1 代表学生ID,5 代表测验成绩
// 函数原型
void genernddata(int scoretable[][ITEM], int row);
void calstatisticdata(float statistics[][QUIZZES+1], int scoretable[][ITEM], int row);
void printallscoredata(int scoretable[][ITEM], float statistics[][QUIZZES+1], int row);
char getgrade(float average);
void findstudent(int scoretable[][ITEM], int row, int studentID);
int main() {
int scoretable[MAX_STUDENTS][ITEM] = {0};
float statistics[3][QUIZZES+1] = {0}; // 3 代表最高分、最低分和平均分
srand(time(NULL)); // 种子随机数生成器
genernddata(scoretable, MAX_STUDENTS);
calstatisticdata(statistics, scoretable, MAX_STUDENTS);
printallscoredata(scoretable, statistics, MAX_STUDENTS);
// 查找学生成绩和等级的功能
int studentID;
printf("\n输入要查找的学生ID:");
scanf("%d", &studentID);
findstudent(scoretable, MAX_STUDENTS, studentID);
return 0;
}
void genernddata(int scoretable[][ITEM], int row) {
for(int i = 0; i < row; i++) {
scoretable[i][0] = 1000 + rand() % 9000; // 生成一个介于1000和9999之间的学生ID
for(int j = 1; j < ITEM; j++) {
scoretable[i][j] = rand() % 101; // 生成介于0和100之间的分数
}
}
}
void calstatisticdata(float statistics[][QUIZZES+1], int scoretable[][ITEM], int row) {
for(int j = 1; j < ITEM; j++) {
int high = 0;
int low = 100;
float sum = 0;
for(int i = 0; i < row; i++) {
if(scoretable[i][j] > high) high = scoretable[i][j];
if(scoretable[i][j] < low) low = scoretable[i][j];
sum += scoretable[i][j];
}
statistics[0][j-1] = high;
statistics[1][j-1] = low;
statistics[2][j-1] = sum / row;
}
}
void printallscoredata(int scoretable[][ITEM], float statistics[][QUIZZES+1], int row) {
printf("学生ID ");
for(int i = 1; i < ITEM; i++) {
printf("测验 %d ", i);
}
printf("\n");
// 打印学生分数
for(int i = 0; i < row; i++) {
printf("%d ", scoretable[i][0]); // 学生ID
for(int j = 1; j < ITEM; j++) {
printf("%d ", scoretable[i][j]); // 分数
}
printf("\n");
}
// 打印统计信息
char *stat_labels[] = {"最高分", "最低分", "平均分"};
for(int i = 0; i < 3; i++) {
printf("%s ", stat_labels[i]);
for(int j = 0; j < QUIZZES; j++) {
printf("%.1f ", statistics[i][j]);
}
printf("\n");
}
}
char getgrade(float average) {
if (average >= 90) return 'A';
else if (average >= 80) return 'B';
else if (average >= 70) return 'C';
else if (average >= 60) return 'D';
else return 'F';
}
void findstudent(int scoretable[][ITEM], int row, int studentID) {
int found = 0;
for(int i = 0; i < row; i++) {
if(scoretable[i][0] == studentID) {
found = 1;
float sum = 0;
printf("学生 %d 的分数:", studentID);
for(int j = 1; j < ITEM; j++) {
printf("%d ", scoretable[i][j]);
sum += scoretable[i][j];
}
float average = sum / (ITEM - 1);
printf("\n平均分:%.2f ", average);
printf("等级:%c\n", getgrade(average));
break;
}
}
if (!found) {
printf("未找到学生ID为 %d 的学生\n", studentID);
}
}