2301_80154085 2023-11-07 20:06 采纳率: 73.7%
浏览 11
已结题

如图所示 二维数组到底该怎么用?

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

img


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

img

  • 写回答

14条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-07 20:06
    关注

    基于Monster 组和AIGC的调写:若有帮助,还望采纳~~:

    • 这个程序会用到二维数组来存储和处理数据。每行代表一个学生,列分别存储学号和他们的五次测验成绩。一个基本的结构设计,然后是实现的步骤。
    1. 定义变量:

      • 一个二维数组 int scoretable[40][6]; // 假定有40个学生,每个学生有一个学号和5个成绩。
      • ITEM 定义为 6,第一项用于存储学号,其余五项用于存储分数。
    2. 读入数据:

      • void genernddata(int scoretable[][ITEM], int row, int col);
        • 这个函数的作用是生成随机的学号和成绩数据填充二维数组 scoretable
    3. 统计处理数据:

      • void calstatisticdata(float statistics[][ITEM], const int row, const int col);
        • 这个函数用来计算统计数据,比如每次测验的最高分、最低分和平均分。
    4. 打印数据:

      • 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; // 生成一个介于10009999之间的学生ID
            for(int j = 1; j < ITEM; j++) {
                scoretable[i][j] = rand() % 101; // 生成介于0100之间的分数
            }
        }
    }
    
    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);
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(13条)

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月7日