题目要求:
自定义函数,实现输入i个学生的j门课的成绩,求每门课的平均分、最高分、最低分,并对学生进行排名。
先看一下运行结果
要实现这样的结果,我们需要定义二维数组用于储存每个学生的各科成绩,定义一维数组来储存单个学生的总分。通过自定义函数来求最大,最小和平均值,以及通过排序算法对学生成绩进行降序排序。
废话不多说,直接看代码(如果程序报错,把所有的scanf_s改为scanf即可)
#include<stdio.h>
void Average(int a, int b, double score[100][100])
{
int i, j;
double sum = 0;
for (j = 0; j < b; j++)
{
sum = 0;
for (i = 0; i < a; i++)
{
sum = sum + score[i][j];
}
sum = sum / a;
printf("%.2f ", sum);
}
}
void Max(int a, int b, double score[100][100])
{
int i, j;
double sum = 0;
for (j = 0; j < b; j++)
{
sum = 0;
for (i = 0; i < a; i++)
{
if (sum < score[i][j])
{
sum = score[i][j];
}
}
printf("%.2f ", sum);
}
}
void Min(int a, int b, double score[100][100])
{
int i, j;
double sum = 0;
for (j = 0; j < b; j++)
{
sum = score[0][j];
for (i = 0; i < a; i++)
{
if (sum > score[i][j])
{
sum = score[i][j];
}
}
printf("%.2f ", sum);
}
}
void Sum(int a, int b, double score[100][100], double student[100], int name[100])
{
int i, j;
double sum = 0;
for (i = 0; i < a; i++)
{
sum = 0;
for (j = 0; j < b; j++)
{
sum = sum + score[i][j];
}
student[i] = sum;
name[i] = i + 1;
}
}
void sort(int a, int b, double score[100][100], double student[100], int name[100])
{
int i, j, f;
double t;
for (i = 0; i < a; i++)
{
for (j = i + 1; j < a; j++)
{
if (student[i] < student[j])
{
t = student[i]; student[i] = student[j]; student[j] = t;
t = name[i]; name[i] = name[j]; name[j] = t;
}
}
}
for (f = 0; f < a; f++)
{
printf("%-8d学生%-6d%.2f\n", f + 1, name[f], student[f]);
}
}
int main()
{
int a, b, i, j, name[100]{}; //name为学生编号
double score[100][100]{}, student[100]{}; //student用于储存每个学生总分
printf("Input Part\n");
printf("Pleasse input the number of students:\n");
scanf_s("%d", &a); //a为学生人数
printf("Pleasse input the number of courses:\n");
scanf_s("%d", &b); //b为课程数
printf("Pleasse input the score:\n");
for (i = 0; i < a; i++) //i为行
{
for (j = 0; j < b; j++) //j为列
{
scanf_s("%lf", &score[i][j]);
}
}
printf("\nOutput Part\n");
printf("平均分:");
Average(a, b, score);
printf("\n最高分:");
Max(a, b, score);
printf("\n最低分:");
Min(a, b, score);
printf("\n\n排名 姓名 分数\n");
Sum(a, b, score, student, name);
sort(a, b, score, student, name);
return 0;
}
如果程序报错,把所有的scanf_s改为scanf即可。
希望能对你们有帮助哦。>_<