C语言程序设计第6章-数组.ppt

上传人(卖家):三亚风情 文档编号:3377091 上传时间:2022-08-25 格式:PPT 页数:53 大小:748KB
下载 相关 举报
C语言程序设计第6章-数组.ppt_第1页
第1页 / 共53页
C语言程序设计第6章-数组.ppt_第2页
第2页 / 共53页
C语言程序设计第6章-数组.ppt_第3页
第3页 / 共53页
C语言程序设计第6章-数组.ppt_第4页
第4页 / 共53页
C语言程序设计第6章-数组.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、 第第6章章 数组数组2022-8-82 前几章使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是基本的数据类型。对于有些数据,只用简单的数据类型是不够的,难以反映出数据的特点,也难以有效地进行处理。如果有10000名学生,每个学生有一个成绩,需要求这10000名学生的平均成绩。原有的基本数据类型就很难高效地完成这个任务。需要一种新的数据类型2022-8-8301要点一维数组定义、初始化、引用、使用03要点02要点定义、初始化、引用、使用字符数组定义、初始化、引用、处理字符串、字符串处理函数、使用多维数组2022-8-846.1 一维数组6.1.1一维数组的定义6.1.2 一维数

2、组的初始化6.1.3 一维数组成员的引用6.1.4 一维数组的使用6.1一维数组2022-8-856.1.1一维数组的定义1.一维数组的定义一维数组的定义格式如下:类型说明符 数组名数组长度例如,定义一个一维数组:int array6;6.1一维数组2022-8-86 6.1.2 一维数组的初始化如同变量的初始化一样,一维数组的初始化也是在定义一维数组时直接给其成员赋初值。否则数组中各成员的值将是随机的,不可预料的。1.一维数组初始化格式一维数组初始化的格式为:类型说明符 数组名数组长度=初值列表;例如对一个一维数组初始化:int array6=1,2,3,4,5,6;经过上面的定义和初始化之

3、后该数组的成员分别为:array0=1、array1=2、array2=3、array3=4、array4=5、array5=6。6.1一维数组2022-8-876.1.2 一维数组的初始化2.一维数组初始化的几种情况(1)对一维数组全部成员都赋初值时,数组长度可以缺省。系统将按照初值列表中的数值个数自动确定数组长度。例如:int array=1,2,3,4,5,6;在上述过程中缺省了数组长度,但初值列表中有6个成员,因此系统自动确定该数组长度为6。(2)当给出一维数组的数组长度时,可以在初值列表里列出部分成员的值。例如:int array6=1,2,3;在初值列表中只列出了3个值,与其对应的

4、是:array0=1、array1=2、array2=3。对于剩余的成员array3array5,系统将自动为其填充初值为0。因此在定义数值类型的一维数组时只要在初值列表中给出一个初值,其后的成员就全部赋0值。例如:int array6=0;6.1一维数组2022-8-886.1.3 一维数组成员的引用一维数组定义后就可以使用了。由于C语言规定不能整体引用数组,所以只能逐个引用数组的成员。数组成员的表示的形式如下:数组名下标与数组定义中的数组长度不同,在对数组成员引用时,下标可以是整型常量、整型变量或整型表达式。例如:array0、array i、array 2*i+1 在对数组成员进行引用时

5、要注意下标从0开始,同时要避免混淆数组长度和下标区别而产生的越界问题。例如:float score 10;/*定义一维数组长度为10*/b=score5;/*引用score数组中下标为5的成员,既数组中的第6个成员*/w=score10;/*引用score10越界,因为数组成员为score0 score9*/6.1一维数组2022-8-89#includeint main()int i=0;/*初始化变量*/int array7=0;/*初始化一维数组*/printf(Please input 7 integers:n);for(;i7;i+)/*用循环结构给一维数组赋值*/scanf(%d,

6、&arrayi);printf(nThe sequence in computer is:);for(i=0;i7;i+)/*屏幕输出一维数组*/printf(%d,arrayi);return 0;【例6-1】将数列1,3,6,10,15,21,28用一维数组存放,并在屏幕上显示。分析:数列由7个三角形数构成,因此可以用一个数组长度为7的一维数组存放。程序如下:程序运行的结果为:Please input 7 integers:1 3 5 10 15 21 28The sequence in computer is:1 3 5 10 15 21 286.1一维数组2022-8-8106.1.4

