C语言-->调用函数计算学生成绩平均分、课程平均分等。

这是一道c语言的课后题,题目如下:

        输入10个学生5分课程的成绩,分别用函数实现下列功能:

                (1)计算每个学生的平均分;

                (2)计算每门课的平均分;

                (3)找出所有50个分数中最高的分数对应的学生和课程;

                (4)计算平均分方差。

//十个学生五门课的成绩。用函数实现一下: 
#include <stdio.h>
#define N 10
#define M 5
float score[N][M];
float student[N],court[M];
int r,c;
int main(){
	int i,j;
	float h;
	void stu_aver(void);//学生平均成绩 
	void cour_aver(void);//每门课平均分 
	float highest();//最高分 
	float fc(void);//方差
	for (i=0;i<N;i++){
		printf("请输入学生成绩%2d:\n",i+1);
		for(j=0;j<M;j++){
			scanf("%f",&score[i][j]);
		}
	}
	stu_aver();
	cour_aver();
	printf("\n 学号和课程  课程1  课程2  课程3  课程4  课程5  平均分\n");
	for(i=0;i<N;i++){
		printf("\n NO %d",i+1);
		for(j=0;j<M;j++){
			printf("%8.2f",score[i][j]);
		} 
		printf("%8.2f",student[i]);
	}
	printf("\n五门课得分均成绩为:");
	for(j=0;j<M;j++){
		printf("%8.2f\n",court[j]);
	}
	printf("\n");
	h=highest();
	printf("最高分属于%7.2f  学号NO. %2d  课程%2d\n",h,r,c);
	printf("平均分方差为:%8.2f\n",fc()); 
	return 0;
}
//1.计算学生的平均成绩
void stu_aver(void){
	int i,j;
	float s;
	for(i=0;i<N;i++){
		for(j=0,s=0;j<M;j++){
			s+=score[i][j];
		}
		student[i]=s/5;
	}
}
//2.计算每门课的平均分
void cour_aver(void){
	int i,j;
	float s;
	for(j=0;j<M;j++){
		s=0;
		for(i=0;i<N;i++){
			s+=score[i][j];
		}
		court[j]=s/(float)N;
	}
}
//3.最高分对应的学生和课程
float highest(){
	float high;
	int i,j;
	high=score[0][0];
	for(i=0;i<N;i++){
		for(j=0;j<M;j++){
			if(score[i][j]>high){
				high=score[i][j];
				r=i+1;
				c=j+1;
			}
		}
	}
	return(high);
}
//4.计算平均分方差 
float fc(void){
	int i;
	float sum1,sum2;
	sum1=0;
	sum2=0;
	for(i=0;i<N;i++){
		sum1+=student[i]*student[i];
		sum2+=student[i];
	}
	return(sum1/N-(sum2/N)*(sum2/N));
}

在实际的代码编写过程中遇到了很多问题

        例如:计算学生五门课的平均分时,从第二个同学开始,计算出的平均分成绩包括前面的那个同学的成绩,发现是在函数循环时,没有重新五门课程的分数之和从0开始++,导致,分数之和已知从第一个同学的分数开始++。

可能还是会出现各种各样的其他问题,但是总还是会解决的,所以,坚持着往下走吧,活着就有希望呀!ljr加油吖!

  • 8
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值