C语言(19)-----二维数组

来源:互联网 发布:头皮痒 知乎 编辑:程序博客网 时间:2024/06/05 14:39

二维数组的概述和定义

二维数组主要用于处理二维序列,二维序列可以理解为序列元素为一维序列的一维序列。

在C语言中,二维数组可以理解为一种特殊的一维数组,可以看作数组元素为一维数组的一维数组。

标准语法格式:

数据类型名 数组名[一维容量][二维容量];


例如:

int arr[3][4];表示定义一个3行4列的二维数组


二维数组的初始化

二维数组的初始化有4中形式:

形式1

语法:

数组类型名  数组名[M][N] = {值0,值1,值2......值(M*N-1)};

例如:

int arr[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

将数组看作矩阵,初始化后如下:

0     1      2      3

4     5      6      7

8     9     10    11


形式2

当数组元素较少时,将每一个元素均赋值到对应矩阵的位置。例如

int arr[3][4]={

  {0,1,2,3},

  {4,5,6,7},

  {8,9,10,11}

};

初始化后的与形式1初始化一样。


形式3

跟一维数组一样,可以只初始化部分元素,其余元素编译器自动进行初始化。

例如:

int arr[3][4] = {0,1,2,3,4,5,6};

初始化后矩阵形式为:

0    1    2    3

4    5    6    0

0    0    0    0

数据元素初始化先把第一行的每一列元素初始化,然后才是第二行的每一列元素初始化,依次往下类推,

没有显式初始化的,编译器自动初始化为0。


形式4

可以不指定一维容量的元素个数,但是二维容量的元素个数需要指定。例如

int arr[][4] = {

    {0,1,2,3},

    {4,5},

    {6,7}

};

矩阵形式:

0    1     2    3

4     5    0    0

6     7    0    0


二维数组的访问

数组元素访问语法:

arr[一维索引][二维索引];

特别注意:容量下标位置从0开始,比如arr[1][2]表示二行三列位置元素

通过一维索引和二维索引访问元素,把数组初始化之后可以看作矩阵,比如:

int arr[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

将数组看作矩阵,初始化后如下:

0     1      2      3

4     5      6      7

8     9     10    11

然后我们通过一维索引和二维索引访问元素即为在矩阵中通过行列数查找元素。

比如,arr[1][2]即为表示二维数组中二行三列位置元素为6,通过这样的方式访问二维数组。


二维数组实例

eg1,二维数组的定义,初始化,访问,将二维数组以矩阵形式输出

#include "stdio.h"#define ROW 3 /* 一维容量 */#define COLUMN 4 /* 二维容量 */int main(void) {int i,j;  /* 定义二维数组,采用形式1初始化 */  int arr[ROW][COLUMN] = {0,1,2,3,4,5,6,7,8,9,10,11};    /* 将二维数组以矩阵的形式输出 */  for (i=0;i<ROW;i++) {   for (j=0;j<COLUMN;j++) {    if (j<COLUMN-1) {     printf("%d  ",arr[i][j]);      } else {        printf("%d \n",arr[i][j]);     }    }  }return 0;}

运行结果:



eg2,矩阵转置实现

#include "stdio.h"#define SIZE 3 /* 一维容量 */int main(void) {int i,j;  /* 定义二维数组,采用形式1初始化 */  int arr[SIZE][SIZE] = {0,1,2,3,4,5,6,7,8};    int arrTran[SIZE][SIZE] = {0};    /* 将二维数组以矩阵的形式输出 */  printf("===========转置前的矩阵============\n");  for (i=0;i<SIZE;i++) {    for (j=0;j<SIZE;j++) {    if (j<SIZE-1) {        printf("%d       ",arr[i][j]);     } else {        printf("%d       \n",arr[i][j]);    }    }  }  /* 矩阵转置操作,将数组arr中的元素转置存入arrTran中 */  for (i=0;i<SIZE;i++) {    for (j=0;j<SIZE;j++) {    arrTran[j][i] = arr[i][j];    }  }  printf("============转置后的矩阵==========\n");  for (i=0;i<SIZE;i++) {    for (j=0;j<SIZE;j++) {    if (j<SIZE-1) {        printf("%d       ",arrTran[i][j]);     } else {        printf("%d       \n",arrTran[i][j]);    }    }  }return 0;}

运行结果:



0 0
原创粉丝点击