C语言入门学习C第7章-数组课件.ppt

上传人(卖家):晟晟文业 文档编号:3725240 上传时间:2022-10-07 格式:PPT 页数:65 大小:277.32KB
下载 相关 举报
C语言入门学习C第7章-数组课件.ppt_第1页
第1页 / 共65页
C语言入门学习C第7章-数组课件.ppt_第2页
第2页 / 共65页
C语言入门学习C第7章-数组课件.ppt_第3页
第3页 / 共65页
C语言入门学习C第7章-数组课件.ppt_第4页
第4页 / 共65页
C语言入门学习C第7章-数组课件.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、 C语言为这些数据,提供了一种构造数据类型:语言为这些数据,提供了一种构造数据类型:数组。数组。所谓数组所谓数组就是一组具有相同数据类型的数据就是一组具有相同数据类型的数据的有序集合。的有序集合。数据的特点:1.具有相同的数据类型2.使用过程中需要保留原始数据1.1.一维数组的定义格式为一维数组的定义格式为:类型说明符类型说明符 数组名常量表达式;数组名常量表达式;例如:例如:int a10;它表示定义了一个整形数组,数组名为a,此数组有10个元素。7.1.17.1.1一维数组的定义一维数组的定义 数组名定名规则和变量名相同,遵循标识符定名规则。float a0;/*数组大小为数组大小为0 0

2、没有意义没有意义 */int k,ak;/*不能用变量说明数组大小不能用变量说明数组大小*/注意:注意:定义数组时用到的“数组名常量表达式”和引用数组元素时用到的“数组名下标”是有区别的。例如例如:int a10;下标为0,1,2,3,4,5,6,7,8,9 7.1.2 7.1.2一维数组元素的引用一维数组元素的引用1.1.数组元素的引用方式数组元素的引用方式数组名下标下标可以是整型常量或整型表达式。例如例如:a0=a2*3对数组元素初始化的实现方法:对数组元素初始化的实现方法:1.1.在定义数组时对数组元素赋以初值。在定义数组时对数组元素赋以初值。例如例如:int a:int a1010=0

3、,1,2,3,4,5,6,7,8,9;=0,1,2,3,4,5,6,7,8,9;将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,a0=0,a1=1,a2=2,a3=3,a4=4,a5=5,a6=6,a7=7,a8=8,a9=9。7.1.37.1.3一维数组的初始化一维数组的初始化 3.3.如果想使一个数组中全部元素值为如果想使一个数组中全部元素值为0 0,可以写成,可以写成:int aint a1010=0;=0;2.2.可以只给一部分元素赋值。可以只给一部分元素赋值。例如例如:int a:int a1010=0=0,1 1,2 2,3 3,4;4;定义a数组有10个元素,但

4、花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。4.4.在对全部数组元素赋初值时,由于数据的个数已在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。经确定,因此可以不指定数组长度。例如例如:int a:int a5 5=1=1,2 2,3 3,4 4,5;5;也可以写成也可以写成 int aint a=1=1,2 2,3 3,4 4,5;5;用数组来处理用数组来处理,求解求解Fibonacci数列。数列。Fibonacci数列公式:数列公式:已知已知:a a1 1=a=a2 2=1=1a an n=a=an-1n-1+a+an-2 n-2 即即:

5、1,1,2,3,5,8,13:1,1,2,3,5,8,137.1.47.1.4一维数组程序举例一维数组程序举例用起泡法对用起泡法对1010个数排序个数排序(由小到大由小到大)。第一趟比较 经过第一趟(共5次比较与交换)后,最大的数9已“沉底”。然后进行对余下的前面5个数第二趟比较,第二趟比较如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。文件命名重要性起泡排序程序命名为:起泡排序程序命名为:qipaopaixu.c流程图和程序参见书上内容输出数组中的最大值,文件名为输出数组中的最大值,文件名为zuidazhi.c第一步:定义一个数

