C语言练习:输入5个学生3门课程的成绩,分别用函数实现以下功能:(1)计算每个学生的平均分。(2)计算每门课程的平均分。(3)求出15个成绩中最高的分数和所对应的学生和课程。

#include<stdio.h>
#define num_sub  3
#define num_stu  5
int main()
{
	int i=0,j = 0;
	double grade[num_stu][num_sub] = { 0 };
	double Ave_student(double a[num_stu][num_sub], int count1);
	double Ave_subject(double a[num_stu][num_sub], int count2);
	void max(double a[num_stu][num_sub]);//声明函数
	for (i = 0; i < num_stu; i++)
	{
		printf("请输入第%d个学生语数外成绩\n", i + 1);
		for (j = 0; j < num_sub; j++)
			scanf("%lf", &grade[i][j]);
	}//输入
	for (i = 0; i < num_stu; i++)
	{
		printf("%d号学生的平均成绩为%.2lf\n", i + 1, Ave_student(grade , i));
	}
	for ( i = 0; i < num_sub; i++)
	{
		switch (i)
		{
		case(0):printf("语文的平均成绩为%.2lf\n", Ave_subject(grade , i)); break;
		case(1):printf("数学的平均成绩为%.2lf\n", Ave_subject(grade , i)); break;
		case(2):printf("英语的平均成绩为%.2lf\n", Ave_subject(grade , i)); break;

		default:
			break;
		}
	}
	max(grade);
	return 0;
}
double Ave_student(double a[num_stu][num_sub],int count1)//max(int x,int y)
{
	int i = 0;
	double n = 0, x = 0;
	for (i = 0; i < num_sub; i++)
	{
		n += a[count1][i];
	}
	x = n / num_sub;
	return x;
}
double Ave_subject(double a[num_stu][num_sub], int count2)
{
	int i = 0;
	double n = 0;
	for (i = 0; i < num_stu; i++)
	{
		n += a[i][count2];
	}
	return(n / num_stu);
}
void max(double a[num_stu][num_sub])
{
	int i = 0, j = 0, x = 0, y = 0;
	double n = 0;
	for (i = 0; i < num_stu; i++)
	{
		for (j = 0; j < num_sub; j++)
		{
			if (n < a[i][j])
			{
				n = a[i][j];
				x = i;
				y = j;
			}	
		}
	}
	printf("15个成绩中最高的分数为%.2lf,是", n);
	switch (x)
	{
	case(0):printf("一号同学的"); break;
	case(1):printf("二号同学的"); break;
	case(2):printf("三号同学的"); break;
	case(3):printf("四号同学的"); break;
	case(4):printf("五号同学的"); break;
	default:
		break;
	}
	switch (y)
	{
	case(0):printf("语文\n");
	case(1):printf("数学\n");
	case(2):printf("英语\n");
	default:
		break;
	}
}

思路解析:通过3*5二维数组grade存储五位学生的三门科目成绩,在定义三个函数Ave_student、Ave_subject、max来计算学生以及科目的平均值,其中max中需要返回的参数过多,有最高的成绩以及所对应的学生和科目,但只用使用max一次,故把max定义为void。为提高程序的复用性,把学生以及科目的数量用#define进行宏定义

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值