7、 一维数组的使用【例6-2】求Fibonacci数列的前20项,并将结果用一维数组存储。分析:按照Fibonacci数列的定义,首先使数组的前两项Fib0=Fib1=1,然后用公式Fibi=Fibi-1+Fibi-2求出数列的后续各项。算法如图6-2所示:6.1一维数组2022-8-8116.1一维数组2022-8-812【例6-3】向一个有序序列中插入一个数,并保持序列有序。例如向序列1,3,6,9,11中插入5得到序列1,3,5,6,9,11。分析:首先需要定义一个足够大的一维数组用于存放插入后的序列。其次,插入数值后,一维数组中,在插入位置后面的成员需要依次后移。算法如图6-3所示:6.

8、1一维数组2022-8-8136.1一维数组2022-8-814【例6-4】对给定的数列5,2,3,4,1用冒泡法按升序排序并在屏幕上输出结果。分析:冒泡法的思路是:将相邻数据两两依次比较,按从小到大或从大到小顺序交换,一趟过去之后,最大或最小的数字被交换到了最后一位。再从头开始比较,直到倒数第二位。这里是把最大的数字往后交换,如图6-4所示:6.1一维数组2022-8-8156.1一维数组2022-8-816【例6-5】从键盘接受5个整数,用选择排序法按升序排列并输出结果。分析:选择排序法的思路是:每一次从无序组的数据成员中选出最小(或最大)的一个成员,把它和无序组的第一个成员交换,无序组成

9、员减少,有序组成员增加,直到全部待排序的数据成员排完,如图6-6所示:6.1一维数组2022-8-8172022-8-8186.2 多维数组 6.2.1 多维数组的定义 6.2.2 多维数组的初始化 6.2.3 多维数组成员的引用 6.2.4 多维数组的使用6.2 多维数组2022-8-8196.2.1 多维数组的定义1.多维数组的定义多维数组的定义多维数组的定义格式如下:类型说明符 数组名第1维长度 第2维长度 第n维长度;例:定义一个34的二维数组如下:int arr234;arr200arr201arr202arr203arr210arr211arr212arr213arr220arr2

10、21arr222arr2236.2 多维数组2022-8-820 6.2.2 多维数组的初始化赋值时按“行优先”的顺序对数组成员依次赋值。其初始化的形式为:类型说明符 数组名第1维长度 第2维长度 第n维长度=初值列表;在初始化时有如下两种情况,以二维数组arr234为例。1.将初值写在一个大括号内将初值写在一个大括号内(1)对全部成员显式赋初值int arr234=1,2,3,4,5,6,7,8,9,10,11,12;此时,可省略行下标,而不能省略列下标。如:int arr2 4=1,2,3,4,5,6,7,8,9,10,11,12;根据初值列表中所有数据为12个,而arr2每行为4列,系统

11、会自动确定数组为3行。(2)对部分成员显式赋初值int arr234=1,2,3;此初始化的结果是arr200=1,arr201=2,arr202=3。后面未被显式赋初值的9个成员,会被系统自动赋予0。6.2 多维数组2022-8-8212.把初值按行分组把初值按行分组(1)对全部成员显式赋初值int arr234=1,2,3,4,5,6,7,8,9,10,11,12;(2)对部分成员显式赋初值int arr234=1,2,5,6,9,10,11,12;此初始化的结果是arr200=1,arr201=2,arr202=0,arr203=0,arr210=5,arr211=6,arr212=0,