6、组,并赋予相应的值第一步:定义一个数组,并赋予相应的值第二步:找出最大值第二步:找出最大值第三步:输出数组中的最大值找出最大值思想:找出最大值思想:第一个和第二个元素值比较,记住较大的元素值,刚才第一个和第二个元素值比较,记住较大的元素值,刚才比较得出的较大的元素值再和第三个元素值比较,记住两个比较得出的较大的元素值再和第三个元素值比较,记住两个数中的较大值,依此类推,直到最后一个元素。数中的较大值,依此类推,直到最后一个元素。数组中找出最大值元素的位置数组中找出最大值元素的位置命名为命名为zuidazhiweizhi.c找出最大值位置的思想:找出最大值位置的思想:第一个和第二个元素值比较,记

7、住较大的元素值位置,第一个和第二个元素值比较,记住较大的元素值位置,刚才比较得出的较大的元素值再和第三个元素值比较,记住两刚才比较得出的较大的元素值再和第三个元素值比较,记住两个数中的较大元素值位置,依此类推,直到最后一个元素。个数中的较大元素值位置,依此类推,直到最后一个元素。选择法排序的思想:选择法排序的思想:第一趟:找出数组中最大值和最后位置上的元素值交换第一趟:找出数组中最大值和最后位置上的元素值交换第二趟:最后元素值除外,剩余元素中找最大值和倒数第二第二趟:最后元素值除外,剩余元素中找最大值和倒数第二个位置上的元素值交换个位置上的元素值交换第三趟:最后第三趟:最后2个元素值除外,剩余

8、元素中找最大值和倒数个元素值除外,剩余元素中找最大值和倒数第三个位置上的值交换第三个位置上的值交换依此类推依此类推选择法对数组元素排序,文件名选择法对数组元素排序,文件名xuanzefapaixu.c思考:思考:如果仅知道最大值,然后和不同位置上的值交换,是否会造成如果仅知道最大值,然后和不同位置上的值交换,是否会造成数组元素值的丢失数组元素值的丢失查找一个数据值是否存在于数组中查找一个数据值是否存在于数组中方法二:折半查找 文件名zhebanchazhao.c方法一:顺序查找 文件名shunxuchazhao.c思考方法:首先,假设数组中元素是按升序排列,将数组中间位置的值与查找关键字比较,

9、如果两者相等,则查找成功;否则利用中间位置将数组分成前、后两个子数组部分,如果中间位置的值大于查找关键字,则在前面部分进一步查找,否则进一步在后面部分查找。重复以上过程,直到查找成功,或直到子数组部分不存在为止,此时查找不成功。目的:为了提高查找速度前提条件:数组元素已经排好序例:已知一个升序排列的数组有十个数据,输入一个数,查例:已知一个升序排列的数组有十个数据,输入一个数,查找它是否存在。若存在打印该数及其所在位置,否则,输出找它是否存在。若存在打印该数及其所在位置,否则,输出“no found!no found!”.假定:数组为假定:数组为a10,待查找的数为待查找的数为 x设三个位置指

10、针设三个位置指针 top(顶)(顶),bot(中)(中),mid(底)(底)使:使:假假。则。则 x 必落在必落在 mid1bot 范围内。范围内。2、否则,判断、否则,判断x a mid成立否。成立否。算法算法:80152130455065869598680012345789aiimidbottop1、若若x=a mid,则,则 已找到已找到真真。则。则 x 必落在必落在 topmid-1 范围内。范围内。重新设置位置指针:重新设置位置指针:bot=mid-1bot80152130455065869598重新设置位置指针:重新设置位置指针:top=mid+1 midbottop3、确定了新的

11、查找范围后,重复上述,直到、确定了新的查找范围后,重复上述,直到找到或退出循环。找到或退出循环。top在已排好序的含有在已排好序的含有n个元素的数组中插入一个数据个元素的数组中插入一个数据值,使得数组中元素依然有序排列,文件名为值,使得数组中元素依然有序排列,文件名为charu.c第二步:插入点位置后的所有元素值都往后移动一位第一步:首先确定数据插入到数组中的位置思想方法思想方法:第三步:插入相应的数据值删除数组中和关键字相同的元素值,文件名为删除数组中和关键字相同的元素值,文件名为shanchu.c思考:删除一个数据需要数据元素已经排好序吗?插入排序:将插入排序:将n个数据输入到数组中,输入

