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
相关产品推荐
相关产品推荐

