
这个C语言程序有什么问题啊,各位帮帮忙,谢谢了哟,小弟在线等。 程序代码如下:
#include<stdio.h>voidmain(){floataverage(floatp[2][3],intn);voidbad_baby(float**p,cha...
#include <stdio.h>
void main()
{
float average(float p[2][3],int n);
void bad_baby(float **p,char *p1,int i,int j);
void good_baby(float **p1,char *p2,int i,int j);
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<n;t++)
sum=sum+p[t][0];
aver=sum/n;
return aver;
}
void bad_baby(float **p,char *p1,int i,int j)
{
int i1,j1;
for(i1=0;i1<i;i1++)
{ int t=0;
for(j1=0;j1<j;j1++)
{
if (*(*(p+i1)+j1)<60)
t=t+1;
}
if(t>=2)
{
printf("%s: ",*(p1+i1));
for(j1=0;j1<j;j1++)
printf("%f ",*(*(p+i1)+j1));
}
}
}
void good_baby(float **p1,char *p2,int i,int j)
{
int i1,j1;
for(i1=0;i1<i;i1++)
{
float sum=0,t=0;
for(j1=0;j1<j;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);
p2++;
}
}
}
检查了半天,找到错误了。后面bad_baby函数和good_baby函数应该把字符型指针形参改为整形。即void bad_baby(float **p,char *p1,int i,int j)改为void bad_baby(float **p,int *p1,int i,int j) 展开
void main()
{
float average(float p[2][3],int n);
void bad_baby(float **p,char *p1,int i,int j);
void good_baby(float **p1,char *p2,int i,int j);
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<n;t++)
sum=sum+p[t][0];
aver=sum/n;
return aver;
}
void bad_baby(float **p,char *p1,int i,int j)
{
int i1,j1;
for(i1=0;i1<i;i1++)
{ int t=0;
for(j1=0;j1<j;j1++)
{
if (*(*(p+i1)+j1)<60)
t=t+1;
}
if(t>=2)
{
printf("%s: ",*(p1+i1));
for(j1=0;j1<j;j1++)
printf("%f ",*(*(p+i1)+j1));
}
}
}
void good_baby(float **p1,char *p2,int i,int j)
{
int i1,j1;
for(i1=0;i1<i;i1++)
{
float sum=0,t=0;
for(j1=0;j1<j;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);
p2++;
}
}
}
检查了半天,找到错误了。后面bad_baby函数和good_baby函数应该把字符型指针形参改为整形。即void bad_baby(float **p,char *p1,int i,int j)改为void bad_baby(float **p,int *p1,int i,int j) 展开
3个回答
展开全部
主要问题还是要区分二维数组跟二维指针是两个不同的概念,不能混起来使用,另外改的地方看注释
#include <stdio.h>
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<n;t++)
sum=sum+p[t][0];
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<i;i1++)
{
int t=0;
for(j1=0;j1<j;j1++)
{
if (p[i1][j1]<60)
t=t+1;
}
if(t>=2)
{
//printf("%s: ",p1[i1]); //int类型不能用%s打印
for(j1=0;j1<j;j1++)
printf("%f ",p[i1][j1]);
}
}
}
void good_baby(float p1[2][3],int *p2,int i,int j)
{
int i1,j1;
for(i1=0;i1<i;i1++)
{
float sum=0,t=0;
for(j1=0;j1<j;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++;
}
}
}
#include <stdio.h>
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<n;t++)
sum=sum+p[t][0];
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<i;i1++)
{
int t=0;
for(j1=0;j1<j;j1++)
{
if (p[i1][j1]<60)
t=t+1;
}
if(t>=2)
{
//printf("%s: ",p1[i1]); //int类型不能用%s打印
for(j1=0;j1<j;j1++)
printf("%f ",p[i1][j1]);
}
}
}
void good_baby(float p1[2][3],int *p2,int i,int j)
{
int i1,j1;
for(i1=0;i1<i;i1++)
{
float sum=0,t=0;
for(j1=0;j1<j;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<i;i1++)
{ int t=0;
for(j1=0;j1<j;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<j;j1++)
printf("%f ",*(*(p+i1)+j1));
}
}
}
{
int i1,j1;
for(i1=0;i1<i;i1++)
{ int t=0;
for(j1=0;j1<j;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<j;j1++)
printf("%f ",*(*(p+i1)+j1));
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
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);
}
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);
}
追问
请问下问题出在哪里呢?
追答
//函数的声明应该放在主函数外边的、、、、
#include
float average(float p[2][3],int n);//这是函数的声明
void bad_baby(float p[2][3],char *p1,int i,int j);//这是函数的声明
void good_baby(float p[2][3],char *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);
}
//下边是函数的实现、、、
。。。
//希望对你学习有帮助~~~~~嘿嘿
。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询