12、完成后个数据输入到数组中,输入完成后,数组中的元素有序排列。,数组中的元素有序排列。每输入一个数据到数组中,都实现一次数据的插入(前面已讲)。思想方法:习题习题7.5,将一个数组中的值按逆序存放。,将一个数组中的值按逆序存放。将第一个位置数据和最后一个位置的数据交换,第二个位置的数据和倒数第二个位置的数据交换,依此类推,直到数据的中间位置。思考方法:本题无需对数组中的元素排序。7.2.17.2.1二维数组的定义二维数组的定义二维数组定义的一般形式为二维数组定义的一般形式为类型说明符 数组名常量表达式常量表达式;例如:例如:定义a为34(3行4列)的数组,b为510(5行10列)的数组。如下:f

13、loat a34,b510;不能写成不能写成 float afloat a3 3,4 4,b b5 5,1010;注意:注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如:例如:可以把a看作是一个一维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含4个元素的一维数组。二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素 b b0000b b0101b b0202b b1010b b1111b b1212b b2020b b2121b b2222例如:例如:整型数组整型数组 b33=1,2,3,4,5,6,7,8,9

14、;123456789二维数组元素的表示形式为:数组名下标下标数组名下标下标例如:例如:a23下标可以是整型表达式,如 a2-12*2-1数组元素可以出现在表达式中,也可以被赋值例如:例如:b b1 12 2=a=a2 23 3/2/2不要写成不要写成 a a2 2,3 3,a a2-12-1,2 2*2-12-1形式形式常出现的错误有:常出现的错误有:int a34;/*定义定义a a为为3 34 4的数组的数组 */a34=3;在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。可以用下面可以用下面4 4种方法对二维数组初始化:种方法对二维数组初始化:.分行给二维数组赋初值。例如:

15、例如:int aint a3 34 4=1=1,2 2,3 3,44,55,6 6,7 7,88,99,1010,1111,12;12;.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。例如:例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;7.2.3 7.2.3二维数组的引用二维数组的引用.可以对部分元素赋初值。例如:例如:int a34=1,5,9;1 0 0 01 0 0 05 0 0 0 5 0 0 0 9 0 0 0也可以对各行中的某一元素赋初值,如int aint a3 34 4=1=1,00,66,00,0 0,11;11;1 0 0 0

16、1 0 0 00 6 0 00 6 0 00 0 0 11 00 11 01 0 0 01 0 0 05 6 0 0 5 6 0 0 0 0 0 0也可以只对某几行元素赋初值。如:int a34=1,5,6;.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。例如:例如:int aint a3 34 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;它等价于:int a4=1,2,3,4,5,6,7,8,9,10,11,12;在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。例如例如:

17、int aint a4 4=0=0,0 0,33,00,10;10;0 0 3 00 0 0 00 10 0 07.2.47.2.4二维数组程序举例二维数组程序举例例例7.4 7.4 将一个二维数组行和列元素互换,存到另一个将一个二维数组行和列元素互换,存到另一个 二维数组中。二维数组中。例如:例如:a=1 2 3 1 4a=1 2 3 1 4 4 5 6 b=2 5 4 5 6 b=2 5 3 6 3 6文件名为hangliehuhuan.c例例7.5:7.5:有一个有一个34的矩阵,要求编程序求出其中值最大的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。文件名为的那

18、个元素的值,以及其所在的行号和列号。文件名为erweishuzuqiuzuidazhiweizhi.cerweishuzuqiuzuidazhiweizhi.c N-S流程图表示算法流程图表示算法 如下:如下:1 2 3 41 2 3 45 6 7 8 5 6 7 8 9 10 11 1213 14 15 16例:4行4列二维数组的对角线元素置0。例:4行4列二维数组的上三角元素置00 2 3 00 2 3 05 0 0 8 5 0 0 8 9 0 0 120 14 15 00 0 0 00 0 0 05 0 0 0 5 0 0 0 9 10 0 013 14 15 01 2 3 41 2 3

