一、一维数组

1、数组声明

数组声明:数据类型 数组名称[ ];

2、数组赋值

【1】数据类型 数组名称[n] = {元素1,元素2,...元素n}

注意:上述两种表述方式是一样的,通过{ }中元素的个数可以自动推断出[ ]中的元素个数

当定义数组[ ]内的元素个数大于{ }后内的元素个数时,其余元素用0占位,如下图所示。

【2】对已知数组中某个位置(下标,数组下标从0,...,n-1)的元素进行赋值

【3】若赋值一组有规律的数例如成等差数列,例如“100,101,...,109”,采用循环

延申:打印数据并将其对应的地址打印出来,发现其地址是连续的。

3、sizeof关键字

由于在利用循环对数组赋值时,需要输入循环变量的范围,对于数组来说一般情况下则为其长度,一般采用:sizeof(数组名)/sizeof(数组名[0]),即用整个数组的大小除以一个元素的大小则为其长度

4、一维数组小练习

【1】数组初始化及逆序输出:对10个数组元素依次赋值0,1,2,3,4,5,6,7,8,9,要求按逆序输出。

【2】输出斐波那契数列:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,...如果设a_{n}为该数列的第n项,那么这句话可以写成a_{n}=a_{n-1}+a_{n-2}

5、冒泡排序

 通过对待排序序列从前向后(从下标较小的元素开始),依次对相邻两个元素的值进行两两比较,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就如果水底下的气泡一样逐渐向上冒。

6、简单选择排序

在待排序数组中选出最小的(或最大)的与第一个位置的数据交换 然后在剩下的待排序数组中找出最小(或最大)的与第二个位置的数据交换,以此类推,直到第n-1个元素。简单选择排序可以说是冒泡排序的一种改版,它不再两两比较出较小数就进行交换,而是每次遍历比较当前数的后面所有数,最后再把最小的数和当前数进行交换。

二、二维数组

1、二维数组声明

二维数组声明:数据类型 数组名称[数组行数] [数组列数]

2、二维数组解释

C语言对二维数组采用这样的定义方式,使得二维数组可被看作是一种特殊的一维数组,它的元素又是一个一维数组。例如可以把一个二维数组float a[3][4]看作是一个一维数组,它有三个元素a[0],a[1],a[2],每一个元素又是一个包含4个元素的一维数组,如下图所示。

a[0]  -------------------  a[0][0]     a[0][1]     a[0][2]     a[0][3]

a[1]  -------------------  a[1][0]     a[1][1]     a[1][2]     a[1][3]

a[2]  -------------------  a[2][0]     a[2][1]     a[2][2]     a[2][3]

3、二维数组赋值

【1】分行给二维数组赋初值,如下图所示。

这种赋值方法比较直观,把第1个花括号内的数据给第1行的元素,第2个花括号内的数据给第2行的元素......即按行赋值。 

【2】可以将所有数据写在一个花括号内,按数组元素所在内存的排列顺序对各元素赋初值。

【3】只对各行第1列(即索引为array[i][0])的元素赋值,其余自动为0

【4】可以对各行中的某一元素赋初始值

【5】可以只对某几行元素赋值

【6】如果对全部元素都赋值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。

注意,行可以不写但是列不可以不写,否则会发生如下报错

4、二维数组小练习

【1】利用循环嵌套输出二维数组值并显示对应索引。

【2】有一个3×4的矩阵,要求编写程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

更多推荐