(C语言)输入10个学生5门课的成绩, 分别用函数实现以下功能1.计算每个学生的平均分2.计算每门课的平均分3.找出50个分数最高的分数所对应的学生和课程4.计算平均方差

输入10个学生5门课的成绩, 分别用函数实现以下功能1.计算每个学生的平均分2.计算每门课的平均分3.找出50个分数最高的分数所对应的学生和课程4.计算平均方差

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>
void stu_aver(double(*a)[6]) {//计算学生平均成绩
	double sum;
	int i, j;
	for (i = 0; i < 10; ++i) {
		sum = 0.0;
		for (j = 0; j < 5; ++j) {
			sum += a[i][j];
		}
		a[i][5] = sum / 5;
	}
}
void score_aver(double(*a)[6]) {//科目平均成绩
	double sum;
	int i, j;
	for (i = 0; i < 5; ++i) {
		sum = 0.0;
		for (j = 0; j < 10; ++j) {
			sum += a[j][i];
		}
		a[10][i] = sum / 10;
	}
}
void top_score(char(*c)[20], char(*s)[20], double(*a)[6]) {//科目最高
	int row, col, i, j, flag;
	double top;
	printf("\n单科最高分\n");
	printf("科目\t分数\t学生\n");
	for (i = 0; i < 5; ++i) {
		row = 0;
		col = i;
		top = a[0][i];
		flag = 0;
		for (j = 0; j < 10; ++j) {
			if (a[j][i] > top) {
				top = a[j][i];
				row = j;
			}
		}
		printf("%s\t%.2f\t%s\t", c[i], top, s[row]);
		for (j = 0; j < 10; ++j) {
			if (a[j][i] == top) {
				if (flag > 1) {
					printf("%s\t", s[j]);
				}
				++flag;
			}
		}
		putchar('\n');
	}
}
double viriance(double(*a)[6]) {//方差
	double x1 = 0;
	double x2 = 0;
	int i;
	for (i = 0; i < 10; ++i) {
		x1 += a[i][6];
		x2 += pow(a[i][6], 2);
	}
	return x2 / 10 - pow(x1 / 10, 2);
}
void input(char(*c)[20], char(*s)[20], double(*a)[6]) {//输入
	int i, j;
	for (i = 0; i < 5; ++i) {
		printf("请输入第%d门课的课程名\n", i + 1);
		scanf("%s", c[i]);
	}
	for (i = 0; i < 10; ++i) {
		printf("请输入第%d名学生的姓名\n", i + 1);
		scanf("%s", s[i]);
		for (j = 0; j < 5; ++j) {
			printf("请输入这名学生的成绩\n");
			scanf("%lf", &a[i][j]);
		}
	}
	system("cls");
}
void print(char(*c)[20], char(*s)[20], double(*a)[6]) {//打印
	int i, j;
	putchar('\t');
	for (i = 0; i < 5; ++i) {
		printf("%s\t", c[i]);
	}
	printf("平均成绩");
	for (i = 0; i < 10; ++i) {
		printf("\n%s\t", s[i]);
		for (j = 0; j < 6; ++j) {
			printf("%.2f\t", a[i][j]);
		}
	}
	printf("\n\n课程\n平均分\t");
	for (j = 0; j < 5; ++j) {
		printf("%.2f\t", a[i][j]);
	}
	putchar('\n');
}
int main() {
	char c[5][20];//课程名字
	char s[10][20];//学生姓名
	double a[11][6];//学生成绩
	input(c, s, a);//输入
	stu_aver(a);//学生平均成绩
	score_aver(a);//课程平均成绩
	print(c, s, a);//打印
	top_score(c, s, a);//课程最高分
	printf("方差为:%f\n", viriance(a));//方差
	system("pause");
	return 0;
}

在这里插入图片描述

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值