19、 45 6 7 8 5 6 7 8 9 10 11 1213 14 15 16 7.3.17.3.1字符数组的定义字符数组的定义定义方法与前面介绍的类似。例如:char c10;c0=I;c1=;c2=a;c3=m;c4=;c5=h;c6=a;c7=p;c8=p;c9=y;对字符数组初始化,可逐个字符赋给数组中各元素。对字符数组初始化,可逐个字符赋给数组中各元素。例如:例如:char c10=I,a,m,h,a,p,p,y 7.3.27.3.2字符数组的初始化字符数组的初始化如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。char cchar c101

20、0=c=c,pp,rr,oo,gg,rr,aa,m;m;如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。char cchar c=I,a,m,h,=I,a,m,h,a,p,p,y;a,p,p,y;数组数组c c的长度自动定为的长度自动定为1010。7.3.37.3.3字符数组的引用字符数组的引用例例7.6 输输出一个字符串。出一个字符串。程序如下:程序如下:#includevoid main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i字符串2,函数值为一正整数。(3)(3)如果字符串1str2)print

21、f(yes);而只能用if(strcmp(str1,str2)0)printf(yes);6.strlen函数函数 其一般形式为其一般形式为:strlen(字符数组字符数组)strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括0在内)。例如:例如:char str10=China;char str10=China;printf(%d,strlen(str);printf(%d,strlen(str);输出结果不是10,也不是6,而是5。也可以直接测试字符串常量的长度,如strlen(China);7.7.strlwr函数函数 其一般形式为其一般形式为:strlwr(strl

22、wr(字符串字符串)strlwr函数的作用是将字符串中大写字母换成小写字母。8.8.strupr函数函数 其一般形式为其一般形式为:strupr(strupr(字符串字符串)strupr函数的作用是将字符串中小写字母换成大写字母。将一个字符串中的字符逆序存放。将一个字符串中的字符逆序存放。判断一个字符串是否为回文串。判断一个字符串是否为回文串。如:字符串“abcdcba”思想方法和前面讲过的逆序存放数据类似将一个字符串前端的将一个字符串前端的*号删除。号删除。第一步:判断字符串前端有多少个*号第二步:将*号后面的字符逐个往前移动那个位置第三步:在字符串结尾加上结束标记思想方法:练习编程:(1)

23、将一个字符串中间的连续将一个字符串中间的连续*号删除号删除(2)将一个字符串结束标记前的)将一个字符串结束标记前的*号删除。号删除。将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。从键盘输入一组小写字母,保存在字符数组str中。把字符数组str中字符下标为奇数的小写字母转换成对应的大写字母,结果仍保存在原数组中。例如,输入acegikm,输出aCeGiKm。将一个字符串中的空格删除。(空格字符也可以是其他字符)对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASC

24、II值码升序排列。把字符串str2倒置后接在字符串str1后面。例如:字符串str1为“How do”,字符串str2=?od uoy,结果输出:How do you do?。把一个整数转换成字符串,并倒序保存在字符数组str中。例如:当n=13572468时,str=86427531。比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),输出较长的字符串。若两个字符串长度相等,则输出第1个字符串。例如,输入beijingshanghai(为回车键),结果输出:shanghai。实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。例例7.

25、8 7.8 输入一行字符,统计其中有多少个单词,单输入一行字符,统计其中有多少个单词,单 词之间用空格分隔开。词之间用空格分隔开。7.3.7 7.3.7字符数组应用举例字符数组应用举例例例7.9 7.9 有有3 3个字符串个字符串,要求找出其中最大者要求找出其中最大者 程序如下程序如下:#include#includevoid main()char string20;char str320;int i;for(i=0;i3;i+)gets(stri);。不要放过任何一个看上去很简单的小编程问题他们往往并不那么简单,或者可以引伸出很多知识点;会用Visual C+,并不说明你会编写C语言程序;学习编程最好的方法之一就是阅读源代码;学习编程的秘诀是:编程,编程,再编程。

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

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

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


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

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


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