200分高分求助!!用多级指针和指针数组实现一个3*4的二维数组,求数组中所有元素的和及平均值

答好加送100

楼主如果有不明白的地方,尽管发消息问我。

#include <stdio.h>

#define R 3
#define L 4

void
getdata(float ** mat)
{
int i, j;

for ( i = 0; i < R; i++ ) {
printf( "Input numbers to Row %d: ", i+1 );
for ( j = 0; j < L; j++ )
scanf( "%f", *(mat+i)+j );
}
}

float
sum(float ** mat)
{
int i, j;
float sum = 0;

for ( i = 0; i < R; i++ )
for ( j = 0; j < L; j++ )
sum += *(*(mat+i)+j);
return sum;
}

float
average(float ** mat)
{
return sum(mat) / (R*L);
}

int
main(void)
{
float ln1[L];
float ln2[L];
float ln3[L];
float * mat[R] = { ln1, ln2, ln3 }; /* 所谓指针数组,就是一个元素为指针的数组,一个数组的数组名被解释为指向首元素的指针,所以只要把上面三个数组的数组名分别存入这个指针数组mat,一个指针数组就构造完成了。本题既然规定了用指针数组来实现,就不可以用二维数组,二维数组不是指针数组,而是数组的数组,两者是不等价的,这里点楼主要注意 */

getdata(mat);
printf( "sum = %f, average = %f\n", sum(mat), average(mat) );

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-01-02
int array[3][4];//这是需要表示的数组;
————————————————————
int *p1[3];//一级指针数组;
int **p2;//二级指针定义;
p2=p1[3];//二级指针指向一级指针数组首址;
p1[0]=array[0][0];
p1[1]=array[1][0];
p1[2]=array[2][0];//指针数组各元素指向待表示数组的各行首址;
//数组构造已经完成;
————————————————————
依据*p2=p1[0];*(p2+1)=p1[1];*(p2+2)=p1[2];
**p2=array[0][0],**(p2+1)=array[1][0],**(p2+2)=array[2][0],*(*(p2+i)+j)=array[i][j];这几个式子,
//可以自由操作数组;
————————————————————
源代码:

#include<iostream>
#define R 3
#define L 4
using namespace.std;
float total(int x,int y)
{
float sum=0;
for(int a=0;a<R;a++)
{
for(int b=0;b<L;b++)
{
sum+=*(*(p2+a)+b);
}
}
return sum;
}
void main()
{
int array[R][L];
for(int i=0;i<R;i++)
{
for(int j=0;j<L;j++)
{
cout<<"请输入第"<<i<<"行,第"<<j<<"列的元素:"<<endl;
cin>>array[i][j];
}
}
int *p1[R];
int **p2;
p2=p1[R];
for(int k=0;k<R;k++)
{
p1[k]=array[k][0];
}
float tt=total(R,L);
float av=tt/(R*L);
cout<<"数组元素的总和以及平均值依次是:"<<endl;
cout<<tt<<" "<<av<<endl;
}
——————————————————————
有错的话知会我下,代码未经调试。