c语言:有4个学生5门课,要求第一门课的平均分,以及找出2门以上课程不及格的学生,输出学号级平均成绩

我的程序不出结果,不知道为什么,求高手解答,谢谢了
#include<stdio.h>
int main()
{
void average1(float *p1);
void fail(float *p1);
//void good();
float a[4][5];
float *p1;
int i,j;
printf("score:\n");
for(i=0;i<4;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
p1=&a[0][0];
average1(p1);
fail(p1);
return 0;
}
void average1(float *p1)
{
int i;
float sum=0.0;
float average1;
for(i=0;i<4;i++)
sum=sum+(*(p1+5*i));
average1=sum/4;
printf("第一门课的平均成绩:%7.2f\n",average1);
}
void fail(float *p1)
{
int i,j,label=0;
float sum1=0.0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
sum1=sum1+(*(p1+5*i+j));
if(*(p1+5*i+j)<60) label++;
if(label>=2)
{
printf("%d\n",i);
printf("这个学生平均成绩是%7.2f",sum1/5);
}
}

}

还是直接上代码:程序存在的问题:

一、函数声明一般是放到主函数的前边;

二、关于for循环的使用不是很规范,建议就算是只有一行代码也要用花括号括起来

三、我测试发现根本就是没有把相应的值存储到数组里面,吧%d改成%f

四、关于二位数组的指针(你是用一维的指针来实现二维的功能)你的用法没有错,但还是建议如我程序里面的形式使用

#include<stdio.h>
 void average1(float (*p1)[5]);
 void fail(float (*p1)[5]);
int main()
{

 //void good();
 float a[4][5];
 float (*p1)[5];
 int i,j;
 printf("score:\n");
 for(i=0;i<4;i++)
  for(j=0;j<5;j++)
  {
   scanf("%f",&a[i][j]);
 //  printf("%f ",a[i][j]);
  }
 p1 = a;
 average1(p1);
 fail(p1);
 return 0;
}
void average1(float (*p1)[5])
{
 int i;
 float sum=0.0;
    float average1;
 for(i=0;i<4;i++)
 {
  sum=sum+p1[i][0];
 // printf("%f ",p1[i][0]);
 }
 average1=sum/4.0;
 printf("第一门课的平均成绩:%7.2f\n",average1);
}
void fail(float (*p1)[5])
{
 int i,j,label=0;
 float sum1;
 for(i=0;i<4;i++)
 {
 sum1=0.0;
  for(j=0;j<5;j++)
    {
   sum1=sum1+p1[i][j];
   if(p1[i][j]<60) label++;
 
    }
   if(label>=2)
    {
  
   printf("%d\n",i);
  printf("这个学生平均成绩是%7.2f",sum1/5);
   }
   label=0;

}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-28
.fs/.mwekrfmwe;jrfsd.,mf;sdf.,sdmf