C语言程序设计07章数组.ppt
《C语言程序设计07章数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计07章数组.ppt(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1 1页页第七章第七章 数数 组组 数组的定义:是有序数据的集合。数组的定义:是有序数据的集合。数组的特点:数组中的每个元素都属于同一数据类型。数组的特点:数组中的每个元素都属于同一数据类型。数组的访问:我们用一个统一的数组名和下标来唯一地确定数数组的访问:我们用一个统一的数组名和下标来唯一地确定数组中的元素。组中的元素。基本类型:基本类型:char int
2、 float doublechar int float doublechar int float doublechar int float double enum enum 构造类型:构造类型:ArrayArrayArrayArray struct union struct union 空类型空类型void void 指针类型:与以上各种类型相结合。指针类型:与以上各种类型相结合。概概 述述数据类型数据类型 LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计
3、算机科学系 C C语言程序设计语言程序设计 第第 2 2页页7.1 一维数组的定义和引用一维数组的定义和引用7.1.1 一维数组的定义一维数组的定义n定义方式:定义方式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式例:例:int a10;它表示数组名为它表示数组名为a,此数组有此数组有10个整型元素。个整型元素。如右图:如右图:a9a8a1a0a LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第
4、3 3页页n说明:说明:1)数组名命名规则和用户标识符命名规则相同;)数组名命名规则和用户标识符命名规则相同;2)数组名的常量表达式用方括弧括起来,而不是用圆括弧。)数组名的常量表达式用方括弧括起来,而不是用圆括弧。3)常量表达式表示元素的个数,即)常量表达式表示元素的个数,即数组长度数组长度。例如:。例如:int a10;表示表示a数组共有数组共有10个元素,个元素,下标从下标从0开始开始,分别为:,分别为:a0,a1,a2,a3,a4,a5,a6,a7,a8,a9注意:注意:没有没有a10。4)常量表达式常量表达式中可以包括中可以包括常量常量和和符号常量符号常量,不能包含变量,即,不能包含
5、变量,即数组的大小应在编译阶段确定,不允许在程序运行过程中才数组的大小应在编译阶段确定,不允许在程序运行过程中才确定。确定。例如:例如:int n;scanf(“%d”,&n);int an;是不合法的。是不合法的。LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 4 4页页7.1.2 一维数组元素的引用一维数组元素的引用 C语言规定,只能逐个引用数组元素而不能一次引用整语言规定,只能逐个引用数组元素而不能一
6、次引用整个数组。个数组。一维数组元素的表示形式为:一维数组元素的表示形式为:数组名数组名下标下标 其中下标可以是整型(常量其中下标可以是整型(常量/变量)或整型表达式。变量)或整型表达式。例如:例如:a0=a5+a7-a2*3;LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 5 5页页n例例7.1 数组元素的引用数组元素的引用main()int i,a10;for(i=0;i=0;i-)printf(“%d
7、”,ai);本例使本例使a0到到a9的值为的值为09,然后按逆序输出这,然后按逆序输出这10个元个元素的值。素的值。LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 6 6页页7.1.3 一维数组的初始化一维数组的初始化(1)完全初始化:在定义一个数组时,对数组中所有元素)完全初始化:在定义一个数组时,对数组中所有元素都提供了初始化数据都提供了初始化数据。例如:例如:int a10=0,1,2,3,4,5,6
8、,7,8,9;其中:其中:a0=0,a1=1,a2=2,a3=3,a4=4,a5=5,a6=6,a7=7,a8=8,a9=9(2)部分初始化:提供了初始化数据,但数据不够,不够部分初始化:提供了初始化数据,但数据不够,不够的部分取的部分取0。例如:例如:int a10=0,1,2,3,4;其中:其中:a0=0,a1=1,a2=2,a3=3,a4=4,a5=0,a6=0,a7=0,a8=0,a9=0(3)没有初始化:只是定义了一个数组,但没有提供任何没有初始化:只是定义了一个数组,但没有提供任何初始化数据,这时数组中每个元素的值是初始化数据,这时数组中每个元素的值是不确定不确定的。的。例如:例如
9、:int a10;LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 7 7页页(4)如果想把数组中所有元素初始化为)如果想把数组中所有元素初始化为0,可以写成:,可以写成:int a10=0,0,0,0,0,0,0,0,0,0;但不能写成:但不能写成:int a10=0*10;(5)若对数组中所有元素进行了初始化,可不指定数组长度。)若对数组中所有元素进行了初始化,可不指定数组长度。例如:例如:int a5=
10、0,1,2,3,4;可以写成:可以写成:int a =0,1,2,3,4;对于后一种定义系统会默认对于后一种定义系统会默认a 数组的长度为数组的长度为5。但是但是如果被定义的数组长度与提供初值的个数不相同时,如果被定义的数组长度与提供初值的个数不相同时,则数组长度不能省略。则数组长度不能省略。例如:例如:int a10=0,1,2,3,4;只初始化了前只初始化了前5个元素,后个元素,后5个元素不确定。个元素不确定。LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工
11、学院计算机科学系 C C语言程序设计语言程序设计 第第 8 8页页例例7.2 用数组来处理求用数组来处理求Fibonacci数列问题。数列问题。(P116-117和和P124)main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;/*一次循环只求一个数一次循环只求一个数*/for(i=0;i20;i+)if(i%5=0)printf(“n”);printf(“%12d”,fi);7.1.4 一维数组程序举例一维数组程序举例这里只求了前这里只求了前20个数个数,与与P117区别。区别。f0f1f2f3f18f19110000000 LanJ co
12、pyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 9 9页页例例7.3 用冒泡法对用冒泡法对10个数排序(由小到大)。个数排序(由小到大)。冒泡法:冒泡法:在要排序的数中,依次将相邻的两个数进行比在要排序的数中,依次将相邻的两个数进行比较,若满足排序要求,保持两者位置不变,否则交换位置:较,若满足排序要求,保持两者位置不变,否则交换位置:985420第一次第一次比较比较895420第二次第二次比较比较859420第三次第三
13、次比较比较854920第四次第四次比较比较第五次第五次比较比较854290854209第一次第一次冒泡排冒泡排序结果序结果第第一一次次冒冒泡泡排排序序从最前面两个元素开始,两两比较,直到最后一个元素比较完,最大从最前面两个元素开始,两两比较,直到最后一个元素比较完,最大的元素就到了最后的位置,这叫作的元素就到了最后的位置,这叫作“一趟一趟”冒泡法排序。冒泡法排序。LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第
14、第 1010页页从上述我们可以得出:从上述我们可以得出:如如果果有有n个个数数参参加加冒冒泡泡排排序序,则则要要进进行行n-1趟趟比比较较。在在第第j 趟趟比比较较中中有有n-j+1个个数数参参加加排排序序,要要进进行行n-j次次两两两两比比较较。比比如如:本例中第本例中第2 趟有趟有5个数参加排序,进行了个数参加排序,进行了4 次比较。次比较。854209第一次第一次比较比较584209第二次第二次比较比较548209第三次第三次比较比较542809第四次第四次比较比较542089第二次第二次冒泡排冒泡排序结果序结果第第二二次次冒冒泡泡排排序序 LanJ copyright LanJ cop
15、yright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1111页页main()int a11;int i,j,t;printf(“input 10 numbers:n”);for(i=1;i11;i+)scanf(“%d”,&ai);printf(“n”);for(j=1;j=9;j+)/*共共n-1趟趟*/for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(“the sorted numbers:n”);for(i=1;iai
16、+1假假ai与与ai+1交换交换输出输出a1到到anf fo or r循循环环的的嵌嵌套套 LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1212页页7.2 二维数组的定义和引用二维数组的定义和引用7.2.1 二维数组的定义二维数组的定义n一般形式:一般形式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式 常量表达式常量表达式 例:例:float a23,b510;此此句句定定义义了了一一个个名
17、名为为a的的2行行3列列的的实实数数数数组组和和一一个个名名为为b的的5行行10列的实数数组。列的实数数组。注意:注意:不能写成:不能写成:float a2,3,b5,10;n说明:说明:(1)在在C语语言言中中,可可把把二二维维数数组组看看成成一一个个特特殊殊的的一一维维数数组组:它它的的一一个个元元素素又又是是一一个个一一维维数数组组,即即可可看看成成是是一一维维数数组组的的嵌套嵌套。比比如如:我我们们可可以以把把二二维维数数组组a23看看成成下下图图所所示示的的嵌嵌套关系。套关系。LanJ copyright LanJ copyright Monday,January 16,2023Mo
18、nday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1313页页 相应的内存空间,如右图:相应的内存空间,如右图:二维数组是多维数组的基础。其二维数组是多维数组的基础。其它多维数组的定义和元素存放形式与它多维数组的定义和元素存放形式与二维数组类似。二维数组类似。(2)二维数组的存放顺序:)二维数组的存放顺序:C语言中,二维数组的元素在内存中是语言中,二维数组的元素在内存中是按行依次连续按行依次连续存放存放的,即先顺序存放第一行的元素,再存放第二行的元的,即先顺序存放第一行的元素,再存放第二行的元素,以此类推。素,以此
19、类推。例如:例如:a23的存放形式为的存放形式为a00 a01 a02 a10 a11 a12 a0 a00,a01,a02 a1 a10,a11,a12aa00a01a02a10a11a12低地址低地址高地址高地址 LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1414页页7.2.2 二维数组的引用二维数组的引用n二维数组元素的表示形式为:二维数组元素的表示形式为:数组名数组名 下标下标 下标下标 例如
20、:例如:a23表示的是表示的是a二维数组的第二维数组的第3行第行第4列的元素。列的元素。n注意:数组超界的问题。注意:数组超界的问题。假如有程序段:假如有程序段:int a34;a34=13;引用引用a34便超出了所定义的边界,此时系统不会便超出了所定义的边界,此时系统不会报错,同样把报错,同样把13赋值到指定单元,但此单元却可能是我们赋值到指定单元,但此单元却可能是我们的其它有用数据。这样,便很容易造成意想不到的错误,的其它有用数据。这样,便很容易造成意想不到的错误,甚至死机。甚至死机。同学们一定要小心,这是大家经常感到莫名其同学们一定要小心,这是大家经常感到莫名其妙的地方。妙的地方。Lan
21、J copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1515页页7.2.3 二维数组的初始化二维数组的初始化(1)按行对二维数组进行初始化。例如:)按行对二维数组进行初始化。例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;(2)也可将所有数据写在一个花扩弧内,系统会以按行存放的顺也可将所有数据写在一个花扩弧内,系统会以按行存放的顺序依次对各数组元素进行初始化。例如:序依次对各数组元素进行初
22、始化。例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;(3)和一维数组一样,也可只对)和一维数组一样,也可只对各行中前面部分元素各行中前面部分元素初始化。初始化。例如:例如:int a34=1,5,9;它的作用是只对每行第一列元素进行初始化,其它元素自动它的作用是只对每行第一列元素进行初始化,其它元素自动为为0,结果为:,结果为:LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1
23、616页页也可以只对也可以只对前面各行前面各行中的元素初始化,其它元素自动为中的元素初始化,其它元素自动为0:int a34=1,2,3;结果为:结果为:(4)若要对全部元素都初始化,则定义数组时对第一维的)若要对全部元素都初始化,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。长度可以不指定,但第二维的长度不能省略。例如:例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;可以写成:可以写成:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;注意:初始化只能从注意:初始化只能从“前面前面”开始,即必须先初始化前面各行再初开始,即必须先
24、初始化前面各行再初始化后面各行,也必须先初始化每行的前面部分再初始化后面部分。始化后面各行,也必须先初始化每行的前面部分再初始化后面部分。不能跳过前面部分去初始化后面部分。(不能跳过前面部分去初始化后面部分。(P128P128有错)有错)如:如:int a5=1,3,4,5;和和int b34=1,2,3;是错的。是错的。LanJ copyright LanJ copyright Monday,January 16,2023Monday,January 16,2023 四川理工学院计算机科学系四川理工学院计算机科学系 C C语言程序设计语言程序设计 第第 1717页页例例7.4 将二维数组将二
25、维数组 行和列元素互换,存到另一个二行和列元素互换,存到另一个二 维数组中。维数组中。7.2.4 二维数组程序举例二维数组程序举例main()int a23=1,2,3,4,5,6;int b32,i,j;printf(“array a:n”);for(i=0;i=1;i+)/*控制行控制行*/for(j=0;j=2;j+)/*控制列控制列*/printf(“%5d”,aij);bji=aij;printf(“n”);printf(“array b:n”);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(“%5d”,bij);printf(“n”);j=0i=0654
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 07 数组
限制150内