实验内容:输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出最高的分数所对应的学生和课程。
实验要求: 输入事先已编好的程序,并运行该程序。分析运行结果是否正确。
1.0
#include<stdio.h>
#define N 10
#define M 5
float score[N][M]; //全局数组
float a_stu[N],a_cour[M]; //全局数组
int r,c; //全局变量
int main()
{
int i,j;
float h;
float highest(); //函数声明
void input_stu(void);
void aver_stu(void);
void aver_cour(void);
input_stu(); //函数调用
aver_stu();
aver_cour();
printf("\n NO. cour1 cour2 cour3 cour4 cour5 aver\n");
for(i=0;i<N;i++)
{
printf("\n NO.%2d",i+1); //输出一个学生号
for(j=0;j<M;j++)
printf("%8.2f",score[i][j]); //输出一个学生各门课的成绩
printf("%8.2f",a_stu[i]); //输出一个学生的平均成绩
}
printf("\naverage:"); //输出5门课的平均成绩
for(j=0;j<M;j++)
printf("%8.2f",a_cour[j]);
printf("\n");
h=highest(); //调用函数,求最高分和学生数据
printf("highest:%7.2f NO.%2d course%2d\n",h,r,c);//输出最高分和学生数据
return 0;
}
void input_stu(void) //输入学生成绩的函数
{
int i,j;
for(i=0;i<N;i++)
{
printf("\ninput score of student%2d:\n",i+1);//学生号从一开始
for(j=0;j<M;j++)
scanf("%f",&score[i][j]);
}
}
void aver_stu(void) //计算学生的平均成绩
{
int i,j;
float s;
for(i=0;i<N;i++)
{
for(j=0,s=0;j<M;j++)
s+=score[i][j];
//s与score[i][j]相加并赋给s,相当于s=s+score
a_stu[i]=s/5.0;
}
}
void aver_cour(void) //计算课程平均成绩
{
int i,j;
float s;
for(j=0;j<M;j++)
{
s=0;
for(i=0;i<N;i++)
s+=score[i][j];
a_cour[j]=s/(float)N;
}
}
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; //学生号r从1开始,数组行号i从0开始
c=j+1;
}
return(high);
}
2.0
#include<stdio.h>
#define N 10
#define M 5
float score[N][M]; //全局数组
float a_stu[N],a_cour[M]; //全局数组
int r,c; //全局变量
int main()
{
int i,j;
float h;
float highest(); //函数声明
float s_var(void); //求方差
void input_stu(void);
void aver_stu(void);
void aver_cour(void);
input_stu(); //函数调用
aver_stu();
aver_cour();
printf("\n NO. cour1 cour2 cour3 cour4 cour5 aver\n");
for(i=0;i<N;i++)
{
printf("\n NO.%2d",i+1); //输出一个学生号
for(j=0;j<M;j++)
printf("%8.2f",score[i][j]); //输出一个学生各门课的成绩
printf("%8.2f",a_stu[i]); //输出一个学生的平均成绩
}
printf("\naverage:"); //输出5门课的平均成绩
for(j=0;j<M;j++)
printf("%8.2f",a_cour[j]);
printf("\n");
h=highest(); //调用函数,求最高分和学生数据
printf("highest:%7.2f NO.%2d course%2d\n",h,r,c);//输出最高分和学生数据
printf("variance %8.2f\n",s_var());//调用函数,计算并输出方差
return 0;
}
void input_stu(void) //输入学生成绩的函数
{
int i,j;
for(i=0;i<N;i++)
{
printf("\ninput score of student%2d:\n",i+1);//学生号从一开始
for(j=0;j<M;j++)
scanf("%f",&score[i][j]);
}
}
void aver_stu(void) //计算学生的平均成绩
{
int i,j;
float s;
for(i=0;i<N;i++)
{
for(j=0,s=0;j<M;j++)
s+=score[i][j];
//s与score[i][j]相加并赋给s,相当于s=s+score
a_stu[i]=s/5.0;
}
}
void aver_cour(void) //计算课程平均成绩
{
int i,j;
float s;
for(j=0;j<M;j++)
{
s=0;
for(i=0;i<N;i++)
s+=score[i][j];
a_cour[j]=s/(float)N;
}
}
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; //学生号r从1开始,数组行号i从0开始
c=j+1;
}
return(high);
}
float s_var(void) //求方差
{
int i;
float sumx,sumxn;
sumx=0.0;
sumxn=0.0;
for(i=0;i<N;i++)
{
sumx+=a_stu[i]*a_stu[i];
sumxn+=a_stu[i];
}
return(sumx/N-(sumxn/N)*(sumxn/N));
}