主题:二维数组做函数参数
cyp2010
[专家分:10] 发布于 2010-05-28 16:05:00
#include<stdio.h>
void main()
{
int i,j,m,n,a[10][5];
void sag(int a[][],int i,int j);
void cag(int a[][]);
printf("input students gread\n");
for(i=0;i<10;i++)
for(j=0;j<5;j++)
scanf("%d",a[i][j]);
sag(a,i,j);
cag(a[10][5]);
}
void sag(int a[][],int i,int j)
{
int sum=0;
float aver;
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
sum=sum+a[i][j];
aver=sum/5;
printf("aver=%f\n",aver);
}
}
void cag(int a[][])
{
int i,j,sum=0;
float aver;
for(i=0;i<5;i++)
{
for(j=0;j<10;j++)
sum=sum+a[j][i];
aver=sum/10;
printf("aver=%f",aver);
}
}
我自己写的这个程序在引用二维数组的时候遇到问题了。谭浩强那本书也没详细的说明该怎么引用
哪位高手给讲讲二维数组做函数的参数是该注意的问题都有什么········
顺便把程序给改了···········
谢了!!!
回复列表 (共8个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-05-28 16:57:00
数组做参数的时候只有最后一维的规模可以省略不写。以上
板凳
perpanish [专家分:120] 发布于 2010-05-28 18:12:00
#include<stdio.h>
void main()
{
int i,j,m,n,a[10][5];
void sag(int a[][],int i,int j);
void cag(int a[][]);
printf("input students gread\n");
for(i=0;i<10;i++)
for(j=0;j<5;j++)
scanf("%d",a[i][j]);
sag(a,i,j);
cag(a[10][5]); //这里传的是元素,而且还出界了,当然出错
}
void sag(int a[][],int i,int j)
{
int sum=0;
float aver;
for(i=0;i<10;i++)
{
//这里应该有sum=0;
for(j=0;j<5;j++)
sum=sum+a[i][j];
aver=sum/5; //这里应该用5.0
printf("aver=%f\n",aver);
}
}
void cag(int a[][])
{
int i,j,sum=0;
float aver;
for(i=0;i<5;i++)
{
//这里也应该有sum=0;
for(j=0;j<10;j++)
sum=sum+a[j][i];
aver=sum/10; //这里应该用10.0
printf("aver=%f",aver);
}
}
最后,两个函数其实一样,第一个传了i,j纯粹多余
3 楼
cyp2010 [专家分:10] 发布于 2010-05-28 22:07:00
不一样 你在仔细看看 一个是求横行的平均值 a[i][j]
一个是求竖行的平均值a[j][i]
你在仔细看看
也没数清楚数组做参数要怎么弄呀?
4 楼
雪光风剑 [专家分:27190] 发布于 2010-05-29 00:02:00
说白了,多维数组如果要是有一维想写成[]的话只能是最后一个方括号,前面的方括号里不能缺值
5 楼
effective_jian++ [专家分:30] 发布于 2010-05-29 23:47:00
sag这个函数传入参数i,j的确没用啊,你看你传进去根本没用就直接在for里又把i,j赋值成0了,那你传他干嘛
6 楼
Jasperu [专家分:80] 发布于 2010-05-30 01:15:00
#include<stdio.h>
void main()
{
int i,j,a[10][5];
void sag(int a[][5]); // 这里必须写上第二个[]里面的值,第一个可以省略,int a[][5],这里声明的时候可以直接用sag(int)
void cag(int a[][5]); // 仍然是那个问题
printf("input students gread\n");
for(i=0;i<10;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);// 有取地址号&,当然可以用数组名的形式了s+10*i+j,你自己画一下这个就行了,因为10*i+j表示取相对距离
sag(a);
cag(a);
}
void sag(int a[][5])// 仍然是int a[][5],
{
int sum=0,i,j;
float aver;
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
sum=sum+a[i][j];
aver=sum/5.0; // 精确,否组输出整数
printf("aver=%5.2f\n",aver);
sum=0;
// 这里必须加上sum=0,sum如果不归零会导致重复累家得不到正确的值
}
}
void cag(int a[][5])//可以直接用cag(int *a)
{
int i,j,sum=0;
float aver;
for(i=0;i<5;i++)
{
for(j=0;j<10;j++)
sum=sum+a[j][i];
aver=sum/10;// 10.0
printf("aver=%5.2f",aver);// 5.2f有利于观察和取值
sum=0;
}
}
/* 数组作参数,你要是传递的是整个数组的话,那么直接用数组名,就可以了,如函数swap(s[A][N])
那么你在传递实参的时候,有一个数组为r[3][3],那么你可以直接饮用这个r,即swap(r);
7 楼
cyp2010 [专家分:10] 发布于 2010-05-31 12:48:00
void sag(int a[][5])
{
int sum=0,i,j;
float aver;
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
sum=sum+a[i][j];
aver=sum/5.0;
printf("aver=%5.2f\n",aver);
sum=0;
}
}
改成这样了,吧sum=0在FOR 循环里面·····
void sag(int a[][5])
{
int sum,i,j;
float aver;
for(sum,i=0;i<10;i++)
{
for(j=0;j<5;j++)
sum=sum+a[i][j];
aver=sum/5.0;
printf("aver=%5.2f\n",aver);
}
}
compile整个文件后出现了三个错误
15: Type mismath in redeclaration of 'sag'
16:Muliple declaration for 'i';
16:Muliple declaration for 'j';
8 楼
cyp2010 [专家分:10] 发布于 2010-05-31 12:49:00
是这样 for(sum=0,i=0;i<10;i++)
我来回复