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

如何用循环为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:35:38