YuanQP 2022-11-24 08:52 采纳率: 80%
浏览 1
已结题

关于#代码块#的问题,如何解决?(语言-c语言)

问题遇到的现象和发生背景

编译错误

img

用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#define N 5
int main()
{
    //int N = 0;
    //scanf("%d", &N);
    int arr[N][N] = { 0 };
    //输入
    for (size_t i = 0; i < N; i++)
    {
        for (size_t j = 0; j < N; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    //交换
    
    //中心元素

    int i, j, tmpe, *max, *min;
    int *b[N*N], *p = &arr[0][0];
    for (i = 0; i < N*N; i++)
        b[i] = p++;    //指向原二维数组各元素的指针数组 
    /*--中心元素--*/
    for (i = 1, max = b[0]; i < N*N; i++) {
        if (*max < *b[i])
            max = b[i];
    }
    //将元素值交换 
    tmpe = *b[(N*N-1)/2];
    *b[(N*N-1)/2] = *max;
    *max = tmpe;
    //左上
    for (i = 1, min = b[0]; i < N*N; i++) {
        if (*min > *b[i])
            min = b[i];
    }
    //元素值交换 
    tmpe = *b[0];
    *b[0] = *min;
    *min = tmpe;
    //右上
    for ( i = 1,min=b[N-2]; i < N*N; i++)
    {
        if (*min>*b[i])
        {
            min = b[i];
        }
    }
    tmpe = *b[N-1];
    *b[N-1] = *min;
    *min = tmpe;
    //左下
    for ( i = 1,min=b[1]; i < N-1; i++)//第一行2--4
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    for ( i = N; i < N*N; i++)//第二行往下
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    tmpe = *b[N*N-N];
    *b[N*N-N] = *min;
    *min = tmpe;
    //右下
    for (i = 1, min = b[1]; i < N-1; i++)//第一行2--4
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    for (i = N; i < N*N-N; i++)//第二行--第四行
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    for ( i = N*N-N+1; i < N*N; i++)
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    tmpe = *b[N*N-1];
    *b[N*N-1] = *min;
    *min = tmpe;
    //输出
    
    for ( i = 0; i < N; i++)
    {
        for ( j = 0; j < N; j++)
        {
            printf("%-d", arr[i][j]);
            if (j<N-1)
            {
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}

运行结果及报错内容

编译错误

我想要达到的结果

想手动输入N,不用宏定义

  • 写回答

2条回答 默认 最新

  • 赵4老师 2022-11-24 09:14
    关注

    仅供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    int **newarr2d(int rows,int cols) {
        int **p,i;
    
        p=(int **)malloc(rows*sizeof(int *));
        if (NULL==p) exit(1);
        for (i=0;i<rows;i++) {
            p[i]=(int *)malloc(cols*sizeof(int));
            if (NULL==p[i]) exit(1);
        }
        return p;
    }
    void deletearr2d(int **p,int rows) {
        int i;
    
        for (i=0;i<rows;i++) {
            free(p[i]);
        }
        free(p);
    }
    int main() {
        int **arr2d,i,j,r,c;
    
        r=4;
        c=5;
        //在堆中开辟一个4×5的二维int数组
        arr2d=newarr2d(r,c);
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                arr2d[i][j]=i*c+j;
            }
        }
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                printf(" %2d",arr2d[i][j]);
            }
            printf("\n");
        }
        deletearr2d(arr2d,r);
    
        r=6;
        c=3;
        //在堆中开辟一个6×3的二维int数组
        arr2d=newarr2d(r,c);
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                arr2d[i][j]=i*c+j;
            }
        }
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                printf(" %2d",arr2d[i][j]);
            }
            printf("\n");
        }
        deletearr2d(arr2d,r);
    
        return 0;
    }
    //  0  1  2  3  4
    //  5  6  7  8  9
    // 10 11 12 13 14
    // 15 16 17 18 19
    //  0  1  2
    //  3  4  5
    //  6  7  8
    //  9 10 11
    // 12 13 14
    // 15 16 17
    //
    
    
    

    再供参考:

    #include <stdio.h>
    #include <stdlib.h>
    int **newarr2d(int rows,int cols) {
        int **p,i;
    
        p=new int *[rows];
        if (NULL==p) exit(1);
        for (i=0;i<rows;i++) {
            p[i]=new int[cols];
            if (NULL==p[i]) exit(1);
        }
        return p;
    }
    void deletearr2d(int **p,int rows) {
        int i;
    
        for (i=0;i<rows;i++) {
            delete[] p[i];
        }
        delete[] p;
    }
    int main() {
        int **arr2d,i,j,r,c;
    
        r=4;
        c=5;
        //在堆中开辟一个4×5的二维int数组
        arr2d=newarr2d(r,c);
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                arr2d[i][j]=i*c+j;
            }
        }
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                printf(" %2d",arr2d[i][j]);
            }
            printf("\n");
        }
        deletearr2d(arr2d,r);
    
        r=6;
        c=3;
        //在堆中开辟一个6×3的二维int数组
        arr2d=newarr2d(r,c);
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                arr2d[i][j]=i*c+j;
            }
        }
        for (i=0;i<r;i++) {
            for (j=0;j<c;j++) {
                printf(" %2d",arr2d[i][j]);
            }
            printf("\n");
        }
        deletearr2d(arr2d,r);
    
        return 0;
    }
    //  0  1  2  3  4
    //  5  6  7  8  9
    // 10 11 12 13 14
    // 15 16 17 18 19
    //  0  1  2
    //  3  4  5
    //  6  7  8
    //  9 10 11
    // 12 13 14
    // 15 16 17
    //
    
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月25日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3