You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arrays行列转换问题求助:二维数组前半列转后半行的代码调试

调试你的数组转换C代码

我来帮你排查代码里的问题,一步步实现你要的数组转换需求:

核心问题分析

你的代码里有几个关键错误导致无法正确运行:

  • 数组输入逻辑错误:读取firstarray时,你用了firstarray[n][m]作为下标(这已经超出数组边界了,因为数组下标从0开始),而且没使用循环变量i和j,导致所有元素都没被正确赋值。
  • 后半部分赋值逻辑混乱:嵌套四层循环来处理后半部分会导致重复覆盖值,完全不符合需求逻辑——目标数组的后n行应该对应原数组每行的后半列,不需要这么多层循环。
  • 输出格式不符:示例里的元素是用逗号分隔的,但你的代码直接输出数字,没有添加分隔符。

修正后的代码

#include <stdio.h>
int main () {
    int n;
    scanf("%d",&n);
    int original_cols = n * 2; // 原数组列数
    int target_rows = n * 2;   // 目标数组行数
    int target_cols = n;       // 目标数组列数

    int firstarray[n][original_cols];
    int secondarray[target_rows][target_cols];

    // 1. 正确读取原数组
    for(int i = 0; i < n; i++){
        for(int j = 0; j < original_cols; j++){
            scanf("%d", &firstarray[i][j]);
        }
    }

    // 2. 复制原数组前半列到目标数组的前n行
    for(int i = 0; i < n; i++){
        for(int j = 0; j < target_cols; j++){
            secondarray[i][j] = firstarray[i][j];
        }
    }

    // 3. 复制原数组后半列到目标数组的后n行
    for(int i = 0; i < n; i++){
        for(int j = 0; j < target_cols; j++){
            // 目标数组第n+i行,对应原数组第i行的后半段(从target_cols列开始)
            secondarray[n + i][j] = firstarray[i][target_cols + j];
        }
    }

    // 4. 按要求格式输出目标数组
    for(int i = 0; i < target_rows; i++){
        for(int j = 0; j < target_cols; j++){
            printf("%d", secondarray[i][j]);
            // 最后一个元素后不输出逗号
            if(j != target_cols - 1){
                printf(",");
            }
        }
        printf("\n");
    }

    return 0;
}

代码说明

  • 输入修正:用循环变量i和j遍历数组,确保每个位置都被正确赋值。
  • 前半部分复制:直接将原数组的前n列映射到目标数组的前n行,逻辑直观。
  • 后半部分复制:目标数组的第n+i行对应原数组的第i行,取原数组后半段的元素直接复制,避免了冗余循环。
  • 输出优化:添加逗号分隔符,且每行最后一个元素后不输出逗号,完全匹配示例的输出样式。

测试时输入n=3,再输入你给出的原数组内容,就能得到你期望的输出结果了。

内容的提问来源于stack exchange,提问作者NameMyName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:12:45