第九章 数组.docx

上传人:b****4 文档编号:27085032 上传时间:2023-06-26 格式:DOCX 页数:10 大小:21.10KB
下载 相关 举报
第九章 数组.docx_第1页
第1页 / 共10页
第九章 数组.docx_第2页
第2页 / 共10页
第九章 数组.docx_第3页
第3页 / 共10页
第九章 数组.docx_第4页
第4页 / 共10页
第九章 数组.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

第九章 数组.docx

《第九章 数组.docx》由会员分享,可在线阅读,更多相关《第九章 数组.docx(10页珍藏版)》请在冰豆网上搜索。

第九章 数组.docx

第九章数组

第九章数组

9.1一维数组的定义和一维数组元素的引用

9.1.1一维数组的定义

类型名数组名[整型常量表达式],……;

inta[8],a,*p;

说明:

(1)定义了一个名为a的一维数组。

(2)方括号中的8规定了数组含有8个元素,它们是a[0]—a[7].

(3)类型名int规定了数组中每个元素都是整型,在每一个元素中只能存放整型数。

(4)每个元素只有一个下标,C语言规定每个数组第一个下标总为0(称为数组下标下界)。

(5)C编译程序将为数组在内存中开辟连续的存储单元。

特点:

数组具有相同的名称,相同的类型,不同的下标,占用一串连续存储空间的变量。

也称为带下标的变量。

9.1.2一维数组元素的引用

a[0]=12;

x=2;

a[x-2]=1545;

a[0]=a[1]+a[2];

a[0]=1;

a[2]=2;

a[a[0]]=456;

注意:

数组元素使用时,下标可是整型表达式,定义时必须是整型常量

(1)一个数组元素实质上就是一个变量名,代表内存中的一个存储单元。

一个数组占有一串连续的存储单元。

(2)在C语言中,一个数组不能整体引用。

9.1.3一维数组的初始化

inta[5]={1,2,3,4,5,6,7,8};

1

2

3

4

5

inta[5]={1,2,3};

1

2

3

0

0

inta[5];

0

0

0

0

0

chars[5]={‘a’,’b’,’c’};

a

b

c

\0

\0

9.1.4通过赋初值定义数组的大小

inta[]={1,2,3,4,5};

1

2

3

4

5

inta[]={1,2,3};

1

2

3

9.1.5一维数组的定义和数组元素引用举例

例9.1P108页

9.2一维数组和指针

9.2.1一维数组和数组元素的地址

inta[5],*p;

10011005100910131017

a[0]a[1]a[2]a[3]a[4]

p=&a[2];

*(++p)a[3]

p=&a[2];

p[1]==*(p+1)<>a[3]

9.2.2通过数组首地址引用数组元素

inta[5],*p;

10011005100910131017

a[0]a[1]a[2]a[3]a[4]

p=&a[0];

p=a;

C语言中规定数组名为数组空间的首地址,而且不能修改这个地址值。

a=&a[2];

*(a+2)a[2]

*(a+i)a[i]

9.2.3通过指针引用一维数组元素

p=a;

*(p+2)a[2]p[2]

*(p+i)a[i]p[i]

9.2.4用带下标的指针变量引用一维数组元素

(1)s[i]

(2)*(s+i)

(3)*(p+i)

(4)p[i]

9.3函数之间对一维数组和数组元素的引用

9.3.1数组元素作实参

形参应该是相应类型的变量

9.3.2数组名作实参

当数组名作为实参时,对应的形参除了是指针外,还可以用另外两种形式。

(1)fun(int*a)

(2)fun(inta[])

(3)fun(inta[20])

注意:

在第(2)和第(3)种形式中,虽然说明的形式与数组的说明相同,但C编译程序都将把a处理成第一种的指针形式。

9.3.3数组元素地址作为实参

形参应该是相应类型的指针

9.3.4函数的指针形参和函数体中数组的区别

(1)在形参中的a[N],C编译程序都将其作为一个指针变量处理。

系统只为形参开辟一个存储单元,并把实参的起始地址存入其中。

(2)函数体中的出现的a[N],是定义了个一数组,系统会为它开辟一串连续的存储单元。

(3)在函数执行完毕,返回主函数时,系统将释放形参以及函数体中的变量和数组所占用的存储单元。

因此,不要返回函数体中变量的地址,这样做,主函数中的指针变量将不指向任何对象而成为“无向指针”。

9.4一维数组应用举例

(1)对数组赋值(赋有规律值、赋随机值)

(2)输出所有数组元素的值

(3)把数组元素中符合条件的元素存入另一个数组中。

(拆分,合并)9。

29

(4)对数组元素排序(升序、降序,倒序)

(5)在数组元素中查找某个指定的数

(6)删除数组元素中的某个数139页9。

28

(7)向有序数组中插入一个数,插入后保证数组仍然有序。

P140页9.31

(8)给数组赋互不相同的值。

P140页9.33

9.5二维数组的定义和二维数组元素的引用

