📌  相关文章
📜  教资会网络 | UGC NET CS 2014 年 12 月 – II |问题 25(1)

📅  最后修改于: 2023-12-03 15:10:14.282000             🧑  作者: Mango

UGC NET CS 2014 年 12 月 – II |问题 25

这是一道考试题目,考察的是程序员对于算法和数据结构的理解和运用能力。该题目需要考生编写程序,实现一个算法,解决给定问题。

题目描述

有 $ n $ 个学生和 $ m $ 门课程,每门课程的成绩为 0 到 100 分之间的整数。现在有一个数据集,其中包含每个学生在每门课程中的成绩。现在需要计算每个学生的总分以及每门课程的总分。

请编写一个函数 calculate_scores(int n, int m, int** scores)

void calculate_scores(int n, int m, int** scores);

其中,n 表示学生数量,m 表示课程数量,scores 是一个二维数组,包含每个学生在每门课程中的成绩,scores[i][j] 表示第 $ i $ 个学生在第 $ j $ 门课程中的成绩。

在该函数中,需要按照下面要求计算每个学生和每门课程的总分,并输出结果。

  • 每名学生的总分等于该学生在每门课程中的成绩之和。
  • 每门课程的总分等于所有学生在该门课程中的成绩之和。

函数输出格式为:

每名学生的总分为:xxx
每门课程的总分为:xxx

其中,"xxx" 为相应的总分。

解题思路

该题需要计算每个学生和每门课程的总分,因此我们需要以学生为纬度,以课程为纬度,对二维数组进行遍历,计算总分。具体来说,我们可以先用两个一维数组 student_scorescourse_scores 分别记录每个学生和每门课程的总分,然后在遍历二维数组时进行累加。

在计算完总分后,我们只需要遍历两个一维数组,输出每名学生和每门课程的总分即可。

代码实现
void calculate_scores(int n, int m, int** scores) {
    int *student_scores = calloc(n, sizeof(int));
    int *course_scores = calloc(m, sizeof(int));

    // 计算每名学生和每门课程的总分
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            student_scores[i] += scores[i][j];
            course_scores[j] += scores[i][j];
        }
    }

    // 输出结果
    for (int i = 0; i < n; i++) {
        printf("每名学生的总分为:%d\n", student_scores[i]);
    }
    for (int i = 0; i < m; i++) {
        printf("每门课程的总分为:%d\n", course_scores[i]);
    }

    free(student_scores);
    free(course_scores);
}

上述代码中,我们使用了 calloc 函数动态申请了两个一维数组,分别用于记录每个学生和每门课程的总分。在遍历二维数组时,我们累加每名学生和每门课程的总分。最后,我们遍历两个一维数组,输出每名学生和每门课程的总分,并及时释放动态申请的内存空间。