用C语言编程,输入10个学生5门课的成绩,分别用函数计算每个学生的平均分,每门课的平均分,找出最高分对应的学生和课程,计算平均分方差。然后用函数重载的方法,让计算方差的函数支持不同的数据类型;然后用函数模板的方法,实现排序函数,并进行调用
时间: 2024-02-18 21:04:32 浏览: 65
好的,我会尽力回答你的问题。以下是对你的问题的回答:
首先,为了解决这个问题,我们需要编写几个函数。下面是这些函数的详细说明:
1. 输入函数
这个函数用来输入学生和成绩。它将提示用户输入学生和成绩,然后将这些值保存在一个数组中。
2. 计算学生平均分函数
这个函数计算每个学生的平均分,并将结果保存在一个数组中。
3. 计算每门课的平均分函数
这个函数计算每门课的平均分,并将结果保存在一个数组中。
4. 找到最高分的学生和课程函数
这个函数找到最高分对应的学生和课程,并返回这些值。
5. 计算平均分方差的函数
这个函数用于计算平均分的方差。它可以支持不同的数据类型,使用函数重载的方法来实现。
6. 排序函数
这个函数用于排序。它使用函数模板的方法来实现,可以排序不同类型的数组。
下面是这些函数的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_STUDENT 10
#define MAX_COURSE 5
// 输入函数
void input_data(int data[][MAX_COURSE], int n, int m) {
printf("请输入%d个学生的%d门课的成绩:\n", n, m);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的成绩:", i + 1);
for (int j = 0; j < m; j++) {
scanf("%d", &data[i][j]);
}
}
}
// 计算学生平均分函数
void calc_student_avg(int data[][MAX_COURSE], int n, int m, double avg[]) {
for (int i = 0; i < n; i++) {
double sum = 0;
for (int j = 0; j < m; j++) {
sum += data[i][j];
}
avg[i] = sum / m;
}
}
// 计算每门课的平均分函数
void calc_course_avg(int data[][MAX_COURSE], int n, int m, double avg[]) {
for (int i = 0; i < m; i++) {
double sum = 0;
for (int j = 0; j < n; j++) {
sum += data[j][i];
}
avg[i] = sum / n;
}
}
// 找到最高分的学生和课程函数
void find_max(int data[][MAX_COURSE], int n, int m, int *row, int *col) {
int max = data[0][0];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (data[i][j] > max) {
max = data[i][j];
*row = i;
*col = j;
}
}
}
}
// 计算平均分方差的函数
double calc_variance(int data[], int n) {
double sum = 0;
double avg = 0;
for (int i = 0; i < n; i++) {
avg += data[i];
}
avg /= n;
for (int i = 0; i < n; i++) {
sum += (data[i] - avg) * (data[i] - avg);
}
return sum / n;
}
double calc_variance(double data[], int n) {
double sum = 0;
double avg = 0;
for (int i = 0; i < n; i++) {
avg += data[i];
}
avg /= n;
for (int i = 0; i < n; i++) {
sum += (data[i] - avg) * (data[i] - avg);
}
return sum / n;
}
// 排序函数
template <typename T>
void sort_array(T data[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (data[i] > data[j]) {
T temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
```
然后我们可以在主函数中调用这些函数来完成我们的任务。下面是主函数的代码实现:
```c
int main() {
int data[MAX_STUDENT][MAX_COURSE];
double student_avg[MAX_STUDENT];
double course_avg[MAX_COURSE];
int row, col;
double variance;
input_data(data, MAX_STUDENT, MAX_COURSE);
calc_student_avg(data, MAX_STUDENT, MAX_COURSE, student_avg);
calc_course_avg(data, MAX_STUDENT, MAX_COURSE, course_avg);
find_max(data, MAX_STUDENT, MAX_COURSE, &row, &col);
variance = calc_variance(student_avg, MAX_STUDENT);
printf("每个学生的平均分:\n");
for (int i = 0; i < MAX_STUDENT; i++) {
printf("%.2lf ", student_avg[i]);
}
printf("\n");
printf("每门课的平均分:\n");
for (int i = 0; i < MAX_COURSE; i++) {
printf("%.2lf ", course_avg[i]);
}
printf("\n");
printf("最高分对应的学生和课程:第%d个学生,第%d门课\n", row + 1, col + 1);
printf("平均分方差:%.2lf\n", variance);
int arr[] = { 5, 3, 8, 1, 9, 2, 7, 4, 6 };
double arr2[] = { 5.3, 3.1, 8.5, 1.9, 9.2, 2.7, 7.4, 4.6, 6.8 };
sort_array(arr, sizeof(arr) / sizeof(int));
sort_array(arr2, sizeof(arr2) / sizeof(double));
printf("排序后的数组:\n");
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
printf("%d ", arr[i]);
}
printf("\n");
for (int i = 0; i < sizeof(arr2) / sizeof(double); i++) {
printf("%.2lf ", arr2[i]);
}
printf("\n");
return 0;
}
```
这样,我们就完成了这个问题的解决。
阅读全文