9.5.1二维数组的定义

二维数组的定义形式:

类型名数组名[常量表达式1][常量表达式2],……;

例:

inta[3][4];

a[0][0]

a[0][1]

a[0][2]

a[0][3]

a[1][0]

a[1][1]

a[1][2]

a[1][3]

a[2][0]

a[2][1]

a[2][2]

a[2][3]

说明:

(1)定义了一个名为a的二维数组

(2)a数组中每个元素都是整型

(3)a数组中共有3×4个元素

(4)a数组的逻辑结构是一个具有如下形式的3行4列的矩阵

在C语言中,可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元素的一维数组。

9.5.2二维数组元素的引用

引用(使用)二维数组元素时必须带有两个下标。

数组名[行下标][列下标]

a[0][0]=23;

a[x][y]=23;

注意:

引用二维数组元素时,一定要把两个下标分别放在两个方括号内。

9.5.3二维数组的初始化

1、所赋初值个数与数组元素个数相同

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

2、每行所赋初值个数与数组元素个数不同

inta[4][3]={{1,2},{4,5},{7},{10}};

系统会自动给该行后面的元素补初值0。

3、所赋初值行数少于数组行数

inta[4][3]={{1,2},{4,5}};

系统将自动给后面各行的元素补初值0。

4、赋初值时省略行花括号

inta[4][3]={1,2,4,5};

9.5.4通过赋初值定义二维数组的大小

inta[][3]={{1,2,3},{4,5},{6},{8}};

intc[][3]={1,2,3,4,5};

第一维的大小按以下规则决定:

(1)当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小。

(2)当初值的个数不能被第二维的常量表达式的值除尽时,则:

第一维的大小=所得商数+1

9.5.5二维数组的定义和数组元素引用举例

给二维数组的所有元素赋值

把二给数组的所有元素输出

外循环变量控制的是行下标,就是按行操作

外循环变量控制的是列下标,就是按列操作

9.6二维数组和指针

9.6.1二维数组和数组元素的地址

有以下定义:

int*p,a[3][4];

1、二维数组a由若干个一维数组组成

a[0][0]

a[0][1]

a[0][2]

a[0][3]

a[1][0]

a[1][1]

a[1][2]

a[1][3]

a[2][0]

a[2][1]

a[2][2]

a[2][3]

p=a[i]是合法的

a[i]*(a+i)

所以p=*(a+i)也是合法的

*(a[i]+j)a[i][j]

p=a[i]

*(p+j)p[j]a[i][j]

2、二维数组名也是一个地址值常量

二维数组名同样也是一个存放地址常量的指针,其值为二维数组中第一个元素的地址。

以上a数组,数组名a与a[0]的值相同,只是其基类型为具有4个整型元素的数组类型。

3、二维数组元素的地址

二维数组元素的地址可以由表达式&a[i][j]求得,也可以通过每行的首地址来表示。

二维数组元素的地址可以用以下五种形式求得:

(1)&a[i][j]

(2)a[i]+j

(3)*(a+i)+j

(4)&a[0][0]+4*i+j

(5)a[0]+4*i+j

9.6.2地址引用二维数组元素

(1)a[i][j]

(2)*(a[i]+j)

(3)*(*(a+i)+j)

(4)(*(a+i))[j]

(5)*(&a[0][0]+4*i+j)

9.6.3通过建立一个指针数组引用二维数组元素

int*p[3],a[3][2],i,j;

p[0]=a[0];

p[1]=a[1];

p[2]=a[2];

for(i=0;i<3;i++)p[i]=a[i];

a[0][0]

a[0][1]

a[1][0]

a[1][1]

a[2][0]

a[2][1]

p[0]

p[1]

p[2]

*(p[0]+1)a[0][1]p[0][1]

*(p[i]+j)a[i][j]p[i][j]

9.6.4通过建立一个行指针引用二维数组元素

inta[3][2],(*p)[2];

a[0][0]

a[0][1]

a[1][0]

a[1][1]

a[2][0]

a[2][1]

*(a+i)a[i]

*(a[i]+j)a[i][j]

p=a;

*(p+i)p[i]a[i]

*(p[i]+j)p[i][j]a[i][j]

9.7二维数组名和指针数组

9.7.1二维数组名作为实参时实参和形参之间的数据传递

(1)fun(double(*a)[N])

(2)fun(doublea[][N])

(3)fun(doublea[M][N]) 

9.7.2指针数组作为实参时实参和形参之间的数据传递

(1)fun(int*a[M])

(2)fun(int*a[])

(3)fun(int**a)

9.8二维数组程序举例

(1)对二维数组所有元素赋值

(2)输出二维数组中的所有元素

(3)求二维数组中每行(列)之和及平均值

(4)求二维数组中周边元素之和

(5)求二维数组中对角线元素之和

(6)二维数组的转置及某几行(列)交换

(7)找二维数组所有元素中的最大(最小)数所在的行列

(8)按行(列或对角线)排序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1