指针,有一个班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; } } } #if(1) 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)); //值传不进去; } } } #endif