/*输入10个学生5门课的成绩, 分别用函数实现以下功能1.计算每个学生的平均分2.计算每门课的平均分
3.找出所有50个分数最高的分数所对应的学生和课程4.计算平均方差*/
#include <stdio.h>
#include <math.h>
#define N 3
typedef struct
{
float x1;
float x2;
float x3;
float x4;
float x5;
}student;
typedef struct
{
int m;//记录分数最高的那个人
int n;//记录分数最高的课程
float s;
}re;
//计算每个学生的平均分
int fun1(student stu[10])
{
int i;
float sum = 0;
for(i = 0;i < N;i++)
{
sum = stu[i].x1 + stu[i].x2 + stu[i].x3 + stu[i].x4+ stu[i].x5;
printf("第%d个学生的平均分是:%f\n",i+1,sum/5);
}
}
//计算每门课的平均分
int fun2(student stu[10])
{
int i,j;
float sum = 0.0;
for(i = 0;i < 5;i++)
{
switch(i)
{
case 0:
{
sum = 0.0;
for(j = 0;j < N;j ++)
sum = sum + stu[j].x1;
printf("第一门课的平均分是:%f\n",sum/N);
break;
}
case 1:
{
sum = 0.0;
for(j = 0;j < N;j ++)
sum = sum + stu[j].x2;
printf("第二门课的平均分是:%f\n",sum/N);
break;
}
case 2:
{
sum = 0.0;
for(j = 0;j < N;j ++)
sum = sum + stu[j].x3;
printf("第三门课的平均分是:%f\n",sum/N);
break;
}
case 3:
{
sum = 0.0;
for(j = 0;j < N;j ++)
sum = sum + stu[j].x4;
printf("第四门课的平均分是:%f\n",sum/N);
break;
}
case 4:
{
sum = 0.0;
for(j = 0;j < N;j ++)
sum = sum + stu[j].x5;
printf("第五门课的平均分是:%f\n",sum/N);
break;
}
}
}
}
//找出所有50个分数最高的分数所对应的学生和课程
int fun3(student stu[10])
{
float max ;
int i,j;
re r[N];
for(i = 0;i < N;i++)
{
r[i].m = i + 1;//记录下最高分数的学生
r[i].n = 1;//记录下最高分数的课程
r[i].s = stu[i].x1;//记录下最高分数
max = stu[i].x1;
if(stu[i].x2 > max)
{
r[i].n = 2;
max = stu[i].x2;
r[i].s = max;
}
if(stu[i].x3 > max)
{
r[i].n = 3;
max = stu[i].x3;
r[i].s = max;
}
if(stu[i].x4 > max)
{
r[i].n = 4;
max = stu[i].x4;
r[i].s = max;
}
if(stu[i].x5 > max)
{
r[i].n = 5;
max = stu[i].x5;
r[i].s = max;
}
}
max = r[0].s;
j = 0;
for(i = 1;i < N;i++)
{
if(r[i].s > max)
j = i;
}
printf("第%d个学生的第%d个课程分数最高\n",r[j].m,r[j].n);
}
// 平均方差
int fun4(student stu[10])
{
float fj,sum,sum1 = 0.0,sum2 = 0.0;
int i;
for(i = 0;i < N;i++)
{
sum = 0.0;
sum = stu[i].x1 + stu[i].x2 + stu[i].x3 + stu[i].x4+ stu[i].x5;
sum1 = sum1 + pow(sum / 5,2);
sum2 = sum2 + sum / 5;
}
fj = sum1 / N - pow(sum2 / N,2);
printf("方差是:%f",fj);
}
int main()
{
student stu[10];
int i;
printf("请输入成绩:\n");
for(i = 0;i < N;i++)
{
scanf("%f %f %f %f %f",&stu[i].x1,&stu[i].x2,&stu[i].x3,&stu[i].x4,&stu[i].x5);
}
fun1(stu);
fun2(stu);
fun3(stu);
fun4(stu);
}
谭浩强C程序设计(第四版)p219第14题
这道题我用结构体做的,当然还可以采用二维数组
/*输入10个学生5门课的成绩, 分别用函数实现以下功能1.计算每个学生的平均分2.计算每门课的平均分
3.找出所有50个分数最高的分数所对应的学生和课程4.计算平均方差*/
#include <stdio.h>
#include <math.h>
#define N 3
#define M 5
//计算每个学生的平均分
int fun1(int a[N][M])
{
int i,j;
float sum = 0.0;
for(i = 0;i < N;i++)
{
sum = 0.0;
for(j = 0;j < M;j++)
{
sum = sum + a[i][j];
}
printf("第%d个学生的平均分是:%f\n",i+1,sum/5);
}
}
//计算每门课的平均分
int fun2(int a[N][M])
{
int i,j;
float sum;
for(i = 0;i < M;i++)
{
sum = 0.0;
for(j = 0;j < N;j++)
{
sum += a[j][i];
}
printf("第%d门课的平均分是:%f\n",i+1,sum/N);
}
}
//找出所有50个分数最高的分数所对应的学生和课程
int fun3(int a[N][M])
{
int i,j,k,l;
float max;
max = a[0][0];
k = 0;//最大值的横坐标
l = 0;//最大值的纵坐标
for(i = 0;i < N;i++)
{
for(j = 0;j < M;j++)
{
if(a[i][j] > max)
{
max = a[i][j];
k = i;
l = j;
}
}
}
printf("最高的分数的学生是学生%d和第%d课程\n",k+1,l+1);
}
//计算平均方差
int fun4(int a[N][M])
{
int i,j;
float sum,sum1,sum2,fj;
sum = sum1 = sum2 = 0.0;
for(i = 0;i < N;i++)
{
sum = 0.0;
for(j = 0;j < M;j++)
{
sum = sum + a[i][j];
}
sum1 = sum1 + pow(sum / 5,2);
sum2 = sum2 + sum / 5;
}
fj = sum1 / N - pow(sum2 / N,2);
printf("方差是:%f",fj);
}
int main()
{
int a[N][M];
int i,j;
printf("请输入成绩:\n");
for(i = 0;i < N;i++)
{
for(j = 0;j < M;j++)
{
scanf("%d",&a[i][j]);
}
}
fun1(a);
fun2(a);
fun3(a);
fun4(a);
}
二维数组更加方便