期末班级分数管理的C语言实现

题目描述:

软件工程2020级某班一共有L人,2020-2021学年第一学期有M门课考试。为了对软件工程2020级某班班级学生学习效果进行分析,需要对学生的考试成绩进行处理,分别用函数实现下列功能。(L和M分别用scanf函数输入,a[0][0]可以代表第1位学生的第1门课成绩,所有要求均在一个程序内实现。)

1.输入每个学生每门课的分数,计算每个学生的平均分。
2.计算每门课的平均分。
3.找出每门课程的最高分和最低分所对应的学生。
4.计算平均分(每位同学的平均分)方差。
方差计算公式如下(其中Xi为某一学生的平均分。)
计算方差公式

代码实现

#include <stdio.h>
//输入每名同学每科成绩,并计算平均分
void scan_child_point_ave(int a[][10],double b[],int l,int m);
//计算每门课的平均分
void object_ave_point(int a[][10],double b[],int l,int m);
//找到每科最高分和最低分以及对应同学
void max_min(int child_max[10],int child_min[10],int a[][10],int max[],int min[],int l,int m);
int comp_max(int *p,int a[][10],int i,int l);//最高分数 
int comp_min(int *q,int a[][10],int i,int l);//最低分数
void  vaf_jisuan(double *x,double a[],int l);//方差计算 

int main()
{
	int L,M;
	printf("请输入这个班人数:");scanf("%d",&L);
	printf("请输入2020-2021学年第一学期考试门数:");scanf("%d",&M);
	int child_point[100][10];
	double ave_point[100];
	printf("---------以下为每位同学每门课的分数---------\n"); 
	//输入每名同学每科成绩,并计算平均分 
	scan_child_point_ave(child_point,ave_point,L,M);
	//输出平均成绩
	printf("----------以下为每位同学的平均成绩----------\n"); 
	for(int i=0;i<L;i++)
	{
		printf("第%d位同学平均成绩为:",i+1);
		printf("%.2f\n",ave_point[i]);
	}
	//计算每门课的平均分
	printf("-----------以下为每门课的平均成绩-----------\n");
	double ave_object[10];
	object_ave_point(child_point,ave_object,L,M); 
	for(int i=0;i<M;i++)
	{
		printf("第%d门学科的平均分为:",i+1);
		printf("%.2f\n",ave_object[i]);
	 }
	 //找到每科最高分和最低分以及对应同学
	printf("---以下为每门课最高分和最低分以及对应同学---\n"); 
	 int max[10],min[10];
	 int child_max[10],child_min[10];
	 max_min(child_max,child_min,child_point,max,min,L,M);
	 for(int i=0;i<M;i++)
	{
	 	printf("第%d门考试的最高分是:%d;最低分是:%d\n",i+1,max[i],min[i]);
	 	printf("第%d门考试最高分是第%d位同学,最低分是第%d位同学。\n",i+1,child_max[i],child_min[i]);
	}
	//计算平均分的方差
	printf("------------以下为平均分的方差-------------\n");
	double vaf;
	double *x;
	x=&vaf;
	vaf_jisuan(x,ave_point,L); 
	printf("平均分的方差为%.2f\n",vaf);
	return 0;
} 
//以下为本次使用到的自定义函数
void scan_child_point_ave(int a[][10],double b[],int l,int m)
{
	double sum[100]={0};
	for(int i=0;i<l;i++)
		{
			printf("请输入%d位同学的成绩:",i+1);
			for(int j=0;j<m;j++){
				scanf("%d",&a[i][j]);
				sum[i]+=a[i][j];
			}
			b[i]=sum[i]/m;
		 }
}
void object_ave_point(int a[][10],double b[],int l,int m)
{
	int sum[10]={0};
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<l;j++)
		{
			sum[i]+=a[j][i];
		}
		b[i]=sum[i]/l;
	}
}
void max_min(int child_max[10],int child_min[10],int a[][10],int max[],int min[],int l,int m)
{
	for(int i=0;i<m;i++){
		int *p;
		p=&child_max[i];
		int *q;
		q=&child_min[i];
		max[i]=comp_max(p,a,i,l);
		min[i]=comp_min(q,a,i,l);
	}
}
int comp_max(int *p,int a[][10],int i,int l)
{
	int max=a[0][i];
	*p=1;
	for(int j=1;j<l;j++)
	{
		if(max<a[j][i]){
			max=a[j][i];
			*p=j+1;
		}
	}
	return max;
}
int comp_min(int *q,int a[][10],int i,int l)
{
	int min=a[0][i];
	*q=1;
	for(int j=1;j<l;j++)
	{
		if(min>a[j][i]){
			min=a[j][i];
			*q=j+1;
		}
	}
	return min;
}
void  vaf_jisuan(double *x,double a[],int l)
{
	double sum1=0,sum2=0;
	for(int i=0;i<l;i++)
	{
		sum1+=a[i]*a[i];
		sum2+=a[i];
	}
	*x=1.0*sum1/l-(sum2/l);
}

运行测试结果如下

在这里插入图片描述

当然,此题还可以对考试科目和同学进行命名,大家有兴趣可以尝试。欢迎大家提出自己的意见,感谢点赞、收藏、转发。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值