C语言 第四章 数组(4)

目录

多维数组

理解

举例:

 二维数组的定义方式

定义方式1: 

定义方式2:

二维数组的内存分析

 成员的调用 

  举例

代码示例1

代码示例2

代码示例3


多维数组


理解

二维数组、三维数组、...都称为多维数组。

本节主要讲解二维数组,三维及以上的数组,以此类推即可。

举例:

公司有3个攻坚小分队,每队有6名同事,要把这些同事的工资用数组保存起来以备查看。
  

队员1  队员2 队员3 队员4  队员5 队员6 
第一分队 10000 11000 12000 13000 14000 15000 
第二分队 16000 17000 18000 19000 20000 21000 
第三分队 22000 23000 24000 25000 26000 27000

  • 此时建立数组salary用于存储工资,它应当是二维的。
  • 第一维用来表示第几分队,第二维用来表示第几个同事。
  • 例如用salary[2,3]表示角标2对应分队的角标3对应队员的工资。
  • 对于二维数组的理解,可以看作是由一维数组嵌套而成的。即一维数组array1又作为另一个一维数组array2的元素而存在。

 二维数组的定义方式


定义方式1: 

eg.

int a[3][4]; 

 该二维数组a由三个一维数组a[0]、a[1]、a[2]构成,每个一维数组有4个元素,共12个成员(3×4 = 12)。

C语言 第四章 数组(4)_第1张图片

C语言 第四章 数组(4)_第2张图片    二维数组,常称为矩阵,把二维数组按行(row)和列(column)的排列,可以形象的理解二维数组的逻辑结构。


定义方式2:

声明与初始化同时进行

 eg.

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

相当于将第一维的每个成员写成一个数组。

C语言 第四章 数组(4)_第3张图片
 


二维数组的内存分析


C语言中,二维数组元素按行存放,最右边的下标变化最快,第一维的下标变化最慢。
举例,整型数组 b[3][3]  内存存放展示。关于长度示例:

int b[3][3];
printf("%d\n",sizeof(b)); //36 
printf("%d\n",sizeof(b)/sizeof(int)); //9

 成员的调用 


格式:

数组名[下标][下标] ,多维数组每个维度的第一个成员从0开始编号。
举例:

给指定索引位置的元素赋值:

int arr1[3][5];
arr1[0][0] = 12;
arr1[2][4] = 5;

  举例


遍历二维数组获取所有元素的和,提示使用for的嵌套循环。
 


代码示例1

// 二维数组声明定义方式1
int arr[3][4]; 

// 二维数组初始化及遍历求和示例
int a[3][4] = { {0: { 0: 1, 1: 2, 2: 3, 3: 4} },
                {1: { 0: 5, 1: 6, 2: 7, 3: 8} },
                {2: { 0: 9, 1: 10, 2: 11, 3: 12} } };
int sum = 0;
for (int i = 0; i < sizeof(a)/sizeof(int); ++i) {
    for (int j = 0; j < sizeof(a[i])/sizeof(int); ++j) {
        printf("%d\t",a[i][j]);
        sum+=a[i][j];
    }
    printf("\n");
}

代码示例2

int main(){
// 使用二维数组实现杨辉三角
// 1. 创建二维数组
int row = 10;// 行数
int arr[row][row*2+1]; 

// 2. 初始化二维数组
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) {
    for (int j = 0; j < sizeof(arr[i])/sizeof(int); ++j) {
        arr[i][j] = 0;
    }
}

// 部分计算杨辉三角元素的代码(截取部分)
for (int j = 1; j < sizeof(arr[i])/sizeof(int)-1; ++j) {
    arr[i][j] = arr[i-1][j-1]+arr[i-1][j+1];
}

// 4. 打印杨辉三角
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) {
    for (int j = 0; j < sizeof(arr[i])/sizeof(int); ++j) {
        if(arr[i][j]==0){
            printf("\t");
        }else{
            printf("%d\t",arr[i][j]);
        }
    }
    printf("\n");
}
 
 

代码示例3

int main (){
// 定义并初始化二维数组a
int a[3][4] = { {0: { 0: 1, 1: 2, 2: 3, 3: 4} },
                {1: { 0: 5, 1: 6, 2: 7, 3: 8} },
                {2: { 0: 9, 1: 10, 2: 11, 3: 12} } };
int sum = 0;
// 计算二维数组a所有元素的和并打印
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
    for (int j = 0; j < sizeof(a[i])/sizeof(int); ++j) {
        printf("%d\t",a[i][j]);
        sum+=a[i][j];
    }
    printf("\n");
} 
printf("总和为%d",sum);
}

你可能感兴趣的:(c语言,算法,c#,开发语言)