![数组及其应用_第1页](http://file4.renrendoc.com/view/aaae5ad4b4e901a9df74318bb6a00a83/aaae5ad4b4e901a9df74318bb6a00a831.gif)
![数组及其应用_第2页](http://file4.renrendoc.com/view/aaae5ad4b4e901a9df74318bb6a00a83/aaae5ad4b4e901a9df74318bb6a00a832.gif)
![数组及其应用_第3页](http://file4.renrendoc.com/view/aaae5ad4b4e901a9df74318bb6a00a83/aaae5ad4b4e901a9df74318bb6a00a833.gif)
![数组及其应用_第4页](http://file4.renrendoc.com/view/aaae5ad4b4e901a9df74318bb6a00a83/aaae5ad4b4e901a9df74318bb6a00a834.gif)
![数组及其应用_第5页](http://file4.renrendoc.com/view/aaae5ad4b4e901a9df74318bb6a00a83/aaae5ad4b4e901a9df74318bb6a00a835.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 数组学习目标本章内容中我们将学习1使用一维数组处理同一类型的大批数据;2使用字符数组处理字符串;3使用二维数组处理类似行列式的问题。15.1 一维数组的应用学一学 1一维数组的定义 类型标识符 数组名常量表达式;其中常量表达式说明数组的大小,即数组中元素的个数。2一维数组元素的引用定义了数组后,就可以引用数组中的任意一个元素,引用形式为:数组名下标表达式其中“下标表达式”表示数组中的某一个元素的顺序号,必须是整型常量、整型变量或整型表达式。2试一试问题5.1:学校举行知识竞赛,有10个学生参赛,请协助老师编写一个程序把成绩打印出来。【解题步骤】1定义一个一维数组存放成绩2输出成绩3流程
2、图4程序代码#include stdio.hvoid main() int i , iContest10 = 90,78,67,98,34,56,75,80,50,92; for(i=0;i10;i+) printf( %d , iContesti) ; 5练一练 如果问题5.1中的成绩在定义数组初始化时只给出5个数据,再输出结果看看是什么情况?6试一试问题5.2:将问题5.1中的10个学生的竞赛成绩从键盘输入,计算出平均分,将平均分输出到屏幕上。【解题步骤】将问题5.1 中的数组元素初始化赋值改为从键盘输入数据在循环中累加每个数组元素的值,求出总分用总分除以总人数求出平均分,输出7流程图8【
3、程序代码】#include stdio.h#define SIZE 10void main() int i,iContestSIZE,iAve=0; for(i=0;iSIZE;i+) scanf(%d, &iContesti); /*循环输入数组元素*/ for(i=0;iSIZE;i+) iAve=iAve+iContesti; /* 累加数组元素求出总分*/ iAve=iAve/SIZE; printf(The average is:%d,iAve); 9练一练 问题5.2在求10个同学的竞赛总分时,是先用一个循环输入各个数组元素值,再用另一个循环累加求出总分,请修改程序使用一个循环,即
4、在输入数据的循环中进行累加求和,即输入一个数就累加一个数。10试一试问题5.3:从键盘输入10个参赛学生的成绩,求出分数最高的同学的序号(从1开始)及其成绩。【解题步骤】1定义一维数组存放成绩2循环输入10个分数3从第一个开始逐个比较,将成绩较高者的下标存入变量iMax中4循环比较结束后,iMax中即分数最高的同学的下标,加1即为其序号,输出 11流程图12【程序代码】#include stdio.h#define SIZE 10void main() int iContestSIZE=0,i=0,iMax=0; printf(n please Input data: ); for(i=0;i
5、SIZE;i+) scanf(%d,&iContesti); for(i=1;iiContestiMax) iMax=i; printf(n The %dth student acheved the highest score %d,iMax+1,iContestiMax); 13问题5.4用初始化方法,把某学习小组10名学生C语言程序设计课程的考试成绩存储在数组中,再从键盘输入一个考分,查找该数是否在数组中,如果是的话,请输出它是第几名学生的成绩。【解题步骤】1.定义,初始化数组fStudent10,下标变量i,变量fFind存放从键盘输入的成绩,iSit存放查找到的位置;2.从键盘输入一个
6、考分,fFind;3.将fFind与数组fStudent的每一个元素对比,如果不同则再与fStudent的下一个元素比较,如果相同则将其下标值加1输出,即为输入考分是第几个学生的成绩。14流程图15【程序代码】#include stdio.h#define SIZE 10void main() float fStudentSIZE=88,97,91,99.5,88,85,84.5,80,77.5,73,fFind; int i ; printf(Please Input the Inqury score:n); scanf(%f,&fFind); for( i=0;iSIZE;i+) if(f
7、Studenti= fFind) printf(the student is:%dn,i+1); break; 16练一练1.在问题5.4中,如果输入的成绩没有查到,请给出提示信息“not found”。想一想1拓展问题5.4,如果希望能够多次输入考分进行查找,每次都输出查找到的结果,直到输入1000时结束查找,怎样分析、解决问题?2再次拓展问题5.4,如果输入一个考分,但是在成绩数组中有一个以上的考分与此相同,怎样处理?17问题5.6一位同学因为参加大学生运动会需要进行缓考,缓考过后,老师要把他的成绩插入班级的成绩单中,成绩单已经按照分数从高到低进行了排序,试问这个缓考成绩要怎样插入才不影响
8、已经排好序的成绩单?18【解题步骤】1把成绩单作为初始值,存储在数组中,注意数组的单元数应大于成绩单个数;2将输入的缓考成绩存储在变量iInsert中;3用循环语句,进行逐个比较,如找到插入位置的下标i则退出循环;4从插入位置i起,把以后的数据逐个后移,以备插入数据;5把数据iInsert插入到下标为i的元素中;6输出数组,观察结果。19流程图20程序代码#include stdio.h#define N 9void main() int i,j,iInsert,iStuN+1=90,88,85,80,75,70,65,60,55; printf(please input insert sco
9、re:n); scanf(%d,&iInsert); for(i=0;iN;i+) if(iInserti;j-) iStuj= iStuj-1; /*从插入位置i起,把以后的数据逐个后移,空出位置*/ iStui=iInsert; /* 插入待插入数据 */ printf(Now,the score list is:n); for(i=0;iN+1;i+) printf(%6d,iStui); /* 输出插入数据后的数组 */ getch(); 21小结: 数组的定义数组必须先定义,后使用。一维数组定义的一般形式为: 类型标识符 数组名常量表达式;其中: (1)常量表达式表示数组的元素的个数
10、,即数组的长度,不允许作动态定义。 (2) 相同类型的数组和变量可以在一个类型说明符下一起说明,用逗号隔开。 22小结:一维数组的引用定义了数组后,就可以引用数组中的任意一个元素,引用形式如下: 数组名下标表达式其中下标表达式可以是整常数或整型表达式,其取值范围从0开始,到元素个数-1为止。超出这个范围就称为数组下标越界。 23小结:一维数组的初始化当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储单元中并没有确定的值。使数组元素具有某个值,可以用赋值语句或输入语句在程序运行时完成,但占用机器时间。如果已经知道元素的具体值,C语言可以在定义时,给各元素指定初始值,称为数组的初始化。
11、24 二维数组学一学1.二维数组的定义类型标识符 数组名常量表达式1常量表达式2;其中常量表达式1和常量表达式2,分别表示数组的行数和列数。2.二维数组元素的引用二维数组元素的引用形式为:数组名行下标列下标行下标和列下标可以是整常数或整型表达式,其取值范围从0开始,分别到行数-1和列数-1为止。 25试一试 问题5.7有5名序号分别是101、102、103、104、105的学生参加智力竞赛,成绩分别是78、90、80、65、100,成绩如表5-1所示。 表5-1 学生成绩表 序号 101 102 103 104 105 成绩 78 90 8065100试将成绩表用二维数组存储,并输出到屏幕上。
12、【解题步骤】1.定义2行5列的二维数组iScore25存放成绩表,第1行存放序号,第2行存放成绩,通过列数将序号与成绩对应起来;2.依次输出所有参赛学生的序号;3.依次输出所有参赛学生的成绩。26流程图27程序代码#include stdio.hvoid main() int iScore25=101,102,103,104,105,78,90,80,65,100; int i,j; for(i=0;i2;i+) /*循环2次,输出两行数据*/ for(j=0;j5;j+) /*循环5次,输出一行5个数据*/ printf(%6d,iScoreij); printf(n); /*输出一行数据后
13、换行*/ getch(); 28练一练1在问题5.7的解决中,使用双重循环来输出成绩表,如果不用双重循环,请你尝试用两个单重循环来输出数据。2在问题5.7中,成绩表的数据是在定义时初始化赋值的,但是现在又有一组比赛数据要输入,请你将数据改由键盘输入(提示:可参照输出采用双重循环进行)。 29想一想在问题5.7中,成绩表输出方式是输出一行序号,然后换行输出一行成绩,现在要求输出一个序号,接着输出该序号对应的成绩,然后换行,再输出一个序号及其对应的成绩,直到五个参赛学生的数据全部输出,怎麽办呢?30问题5.8新生入校参加军训,12名同学站成了3行4列,请编程序帮助教官从键盘输出12名同学的身高,并
14、且求出其中个子最高的同学的身高。【解题步骤】1定义三行四列的二维数组iTall34存放身高数据;2定义变量iTallest0,用以存放个子最高的同学的身高;3构造双重循环将身高数据逐个与iTallest比较,如果比iTallest大,则存入iTallest,再进行下一个比较,直到12个全部比过;如果不比iTallest大,则直接进行下一个比较;4将iTallest输出,即是所求的结果。31流程图32程序代码#include stdio.hvoid main() int iTall34=167,170,175,178,180,177,165,167,169,173,172,171,i,j; in
15、t iTallest=0; for(i=0;i3;i+) for(j=0;j4;j+) if(iTallestiTallij) iTallest=iTallij; printf(the tallest is:%d ,iTallest); getch();33小结:二维数组定义与一维数组一样,二维数组也必须先定后使用,定义的一般形式为:类型标识符 数组名常量表达式1常量表达式2;其中常量表达式1和常量表达式2,分别表示数组的行数和列数。34小结:二维数组元素的引用和 输入输出 (1)二维数组元素的引用形式为:数组名行下标列下标行下标和列下标可以是整常数或整型表达式,其取值范围从0开始,分别到行数
16、-1和列数-1为止。二维数组元素的地址也是通过“&”运算符得到的。例如元素iTall13的地址用&iTall13表示,因此,语句:scanf(“%d”,&iTall13);是正确的。(2)同一维数组一样,二维数组也不能够进行整体操作,输入输出时都必须使用循环逐个操作,二维数组操作通常使用双重循环比较方便。35小结:二维数组的初始化,可以用以下两种方法来实现(1)按行赋初值int iTall34=11,12,13,14,21,22,23,24,31,32,33,34;这种方式直观清晰,便于阅读理解,而且可以直接写成二维数组的形式,更是一目了然:int iTall34=11,12,13,14,21
17、,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;36字符数组与字符串的应用 学一学字符数组的定义字符数组用于存储和处理一个字符串,其定义格式与一维数值数组一样,一般形式是:char 数组名常量表达式;37问题5.10 班级里有位同学号称能够推断一个人的个性特点,要求一位志愿者
18、从键盘输入一串字符,按回车键结束,主持人统计字符a出现的次数,借此判断该名同学的个性,请你编写程序帮忙统计字符 a出现的次数。【解题步骤】1定义字符数组用以存放从键盘输入的字符,定义变量作为引用字符数组元素的下标变量;2每次输入一个字符(并且显示在屏幕上),循环输入字符数组,按回车结束输入;3构造循环将输入的字符一个个进行判断是否是a,如果是,则进行计数;如果不是,则判断下一个;4输出统计结果。38程序代码#include stdio.hvoid main() char chKidney80, i=0, iCount=0; while(1) chKidneyi=getch(); if(chKi
19、dneyi = r) break; putchar(chKidneyi); i+; for(i=0; chKidneyi != r ; i+) if(chKidneyi = a) iCount+; printf(n char a appears %d times, iCount); getch(); 39想一想 扩展问题5.10,按照统计出的字符a的个数,分别给出测算结果,比如:a出现次数在3次以下,则属于“比较任性”,a的出现次数在35之间,属于“过于自信”,超过5次则属于“少年温顺,老来强硬”,请你编程序实现。分析与提示:在问题1的解决中,判断出字符a出现的次数后,加一个选择结构分析性格测
20、算。40学一学字符串及其结束标志0: 字符串是用双引号括起来的若干有效字符序列。字符串可以包括字母、数字、专用字符、转义字符等。如 “I am a student”, “Basic”, “x+y=%dn” 等都是合法的字符串。一般来讲,字符串是利用字符数组存放的。在进行字符处理时,必须事先知道字符数组中的字符个数,这在程序设计过程中是很麻烦的一件事。为了有效而方便地处理字符数组,C语言提供了不需要了解数组中有效字符长度的方法。其基本思想是:在每个字符数组的有效字符后面(或字符串末尾)加上一个特殊字符0(其ASCII码值为0),在处理字符数组的过程中,一旦遇到结束符0,就表示已达到字符串末尾。同
21、时,C语言允许用一个简单的字符串常量初始化一个字符数组,如:char chTest = “Happy”;等价于char chTest = H, a, p, p, y, 0; 41问题5.11 班级举行元旦晚会,要求每位嘉宾都在进门时按任意键一次,终止进场时输入回车键,晚会结束后,举办方希望查看晚会参加人数,请你编程实现。(该问题是求一个字符串中有多少个有效字符)。【解题步骤】1定义字符数组存放嘉宾按键(输入的任意字符);2定义变量iCount作计数器;3构建循环从字符的第一个元素开始计数,直至字符数组结束;4输出结果。42流程图43程序代码#include stdio.hvoid main()
22、 char chParty30 ; int iCount=0; gets(chParty); /*按回车键结束输入,系统自动在字符串末尾添加结束标志0*/ while(chPartyiCount != 0) /*用0判断字符串是否结束*/ iCount+; printf(n The length of the string is %d,iCount); getch(); 44问题5.12 两位同学在课外活动中进行成语接龙游戏,请你将两个任意输入的习语,比如“no pains”和 “no gains”连接起来,并且输出结果。45解题步骤1根据题意,定义两个字符数组chIdiom1和chIdiom
23、2分别存放输入的习语或成语2在循环中通过判断每一个元素是否字符串结束标志0,找到第一个成语字符串chIdiom1存放结束标志0的元素的下标,即找到字符串尾;3在循环中把第二个成语字符串的字符一个一个地添加到第一个字符串chIdiom1的后面。4为合并后的字符数组chIdiom1添加字符串结束符0;5输出chIdiom1,结果发现将两个字符串连接起来,就是要把第2个字符串赋值到第1个字符串的后面单元中。46流程图47程序代码#include stdio.hvoid main() char chIdiom180,chIdiom280; int j,i; printf(nplease input the first idiom: ); gets(chIdiom1); printf(nplease input the second idiom: ); gets(chIdiom2); i=0; while(chIdiom1i != 0) i+; /*得到第1个字符串的长度*/ j=0; while(chIdiom2j != 0) /*把第2个字符串的内容连接到第一个字符串的后面*/ chIdiom1i+j = chIdiom2j; j+; chIdiom1i+j= 0; /* 添加字符串结束符*/ printf(nthe result is: %s,chIdiom1); getch();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025喷绘制作合同书(合同版本)
- 外贸合同模板中英文FOB
- 职业介绍居间合同
- 鞋子买卖合同
- 消防工程劳务分包合同模板
- 2025广告制作合作合同范本
- 2025郊区自有土地买卖合同
- 房屋买卖合同收据
- 山坪塘承包合同范本
- 2025富阳劳动合同样板范文
- 2025年个人土地承包合同样本(2篇)
- (完整版)高考英语词汇3500词(精校版)
- 2024年联勤保障部队第九四〇医院社会招聘笔试真题
- 网络货运行业研究报告
- 人教版七年级英语上册单元重难点易错题Unit 2 单元话题完形填空练习(含答案)
- 00015-英语二自学教程-unit1
- 新版建设工程工程量清单计价标准解读
- 2024-2025年突发紧急事故(急救护理学)基础知识考试题库与答案
- 左心耳封堵术护理
- 2024年部编版八年级语文上册电子课本(高清版)
- 合唱课程课件教学课件
评论
0/150
提交评论