资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
第11页 / 共47页
第12页 / 共47页
第13页 / 共47页
第14页 / 共47页
第15页 / 共47页
第16页 / 共47页
第17页 / 共47页
第18页 / 共47页
第19页 / 共47页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,5,章 数组,学习目标,1,使用一维数组处理同一类型的大批数据;,2,使用字符数组处理字符串;,3,使用二维数组处理类似行列式的问题。,5.1,一维数组的应用,学一学,1,一维数组的定义,类型标识符 数组名,常量表达式,;,其中常量表达式说明数组的大小,即数组中元素的个数。,2,一维数组元素的引用,定义了数组后,就可以引用数组中的任意一个元素,引用形式为:,数组名,下标表达式,其中“下标表达式”表示数组中的某一个元素的顺序号,必须是整型常量、整型变量或整型表达式。,试一试,问题,5.1,:学校举行知识竞赛,有,10,个学生参赛,请协助老师编写一个程序把成绩打印出来。,流程图,练一练,如果问题,5.1,中的成绩在定义数组初始化时只给出,5,个数据,再输出结果看看是什么情况?,试一试,问题,5.2,:将问题,5.1,中的,10,个学生的竞赛成绩从键盘输入,计算出平均分,将平均分输出到屏幕上。,流程图,练一练,问题,5.2,在求,10,个同学的竞赛总分时,是先用一个循环输入各个数组元素值,再用另一个循环累加求出总分,请修改程序使用一个循环,即在输入数据的循环中进行累加求和,即输入一个数就累加一个数。,试一试,问题,5.3,:从键盘输入,10,个参赛学生的成绩,求出分数最高的同学的序号(从,1,开始)及其成绩。,问题,5.4,用初始化方法,把某学习小组,10,名学生,C,语言程序设计,课程的考试成绩存储在数组中,再从键盘输入一个考分,查找该数是否在数组中,如果是的话,请输出它是第几名学生的成绩。,流程图,练一练,1.,在问题,5.4,中,如果输入的成绩没有查到,请给出提示信息“,not found”,。,想一想,1,拓展问题,5.4,,如果希望能够多次输入考分进行查找,每次都输出查找到的结果,直到输入,1000,时结束查找,怎样分析、解决问题?,2,再次拓展问题,5.4,,如果输入一个考分,但是在成绩数组中有一个以上的考分与此相同,怎样处理?,*问题,5.5,软件系要选拔创新小组的成员,有,N,名同学参加考试,请你帮助老师将成绩输入计算机,从低分到高分进行冒泡排序并输出排序后的结果。,问题,5.6,一位同学因为参加大学生运动会需要进行缓考,缓考过后,老师要把他的成绩插入班级的成绩单中,成绩单已经按照分数从高到低进行了排序,试问这个缓考成绩要怎样插入才不影响已经排好序的成绩单?,流程图,小结:,数组的定义,数组必须先定义,后使用。一维数组定义的一般形式为:,类型标识符 数组名,常量表达式,;,其中:,(,1,)常量表达式表示数组的元素的个数,即数组的长度,不允许作动态定义。,(2),相同类型的数组和变量可以在一个类型说明符下一起说明,用逗号隔开。,小结:一维数组的引用,定义了数组后,就可以引用数组中的任意一个元素,引用形式如下:,数组名,下标表达式,其中下标表达式可以是整常数或整型表达式,其取值范围从,0,开始,到元素个数,-1,为止。超出这个范围就称为数组下标越界。,小结:一维数组的初始化,当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储单元中并没有确定的值。使数组元素具有某个值,可以用赋值语句或输入语句在程序运行时完成,但占用机器时间。如果已经知道元素的具体值,,C,语言可以在定义时,给各元素指定初始值,称为数组的初始化。,二维数组,学一学,1.,二维数组的定义,类型标识符 数组名,常量表达式,1,常量表达式,2,;,其中常量表达式,1,和常量表达式,2,,分别表示数组的行数和列数。,2.,二维数组元素的引用,二维数组元素的引用形式为:,数组名,行下标,列下标,行下标和列下标可以是整常数或整型表达式,其取值范围从,0,开始,分别到行数,-1,和列数,-1,为止。,问题,5.7,一个学习小组有,5,名同学,每人有英语和数学两项成绩,试将成绩表用二维数组存储,并输出到屏幕上。,数学,86,100,75,88,65,英语,78,90,80,65,85,练一练,1,在问题,5.7,的解决中,使用双重循环来输出成绩表,如果不用双重循环,请你尝试用两个单重循环来输出数据。,2,在问题,5.7,中,成绩表的数据是在定义时初始化赋值的,但是现在又有一组比赛数据要输入,请你将数据改由键盘输入(提示:可参照输出采用双重循环进行)。,想一想,在问题,5.7,中,成绩表输出方式是输出一行序号,然后换行输出一行成绩,现在要求输出一个序号,接着输出该序号对应的成绩,然后换行,再输出一个序号及其对应的成绩,直到五个参赛学生的数据全部输出,怎麽办呢?,问题,5.8,新生入校参加军训,,12,名同学站成了,3,行,4,列,请编程序帮助教官从键盘输出,12,名同学的身高,并且求出其中个子最高的同学的身高。,流程图,问题,5.9,看过电影黑客帝国(,the Matrix,)之后,有,12,名同学排成,3,行,4,列准备进行演习,根据他们自编的剧情需要,他们需要进行行列交换,在另一个位置上站成,4,行,3,列,请编写程序实现交换后的站位,每个同学的代号由初始化数据给出。,小结:二维数组定义,与一维数组一样,二维数组也必须先定后使用,定义的一般形式为:,类型标识符 数组名,常量表达式,1,常量表达式,2,;,其中常量表达式,1,和常量表达式,2,,分别表示数组的行数和列数。,小结:二维数组元素的引用和 输入输出,(,1,)二维数组元素的引用形式为:,数组名,行下标,列下标,行下标,和,列下标,可以是整常数或整型表达式,其取值范围从,0,开始,分别到,行数,-1,和,列数,-1,为止。,二维数组元素的地址也是通过“,&”,运算符得到的。例如元素,iTall13,的地址用,&iTall13,表示,因此,语句:,scanf(“%d”,是正确的。,(,2,)同一维数组一样,二维数组也不能够进行整体操作,输入输出时都必须使用循环逐个操作,二维数组操作通常使用双重循环比较方便。,小结:二维数组的初始化,可以用以下两种方法来实现,(,1,)按行赋初值,int,iTall34=11,12,13,14,21,22,23,24,31,32,33,34,;,这种方式直观清晰,便于阅读理解,而且可以直接写成二维数组的形式,更是一目了然:,int,iTall34=11,12,13,14,21,22,23,24,31,32,33,34,;,2,)按二维数组在在内存中的排列顺序给各元素赋初值,(1),将所有数据写在一个花括号内,按数据排列的顺序对各元素赋初值。,例如,,int,iTall34=11,12,13,14,21,22,23,24,31,32,33,34,;等价于,int,iTall34=11,12,13,14,21,22,23,24,31,32,33,34,;,字符数组与字符串的应用,学一学,字符数组的定义,字符数组用于存储和处理一个字符串,其定义格式与一维数值数组一样,一般形式是:,char,数组名,常量表达式,;,问题,5.10,在程序中经常要涉及到字符串的输入输出操作,从键盘输入“,welcome”,,再显示到屏幕上。(字符数组的输入输出),问题,5.11,班级举行元旦晚会,要求每位嘉宾都在进门时按任意键一次(回车键除外),终止进场时输入回车键,晚会结束后,举办方希望查看晚会参加人数,试编程实现(该问题是求一个字符串中有多少个有效字符)。,学一学,字符串及其结束标志,0,:,字符串是用双引号括起来的若干有效字符序列。字符串可以包括字母、数字、专用字符、转义字符等。如“,I am a student”,,“,Basic”,,“,x+y,=%,dn,”,等都是合法的字符串。,一般来讲,字符串是利用字符数组存放的。在进行字符处理时,必须事先知道字符数组中的字符个数,这在程序设计过程中是很麻烦的一件事。,为了有效而方便地处理字符数组,,C,语言提供了不需要了解数组中有效字符长度的方法。其基本思想是:在每个字符数组的有效字符后面(或字符串末尾)加上一个特殊字符,0(,其,ASCII,码值为,0),,在处理字符数组的过程中,一旦遇到结束符,0,,就表示已达到字符串末尾。同时,,C,语言允许用一个简单的字符串常量初始化一个字符数组,如:,char,chTest,=“Happy”,;,等价于,char,chTest,=H,a,p,p,y,0,;,问题,5.11,班级举行元旦晚会,要求每位嘉宾都在进门时按任意键一次,终止进场时输入回车键,晚会结束后,举办方希望查看晚会参加人数,请你编程实现。(该问题是求一个字符串中有多少个有效字符)。,【,解题步骤,】,1,定义字符数组存放嘉宾按键(输入的任意字符);,2,定义变量,iCount,作计数器;,3,构建循环从字符的第一个元素开始计数,直至字符数组结束;,4,输出结果。,流程图,问题,5.12,两位同学在课外活动中进行成语接龙游戏,请你将两个任意输入的习语,比如“,no pains”,和“,no gains”,连接起来,并且输出结果。,流程图,小结,1.,字符数组的定义,字符数组用于存储和处理一个字符串,其定义格式与一维数值数组一样,一般形式是:,char,数组名,常量表达式,;,小结:字符数组初始化,与一般数组一样,字符数组也可以初始化,如:,char chName8=A,,,l,,,i,,,c,,,e,;,(,1,)如果花括弧内的字符个数大于数组长度,则按语法错误处理。,(,2,)如果花括弧内的字符个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即,0,)。,(,3,)字符数组的长度也可用初值来确定,(,4,)也可以直接用常量字符串进行初始化赋值,小结:字符串和字符数组的输入,(,1,)逐个字符输入:可以使用循环语句逐个输入每个字符数组元素,即将字符一个一个地输入。例如:,char chTest10;,int,j;,for(i=0;i10;i+),scanf(“%c,”,&,chTesti,);,也可以如同问题,5.10,中使用,getch,(),函数。,(,2,)整体输入,字符数组可以整体输入或输出,这是和数值型数组不同的地方。整体输入可以使用,gets(),函数或,scanf,(),函数的,s,格式,例如:,char chTest10,;,scanf(“%s,”,chTest,);,小结:字符串和字符数组的输出,(,1,)逐个字符输出:可以使用循环语句逐个输出每个字符数组元素,即将字符一个一个地输出。例如:,char chTest10=“program”;,int,j;,for(i=0;i7;i+),printf(“%c,”,chTesti,);,也可以如同问题,5.10,中使用,putchar,(),函数。,(,2,)整体输出,使用,puts(),函数和,printf,(),函数的,s,格式,例如:,char chTest10=“program”;,printf(“%s,”,chTest,);,或者,puts(chTest,);,使用,printf,函数可以实现格式化输出。,
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6