📅  最后修改于: 2023-12-03 15:10:14.282000             🧑  作者: Mango
这是一道考试题目,考察的是程序员对于算法和数据结构的理解和运用能力。该题目需要考生编写程序,实现一个算法,解决给定问题。
有 $ 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_scores
和 course_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
函数动态申请了两个一维数组,分别用于记录每个学生和每门课程的总分。在遍历二维数组时,我们累加每名学生和每门课程的总分。最后,我们遍历两个一维数组,输出每名学生和每门课程的总分,并及时释放动态申请的内存空间。