编写程序处理M个学生N门课程的成绩(M,N定义为符号常量),分别用函数实现以下功能:

编写程序处理M个学生N门课程的成绩(M,N定义为符号常量),分别用函数实现以下功能:
(1)从键盘输入学号、姓名、课程名称、及各科成绩,并保存到文本文件“inputdata.txt”中;
(2)计算每个学生的平均分;
(3)计算每门课的平均分;
(4)对成绩信息按学生平均分进行排序(降序,最高分排第1位)。
(5)将已排好序的成绩信息输出到文本文件“outputdata.txt”中,包括学号、姓名、课程名称、及各科成绩(注意输出信息对齐),参考效果如下:
 

要求:
1、    相关变量及数组在主函数中定义; 
2、    用结构体类型的指针变量完成相应功能;

之前写了一个,稍微有点差别,你自己改改,改不好在私信我

#include <stdio.h>
struct Student
{
	int nmb;
	char name[20];
	int score[3];
};
//录入数据
void inputinfo(struct Student a[])
{
	int i;
	printf("输入10个学生的学号,姓名,三门课的成绩:\n");
	for (i = 0;i< 10;i++)
	{
		scanf("%d %s %d %d %d",&a[i].nmb,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2]);
	}
}
//科目成绩最高的学生信息
void maxinfo(struct Student a[])
{
	int i;
	int max1,max2,max3;
	int index1 = 0,index2 = 0,index3 = 0;
	max1 = a[0].score[0];
	max2 = a[0].score[1];
	max3 = a[0].score[2];
	for (i = 1;i<10;i++)
	{
		if (a[i].score[0] > max1)
		{
			max1 = a[i].score[0];
			index1 = i;
		}

		if (a[i].score[1] > max2)
		{
			max2 = a[i].score[1];
			index2 = i;
		}

		if (a[i].score[2] > max3)
		{
			max3 = a[i].score[2];
			index3 = i;
		}
	}

	printf("科目1成绩最高的学生:%d\t%s\t%d\n",a[index1].nmb,a[index1].name,a[index1].score[0]);
	printf("科目2成绩最高的学生:%d\t%s\t%d\n",a[index2].nmb,a[index2].name,a[index2].score[1]);
	printf("科目3成绩最高的学生:%d\t%s\t%d\n",a[index3].nmb,a[index3].name,a[index3].score[2]);

}
//平均成绩最高的学生信息
void avginfo(struct Student a[])
{
	int i = 0;
	float avg = 0.0;
	float maxavg = (a[0].score[0] + a[0].score[1]+a[0].score[2])/3.0;
	int index =0;
	for (i = 1;i<10;i++)
	{
		avg = (a[i].score[0] + a[i].score[1]+a[i].score[2])/3.0;
		if (avg > maxavg)
		{
			maxavg = avg;
			index = i;
		}
	}
	printf("平均分最高的学生:%d\t%s\t%.2f\n",a[index].nmb,a[index].name,maxavg);
}

//按平均分从高到低排序
void Sort(struct Student a[])
{
	int i,j;
	float avg1,avg2;
	struct Student tmp;
	for (i = 0;i< 9;i++)
	{
		for (j = 0;j< 9-i;j++)
		{
			avg1 = (a[j].score[0] + a[j].score[1]+a[j].score[2])/3.0;
			avg2 = (a[j+1].score[0] + a[j+1].score[1]+a[j+1].score[2])/3.0;
			if(avg1 < avg2)
			{
				tmp = a[j];
				a[j] = a[j+1];
				a[j+1] = tmp;
			}
		}
	}
	printf("number	name	math	Chinese	English	average\n");
	for (i = 0;i<10;i++)
	{
		avg1 = (a[i].score[0] + a[i].score[1]+a[i].score[2])/3.0;
		printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",a[i].nmb,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2],avg1);
	}
}

int main()
{
	struct Student a[10];
	inputinfo(a);
	maxinfo(a);
	avginfo(a);
	Sort(a);
	return 0;
}

 

你这是要求c还是c++没看懂