这是一道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加油吖!