如何用循环为3×3二维数组填充1-9数字(不使用vector)
给3×3二维数组填充1-9的正确方法(不用vector)
没关系的,入门阶段遇到这种问题太正常了,不用怕被降赞——谁都是从基础一步步过来的😉
你现在的问题核心在于数组索引的错误使用:
- 首先,C++里数组的索引是从0开始的,你定义的
int ar[3][3],有效索引范围是ar[0][0]到ar[2][2],ar[3][3]已经超出了数组的边界,属于越界访问(这是未定义行为),而且就算能赋值,也不会填充到数组的有效元素里。 - 其次,你的循环只是把
i重复赋值给同一个越界位置,根本没遍历数组的每个元素。
下面给你两种简单的解决方法,都是基于基础循环实现的:
方法1:嵌套循环(最直观,适合入门理解)
用两层循环分别控制行和列,通过行号和列号计算要填充的数值:
#include<iostream> using namespace std; int main(){ int ar[3][3]= {0}; // 外层循环控制行(0到2) for(int i = 0; i < 3; i++){ // 内层循环控制列(0到2) for(int j = 0; j < 3; j++){ // 计算当前位置的数值:行号*3 + 列号 +1 ar[i][j] = i * 3 + j + 1; } } // 打印验证 for(int i = 0; i<3; i++){ for(int j = 0;j<3; j++){ cout<<ar[i][j]<<" "; // 加空格让输出更清晰 } cout<<"\n"; } return 0; }
解释:第一行(i=0)时,j从0到2,数值对应1-3;第二行(i=1)对应4-6;第三行(i=2)对应7-9,刚好填满1-9。
方法2:用你原来的一维循环(调整索引计算)
如果你想保留从1到9的一维循环,可以通过数值计算出对应的行和列索引:
#include<iostream> using namespace std; int main(){ int ar[3][3]= {0}; for(int i =1;i<=9;i++){ // 计算行索引:(i-1)除以3的整数结果(C++整数除法会截断小数) int row = (i - 1) / 3; // 计算列索引:(i-1)除以3的余数 int col = (i - 1) % 3; ar[row][col] = i; } // 打印验证 for(int i = 0; i<3; i++){ for(int j = 0;j<3; j++){ cout<<ar[i][j]<<" "; } cout<<"\n"; } return 0; }
解释:比如i=1时,对应ar[0][0]=1;i=4时,对应ar[1][0]=4,以此类推,刚好把每个i放到对应的数组位置里。
两种方法运行后都会输出:
1 2 3 4 5 6 7 8 9
内容的提问来源于stack exchange,提问作者noobiee
相关产品推荐
相关产品推荐

