关于c语言的问题ee

输入 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);
}

用一维数组表示二维数组的写法。运行结果:

img

代码如下:

#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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632