//第三章的第15题,一个班级四个学生,5门课程
#include<stdio.h>
#include<math.h>
void aver(int (*p)[5])
{
int i=0,j;
float ave;
float sum=0;
for(j=0;j<5;j++)
{
sum+=*(*(p+i)+j);
}
ave=sum/4;//总共有四个学生
printf("第一门课的平均分是:%f\n",ave);
}
void oup(int (*p)[5],int *x)
{
int n=0;//记录不及格的科目数是多少
int i,j,t;
float ave;
float sum=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(*(*(p+i)+j)<60)
n++;
if(n>=2)
{
printf("这个学生的学号是:%d\n",*(x+i));
for(t=i,j=0;j<5;j++)
{
printf("学号为%d的学生的各科成绩为%d\t",*(x+i),*(*(p+i)+j));
sum+=*(*(p+i)+j);
ave=sum/5;
}
printf("输出第%d学生的平均成绩为%f\n",*(x+i),ave);
}
}
}
}
//以上两个函数的实现均是正确的
//再来看下面这个函数的实现是有问题的
void abov(int (*p)[5],int *x)
{
int i,j,k;
float ave,sum=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
sum+=*(*(p+i)+j);
}
ave=sum/5;
// for(k=0;k<5;k++)
if(ave>90)
printf("%d学号的学生\n",*(x+i));
}
//平均数大于90或者没门课程都大于85,
//或者的情况没有考虑
}
int main()
{
int a[4][5]={{35,56,67,78,98},{45,55,67,77,88},{34,45,56,67,78},{67,88,89,90,77}};
//每个学生的五个课程是
int b[4]={1,2,3,4};//学生的学号是这么多
// float *p(float);//定义一个指针函数
aver(a);
oup(a,b);
abov(a,b);
return 0;
}
自我感觉实现的第三个小题有点问题,比如找出所有科目的成绩均大于85或者是平均成绩在90以上的学生的学号是多少?我目前只考虑了一种平均成绩大于90的情况
本题为谭浩强第四版第八章的第15题
有很多不足的地方,大家感兴趣的话可以帮忙指正一下。