用指针作为函数参数,编写一个计算任意m行n列二维数组中各元素的平均值。

用指针作为函数参数,编写一个计算任意m行n列二维数组中各元素的平均值。利用这一函数,输入5个学生三门课的成绩,计算所有成绩的平均分。
(越简单越好!!我是初学者。)要C语言的!!!
我要整个题目的程序啊......

最简单的方法就是定义两个全局变量数组,连函数参数的指针都省了
int a[100][100]
float b[100];
void av(int m,int n)
{
int i, j;
for(i = 0; i < m; i++)
{
b[i]=0;
for(j = 0; j < n; j++)
b[i] += a[i][j];
b[i]=b[i]*1.0/n;
}
}

把a数值输入,把b打印出来就是平均值,呵呵
a b数组大小自己根据实际情况来定
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16
ps: upccash 也过来看看,咋在这又碰到了你^_^

其实我一直都想写写这样的函数了!(尽管她不是那么的标准...)
这是我的最新研究成果哦,估计是前无古人...

代码为啥不作解析?
理由:1)都说明白了你就没有任何长进了,你要自己去调试和理解,把知识变成自己的。
2)如果真正理解(我说的是“真正理解”!请动手修改并调试)了以下代码,可以说,C数组与指针对你来说已经不再是问题,也许她已经变成了你的恋人,你会爱上她的!

代码在TurboC2.0中测试通过,
VS2010中编译有错!(指针转换错误,这在预料当中!)(这是VS2010的缺点?我看未必,更多的应是优点!她要求你的代码更加规范)
其他编译器未作测试。

==========================
代码写作者:Chenqa08
2011.12.28
==========================
#include <stdio.h>

float average(int **a, int rows, int cols)
{
float sum = 0;
int i, j;

for(i = 0; i < rows; i++)
for(j = 0; j < cols; j++)
sum += (int)a[i * cols + j];
return sum / (rows * cols);
}

int main(void)
{
int a[2][3] = {5, 7, 5, 6, 7, 6}; //请修改成你想要的int型二维数组试试,看看函数是否通用哦
//如果需要float型数据,别忘记修改下average函数

printf("avg = %f\n", average(a, 2, 3));

return 0;
}追问

我用vc6.0的
Cpp1.cpp
D:\学习\vc++\cpp文件\Cpp1.cpp(18) : error C2664: 'average' : cannot convert parameter 1 from 'int [2][3]' to 'int ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.
我蒙了.....望求整个程序!!

追答

楼下harkyu189高手,是真正写过代码的人!
也是我在百度知道碰到的第一位可以说是(在下不是!)理解了数组和指针的人!

》代码作如下修改,VS2010编译通过!
》奉劝楼主,不要认为编译通过就一切OK,你得真正明白
》第一楼 烧掉回忆2011 的代码为什么错误
》要想理解C,得从错误,从调试中学习!

#include
float average(int a[], int rows, int cols) //使用a[],*a也可,目的:把二维数组当一维数组使用
{
float sum = 0;
int i, j;
for(i = 0; i < rows; i++)
for(j = 0; j < cols; j++)
sum += a[i * cols + j]; //去掉了强制转换
return sum / (rows * cols);
}

int main(void)
{
int a[2][3] = {5, 7, 5, 6, 7, 3};
printf("avg = %f\n", average(a[0], 2, 3)); //记住:使用a[0]传递首地址!
return 0;
}

题外话:楼主这一贴极具价值!希望C初学者都能看到...本人也是C初学者
还是那句话,帮助别人就是帮助自己!

本回答被提问者采纳
第2个回答  2011-12-27
……

用C++编写一个程序,计算一个二维数组中所有元素的平均值(用指针...
float a[M][N]={{1,2,3},{4,5,6},{7,8,9}}; \/\/定义一个M行N列的二维数组.float ave=0; \/\/累加总成绩,计算平均值.\/*方法1: 转化成一维指针*\/ float *p=(float *)a;for(int i = 0; i < M * N; ++i){ cout << *( p + i ) << " "; \/\/输出二维数...

...求二维数组每行元素的平均值。要求用函数和指针实现)
\/*求二维数组每行元素的平均值。(要求用函数和指针实现)*\/#include<stdio.h>void fun(int a[3][4]){int (*p)[4],i,j;float ave,s;for(i=0;i<3;i++){p=&a[i];s=0;for(j=0;j<4;j++)s+=(*p)[j];ave=s\/4;printf("第%d行元素的平均值为%f\\n",i,ave);}}int ma...

2011年全国计算机等级考试2级C语言机试题库
给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。如输入一个数:27638496,新的数为729第一空:{ t=*n%10; 第二空:if(t%2!=0)第三空:*n=x;2.程序修改 给定程序modi1.c中函数fun的功能是:计算n!

1 用指针数组和指针移动的方法求二维数组a[M][N]各行的最大值,并将各...
1. 开辟一个指针数组(其实就是数组,数组存的是指针)比如 int * p_a[M],然后将这个数组里面的 每一个元素都指向该行最大的元素,最后逆指针操作取出对应的值,存放在b[M]中。2. 可以看看书上面的strcat和strcpy函数。多写代码,不要太轻易求人,这样才会有很大的进步。

输入一个二维数组,求每行的平均值。。。C语言要怎么写?
如果用指针还可以做成动态数组,不用的话只能固定开辟。另外程序没判断数组越界,不要输入超过MAXCOL和MAXROW的列和行数。include<stdio.h> define MAXROW 200 define MAXCOL 200 int main(void){ printf("type row and col,split with\\" \\":");int row,col;scanf("%d%d",&row,&col);int ...

编写一个函数,将二维数组(n*m)转置.在main函数中调用该函数并输出结果...
方法很多。看前面都有答了。就写个指针的方法:用指向指针的指针来实现倒置后的二维数组。倒置后原数组不变。include <stdio.h>#include <malloc.h>#define ROW 2#define CLO 3int **fzz(int a[][CLO]);void printfARR(int **arr);int main(){ int i,j,arr[ROW][CLO]={{1,2,3}...

C语言求一个二维组每行每列的最大值 并放在一个新数组中 ,用指针做?
行列最大值,方法很多,一般循环遍历属于就可以了。既然你要用指针来做,我就用指针来写。利用数组元素地址连贯性来做。include <stdio.h> define MXR 4\/\/最大行数 define MXC 3\/\/最大列数 int main(){ int i=0,mr,mc,*p=NULL,*ps=NULL;int nums[MXR][MXC]={{8,6,7},{2,6,3},...

...函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维...
函数使用两个嵌套的for循环以列为顺序遍历二位数组,将其中每一个数据元素都存储进准备好的一维数组中。因为c语言函数无法将整个数组作为返回值,故函数会返回一个指向一维数组的指针。具体代码如图:

指向二维数组的指针做函数参数
p可以这样定义:int (*p[2])[3][3]; \/\/ 表明p是一个长度为2的数组,数组里面每个成员是指针,指针指向的成员是3*3二维数组。fun可以这样定义:void fun (int (*p[])[3][3] ){ } 但这种定义不容易看懂,一般是先定义成员,再定义数组:typedef int Element[3][3];typedef Element* P...

c语言用指针找二维数组中的最大值和下标
void InputArray(int *p,int m,int n);int FindMax(int *p,int m,int n,int *pRow,int *pCol);int main(){ int a[10][10];int m,n;int max,r,c;printf("Input m,n:\\n");scanf("%d,%d",&m,&n);InputArray(a[0],m,n);max=FindMax(a[0],m,n,&r,&c);printf("max...

相似回答