《C语言程序设计》-胡宏智-电子教案(含例题) 第05章

上传人:E**** 文档编号:89400246 上传时间:2019-05-24 格式:PPT 页数:92 大小:330.50KB
返回 下载 相关 举报
《C语言程序设计》-胡宏智-电子教案(含例题) 第05章_第1页
第1页 / 共92页
《C语言程序设计》-胡宏智-电子教案(含例题) 第05章_第2页
第2页 / 共92页
《C语言程序设计》-胡宏智-电子教案(含例题) 第05章_第3页
第3页 / 共92页
《C语言程序设计》-胡宏智-电子教案(含例题) 第05章_第4页
第4页 / 共92页
《C语言程序设计》-胡宏智-电子教案(含例题) 第05章_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《《C语言程序设计》-胡宏智-电子教案(含例题) 第05章》由会员分享,可在线阅读,更多相关《《C语言程序设计》-胡宏智-电子教案(含例题) 第05章(92页珍藏版)》请在金锄头文库上搜索。

1、第5章 数 组,5.1数组的应用场合 5.2一维数组的定义、引用和初始化 5.3多维数组的定义、引用和初始化 5.4字符数组 5.5本章小结 5.6问与答,内容简介,5.1数组的应用场合,前面我们所学的简单变量只能处理某一个数据,如果要处理一批具有同类型的数据时,应该如何去做呢? 【问题】如何将键盘输入的20个整型数按从大到小的次序输出? 显然我们不能用20个整型变量来表示这20个数值,而是将这些数据看成是一个集合,给这个集合起一个名字,我们称之为数组名,数据在集合中的位置(序号),我们称之为下标,用数组名和下标能够惟一标识一个集合中的元素,我们称该元素为数组元素。,5.1数组的应用场合,数组

2、是将具有同一属性的数据存放在一起的有序集合,可以看成是变量的集合,主要用于处理成批数据,它是C语言提供的一种构造类型。数组中每一个数组元素,与前面所介绍过的普通变量一样,可以被赋值、参与表达式运算、采用输入输出函数进行输入输出等。数组元素由其在数组中的位置序号来标识,不同的下标表示不同的数组元素。数组的使用使程序变得简洁、灵活,它是程序设计中的一种十分有用的工具。使用数组可以使许多复杂的算法得以实现,这些复杂的算法用一般变量是无法完成的。 按照数组的形状结构划分,可分为一维数组和多维数组。按照数组元素的类型划分,可分为数值型数组、字符数组、指针数组、结构数组等 。,5.2一维数组的定义、引用和

3、初始化,一维数组定义的一般形式: 类型标识符 数组名常量表达式; 其中常量表达式的值表示数组的长度,即数组中元素的个数。 一维数组定义后,系统将按数据类型和元素个数分配一组连续的存储单元,每个存储单元存放一个数组元素(一个存储单元的大小由数组元素的类型决定),因此每个数组元素相当于一个普通变量(又称下标变量),该连续存储单元的首地址由数组名表示 。,5.2.1一维数组的定义,5.2一维数组的定义、引用和初始化,例如:int a5; 它表示定义了一个整型数组a,有5个元素。定义后系统为数组a分配连续5个存储单元,每个存储单元占2个字节,共分配10个字节,该存储单元的首地址用a表示,即a与&a0都

4、表示数组a在内存中的首地址 。 说明: 数组名的命名规则和前面所学的普通变量名相同,遵循标识符命名规则。 常量表达式必须用方括号括起来。 数组的下标是从0开始的,这一点请读者注意。例如前面定义的a中有5个元素,这5个元素是a0,a1,a2,a3,a4,不存在a5这个元素。 常量表达式中可以包括常量和符号常量,不能含有变量。因为定义数组后,系统就会给数组分配固定的存储单元,因此数组的大小必须确定。,5.2.1一维数组的定义,5.2一维数组的定义、引用和初始化,初始化是指在数组定义的同时给数组元素赋初值,对一维数组的初始化可以用以下几种方法。 给数组中所有元素赋值。即将数组元素的初值依次放在一对花

5、括号里。例如: int a5=10,20,30,40,50; 表示该数组中元素a0,a1,a2,a3,a4的值分别为:10,20,30,40,50。 给数组中部分元素赋值。例如: int a5=10,20,30; 表示该数组中元素a0,a1,a2的值分别为10,20,30,而元素a3,a4的值系统会自动赋为0。,5.2.2一维数组的初始化,5.2一维数组的定义、引用和初始化,注意:数组在初始化时,花括号里的常数的个数必须小于等于数组中元素的个数,否则会出现编译错误。例如: int a5=1,2,3,4,5,6; /*错误,数组中只有5个元 素,却赋了6个数值 */ 如果想给数组中所有元素赋相同

6、的值,必须逐个写出,不能省略。 对数组中所有元素赋值,可以不指定数组的长度。例如: int a5=10,20,30,40,50; 可以写成: int a =10,20,30,40,50; 这时系统会根据花括号中数据的个数,自动定义数组a的长度为5。但若数组长度与花括号中数据的个数不同时,数组长度就不能省略了。,5.2.2一维数组的初始化,5.2一维数组的定义、引用和初始化,1一维数组元素的引用 一维数组定义之后,它的元素可以在程序中使用。数组元素的使用称为“引用”。C语言规定:只能逐个引用数组元素而不能一次引用整个数组。 数组元素引用形式为: 数组名下标 其中下标是整型常量或整型表达式,若为实

