用一个for循环打印出一个二维数组
2016-06-23 09:50
316 查看
思路分析:
int array[row][column];
首先,二维数组在内存中默认情况下是行存储的,所以可以将二维数组array看成一个一维数组,i 标识该数组在一维数组中的位置,则array在二维数组中的行号和列号分别为 [ i / column] 和 [ i % column]。
例如,arr[2][3] = {1, 2, 3, 4, 5, 6}; 数组元素对应的下标为 0, 1, 2, 3, 4, 5。
其中,row = 2; column = 3;
元素 1 对应的 行号为 [0 / 3] = 0,列号为 [0 % 3] = 0;
元素 2 对应的 行号为 [1 / 3] = 0,列号为 [1 % 3] = 1;
元素 3 对应的 行号为 [2 / 3] = 0,列号为 [2 % 3] = 2;
元素 4 对应的 行号为 [3 / 3] = 1,列号为 [3 % 3] = 0;
元素 5 对应的 行号为 [4 / 3] = 1,列号为 [4 % 3] = 1;
元素 6 对应的 行号为 [5 / 3] = 1,列号为 [5 % 3] = 2;
具体实现如下:
输出如下:
拓展:对于一个三维数组而言,也可以采用类似的方法实现。
输出如下:
分析:要注意数组中每一维数字的取值顺序问题。
(1)由于是多维数组,第一维,前6次循环都取0,后6次取1,故 i/6 满足要求。
(2)第二维,前3次为0,再3次为1,再3次为0,再3次为1,用量化的思想,i/3把12个数字分为4组,每组3个,量化为0、1、2、3,为了要得到0、1、0、1,需要对(0、1、2、3)%2,故 (i/3)%2 满足要求。
(3)第三维,需要的是(0、1、2;0、1、2;0、1、2;0、1、2)故 i%3 满足要求。
int array[row][column];
首先,二维数组在内存中默认情况下是行存储的,所以可以将二维数组array看成一个一维数组,i 标识该数组在一维数组中的位置,则array在二维数组中的行号和列号分别为 [ i / column] 和 [ i % column]。
例如,arr[2][3] = {1, 2, 3, 4, 5, 6}; 数组元素对应的下标为 0, 1, 2, 3, 4, 5。
其中,row = 2; column = 3;
元素 1 对应的 行号为 [0 / 3] = 0,列号为 [0 % 3] = 0;
元素 2 对应的 行号为 [1 / 3] = 0,列号为 [1 % 3] = 1;
元素 3 对应的 行号为 [2 / 3] = 0,列号为 [2 % 3] = 2;
元素 4 对应的 行号为 [3 / 3] = 1,列号为 [3 % 3] = 0;
元素 5 对应的 行号为 [4 / 3] = 1,列号为 [4 % 3] = 1;
元素 6 对应的 行号为 [5 / 3] = 1,列号为 [5 % 3] = 2;
具体实现如下:
#include <iostream> // 一个for循环打印二维数组 void printArr(int arr[][3], int len) { for (int i = 0; i < len; i++) // 此处的len,可以用row * column 来替换。 printf("%d ", arr[i/3][i%3]); printf("\n"); } int main(int argc, const char * argv[]) { int arr[2][3] = {1, 2, 3, 4, 5, 6}; int len = sizeof(arr)/sizeof(int); printArr(arr, len); return 0; }
输出如下:
拓展:对于一个三维数组而言,也可以采用类似的方法实现。
#include <iostream> // 一个for循环打印三维数组 int main(int argc, const char * argv[]) { int arr[2][2][3] = {{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}}; for (int i = 0; i < 2*2*3; i++) printf("%d ", arr[i/6][(i/3)%2][i%3]); printf("\n"); return 0; }
输出如下:
分析:要注意数组中每一维数字的取值顺序问题。
(1)由于是多维数组,第一维,前6次循环都取0,后6次取1,故 i/6 满足要求。
(2)第二维,前3次为0,再3次为1,再3次为0,再3次为1,用量化的思想,i/3把12个数字分为4组,每组3个,量化为0、1、2、3,为了要得到0、1、0、1,需要对(0、1、2、3)%2,故 (i/3)%2 满足要求。
(3)第三维,需要的是(0、1、2;0、1、2;0、1、2;0、1、2)故 i%3 满足要求。
相关文章推荐
- Lua中使用二维数组实例
- C#使用二维数组模拟斗地主
- C#二维数组基本用法实例
- javascript的日期对象、数组对象、二维数组使用说明
- PHP 如何获取二维数组中某个key的集合
- 改写函数实现PHP二维/三维数组转字符串
- java 二维数组矩阵乘法的实现方法
- Swift中定义二维数组的方法及遍历方法示例
- 举例理解C语言二维数组的指针指向问题
- C#和Java中二维数组区别分析
- php去除二维数组的重复项方法
- php对二维数组进行相关操作(排序、转换、去空白等)
- php将一维数组转换为每3个连续值组成的二维数组
- PHP中使用foreach()遍历二维数组的简单实例
- php对二维数组按指定键值key排序示例代码
- PHP按指定键值对二维数组进行排序的方法
- PHP将二维数组某一个字段相同的数组合并起来的方法
- js二维数组定义和初始化的三种方法总结
- C语言中二维数组指针的简要说明
- php实例分享之二维数组排序