12、arr213=0,arr220=9,arr221=10,arr222=11,arr223=12。由于按行分组已经明确了行数,因此在此情况下可以缺省行下标,如:int arr2 4=1,2,3,4,5,6,7,8,9,10,11,12;int arr2 4=1,2,5,6,9,10,11,12;这两个都是合法的。6.2 多维数组2022-8-8223.二维以上数组的初始化二维以上数组的初始化可将二维数组的初始化方法推广到更高维的数组,如:(1)int arr3234=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24;(2

13、)int arr3 34=1,2,5,9,10,11,13,17,18,21,22;(3)int arr3234=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24;(4)int arr3 34=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24;6.2 多维数组2022-8-8236.2.3 多维数组成员的引用1.多维数组成员的引用格式多维数组成员的引用格式多维数组成员的引用在原则上与一维数组是相同的,主要区别在下标的个数。如果定义的是一个n维数

14、组,则此n维数组中成员的引用格式如下:数组名下标1下标2下标n;需要注意的是在数组定义时,方括号中给出的是某一维的长度。而数组引用时,成员中的下标是该成员在数组中的位置标识。2.二维数组成员的引用二维数组成员的引用还是以二维数组为例对多维数组的引用做说明,如arr213。在引用时需要注意以下几点:(1)数组成员在引用前必须先定义,例如:float arr223;/*引用前必须定义*/arr202=1.2;/*在定义后可以引用*/6.2 多维数组2022-8-824(2)在引用数组成员时注意不要越界,例如:float arr223;/*引用前必须定义*/arr223=1.2;/*引用越界*/因为

15、数组成员引用的下标是从0开始的,所以该数组中最后一个成员应该是arr212。C语言在编译时不检查越界错误,但在运行时会引起程序出错或导致错误结果。(3)成员的下标可以是整型变量或表达式。数组定义时的数组长度,只能是整型常量或整型常量表达式。而引用时,成员下标可以是整型常量、整型变量或整型表达式。例如,当i和j已定义为整型变量且已赋值,则可用arr2i-1j+2表达成员。注意:需要检查i-1和j+2的结果是否越界。6.2 多维数组2022-8-8253.二维以上数组成员的引用二维以上数组成员的引用二维以上数组成员的引用与二维数组类似,例如:定义了一个三维数组:int arr3345;则引用其成员

16、arr3102并赋值的语句为:arr3102=89;6.2 多维数组2022-8-826 6.2.4 多维数组的使用【例例6-6】有一个有一个33的整数矩阵的整数矩阵A,分别求其主、副对角线成员之和。,分别求其主、副对角线成员之和。789654321A6.2 多维数组2022-8-8276.2 多维数组2022-8-8286.2 多维数组2022-8-829【例6-8】三角阵是一种重要的矩阵。试把一个55的矩阵A,转换成一个下三角阵。6.2 多维数组2022-8-8306.2 多维数组2022-8-831【例6-9】试输出以下图形:6.2 多维数组2022-8-8322022-8-8336.3

17、 字符数组 6.3.1 字符数组的定义 6.3.2 字符数组的初始化 6.3.3 字符数组成员的引用 6.3.4 字符数组处理字符串 6.3.5 字符串处理函数 6.3.6 字符数组的使用6.3 字符数组2022-8-8346.3.1 字符数组的定义1.一维字符数组的定义一维字符数组的定义char 数组名数组长度;例如:char lastname10;2.二维字符数组的定义二维字符数组的定义char 数组名数组长度1数组长度2;例如:char name238;如果要用到更高维度的数组形式,其定义与二维字符数组类似。字符型数据也可以使用整型数组来存储。但是,字符型数据只占用1个字节,显然使用整型

18、型数组存储字符数据会浪费空间,因此很少这样使用。6.3 字符数组2022-8-835 6.3.2 字符数组的初始化1.对一维字符数组的初始化格式对一维字符数组的初始化格式对一维字符数组的初始化采用如下格式:char lastname5=L,i,a,n,g;上述语句把5个字符分别赋给lastname 0lastname 4这5个成员。字符数组定义的规则:(1)如果在定义字符数组时不进行初始化,则数组中各成员的值将是随机的,不可预料的。(2)如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理。(3)如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些成员,其余的成员自动定

