您好,欢迎访问三七文档
第5章数组学习目标1使用一维数组处理同一类型的大批数据;2使用字符数组处理字符串;3使用二维数组处理类似行列式的问题。5.1一维数组的应用学一学1.一维数组的定义类型标识符数组名[常量表达式];其中常量表达式说明数组的大小,即数组中元素的个数。2.一维数组元素的引用定义了数组后,就可以引用数组中的任意一个元素,引用形式为:数组名[下标表达式]其中“下标表达式”表示数组中的某一个元素的顺序号,必须是整型常量、整型变量或整型表达式。试一试问题5.1:学校举行知识竞赛,有10个学生参赛,请协助老师编写一个程序把成绩打印出来。流程图开始定义数组iContest[10]并且初始化数据定义变量ii10i++i=0结束YN输出数组元素iContest[i]练一练如果问题5.1中的成绩在定义数组初始化时只给出5个数据,再输出结果看看是什么情况?试一试问题5.2:将问题5.1中的10个学生的竞赛成绩从键盘输入,计算出平均分,将平均分输出到屏幕上。流程图开始定义数组iContest[SIZE]定义变量i,fAvei10i++i=0结束YNi10输入数组元素iContest[i]i++i=0YNfAve=fAve+iContest[i]fAve=fAve/SIZE宏定义SIZE为10输出fAve练一练问题5.2在求10个同学的竞赛总分时,是先用一个循环输入各个数组元素值,再用另一个循环累加求出总分,请修改程序使用一个循环,即在输入数据的循环中进行累加求和,即输入一个数就累加一个数。试一试问题5.3:从键盘输入10个参赛学生的成绩,求出分数最高的同学的序号(从1开始)及其成绩。开始定义数组iContest[SIZE]定义变量i,iMax=0i10i++i=1结束YNi10输出数组元素iContest[i]i++i=0YN宏定义SIZE为10iContest[i]iContest[iMax]iMax=iYN输出iContest[iMax]及iMax+1问题5.4用初始化方法,把某学习小组10名学生《C语言程序设计》课程的考试成绩存储在数组中,再从键盘输入一个考分,查找该数是否在数组中,如果是的话,请输出它是第几名学生的成绩。流程图开始定义并初始化数组,iStudent[SIZE]定义整型变量i,iFind输入考分fFindi=0i10fStudent[i]==fFindi++结束YNYN输出i+1宏定义SIZE为10练一练1.在问题5.4中,如果输入的成绩没有查到,请给出提示信息“notfound”。想一想1.拓展问题5.4,如果希望能够多次输入考分进行查找,每次都输出查找到的结果,直到输入1000时结束查找,怎样分析、解决问题?2.再次拓展问题5.4,如果输入一个考分,但是在成绩数组中有一个以上的考分与此相同,怎样处理?*问题5.5软件系要选拔创新小组的成员,有N名同学参加考试,请你帮助老师将成绩输入计算机,从低分到高分进行冒泡排序并输出排序后的结果。结束定义i,k,t,astu[N]循环输入数组k=1kN-1i=N-1i=KiStu[i]iStu[i-1]交换iStu[i]和iStu[i-1]i--k++YNNN开始YY循环输出排序后的数组宏定义N为6问题5.6一位同学因为参加大学生运动会需要进行缓考,缓考过后,老师要把他的成绩插入班级的成绩单中,成绩单已经按照分数从高到低进行了排序,试问这个缓考成绩要怎样插入才不影响已经排好序的成绩单?流程图开始iInsertiStu[i]i=0键盘输入iInsert根据解题步骤定义数组及所需变量iNi++j=NjiiStu[j]=iStu[j-1]j--iStu[i]=iInsert结束YNYN循环输出插入数据后的数组小结:数组的定义数组必须先定义,后使用。一维数组定义的一般形式为:类型标识符数组名[常量表达式];其中:(1)常量表达式表示数组的元素的个数,即数组的长度,不允许作动态定义。(2)相同类型的数组和变量可以在一个类型说明符下一起说明,用逗号隔开。小结:一维数组的引用定义了数组后,就可以引用数组中的任意一个元素,引用形式如下:数组名[下标表达式]其中下标表达式可以是整常数或整型表达式,其取值范围从0开始,到元素个数-1为止。超出这个范围就称为数组下标越界。小结:一维数组的初始化当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储单元中并没有确定的值。使数组元素具有某个值,可以用赋值语句或输入语句在程序运行时完成,但占用机器时间。如果已经知道元素的具体值,C语言可以在定义时,给各元素指定初始值,称为数组的初始化。二维数组学一学1.二维数组的定义类型标识符数组名[常量表达式1][常量表达式2];其中常量表达式1和常量表达式2,分别表示数组的行数和列数。2.二维数组元素的引用二维数组元素的引用形式为:数组名[行下标][列下标]行下标和列下标可以是整常数或整型表达式,其取值范围从0开始,分别到行数-1和列数-1为止。问题5.7一个学习小组有5名同学,每人有英语和数学两项成绩,试将成绩表用二维数组存储,并输出到屏幕上。数学86100758865英语7890806585开始结束定义并初始化数据i=0,j=0i2j=0j5j++i++YNYN循环输出列下标+1输出iScore[i][j]输出iScore[i][j]练一练1.在问题5.7的解决中,使用双重循环来输出成绩表,如果不用双重循环,请你尝试用两个单重循环来输出数据。2.在问题5.7中,成绩表的数据是在定义时初始化赋值的,但是现在又有一组比赛数据要输入,请你将数据改由键盘输入(提示:可参照输出采用双重循环进行)。想一想在问题5.7中,成绩表输出方式是输出一行序号,然后换行输出一行成绩,现在要求输出一个序号,接着输出该序号对应的成绩,然后换行,再输出一个序号及其对应的成绩,直到五个参赛学生的数据全部输出,怎麽办呢?问题5.8新生入校参加军训,12名同学站成了3行4列,请编程序帮助教官从键盘输出12名同学的身高,并且求出其中个子最高的同学的身高。流程图开始结束定义i,iTall[3][4]并初始化数据i=0,iTallest=0i3j=0j4j++i++YNYNiTallestiTall[i][j]iTallest=iTall[i][j]YN输出iTallest问题5.9看过电影黑客帝国(theMatrix)之后,有12名同学排成3行4列准备进行演习,根据他们自编的剧情需要,他们需要进行行列交换,在另一个位置上站成4行3列,请编写程序实现交换后的站位,每个同学的代号由初始化数据给出。开始定义iMatrix1[3][4],iMatrix2[4][3],i=0,j=0,并初始化i3i3j=0iMatrix2[j][i]=iMatrix1[i][j]i++j++YYNN结束双重循环按行输出iMatrix2小结:二维数组定义与一维数组一样,二维数组也必须先定后使用,定义的一般形式为:类型标识符数组名[常量表达式1][常量表达式2];其中常量表达式1和常量表达式2,分别表示数组的行数和列数。小结:二维数组元素的引用和输入输出(1)二维数组元素的引用形式为:数组名[行下标][列下标]行下标和列下标可以是整常数或整型表达式,其取值范围从0开始,分别到行数-1和列数-1为止。二维数组元素的地址也是通过“&”运算符得到的。例如元素iTall[1][3]的地址用&iTall[1][3]表示,因此,语句:scanf(“%d”,&iTall[1][3]);是正确的。(2)同一维数组一样,二维数组也不能够进行整体操作,输入输出时都必须使用循环逐个操作,二维数组操作通常使用双重循环比较方便。小结:二维数组的初始化,可以用以下两种方法来实现(1)按行赋初值intiTall[3][4]={{11,12,13,14},{21,22,23,24},{31,32,33,34}};这种方式直观清晰,便于阅读理解,而且可以直接写成二维数组的形式,更是一目了然:intiTall[3][4]={{11,12,13,14},{21,22,23,24},{31,32,33,34}};2).按二维数组在在内存中的排列顺序给各元素赋初值(1)将所有数据写在一个花括号内,按数据排列的顺序对各元素赋初值。例如,intiTall[3][4]={11,12,13,14,21,22,23,24,31,32,33,34};等价于intiTall[3][4]={{11,12,13,14},{21,22,23,24},{31,32,33,34}};字符数组与字符串的应用学一学字符数组的定义字符数组用于存储和处理一个字符串,其定义格式与一维数值数组一样,一般形式是:char数组名[常量表达式];问题5.10在程序中经常要涉及到字符串的输入输出操作,从键盘输入“welcome”,再显示到屏幕上。(字符数组的输入输出)开始结束定义cString[20],i=0i7输入cString[i]i++i7输出cString[i]i++i=0问题5.11班级举行元旦晚会,要求每位嘉宾都在进门时按任意键一次(回车键除外),终止进场时输入回车键,晚会结束后,举办方希望查看晚会参加人数,试编程实现(该问题是求一个字符串中有多少个有效字符)。开始结束定义字符数组cParty[30],整型变量i=0输入cPartycParty[i]!=’\0’i++YN输入cParty学一学字符串及其结束标志‘\0’:字符串是用双引号括起来的若干有效字符序列。字符串可以包括字母、数字、专用字符、转义字符等。如“Iamastudent”,“Basic”,“x+y=%d\n”等都是合法的字符串。一般来讲,字符串是利用字符数组存放的。在进行字符处理时,必须事先知道字符数组中的字符个数,这在程序设计过程中是很麻烦的一件事。为了有效而方便地处理字符数组,C语言提供了不需要了解数组中有效字符长度的方法。其基本思想是:在每个字符数组的有效字符后面(或字符串末尾)加上一个特殊字符‘\0’(其ASCII码值为0),在处理字符数组的过程中,一旦遇到结束符‘\0’,就表示已达到字符串末尾。同时,C语言允许用一个简单的字符串常量初始化一个字符数组,如:charchTest[]=“Happy”;等价于charchTest[]={‘H’,‘a’,‘p’,‘p’,‘y’,‘\0’};问题5.11班级举行元旦晚会,要求每位嘉宾都在进门时按任意键一次,终止进场时输入回车键,晚会结束后,举办方希望查看晚会参加人数,请你编程实现。(该问题是求一个字符串中有多少个有效字符)。【解题步骤】1.定义字符数组存放嘉宾按键(输入的任意字符);2.定义变量iCount作计数器;3.构建循环从字符的第一个元素开始计数,直至字符数组结束;4.输出结果。流程图开始结束定义字符数组cParty[30],整型变量i=0输入cPartycParty[i]!=’\0’i++YN输入cParty问题5.12两位同学在课外活动中进行成语接龙游戏,请你将两个任意输入的习语,比如“nopains”和“nogains”连接起来,并且输出结果。流程图开始结束定义字符数组cIdiom1[80],cIdiom2[80]定义变量j,i输入cIdiom1,cIdiom2i=0cIdiom1[i]!=’\0’i++j=0cIdiom2[j]!=’\0’cIdiom1[i+j]=cIdiom2[j]j++NYNYcIdiom1[i+j]=‘\0’输出cIdiom1小结1.字符数组的定义字符数组用于存储和处理一个字符串,其定义格式与一维数值数组一样,一般形式是:char数组名[常量表达式];小结:字符数组初始化与一般数组一样,字符数组也可以初始化,如:charchName[8]={‘A’,‘l’,‘i’,‘c’,
本文标题:第5章C语言数组.
链接地址:https://www.777doc.com/doc-2110259 .html