回 帖 发 新 帖 刷新版面

主题:二维数组做函数参数

#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个回复)

沙发

数组做参数的时候只有最后一维的规模可以省略不写。以上

板凳

#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 楼


不一样   你在仔细看看    一个是求横行的平均值 a[i][j]
一个是求竖行的平均值a[j][i]
你在仔细看看 
也没数清楚数组做参数要怎么弄呀?

4 楼

说白了,多维数组如果要是有一维想写成[]的话只能是最后一个方括号,前面的方括号里不能缺值

5 楼

sag这个函数传入参数i,j的确没用啊,你看你传进去根本没用就直接在for里又把i,j赋值成0了,那你传他干嘛

6 楼

#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 楼


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 楼

是这样  for(sum=0,i=0;i<10;i++)

我来回复

您尚未登录,请登录后再回复。点此登录或注册