大学C语言程序设计基础第6章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《大学C语言程序设计基础第6章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 语言程序设计 基础 课件
- 资源描述:
-
1、 第第6 6章章 数数 组组概述概述基本数据类型基本数据类型:如整型、实型、字符型。:如整型、实型、字符型。 这些数据又这些数据又表现为常量、变量表现为常量、变量。基本数据类型中的数据之间没有任。基本数据类型中的数据之间没有任何关联,也没有任何顺序。一堆无序的且没有任何关联的数据是很难处何关联,也没有任何顺序。一堆无序的且没有任何关联的数据是很难处理的。所以,需要把数据变量理的。所以,需要把数据变量有序地关联有序地关联起来。形成起来。形成构造类型构造类型。构造类型:构造类型:由基本数据型按照一定的规则构成一些复杂的数据类型由基本数据型按照一定的规则构成一些复杂的数据类型. . 如如数组、结构体
2、、共同体数组、结构体、共同体等。等。数组定义:数组定义: 有序数据(有序数据(变量变量)的集合。)的集合。 数组中的每一个元素都属于数组中的每一个元素都属于同一数据类型;同一数据类型; 数组元素用一个统一的数组元素用一个统一的数组名和下标数组名和下标来唯一的确定。来唯一的确定。算法依赖于数据结构,选择合适的数据结构,可以简化算法算法依赖于数据结构,选择合适的数据结构,可以简化算法。程序程序=算法算法+数据结构。数据结构。 6 .1 一维数组的定义和引用一维数组的定义和引用1 1、一维数组的定义:、一维数组的定义: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式 ;例如:例如: int
3、int a10 a10;表示定义了一个含有表示定义了一个含有1010个整型元素、名称为个整型元素、名称为a a的一维数组。的一维数组。说明:说明:(1)(1) 类型说明符用来说明数组中各个数据元素的类型。在类型说明符用来说明数组中各个数据元素的类型。在 任何一个数组中,数据元素的类型都是一致的。任何一个数组中,数据元素的类型都是一致的。(2) (2) 数组名的命名规则与变量名相同,遵循标识符命名规数组名的命名规则与变量名相同,遵循标识符命名规 则则( (以字母或下划线开头,由字母、数字、下划线组以字母或下划线开头,由字母、数字、下划线组 成成) )。 注意:注意:数组名不仅是一个标识符号,它还
4、是一个数组名不仅是一个标识符号,它还是一个地址常地址常量。量。是数组第一个元素的存储地址。是数组第一个元素的存储地址。 int a10;(3) 常量表达式用方括号常量表达式用方括号 括起,不能用圆括括起,不能用圆括 号,如号,如 b(10) 是错误的。是错误的。(4) 常量表达式表示常量表达式表示数组中元素的个数,即数组数组中元素的个数,即数组 的长度的长度。例如,在。例如,在a10中,中,10 表示数组中表示数组中 有有10个元素。这个元素。这10个元素分别是:个元素分别是: a0,a1,a2,a3,a4,a5,a6, a7,a8,a9。 注意:下标从注意:下标从0开始,没有开始,没有a10
5、。(5) 常量表达式中必须是由常量表达式中必须是由常量或常量或符号常量符号常量组成的表达式,组成的表达式,不能包含变量。例如,不能包含变量。例如, (6) 由于数组元素占有连续的内存单元,因此一维数组中的由于数组元素占有连续的内存单元,因此一维数组中的各个元素按照下标规定的顺序存放在内存中。各个元素按照下标规定的顺序存放在内存中。例如,我们定义了一个整型的一维数组例如,我们定义了一个整型的一维数组 int a5;那么这个那么这个 数组中的每个元素都将占用二个字节。数组中的每个元素都将占用二个字节。 假定内存地址假定内存地址1000开始存放数组开始存放数组 a: 各元素起始地址:各元素起始地址:
6、 1000 1002 1004 1006 1008 各数组元素各数组元素 : a0 a1 a2 a3 a4(7) 定义数组只是为数组预留适当的内存空间,并未给数组定义数组只是为数组预留适当的内存空间,并未给数组元素赋值。元素赋值。int n=10;char namen; # define M 10char textM*2+17定义的作用:系统为数组开辟相应的内存定义的作用:系统为数组开辟相应的内存空间空间aa0a1a2a3a4a5a6a7a8a9例:例:int a10 ;各元素在内存中连续存放各元素在内存中连续存放数组名代表首地址数组名代表首地址2.一维数组元素的引用一维数组元素的引用 引用引
7、用 就是读出数组中某一元素的值或将数椐赋给某一数就是读出数组中某一元素的值或将数椐赋给某一数组元素。组元素。 定义了一个数组以后,怎么引用数组中的元素呢?定义了一个数组以后,怎么引用数组中的元素呢?C语言规定只能一个一个地引用数组元素而语言规定只能一个一个地引用数组元素而不能整体引不能整体引 用数组名。用数组名。引用的一般形式:引用的一般形式: 数组名数组名下标下标使用说明:使用说明: 先定义数组,再引用数组元素。先定义数组,再引用数组元素。 用指定的下标来引用数组中的元素。用指定的下标来引用数组中的元素。 下标可以是表达式。例如:下标可以是表达式。例如: x3=b11+b10; i=2; a
8、=xi+2; 一个数组含有一个数组含有 n 个元素,那么下标的取值范围为个元素,那么下标的取值范围为 0,n-1。引用数组元素时,注意下标值不要超出数组范围。引用数组元素时,注意下标值不要超出数组范围。例如:通过循环控制数组元素下标的变化,达到输入例如:通过循环控制数组元素下标的变化,达到输入10个数个数 的目的。的目的。Int a10; for(i=0;i=10;i+) scanf(%d,&ai);应该在数组定义范围内操作:应该在数组定义范围内操作:#include void main()int i,a10; for(i=0;i=9;i+) ai=i; for(i=0;i=9;i+) pri
9、ntf(“%3d”,ai);下标超界下标超界例例: 从键盘输入从键盘输入10个字符,再反序输出。程序如下:个字符,再反序输出。程序如下:#include stdio.h void main()char ch10; /*定义字符数组定义字符数组C,它含有,它含有10个字符个字符*/ int i; for(i=0;i=0;i-) /*反序输出反序输出*/ printf(%c,chi); putchar(n); getch(); (演示)(演示)3. 3. 一维数组的初始化一维数组的初始化 定义数组只是为数组元素分配了存储空间。其值是不确定的。定义数组只是为数组元素分配了存储空间。其值是不确定的。因
10、此,在引用数组元素前,还必须给下标变量赋值。因此,在引用数组元素前,还必须给下标变量赋值。 还可以在定义数组的同时给数组赋初值还可以在定义数组的同时给数组赋初值,这称为:数组的初始化这称为:数组的初始化。形式如下:形式如下: 类型说明符数组名类型说明符数组名长度长度数值表数值表;使用说明:使用说明:(1)对数组的初始化操作只能在定义数组时进行,大括号中的内容即为对数组的初始化操作只能在定义数组时进行,大括号中的内容即为 数组的初值,各项用逗号隔开。数组的初值,各项用逗号隔开。 例如,例如,int X10=0,1,2,3,4,5,6,7,8,9;定义了一个含有定义了一个含有10个整型元素的数组。
11、个整型元素的数组。X0=0、x1=1、x2=2(2) 可以只给部分数组元素赋初值。可以只给部分数组元素赋初值。 例如,例如,int a4=1,2; 定义了一个含有定义了一个含有4个整型元素的数组。个整型元素的数组。但只对前但只对前2个元素个元素a0,a1赋初值,其余的元素系统将自动赋值为赋初值,其余的元素系统将自动赋值为0。(3) 如果想将数组中的所有元素全部赋为如果想将数组中的所有元素全部赋为0时,可以写成:时,可以写成: int a10=0,0,0,0,0,0,0,0,0,0; 也可以这样写:也可以这样写:int a10=0; 虽然只给第虽然只给第0个元素赋初值,但系统会自动将剩余的数个元
12、素赋初值,但系统会自动将剩余的数组元素赋值组元素赋值 0。 (4) 对全部数组元素赋初值时,可以不指定数组的大小。对全部数组元素赋初值时,可以不指定数组的大小。 int a=1,2,3,4,5; 省略数组的大小后,系统能够根据初值的个数自动定义省略数组的大小后,系统能够根据初值的个数自动定义决定数组的长度为决定数组的长度为 5。 因此这个数组定义语句相当于:因此这个数组定义语句相当于: int a5=1,2,3,4,5;例例1: 键盘输入键盘输入10数,输出其中最小的数。数,输出其中最小的数。 用数组用数组a10存放存放10个数,通过循环控制数组元素的下标读入。第个数,通过循环控制数组元素的下
13、标读入。第1个个数数a0作为比较的目标。从第二个数作为比较的目标。从第二个数a1开始直到开始直到a9 ,每一个数与,每一个数与min进行比较。如果大于进行比较。如果大于min,则放弃此数并读入下一个数,否则将此小数,则放弃此数并读入下一个数,否则将此小数赋值给赋值给min。通过次比较后,。通过次比较后,min就是最小数。就是最小数。-打擂台法打擂台法#include void main() int i,a10,min; printf(input 10 number:); for(i=0;i=9;i+) scanf(%d,&ai); min=a0; for(i=1;iai) min=ai; pr
14、intf(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-1; for(i=0;i20;i+) if(i%5=0) printf(n); printf(%10d,fi); printf(n); 算法简单,占内存多算法简单,占内存多#include main() int f1,f2,f3,
15、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个数排序。个数排序。 (由小到大)(由小到大)思想思想: : 让大数逐步让大数逐步“沉入沉入”数组的底部数组的底部, ,让小数象气泡似的让小数象气泡似的“冒起冒起”到数组的顶点。到数组的顶点。做法:做法:将将相邻相邻两个数比较,将小的调到前头。两个数比较,将小的调到前头。第第1轮:共进行轮:共进行4小次两两比较,
16、最大的数向后移到了小次两两比较,最大的数向后移到了a5(最后)最后)第第2轮:只对前轮:只对前4个数进行个数进行3次两两比较,挑出这次两两比较,挑出这4个数中最大的一个,放到个数中最大的一个,放到a4(次后次后)第第3轮:只对前轮:只对前3个数进行个数进行2次两两比较,挑出这次两两比较,挑出这3个数中最大的一个,放到个数中最大的一个,放到a3第第4轮:只对前轮:只对前2个数进行个数进行1次两两比较,挑出这次两两比较,挑出这2个数中最大的一个,放到个数中最大的一个,放到a216比较的轮数:比较的轮数:n-1第第i轮比较的次数:轮比较的次数:j=n-i# define N 5main( ) int
17、 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: a1a2 j=2: a2a3 j=3: a3a4 i=3: j=1: a1a2 j=2: a2a3i=4: j=1: a1a2双重循环执行过程双重循环执行过程6.2 6.2 二维数组的定义和引用二维数组的定义和引
18、用 到目前为止,我们问题分析的还只是一维数组。如果需到目前为止,我们问题分析的还只是一维数组。如果需要描述类似矩阵这样的数据,该如何实现呢?考虑一个要描述类似矩阵这样的数据,该如何实现呢?考虑一个3*4的矩阵的矩阵M: 0 1 2 3 4 5 6 7 8 9 11 12Mi,j 指的是第指的是第i行第行第j列的元素,其中列的元素,其中i 的范围是的范围是1-3,j 的范围的范围 是是1-4。例如,例如,M3,2指的是第指的是第3行第行第2列的元素,其值为列的元素,其值为9。 在在C语言中对类似矩阵这样的数据可以用一个语言中对类似矩阵这样的数据可以用一个二维数组二维数组来来表示。表示。C语言允许
19、使用多维数组,二维数组是最简单的多维语言允许使用多维数组,二维数组是最简单的多维数组。数组。一、一、 二维数组的定义二维数组的定义1)二维数组的定义形式二维数组的定义形式 类型说明符类型说明符 数组名数组名常量表达式常量表达式 常量表达式常量表达式;其中其中: 类型说明符用来说明数组中各个数据元素的类型。类型说明符用来说明数组中各个数据元素的类型。 第第1个常量表达式说明了这个数组有几行。第个常量表达式说明了这个数组有几行。第2个常量个常量表达式说明了每行有几个元素,或说明了几列。数组表达式说明了每行有几个元素,或说明了几列。数组元素的个数是两个常量表达式的乘积。元素的个数是两个常量表达式的乘
20、积。例如:例如: int a34; 表示定义一个二维数组表示定义一个二维数组a,它有,它有3行行4列,共列,共12个元素,个元素,其中每个元素为整型。其中每个元素为整型。可以将二维数组可以将二维数组 a 看成由看成由 3 个一维数组组成,一维数组个一维数组组成,一维数组名分别是:名分别是: ; 每个一维数组中又含有每个一维数组中又含有4个元素个元素,例如第一个一维数组,例如第一个一维数组a0的各个元素表示为:的各个元素表示为: a00、a01、a02、a03。整个整个a数组可以描述成如下形式:数组可以描述成如下形式:这种对二维数组的描述方式对第这种对二维数组的描述方式对第10章学习用章学习用指
21、针处理数指针处理数组组时将非常有用。时将非常有用。 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 2) 二维数组的存储二维数组的存储C语言规定,二维数组中的元素排列的顺序是语言规定,二维数组中的元素排列的顺序是按行优按行优先先,即存储时先存放第一行的数据,再存放第二行的数,即存储时先存放第一行的数据,再存放第二行的数据,以此类推。例如,二维数组据,以此类推。例如,二维数组a34在内存中的存放顺在内存中的存放顺序为:序为: a00a01a02a10a11a12a20a21a22。21二维数组二维数组
22、a a在内存中存放形式在内存中存放形式二维数组是按行存放的。二维数组是按行存放的。即:先存放第一行的元素即:先存放第一行的元素;再存放第二行的元素再存放第二行的元素;.。二、二、 二维数组元素的引用二维数组元素的引用 定义数组,引用元素。定义数组,引用元素。 引用格式为:引用格式为: 数组名数组名下标下标下标下标 例如例如: int a22 共定义了共定义了4个元素,分别为:个元素,分别为: a00,a01,a10,a11二维数组的引用使用两个下标。另外要注意:二维数组的引用使用两个下标。另外要注意: int a45; 定义数组定义数组 b=a34; 引用元素,将元素引用元素,将元素a34赋值
23、给变量赋值给变量 b。 ?能用?能用 b=a45给变量赋值吗?给变量赋值吗? 三、二维数组的初始化三、二维数组的初始化二维数组初始化的方法有以下几种方法:二维数组初始化的方法有以下几种方法: 将所有的数值顺序列在一对大括号中将所有的数值顺序列在一对大括号中: int a34=1,2,3,4,5,6,7,8,9,10,11,12; (太不直观。)(太不直观。) 分行给二维数组赋初值。将初始值按行排列,每行用大分行给二维数组赋初值。将初始值按行排列,每行用大括号括起来,括号括起来, 各行之间用逗号分隔。例如:各行之间用逗号分隔。例如: int a34=1,2,3,4,5,6,7,8,9,10,11
24、,12; (比较直观,)比较直观,) 可以只给每行的前面部分数组元素赋初值。可以只给每行的前面部分数组元素赋初值。 int a34=1,4,3,1,2; 这种赋值方式相当于这种赋值方式相当于: int a34=1,0,0,0,4,3,0,0,1,2,0,0; (系统自动将没有赋值的元素赋(系统自动将没有赋值的元素赋0。)。) 可以对各行的某一元素赋初值。可以对各行的某一元素赋初值。 int a34=1,0,6,0,0,11; 这种赋值方式相当于这种赋值方式相当于: int a34=1,0,0,0,0,6,0,0,0,0,11,0; 可以只对部分行赋初值。可以只对部分行赋初值。 int a34=
25、1,1;这种赋值方式相当于这种赋值方式相当于: int a34=1,0,0,0,0,0,0,0,1,0,0,0; 如果将数组的所有元素全部赋值的话,在定义数组时可如果将数组的所有元素全部赋值的话,在定义数组时可以省略第一维的长度,但注意以省略第一维的长度,但注意。如:如: int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 一共定义了一共定义了12个数据,系统会根据总个数自动确定第一个数据,系统会根据总个数自动确定第一维的长度(数据总数除以第二维的长度)。维的长度(数据总数除以第二维的长度)。 这种赋值方式相当于:这种赋值方式相当于: int a34=1,2,3,4,5,6
展开阅读全文