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

