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

矩阵操作后正确输出问题:C语言代码错误排查求助

修复矩阵操作的C代码问题

问题背景

给定一个N行M列的矩阵,需要对每个元素执行以下操作:

  • 若元素值等于当前行号和当前列号,则该值加3;
  • 若元素值仅等于当前行号,则该值加2;
  • 若元素值仅等于当前列号,则该值加1;
  • 其他情况保持元素值不变。

输入格式:

  • 第一行输入矩阵行数N和列数M;
  • 后续N行输入矩阵的元素。

约束条件:

  • 1 ≤ N, M ≤ 10;
  • 0 ≤ Arr[i][j] ≤ 100。

输出要求:打印执行操作后的完整矩阵。

样例输入

3 3
1 1 1
1 1 1
1 1 1

样例输出

4 3 3 
2 1 1 
2 1 1

错误代码

#include <stdio.h>  

int main(){

    //here taking the row and column from the users

    int row;

    int column, temp;

    printf("enter row and column\n");

    scanf("%d%d", &row, &column);

    int arr[row][column];

    //here taking the matrix input through the users

    for(int i = 0; i < row; i++){

        for(int j = 0; j < column; j++){

            scanf("%d", &arr[i][j]);

        }
    for (int i=0; i<row; i++){
        for(int j=0; j<column; j++ ){
            if (arr[i][j] == arr[i+1] && arr[i][j]== arr[j+1]){
                    temp= arr[i][j]+3;
                    printf("%d", temp);

            }
            else if (arr[i][j] == arr[i+1]){
                temp= arr[i][j]+ 2;
                printf("%d", temp);
            }
            else if (arr[i][j]== arr[j+1]){
                temp= arr[i][j]+ 1;
                printf("%d", temp);
            }
            else{
                temp= arr[i][j];
                printf("%d", temp);
            }
        }
    }


    }
    return 0;

}

问题分析

这段代码存在三个核心问题:

  1. 循环嵌套逻辑错误:输入矩阵的外层for循环内部直接嵌套了处理打印的循环,导致输入第一行后就立刻开始处理,后续行的输入会被跳过,矩阵数据读取不完整。
  2. 行号列号判断完全错误:代码用arr[i+1]、arr[j+1]来匹配行号列号,这和需求完全不符——需求中的行号是当前元素的行索引+1(比如第一行对应行号1),列号是列索引+1,而非数组中其他元素的值。
  3. 输出格式不规范:打印时没有处理元素间的空格和行末换行,输出格式和样例要求不符。

修复后的代码

#include <stdio.h>  

int main() {
    int row, column;
    scanf("%d%d", &row, &column);
    int arr[row][column];

    // 完整读取矩阵所有元素
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < column; j++) {
            scanf("%d", &arr[i][j]);
        }
    }

    // 处理并打印矩阵
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < column; j++) {
            int val = arr[i][j];
            int current_row = i + 1; // 行号从1开始计数
            int current_col = j + 1; // 列号从1开始计数

            if (val == current_row && val == current_col) {
                val += 3;
            } else if (val == current_row) {
                val += 2;
            } else if (val == current_col) {
                val += 1;
            }
            // 每个元素后加空格,保证格式
            printf("%d ", val);
        }
        // 每行结束后换行
        printf("\n");
    }

    return 0;
}

代码说明

  1. 修正循环结构:把输入矩阵的循环和处理打印的循环完全分离,确保先完整读取所有数据再处理。
  2. 正确匹配行号列号:用i+1和j+1表示当前元素的行号和列号,符合题目样例的计数逻辑。
  3. 规范输出格式:每个元素后打印空格,每行结束后换行,输出格式和样例一致。
  4. 移除多余提示:去掉了不必要的输入提示语句,避免干扰输入流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:30:45