主要问题还是要区分二维数组跟二维指针是两个不同的概念,不能混起来使用,另外改的地方看注释
#include
float average(float p[2][3],int n); //函数定义放main函数外面
void bad_baby(float p[2][3],int *p1,int i,int j);
void good_baby(float p1[2][3],int *p2,int i,int j);
void main()
{
float a[2][3]={{100,91,99},{95,20,30}};
float *s;
int b[2]={10080,10081},*s1;
int m=2,v=3;
s1=b;
printf("aver:%f\n",average(a,m));
bad_baby(a,s1,m,v);
good_baby(a,s1,m,v);
}
float average(float p[2][3],int n)
{
float sum=0,aver;
int t;
for(t=0;t
aver=sum/n;
return aver;
}
void bad_baby(float p[2][3],int *p1,int i,int j)
{
int i1,j1;
for(i1=0;i1 {
int t=0;
for(j1=0;j1
if (p[i1][j1]<60)
t=t+1;
}
if(t>=2)
{
//printf("%s: ",p1[i1]); //int类型不能用%s打印
for(j1=0;j1
}
}
}
void good_baby(float p1[2][3],int *p2,int i,int j)
{
int i1,j1;
for(i1=0;i1 {
float sum=0,t=0;
for(j1=0;j1
sum=sum+p1[i1][j1];
if(p1[i1][j1]>85.0)
t=t+1;
}
if((sum/j>90.0)||(t==j))
{
//printf("%s",*p2); //int类型不能用%s打印
p2++;
}
}
}
void bad_baby(float **p,char *p1,int i,int j) //这个 float **p 定义没问题
{
int i1,j1;
for(i1=0;i1 { int t=0;
for(j1=0;j1
if (*(*(p+i1)+j1)<60) //使用方法是大问题,你只能传入一维的指针数组才可能正常引用
//a[2][3]传入的是一个二唯数组首址,并没有指针数组存在, *(*(p+i1)+j1) 会是非法操作的
//理解一下 *(*(p+i1)+j1) 的操作方式 p所指作基址位置 向后移i1个指针单元,取其所指的地址作基址再向后移j1个float单元,取其float内容。
t=t+1;
}
if(t>=2)
{
printf("%s: ",*(p1+i1));
for(j1=0;j1
}
}
}
#include
void main()
{
float a[2][3]={{100,91,99},{95,20,30}};
float *s;
int b[2]={10080,10081},*s1;
int m=2,v=3;
s1=b;
printf("aver:%f\n",average(a,m));
bad_baby(a,s1,m,v);
good_baby(a,s1,m,v);
}