19、为空字符(即0)。例如:char lastname 5=L,i,u;6.3 字符数组2022-8-836(4)如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。例如:char lastname=Z,h,e,n,g;数组lastname的长度自动定为5。2.对二维字符数组的初始化格式对二维字符数组的初始化格式对二维字符数组的初始化采用如下格式:(1)char name235=Z,h,o,u,W,u,Z,h,e,n,g;(2)char name2 5=Z,h,o,u,W,u,Z,h,e,n,g;(3)char name235=Z,h,o,u,0,

20、W,u,0,0,0,Z,h,e,n,g;(4)char name2 5=Z,h,o,u,0,W,u,0,0,0,Z,h,e,n,g;其逻辑形式如图6-12所示。显然(3)、(4)不推荐。6.3 字符数组2022-8-837 6.3.3 字符数组成员的引用定义完一个字符数组后就可以对其成员进行引用,例如:(1)char lastname5;lastname1=N;(2)char name235;name212=m;【例6-11】替换姓氏(姓氏的拼音)并输出。6.3 字符数组2022-8-8386.3 字符数组2022-8-839【例6-12】用二维数组表示一组姓氏的拼音,并输出。6.3 字符数组

21、2022-8-840 6.3.4 字符数组处理字符串1.字符串在字符数组中的形式字符串在字符数组中的形式字符串是指用双引号引起来的若干有效字符的序列。在C语言中下面都是合法的字符串:Happy new year;C program!;y=Ax+B;sum*16;%d%fn例如:char lastname6=Zheng;/*等价于 char lastname6=Zheng*/则数组成员的值为:lastname0=Z、lastname 1=h、lastname 2=e、lastname 3=n、lastname 4=g、lastname 5=06.3 字符数组2022-8-8412.字符串结束符字

22、符串结束符由于字符串后面隐含了字符0。因此用字符串初始化字符数组时,要特别注意数组长度的定义。如果char lastname5=Zheng;则会出现错误。字符0在字符串中叫串结束符是“字符串结束标志”。有了这个标志系统就可以自动计算字符串的长度。当然,在定义字符数组时还是需要估计所要存放字符串的长度,保证数组长度始终大于等于字符串实际长度。如果在一个字符数组中存放的字符个数是变化的,应考虑最多字符的情况,数组长度在定义时选择一个最大值。如:char name236=Zhou,Wu,Zheng;在三个字符串中Zheng 有6个字符,比其他两个长,所以数组第二维下标长度为6。数组形式如图6-13所

23、示:6.3 字符数组2022-8-8423字符串的输入字符串的输入/输出输出对字符串的输入/输出,除了用“%c”外,还可以用“%s”,配合格式输出函数printf和格式输入函数scanf对字符串有效字符整体输入/输出。(1)用printf函数和“%s”格式输出字符串。例如:将整个字符串一次输出:char lastname=Zheng;printf(%s,lastname);(2)用scanf函数和“%s”格式输入一个字符串。例如:从键盘输入字符串并赋给字符数组。char lastname6;scanf(%s,lastname);如果要用一个scanf函数输入多个字符串,则在输入时以空格或回车分

24、隔。例如:char lastname16,lastname26,lastname36;scanf(%s%s%s,lastNamel,lastName2,lastName3);6.3 字符数组2022-8-843【例6-13】用格式%s的scanf函数给一个字符数组赋值。6.3 字符数组2022-8-844(3)字符串输出函数putsputs函数的作用是将一个字符串输出到屏幕上。与printf不同,puts在输出字符串时,遇到0后会自动加上换行。其调用形式为:puts(字符数组名)【例6-14】用puts函数输出的字符串中可以包含转义字符。6.3 字符数组2022-8-845(4)字符串输入函数

25、gets不同于读取一个字符的函数getchar(),gets()函数用于从键盘缓冲区中读取字符串,直到出现换行符,最后加上0作为字符串结束。其调用形式为:gets(字符数组名)由于gets函数可以输入含有空格的字符串,所以这一点上比scanf函数要方便一些。例如:从键盘输入的字符串“LP,Qing”,并赋给字符数组name2。回车是gets函数的输入结束标志。【例6-15】用gets和puts函数输入、输出字符数组中的字符串。6.3 字符数组2022-8-846 6.3.5 字符串处理函数#include1字符串复制函数字符串复制函数strcpystrcpy函数用于字符串复制的函数,其调用形式

