大学C语言程序设计基础第6章课件.ppt
《大学C语言程序设计基础第6章课件.ppt》由会员分享,可在线阅读,更多相关《大学C语言程序设计基础第6章课件.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第第6 6章章 数数 组组概述概述双精度型双精度型双精度型双精度型(double)(double)(double)(double)结构体类型结构体类型结构体类型结构体类型(struct)(struct)(struct)(struct)共用体类型共用体类型共用体类型共用体类型(union)(union)(union)(union)数数数数 据据据据 类类类类 型型型型整型(整型(整型(整型(intintintint)实型实型实型实型单精度型单精度型单精度型单精度型(float)(float)(float)(float)字符类型字符类型字符类型字符类型(char)(char)(char)(cha
2、r)数组类型数组类型数组类型数组类型枚举类型枚举类型枚举类型枚举类型(enum)(enum)(enum)(enum)基本类型基本类型基本类型基本类型构造类型构造类型构造类型构造类型指针类型指针类型指针类型指针类型 空类型空类型空类型空类型基本数据类型基本数据类型:如整型、实型、字符型。:如整型、实型、字符型。这些数据又这些数据又表现为常量、变量表现为常量、变量。基本数据类型中的数据之间没有任。基本数据类型中的数据之间没有任何关联,也没有任何顺序。一堆无序的且没有任何关联的数据是很难处何关联,也没有任何顺序。一堆无序的且没有任何关联的数据是很难处理的。所以,需要把数据变量理的。所以,需要把数据变
3、量有序地关联有序地关联起来。形成起来。形成构造类型构造类型。构造类型:构造类型:由基本数据型按照一定的规则构成一些复杂的数据类型由基本数据型按照一定的规则构成一些复杂的数据类型.如如数组、结构体、共同体数组、结构体、共同体等。等。数组定义:数组定义:有序数据(有序数据(变量变量)的集合。)的集合。数组中的每一个元素都属于数组中的每一个元素都属于同一数据类型;同一数据类型;数组元素用一个统一的数组元素用一个统一的数组名和下标数组名和下标来唯一的确定。来唯一的确定。算法依赖于数据结构,选择合适的数据结构,可以简化算法算法依赖于数据结构,选择合适的数据结构,可以简化算法。程序程序=算法算法+数据结构
4、。数据结构。6.1一维数组的定义和引用一维数组的定义和引用1 1、一维数组的定义:、一维数组的定义:类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例如:例如:int a10int a10;表示定义了一个含有表示定义了一个含有1010个整型元素、名称为个整型元素、名称为a a的一维数组。的一维数组。说明:说明:(1)(1)类型说明符用来说明数组中各个数据元素的类型。在类型说明符用来说明数组中各个数据元素的类型。在 任何一个数组中,数据元素的类型都是一致的。任何一个数组中,数据元素的类型都是一致的。(2)(2)数组名的命名规则与变量名相同,遵循标识符命名规数组名的命名规则与变量名相同,
5、遵循标识符命名规 则则(以字母或下划线开头,由字母、数字、下划线组以字母或下划线开头,由字母、数字、下划线组 成成)。注注意意:数数组组名名不不仅仅是是一一个个标标识识符符号号,它它还还是是一一个个地地址址常常量量。是数组第一个元素的存储地址。是数组第一个元素的存储地址。inta10;(3)常量表达式用方括号常量表达式用方括号括起,不能用圆括括起,不能用圆括号,如号,如b(10)是错误的。是错误的。(4)常量表达式表示常量表达式表示数组中元素的个数,即数组数组中元素的个数,即数组的长度的长度。例如,在。例如,在a10中,中,10表示数组中表示数组中有有10个元素。这个元素。这10个元素分别是:
6、个元素分别是:a0,a1,a2,a3,a4,a5,a6,a7,a8,a9。注意:下标从注意:下标从0开始,没有开始,没有a10。(5)常常量量表表达达式式中中必必须须是是由由常常量量或或符符号号常常量量组组成成的的表表达达式式,不能包含变量。例如,不能包含变量。例如,(6)由于数组元素占有连续的内存单元,因此一维数组中的由于数组元素占有连续的内存单元,因此一维数组中的各个元素按照下标规定的顺序存放在内存中。各个元素按照下标规定的顺序存放在内存中。例如,我们定义了一个整型的一维数组例如,我们定义了一个整型的一维数组inta5;那么这个那么这个数组中的每个元素都将占用二个字节。数组中的每个元素都将
7、占用二个字节。假定内存地址假定内存地址1000开始存放数组开始存放数组a:各元素起始地址:各元素起始地址:10001002100410061008各数组元素各数组元素:a0a1a2a3a4(7)定义数组只是为数组预留适当的内存空间,并未给数组定义数组只是为数组预留适当的内存空间,并未给数组元素赋值。元素赋值。int n=10;char namen;#define M 10char textM*2+17定义的作用:系统为数组开辟相应的内存空定义的作用:系统为数组开辟相应的内存空间间数数数数组组组组a a a a在在在在内内内内存存存存中中中中是是是是如如如如何何何何存存存存放放放放的呢的呢的呢的
8、呢?aa0a1a2a3a4a5a6a7a8a9例:例:int a10;各元素在内存中连续存放各元素在内存中连续存放数组名代表首地址数组名代表首地址2.一维数组元素的引用一维数组元素的引用引引用用就就是是读读出出数数组组中中某某一一元元素素的的值值或或将将数数椐椐赋赋给给某某一一数数组元素。组元素。定义了一个数组以后,怎么引用数组中的元素呢?定义了一个数组以后,怎么引用数组中的元素呢?C语言规定只能一个一个地引用数组元素而语言规定只能一个一个地引用数组元素而不能整体引不能整体引用数组名。用数组名。引用的一般形式:引用的一般形式:数组名数组名下标下标使用说明:使用说明:先定义数组,再引用数组元素。
9、先定义数组,再引用数组元素。用指定的下标来引用数组中的元素。用指定的下标来引用数组中的元素。下标可以是表达式。例如:下标可以是表达式。例如:x3=b11+b10;i=2;a=xi+2;一一个个数数组组含含有有n个个元元素素,那那么么下下标标的的取取值值范范围围为为0,n-1。引用数组元素时,注意下标值不要超出数组范围。引用数组元素时,注意下标值不要超出数组范围。例如:通过循环控制数组元素下标的变化,达到输入例如:通过循环控制数组元素下标的变化,达到输入10个数个数的目的。的目的。Inta10;for(i=0;i=10;i+)scanf(%d,&ai);应该在数组定义范围内操作:应该在数组定义范
10、围内操作:#includevoidmain()inti,a10;for(i=0;i=9;i+)ai=i;for(i=0;i=9;i+)printf(“%3d”,ai);下标超界下标超界例例:从键盘输入从键盘输入10个字符,再反序输出。程序如下:个字符,再反序输出。程序如下:#includestdio.hvoidmain()charch10;/*定义字符数组定义字符数组C,它含有,它含有10个字符个字符*/inti;for(i=0;i=0;i-)/*反序输出反序输出*/printf(%c,chi);putchar(n);getch();(演示)(演示)3.3.一维数组的初始化一维数组的初始化 定
11、义数组只是为数组元素分配了存储空间。其值是不确定的。定义数组只是为数组元素分配了存储空间。其值是不确定的。因此,在引用数组元素前,还必须给下标变量赋值。因此,在引用数组元素前,还必须给下标变量赋值。还可以在定义数组的同时给数组赋初值还可以在定义数组的同时给数组赋初值,这称为:数组的初始化这称为:数组的初始化。形式如下:形式如下:类型说明符数组名类型说明符数组名长度长度数值表数值表;使用说明:使用说明:(1)对数组的初始化操作只能在定义数组时进行,大括号中的内容即为对数组的初始化操作只能在定义数组时进行,大括号中的内容即为数组的初值,各项用逗号隔开。数组的初值,各项用逗号隔开。例如,例如,int
12、X10=0,1,2,3,4,5,6,7,8,9;定义了一个含有定义了一个含有10个整型元素的数组。个整型元素的数组。X0=0、x1=1、x2=2(2)可以只给部分数组元素赋初值。可以只给部分数组元素赋初值。例如,例如,inta4=1,2;定义了一个含有定义了一个含有4个整型元素的数组。个整型元素的数组。但只对前但只对前2个元素个元素a0,a1赋初值,其余的元素系统将自动赋值为赋初值,其余的元素系统将自动赋值为0。(3)如果想将数组中的所有元素全部赋为如果想将数组中的所有元素全部赋为0时,可以写成:时,可以写成:inta10=0,0,0,0,0,0,0,0,0,0;也可以这样写:也可以这样写:i
13、nta10=0;虽然只给第虽然只给第0个元素赋初值,但系统会自动将剩余的数个元素赋初值,但系统会自动将剩余的数组元素赋值组元素赋值0。不能这样写:不能这样写:不能这样写:不能这样写:inta10=0*10;inta10=0*10;在在在在C C语言中不能给数组整体赋初值。语言中不能给数组整体赋初值。语言中不能给数组整体赋初值。语言中不能给数组整体赋初值。(4)对全部数组元素赋初值时,可以不指定数组的大小。对全部数组元素赋初值时,可以不指定数组的大小。inta=1,2,3,4,5;省略数组的大小后,系统能够根据初值的个数自动定义省略数组的大小后,系统能够根据初值的个数自动定义决定数组的长度为决定
14、数组的长度为5。因此这个数组定义语句相当于:因此这个数组定义语句相当于:inta5=1,2,3,4,5;例例1:键盘输入键盘输入10数,输出其中最小的数。数,输出其中最小的数。用数组用数组a10存放存放10个数,通过循环控制数组元素的下标读入。第个数,通过循环控制数组元素的下标读入。第1个个数数a0作为比较的目标。从第二个数作为比较的目标。从第二个数a1开始直到开始直到a9,每一个数与,每一个数与min进行比较。如果大于进行比较。如果大于min,则放弃此数并读入下一个数,否则将此小数,则放弃此数并读入下一个数,否则将此小数赋值给赋值给min。通过次比较后,。通过次比较后,min就是最小数。就是
15、最小数。-打擂台法打擂台法#includevoidmain()inti,a10,min;printf(input10number:);for(i=0;i=9;i+)scanf(%d,&ai);min=a0;for(i=1;iai)min=ai;printf(nmin=%d,min);(演示)(演示)14例例2:求求Fibonacci数列数列:1,1,2,3,5,8,的前的前20个数个数.公式为公式为:F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n=3)#include void main()int i,f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-
16、1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%10d,fi);printf(n);算法简单,占内存多算法简单,占内存多#include main()int f1,f2,f3,i;f1=1;f2=1;printf(“%10d%10dn”,f1,f2);for(i=1;i=18;i+)f3=f1+f2;printf(“%10d”,f3);if(i%2=0)printf(“n”);f1=f2;f2=f3;15例例3:用冒泡法对:用冒泡法对n个数排序。个数排序。(由小到大)(由小到大)思想思想:让大数逐步让大数逐步“沉入沉入”数组的底部数组的底部,让小数象气泡
17、似的让小数象气泡似的“冒起冒起”到数组的顶点。到数组的顶点。做法:做法:将将相邻相邻两个数比较,将小的调到前头。两个数比较,将小的调到前头。以五个数为例以五个数为例以五个数为例以五个数为例数组数组数组数组aa1 1 aa2 2 aa3 3 aa4 4 aa5 5 数组的初始状态数组的初始状态数组的初始状态数组的初始状态8282313165659 94747第一轮比较结果第一轮比较结果第一轮比较结果第一轮比较结果31318282656582829 9828247478282第二轮比较结果第二轮比较结果第二轮比较结果第二轮比较结果313165659 96565474765658282第三轮比较结果
18、第三轮比较结果第三轮比较结果第三轮比较结果9 93131474765658282第四轮比较结果第四轮比较结果第四轮比较结果第四轮比较结果9 931314747656582828282656547479 93131第第1轮:共进行轮:共进行4小次两两比较,最大的数向后移到了小次两两比较,最大的数向后移到了a5(最后)最后)第第2轮:只对前轮:只对前4个数进行个数进行3次两两比较,挑出这次两两比较,挑出这4个数中最大的一个,放到个数中最大的一个,放到a4(次后次后)第第3轮:只对前轮:只对前3个数进行个数进行2次两两比较,挑出这次两两比较,挑出这3个数中最大的一个,放到个数中最大的一个,放到a3第
19、第4轮:只对前轮:只对前2个数进行个数进行1次两两比较,挑出这次两两比较,挑出这2个数中最大的一个,放到个数中最大的一个,放到a216比较的轮数:比较的轮数:n-1第第i轮比较的次数:轮比较的次数:j=n-i#define N 5main()int aN+1,k,i,j,temp;printf(input%d number:n,N);for(k=1;k=N;k+)scanf(%d,&ak);for(i=1;i=N-1;i+)for(j=1;jaj+1)temp=aj;aj=aj+1;aj+1=temp;for(k=1;ka2 j=2:a2a3 j=3:a3a4 j=4:a4a5i=2:j=1:
20、a1a2 j=2:a2a3 j=3:a3a4 i=3:j=1:a1a2 j=2:a2a3i=4:j=1:a1a2双重循环执行过程双重循环执行过程6.2 6.2 二维数组的定义和引用二维数组的定义和引用 到目前为止,我们问题分析的还只是一维数组。如果需到目前为止,我们问题分析的还只是一维数组。如果需要描述类似矩阵这样的数据,该如何实现呢?考虑一个要描述类似矩阵这样的数据,该如何实现呢?考虑一个3*4的矩阵的矩阵M:01234567891112Mi,j指的是第指的是第i行第行第j列的元素,其中列的元素,其中i的范围是的范围是1-3,j的范围的范围是是1-4。例如,例如,M3,2指的是第指的是第3行
21、第行第2列的元素,其值为列的元素,其值为9。在在C语言中对类似矩阵这样的数据可以用一个语言中对类似矩阵这样的数据可以用一个二维数组二维数组来来表示。表示。C语言允许使用多维数组,二维数组是最简单的多维语言允许使用多维数组,二维数组是最简单的多维数组。数组。一、一、二维数组的定义二维数组的定义1)二维数组的定义形式二维数组的定义形式类型说明符类型说明符数组名数组名常量表达式常量表达式常量表达式常量表达式;其中其中:类型说明符用来说明数组中各个数据元素的类型。类型说明符用来说明数组中各个数据元素的类型。第第1个个常常量量表表达达式式说说明明了了这这个个数数组组有有几几行行。第第2个个常常量量表表达
22、达式式说说明明了了每每行行有有几几个个元元素素,或或说说明明了了几几列列。数数组组元元素素的个数是两个常量表达式的乘积。的个数是两个常量表达式的乘积。例如:例如:inta34;表示定义一个二维数组表示定义一个二维数组a,它有,它有3行行4列,共列,共12个元素,个元素,其中每个元素为整型。其中每个元素为整型。可以将二维数组可以将二维数组a看成由看成由3个一维数组组成,一维数组个一维数组组成,一维数组名分别是:名分别是:a0a0、a1a1、a2a2;每个一维数组中又含有每个一维数组中又含有4个元素个元素,例如第一个一维数组,例如第一个一维数组a0的各个元素表示为:的各个元素表示为:a00、a01
23、、a02、a03。整个整个a数组可以描述成如下形式:数组可以描述成如下形式:这种对二维数组的描述方式对第这种对二维数组的描述方式对第10章学习用章学习用指针处理数指针处理数组组时将非常有用。时将非常有用。2)二维数组的存储二维数组的存储C语言规定,二维数组中的元素排列的顺序是语言规定,二维数组中的元素排列的顺序是按行优按行优先先,即存储时先存放第一行的数据,再存放第二行的数,即存储时先存放第一行的数据,再存放第二行的数据,以此类推。例如,二维数组据,以此类推。例如,二维数组a34在内存中的存放顺在内存中的存放顺序为:序为:a00a01a02a10a11a12a20a21a22。21a00a00
24、a01a01a02a02a03a03a10a10a11a11a12a12a13a13a20a20a21a21a22a22a23a23a a或或或或a0a0a1a1a2a2二维数组二维数组a a在内存中存放形式在内存中存放形式二维数组是按行存放的。二维数组是按行存放的。即:先存放第一行的元素即:先存放第一行的元素;再存放第二行的元素再存放第二行的元素;.。二、二、二维数组元素的引用二维数组元素的引用定义数组,引用元素。定义数组,引用元素。引用格式为:引用格式为:数组名数组名下标下标下标下标例如例如:inta22共定义了共定义了4个元素,分别为:个元素,分别为:a00,a01,a10,a11二维数
25、组的引用使用两个下标。另外要注意:二维数组的引用使用两个下标。另外要注意:inta45;定义数组定义数组b=a34;引用元素,将元素引用元素,将元素a34赋值给变量赋值给变量b。?能用?能用b=a45给变量赋值吗?给变量赋值吗?三、二维数组的初始化三、二维数组的初始化二维数组初始化的方法有以下几种方法:二维数组初始化的方法有以下几种方法:将所有的数值顺序列在一对大括号中将所有的数值顺序列在一对大括号中:inta34=1,2,3,4,5,6,7,8,9,10,11,12;(太不直观。)(太不直观。)分行给二维数组赋初值。将初始值按行排列,每行用大分行给二维数组赋初值。将初始值按行排列,每行用大括
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 语言程序设计 基础 课件
限制150内