指针,有一个班4个学生,5门课程
有一个班4个学生,5门课程。①求第1门课程的平均分;②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。用float *std_average(float *p),我的值传不出去,这是为什么?
#include<stdio.h>
#include<math.h>
int main()
{
void sub_average(float *p);
//float *std_average(float *p);
void std_fail(float (*p)[5]);
void std_good(float *p);
float a[4][5]={{80,98,98,92,96},{57,76,56,83,82},{72,77,76,87,83},{92,98,97,87,88}};
sub_average(a);
printf("\n");
//std_average(a);
//printf("\n");
std_fail(a);
printf("\n");
std_good(a);
return 0;
}
/*********子函数*********/
float *std_average(float *p)
{
int i,j;
float sum,ave[5],*pt;
for(i=0;i<4;i++)
{
sum=0;
for(j=0;j<5;j++)
{
sum=sum+*(p+5*i+j);
}
ave[i]=sum/5;
}
pt=ave;
return pt;
}
void sub_average(float *p)
{
int i,j;
float sum,ave[5];
for(j=0;j<5;j++)
{
sum=0;
for(i=0;i<4;i++)
{
sum=sum+*(p+5*i+j);
}
ave[j]=sum/4;
}
for(i=0;i<5;i++)
{
printf("No.%d:",i+1);
printf("%4.1f\n",ave[i]);
}
}
void std_fail(float (*p)[5])
{
int i,j,n=0;
float *ave;
ave=std_average(p);
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(*(*(p+i)+j)<60)
{
n++;
}
}
if(n>=2)
{
printf("No.%d student failed,his score is:\n",i+1);
///sum=0.0;
for(j=0;j<5;j++)
{
printf("%4.1f ",*(*(p+i)+j));
//sum=sum+*(*(p+i)+j);
}
printf("\n");
//ave=sum/5;
printf("No.%d average=%4.1f\n",i+1,*(ave+i));//值传不出去
n=0;
}
}
}
void std_good(float *p)
{
int i,j,num;
float *ave;
ave=std_average(p);
for(i=0;i<4;i++)
{
num=0;
for(j=0;j<5;j++)
{
if(*(p+5*i+j)>=85)
{
num++;
}
}
if(num==5 || *(ave+i)>=90)
{
printf("N0.%d student is good,his average score is: %4.1f\n",i+1,*(ave+i));//值传不出去
}
}
}