7、型数值则系统会自动取整。它的值应在数组定义的范围里,即从0到数组长度减1之间,若超出此范围,系统不报错。,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,【例5-1】阅读程序,写出程序的运行结果。 #include main() int a4,k; a0=2;a1=5; a2=a0+a1; a3=a2*3+1; for(k=0;k4;k+) printf(“%3d“,ak); ,Ex5_1.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,2一维数组应用程序范例 下面通过几个范例来说明一维数组的应用。 【例5-2】从键盘输入

8、10个整型数值,编程输出这10个数据并求其累加和。 #include main() int a10,k,sum=0; for(k=0;k10;k+) scanf(“%d“, ,Ex5_2.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,2一维数组应用程序范例 【例5-3】键盘输入10个整数,编程统计并输出其中的偶数及 个数。 #include main() int x10,n=0,k; for(k=0;k10;k+) scanf(“%d“, ,Ex5_3.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,2一维数组应

9、用程序范例 【例5-4】已知整型数组a中有10个元素。编程,求a中最小数 及所在的位置。 #include main() int a10,i,k; for(i=0;iai) k=i; printf(“zui xiao shu shi %d,wei zhi shi %dn“,ak,k); ,Ex5_4.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,【例5-5】已知整型数组a中有10个元素。编程,将a中的元素按从小到大顺序排列并输出。 选择法排序: 第一次在10个数(a0 a9)中找出最小数所在的下标k(这个算法例5-4中介绍过),然后将第一个数a0与最小

10、数ak交换,使得a0是10个数中最小数; 第二次在剩下的9个数(a1 a9)中找出最小数所在的下标k,然后将第二个数a1与最小数ak交换,使得a1是9个数中的最小数; 依次类推,假设第i次在剩下的11-i个数(ai-1a9)中找出最小数所在的下标k,然后将第i-1个数ai-1与最小数ak交换,使得ai-1是11-i个数中的最小数。 显然该算法需要双重循环:外循环控制第几次找最小数,内循环是找最小数的下标。,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,【例5-5】 #include main() int a10,i,j,k,t; for(i=0;iaj) k=

11、j; t=ai;ai=ak;ak=t; for(j=0;j10;j+) printf(“%d “,aj); ,Ex5_5.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,直接法排序: 该算法与选择法排序类似,但不是求最小数所在的位置,具体算法如下: 第一次在10个数(a0 a9)中,用a0和后面a1 a9的每个元素比较,若a0比某个数aj(j=1,2,9)大,则交换a0和aj。第一次比较结束,a0一定是10个数中的最小数。 第二次在剩下的9个数(a1 a9)中,用a1和后面a2 a9 的每个元素比较,若a1比某个数aj(j=2,3,9)大,则交换a1和a

12、j。第二次比较结束,a1一定是剩下9个数中的最小数。 依次类推,假设第i次在剩下的11-i个数(ai-1 a9)中,用ai-1和后面aia9 的每个元素比较,若ai-1比某个数aj(j=i,9)大,则交换ai-1和aj。第i次比较结束,ai-1中一定是剩下11-i个数中的最小数。,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,【例5-5】已知整型数组a中有10个元素。编程,将a中的元素按从小到大顺序排列并输出。 #include main() int a10,i,j,t; for(j=0;jaj) t=ai;ai=aj;aj=t; for(j=0;j10;j+

13、) printf(“%d “,aj); ,Ex5_5_1.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,【例5-6】已知整型数组a有10个元素,编程判断数x是否在a中,若在输出其在数组中的下标,否则输出NO。 #include main()图5.6 例5-6程序运行结果 int x,k,a10=4,2,6,9,0,5,3,12,7,10; printf(“intput search data:n“); scanf(“%d“, ,Ex5_6.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,【例5-7】已知整型数组a

14、中的10个元素是按从小到大的顺序排列(假设10个数互不相同)。编程判断某数x是否在数组a中,若在输出其在数组中的下标,否则输出NO。 算法如下: 当low小于等于high时,计算low,high之间的中间下标m=(low+high)/2, 判断am是否等于x,若等于,则说明x在a中,位置为m,此时结束循环,跳到。否则,若 am大于x,则说明x只可能出现在alow和am之间,修改high=m-1;若am小于x,则说明x只能出现在am和ahigh之间,修改low=m+1;返回。 当low大于high时,说明x不在a中,输出“NO”,程序结束。 输出位置m,程序结束。,5.2.3一维数组元素的引用与

15、应用程序范例,5.2一维数组的定义、引用和初始化,#include main() int x,a10=2,3,6,9,12,15,17,18,20,21; int low=0,high=9,m; printf(“intput search data:n“); scanf(“%d“, ,Ex5_7.c演示,5.2.3一维数组元素的引用与应用程序范例,5.2一维数组的定义、引用和初始化,前面已经介绍了可以用变量作函数参数,显然,数组元素也可以作函数实参,其用法与变量相同。此外,数组名也可以作实参和形参,传递的是数组首元素的地址。 1数组元素作函数实参 由于可以把数组元素看成是一个普通变量,因此数组元素也可以作为函数的实参,与用普通变量作实参一样,是单向传递,即“值传递”方式。,5.2.4一维数组作为函数的参数与应用程序范例,5.2一维数组的定义、引用和初始化,【例5-8】阅读下面程序,写出运行结果。 #include void fun(int x) if(x%2=0) printf(“%dn“,x); main() i

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号