输入 M 和 N,通过 alloc_mem 子函数动态申请一片内存,定义一个 MXN 的二维数
组,并通过 console 口输入,通过指针的方式对二维数组进行访问,找出其中最大
值,以及所有数据的平均值
其中,
1) alloc_mem 子函数是一个动态申请内存的函数,需要自己编写并实现:
bool alloc_mem(int **p, int length)。【注:可以调用 malloc】
2) 返回值是 bool 类型,指明申请成功还是失败;p 是需要申请内存的指针域指针
的变量,length 是申请的长度。
函数调用方式,示例如下
main()
{
int *p;
bool result = alloc_mem(&p, 100);
}
用一维数组表示二维数组的写法。运行结果:
代码如下:
#include <stdio.h>
#include <stdlib.h>
bool alloc_mem(int **p, int length)
{
*p = (int*)malloc(sizeof(int)*length);
if(*p == 0)
return 0;
else
return 1;
}
int main()
{
int m,n;
int i,j;
int* p= 0;
double ave = 0;
int maxv,minv;
int len;
printf("请输入M和N:");
scanf("%d %d",&m,&n);
//申请内存
len = m*n;
if(alloc_mem(&p,len))
{
//输入数据
printf("请输入%d*%d的二维数组:\n",m,n);
for(i = 0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",(p+i*n+j));
ave += *(p+i*n+j);//累加求和
//找最大值、最小值
if(i==0 && j==0)
{
maxv = *(p+i*n+j);
minv = *(p+i*n+j);
}else
{
if(*(p+i*n+j) > maxv)
maxv = *(p+i*n+j);
if(*(p+i*n+j) < minv)
minv = *(p+i*n+j);
}
}
}
//输出
printf("最大值:%d\n",maxv);
printf("最小值:%d\n",minv);
printf("平均值:%lf\n",ave/(m*n));
}else
{
printf("申请内存失败\n");
return 0;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!