26、为:strcpy(字符数组1,字符串/字符数组2)该函数的作用是将字符串复制到字符数组1中去。需要注意的是strcpy中字符数组1的长度不应小于被复制的字符串的长度。此外,字符数组1必须写成数组名形式。例如:char sl10,s2=“Zheng”;strcpy(sl,s2);复制前后sl的状态如图6-14所示:6.3 字符数组2022-8-8472.两个字符串的连接函数两个字符串的连接函数strcatstrcat是用于连接两个字符串的函数。其调用形式为:strcat(字符数组1,字符串/字符数组2)该函数的作用是把字符数组2中存放的字符串连接到字符数组l中存放的字符串的后面,连接的结果依然放

27、在字符数组1中,连接前,两个字符串的后面都有0,连接时将字符数组1中的字符串后面的0取消,然后进行连接。最后在连接组成的新串末尾保留0。函数调用后返回的是字符数组1的地址,也就是新串保存在数组1中。例如:char sl40=The teachers name is;char s220=Han Lidou;printf(%s,strcat(sl,s2);输出结果为The teachers name is Han Lidou。6.3 字符数组2022-8-8483.字符串比较函数字符串比较函数strcmpstrcmp作用是比较字符串1和字符串2。其调用形式为:strcmp(字符串1/字符数组1,字

28、符串2/字符数组2)strcmp(sl,s2);strcmp(United States,P.R.China);运行结果为1。strcmp(s,Han);strcmp(Dou,s);其中,s、s1和s2是存放字符串的字符数组名。字符串比较的规则是按自左至右的顺序对两个字符串的字符逐对比较字符的ASCII码值,直到出现不同的字符或遇到0为止。当字符串1等于字符串2时,strcmp函数的返回值为0;当字符串1大于字符串2时,strcmp函数的返回值为正整数;当字符串1小于字符串2时,strcmp函数的返回值负整数。注意:对两个字符串比较,不能用直接使用关系运算符连接字符串,如:sls2,要用str

29、cmp(sl,s2)来判断两字符串的大小。6.3 字符数组2022-8-8494.测试字符串长度函数测试字符串长度函数strlen strlen函数用于测试字符串的长度。函数值为字符串中的有效字符的个数(不包括0在内)。其调用形式为:strlen(字符串/字符数组)例如:char name17=Ning Liping;printf(%d,strlen(name);运行结果为11strlen函数中的参数也可以是字符串常量。这样测量的就是该字符串的长度,例如:printf(%d,strlen(Qing Yuanyuan);运行结果为13。6.3 字符数组2022-8-8505字符串字母大小写转换函

30、数字符串字母大小写转换函数(1)将字符串中的大写字母转换成小写字母的函数strlwr其调用形式为:strlwr(字符数组)例如:char name=Zhengstrlwr(name);运行结果为zheng。(2)将字符串中的小写字母转换成大写字母的函数strupr其调用形式为:strupr(字符数组)例如:char name=Yuanstrupr(name);运行结果为YUAN。注意strlwr和strupr的参数只能是字符数组。字符串库函数并非C语言本身的组成部分,不同的编译系统提供的库函数数量、函数名以及函数功能都不尽相同。因此使用时需要查一下该系统的库函数手册。6.3 字符数组2022-

31、8-8516.3.6 字符数组的使用【例6-17】从键盘输入由5个字符组成的单词,判断此单词是不是water,并显示结果。分析:将输入单词的每个字符依次与water比较,只要有一个不同就中断比较,输出结论。算法如图6-16所示:6.3 字符数组2022-8-8522022-8-853数组是C语言中十分重要和常用的数据类型,用于对一批具有内在联系的同类数据进行处理。本章主要学习了一维数组、多维数组以及字符数组的定义、初始化及引用格式以及C语言相应的语法要求。另外,还对字符数组中的字符存储与字符串存储进行了比较,同时介绍了字符串处理函数的使用。在此基础上对使用数组的一些常见算法进行了介绍。本章小结

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C语言程序设计第6章-数组.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|