运行后的结果不正确,怎么修改代码合适?


#include <stdio.h>
void total(int *a,int sum[],float aver[],int m,int n);
void print(int *a,int sum[],float aver[],int m,int n);
int main()
{
 int i,j,m,n,a[30][5],sum[30];
 float aver[30];
 printf("how many student?");
 scanf("%d",&m);
 printf("how many courses?");
 scanf("%d",&n);
 printf("input scores:\n");
 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
   scanf("%d",&a[i][j]);
 }
 total(*a,sum,aver,m,n);
 print(*a,sum,aver,m,n);
 return 0;
}
void total(int *a,int sum[],float aver[],int m,int n)
{
 int i,j;
 for(i=0;i<m;i++)
 {
  sum[i]=0;
  for(j=0;j<n;j++)
   sum[i]=sum[i]+a[i*n+j];
  aver[i]=(float)sum[i]/n;
 }
}
void print(int *a,int sum[],float aver[],int m,int n)
{
 int i,j;
 printf("result:\n");
 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
   printf("%4d\t",a[i*n+j]);
  printf("5d\t%6.1f\n",sum[i],aver[i]);
 }
}


二维数组不能这么传递和访问,还是改为全局变量吧

#include <stdio.h>

void total(int sum[],float aver[]);
void print(int sum[],float aver[]);
int m,n,a[30][5];
int main()
{
    int i,j,sum[30];
    float aver[30];
    printf("how many student?");
    scanf("%d",&m);
    printf("how many courses?");
    scanf("%d",&n);
    printf("input scores:\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    }
    total(sum,aver);
    print(sum,aver);
    return 0;
}
void total(int sum[],float aver[])
{
    int i,j;
    for(i=0;i<m;i++)
    {
        sum[i]=0;
        for(j=0;j<n;j++)
            sum[i]=sum[i]+a[i][j];
        aver[i]=(float)sum[i]/n;
    }
}
void print(int sum[],float aver[])
{
    int i,j;
    printf("result:\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%4d\t",a[i][j]);
        printf("%5d\t%6.1f\n",sum[i],aver[i]);
    }
}

输出的结果是什么,预期结果又是什么

二维数组不能这么传递和访问,还是改为全局变量吧

#include <stdio.h>

void total(int sum[],float aver[]);
void print(int sum[],float aver[]);
int m,n,a[30][5];
int main()
{
    int i,j,sum[30];
    float aver[30];
    printf("how many student?");
    scanf("%d",&m);
    printf("how many courses?");
    scanf("%d",&n);
    printf("input scores:\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    }
    total(sum,aver);
    print(sum,aver);
    return 0;
}
void total(int sum[],float aver[])
{
    int i,j;
    for(i=0;i<m;i++)
    {
        sum[i]=0;
        for(j=0;j<n;j++)
            sum[i]=sum[i]+a[i][j];
        aver[i]=(float)sum[i]/n;
    }
}
void print(int sum[],float aver[])
{
    int i,j;
    printf("result:\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%4d\t",a[i][j]);
        printf("%5d\t%6.1f\n",sum[i],aver[i]);
    }
}