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

C语言如何使用循环向指定大小的二维数组输入数据?

矩阵输入输出求和优化实现

原有代码存在的问题

  • 硬编码每个元素的输入输出逻辑,重复度极高,可扩展性差,如果要加5x5规格还要再写几十行重复代码
  • 存在数组越界风险:C语言数组下标从0开始,你定义的3x3数组合法下标范围是[0][0]到[2][2],直接用[1][1]到[3][3]会访问超出数组内存空间,导致未知错误
  • 4x4输入部分存在复制粘贴错误,所有提示语都显示"row 1 column 1",用户无法判断当前输入位置

核心优化思路

用动态变量存储矩阵大小,双层循环分别遍历行和列,一套逻辑兼容3x3和4x4两种规格,不需要分开写分支逻辑:

  • 外层循环遍历行
  • 内层循环遍历当前行的每一列
  • 输入、输出、求和逻辑全部嵌套在循环内实现

优化后完整代码

#include <stdio.h>

int main(){
    int choice = 0;
    while(choice != 1 && choice !=2){
        printf("Choose Matrix Size:\n");
        printf("1. 3x3\n");
        printf("2. 4x4\n");
        printf("Choice: ");
        scanf("%d", &choice);
    }
    // 根据选择确定矩阵大小
    int n = (choice == 1) ? 3 : 4;
    int matrix[n][n];
    int sum = 0;

    // 行优先输入元素
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            // 提示用i+1、j+1符合用户日常计数习惯,从1开始
            printf("Enter value for row %d column %d: ", i+1, j+1);
            scanf("%d", &matrix[i][j]);
            // 输入时直接累加求和,不需要后续单独计算
            sum += matrix[i][j];
        }
    }

    // 类表格格式输出矩阵
    printf("\nMatrix Results:\n");
    for(int i = 0; i < n; i++){
        printf("| ");
        for(int j = 0; j < n; j++){
            printf("%d ", matrix[i][j]);
        }
        printf("|\n");
    }

    // 输出总和
    printf("Matrix Sum: %d", sum);

    return 0;
}

代码说明

  • 用条件表达式直接获取矩阵大小n,避免switch分支重复写逻辑
  • 输入时直接累加求和,不需要单独声明多个行求和变量,减少冗余
  • 提示语用i+1、j+1展示,和用户习惯的从1开始计数的行列号对齐,不需要修改数组下标访问逻辑
  • 如果后续需要新增5x5、6x6等规格,只需要在选择菜单增加对应选项,修改n的赋值逻辑即可,不需要修改输入输出求和的核心代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:05