十个学生五门成绩

发布于 2023-05-11  123 次阅读


题目

  1. 各个学生的平均分
  2. 各个课程的平均分
  3. 哪个学生哪一门分数最高
  4. 学生平均分方差

思考

  • 当作表格来制作,也就是10*5的数组存储各个学生各门成绩
  • 再多加一行当作课程平均分,多加一列当作学生平均分
  • 在角底存入最高分数,至于查找最高分数对应的学生和课程可以在主函数对应查找

以下代码花了一段时间,中间数组有点把我搞懵了,不过问题不大

最开始反差出不来,再仔细看原来是我的方差最后设置为int类型导致失去精度了... ...

不过改完还是觉得方差比较离谱,哎哎哎,算了,不管了,开摆!!!

代码

#include<stdio.h>

void self_aver(double a[11][6])
{
	int i = 0, j = 0;
	for (i = 0; i < 10; i++)
		for (j = 0; j < 5; j++)
			a[i][5] = a[i][5] + a[i][j] / 5;
}

void class_aver(double a[11][6])
{
	int i = 0, j = 0;
	for (j = 0; j < 5; j++)
		for (i = 0; i < 10; i++)
			a[10][j] = a[10][j] + a[i][j] / 10;
}

void max_score(double a[11][6])
{
	int i = 0, j = 0;
	for (i = 0; i < 10; i++)
		for (j = 0; j < 5; j++)
		{
			a[10][5] = (a[10][5] > a[i][j]) ? a[10][5] : a[i][j];
		}
}

double fancha(double a[11][6])
{
	int i = 0;
	double n = 0, m = 0;
	for (i = 0; i < 10; i++)
	{
		n = (a[i][5] * a[i][5]) / 10;
		m = m + a[i][5];
	}
	n = n - (m / 5) * (m / 5);
	return (n);
}

int main()
{
	int i = 0, j = 0;
	double a[11][6] = { 0 };
	printf("请输入十名学生的各五门成绩:\n");

	for (i = 0; i < 10; i++)
		{
			printf("第%d号学生的五门成绩分别为(用空格隔开):\n", i + 1);
			scanf("%lf %lf %lf %lf %lf", &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
		}

	self_aver(a);
	printf("各个学生自己的平均分为:\n");
	for (i = 0; i < 10; i++)
		printf("%d号学生的平均分为:%lf\n", i + 1, a[i][5]);

	class_aver(a);
	printf("\n\n各个课程平均分分别为:\n");
	for (i = 0; i < 5; i++)
		printf("第%d门课程所有学生平均分为:%lf\n", i + 1, a[10][i]);

	max_score(a);
	for (i = 0; i < 10; i++)
		for (j = 0; j < 5; j++)
		{
			if (a[i][j] == a[10][5])
				printf("第%d号学生第%d门课分数最高为%lf\n", i + 1, j + 1, a[10][5]);
		}

	double f = fancha(a);
	printf("学生平均分方差为:%lf\n", f);
	return 0;
}