已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计,第5章数组,本章主要内容,1.什么是数组,2.一维数组,3.二维数组,4.字符数组,本章重点、难点,数组的概念数组的访问字符数组以及字符串,问题,一个班有40名同学,编程计算这40名同学某一门课程成绩的平均分(学生成绩要记录下来),for(i=0;i40;i+)total=total+score;ave=total/40.0;,基本数据类型特点:该类型变量在一个时刻只能存放一个数值,什么是数组?,使用数组,可以解决40名学生成绩的存放问题。,数组是一个相同数据类型元素的集合,score数组,一维数组,1.一维数组的定义,2.一维数组的输入输出控制,3.数组排序操作,一维数组的定义,类型说明符数组名常量表达式;,例如:intnum10;,说明:1.定义数组num,一次性产生10个数组元素;2.数组元素个数由常量表达式决定,数组元素是顺序存放的;3.数组元素下标从0开始;4.数组名必须是合法标识符,确定数组长度的常量表达式可以是常量或符号常量;,一维数组的定义,5.一维数组可以初始化,例如:intnum10=1,2,3,4,5,6,7,8,9,0;,初始化结果:,全部初始化,全部初始化可以省略数组长度的说明,例如:intnum=1,2,3,4,5,6,7,8,9,0;,一维数组的定义,可以对部分数组元素初始化,例如:intnum10=1,2;,初始化结果:,一维数组的定义,这样定义数组,对吗?,intn=10,an;,#defineN10intaN;,一维数组的输入输出,【例5.1】某班10名同学,输入这10名同学某门课程成绩,计算平均分,输出每位同学成绩以及该门课程的平均分。,#includestdio.h#defineN10voidmain()floatscoresN,sum=0;inti;for(i=0;iN;i+)printf(Pleaseinputscores%d:,i);scanf(%f,printf(Scoresare:n);for(i=0;iN;i+)printf(scores%d=%.2fn,i,scoresi);printf(Averageis:%.2fn,sum/N);,一维数组的输入输出,#includestdio.h#defineN10voidmain()floatscoresN,sum=0;inti;for(i=0;iN;i+)printf(Pleaseinputscores%d:,i);scanf(%f,数组排序操作,排序是计算机解决实际问题的重要应用之一,很多时候都需要对一些数据进行排序。常用的排序算法很多,这里介绍冒泡排序法和选择排序法。,数组排序操作,【例5.2】有5个整数,用冒泡排序法将这5个数按升序排列并输出。,基本思路:将相邻的两个数进行比较,若小数在前,大数在后(或者两个数相等),则不做操作,进行下一组相邻两个数的比较;否则,要在数组中交换这两个数的位置,达到小数在前大数在后的目标。如此执行完一轮,最大数沉到最后。接下来,去除最后那个最大数,剩下的数据序列再进行相邻数的比较交换,经过多个轮次的比较,最终实现排序目标。,数组排序操作,第一轮7沉底,第二轮6沉底,第三轮5沉底,第四轮4沉底,最后结果,数组排序操作,#includestdio.h#defineSIZE5voidmain()intnumSIZE=5,3,7,4,6;intpass,i,tmp;for(pass=1;passnumi+1)tmp=numi;numi=numi+1;numi+1=tmp;,printf(Dataitemsinascendingorder:n);for(i=0;iSIZE;i+)printf(%3d,numi);,数组排序操作,【例5.3】随机产生数组元素,并用选择排序法按升序排列。,基本思路:先选择下标为0的数组元素,用它逐一和后面的各个元素比较,比较的过程中,将小的元素交换到下标为0的位置,大的交换至后面相应的位置。如此执行完一轮,最小的数就安置在了下标为0的位置上。接下来,再选择下标为1的数组元素,用它逐一和后面各元素比较,进行与第一轮类似的比较和交换。以此类推下去,直至最后排序完成。,for(i=0;inumj)tmp=numi;numi=numj;numj=tmp;printf(“Ascendingorder:n);for(i=0;iSIZE;i+)printf(%dn,numi);,数组排序操作,#includestdio.h#includestdlib.h#defineSIZE10voidmain()intnumSIZE;inti,j,tmp;for(i=0;iSIZE;i+)numi=rand();printf(Dataitems:n);for(i=0;iSIZE;i+)printf(num%d=%dn,i,numi);,二维数组,1.二维数组的定义,2.二维数组的输入输出控制,3.杨辉三角的打印,上节课,为啥需要数组一维数组的定义两个基本的排序算法:冒泡法、选择排序法,思考,某班10名同学,输入这10名同学3门课程成绩,计算各门课程平均分,输出每位同学成绩以及各门课程的平均分。,一维数组如何解决?,floatscore110;floatscore210;floatscore310;floatsum3;,是否可以一次性定义30个元素?,二维数组,二维数组的定义,类型说明符数组名常量表达式1常量表达式2;,例如:intnum55;,说明:1.定义数组num,一次性产生25个数组元素;2.数组元素个数是两个常量表达式相乘的结果,数组元素顺序存放;3.数组元素用两个下标表示,两个下标均从0开始;4.二维数组可以初始化,可以全部初始化,也可以对部分元素进行初始化;,二维数组的输入输出,【例5.4】某班10名同学,输入这10名同学3门课程成绩,计算各门课程平均分,输出每位同学成绩以及各门课程的平均分。,#includestdio.h#defineM3#defineN10voidmain()floatscoresMN,sumM=0;inti,j;for(i=0;iM;i+)for(j=0;jN;j+)printf(Pleaseinputscores%d%d:,i,j);scanf(%f,for(i=0;iM;i+)printf(Scoresare:n);for(j=0;jN;j+)printf(%6.2f,scoresij);printf(Averageis:%.2f,sumi/N);printf(n);,杨辉三角打印,使用C语言解决杨辉三角形的显示,主要用到杨辉三角形的一个特性:杨辉三角形除了最外层的数(不包括杨辉三角形的底边)为1外,其余的数字都是它肩上的两个数之和。,杨辉三角打印,【例5.5】使用数组显示输出金字塔形杨辉三角形。,#includestdio.h#defineN10voidmain()intaNN,i,j;,for(i=0;i=i;j-)printf(%2c,);/*两个空格*/for(j=0;j=i;j+)if(i=j|j=0)aij=1;elseaij=ai-1j+ai-1j-1;printf(%3d,aij);/*%3d后一个空格*/if(i=j)printf(n);,字符数组,1.字符数组的定义,2.字符数组与字符串,3.字符数组的输入输出控制,4.字符串处理函数,字符数组,为什么需要字符数组?我的姓名:“fuxiangqiong”用什么类型的基础变量存?整形变量?浮点型?字符型?,字符数组,字符数组的定义,char数组名常量表达式;,例如:charstr10;或者charstr55;,说明:1.字符数组,就是类型说明符为char的数组;2.字符数组遵循前面所介绍的一维数组和二维数组的规则;3.字符数组元素顺序存放,下标从0开始;4.字符数组可以初始化,可以全部初始化,也可以对部分元素进行初始化;,字符数组与字符串,字符串:也就是字符串常量,是放在一对英文双引号中的一串字符或者符号,包括空格、符号以及特殊字符(数字字符、字母、转义字符)。,例如:a#Good#$980.00nNewLine!,字符串在存储的时候,为了标记其结束位置,系统会在字符串的末尾加上一个结束标记0。由于C语言没有设定专门用来存储字符串的字符串变量,因此字符串要存储在字符数组中。,字符数组与字符串,a#Good#$980.00nNewLine!这几个字符串存储在字符数组中:,charstring12=a;charstring39=#Good#;charstring48=$980.00;charstring511=nNewLine!;,字符数组的输入输出,字符数组的输入输出处理可以用三种方法实现:,单个字符处理,利用循环结构实现各数组元素的输入输出;用%s格式说明符实现字符串输入和输出;使用C语言提供的字符串输入输出函数来实现。,字符数组的输入输出,【例5.6】从键盘输入10个英文字母,大小写不限,然后输出显示这10个字母。,#includestdio.h#defineN10voidmain()charlettersN;inti;for(i=0;iN;i+)/*使用循环结构*/printf(Pleaseinputletters%d:,i);scanf(%c,字符数组的输入输出,【例5.7】从键盘输入一个英文单词,输出显示该单词。,#includestdio.h#defineN20voidmain()charwordN;printf(Pleaseinputaword:);scanf(%s,word);/*使用%s时,不需要,字符数组的输入输出,【例5.8】从键盘输入一篇不超过80个字符的英文短文,输出显示该篇短文。,#includestdio.h#includestring.h#defineN80voidmain()charstringN;printf(Pleaseinputastring:);gets(string);/*接收字符串,数组名做参数*/printf(Thestringis:n);puts(string);/*输出显示字符串,数组名做参数*/,字符串处理函数,C库函数中提供了一些专门处理字符串的函数,方便程序员实现字符串处理操作,几种常见字符串处理函数:,字符串复制函数strcpy()字符串连接函数strcat()字符串比较函数strcmp()字符串长度函数strlen(),前面介绍的字符串输入输出函数gets()和puts()大家不要忘记哦!,字符串处理函数strcpy(),【例5.9】从键盘输入一句英文,先将其存储在source数组中,然后再将其复制到destination数组中。,#includestdio.h#includestring.h#defineN30voidmain()charsourceN,destinationN;printf(Pleaseinputastring:);gets(source);strcpy(destination,source);printf(Thesourceis:);puts(source);printf(Thedestinationis:);puts(destination);,字符串复制函数,思考,charname20;name=fuxiangqiong;charname20=fuxiangqiong;charname20;strcpy(name,fuxiangqiong);,思考,charname120=fuxiangqiong;charname220;name2=name1;,strcpy(name2,name1);,字符串处理函数strcat(),【例5.10】从键盘输入一句英文存储在str1数组中,再从键盘输入一句英文存储在str2数组中,然后将两个句英文合并。,#includestdio.h#includestring.h#defineN30voidmain()charstr1N+N,str2N;printf(Pleaseinputstring1:);gets(str1);printf(Pleaseinputstring2:);gets(str2);strcat(str1,str2);printf(String1:);puts(str1);printf(String2:);puts(str2);,字符串连接函数,思考,charstr1100=fuxiangqiong;charstr220=“isagoodman.”;strcat(str1,str2);,fuxiangqiongisagoodman.,字符串处理函数strcmp(),【例5.11】从键盘输入一句英文存储在str1数组中,再从键盘输入一句英文存储在str2数组中,然后比较两者的大小。,#includestdio.h#includestring.h#defineN30voidmain()charstr1N,str2N;printf(Pleaseinputstring1:);gets(str1);printf(Pleaseinputstring2:);gets(str2);printf(Resultis:%dn,strcmp(str1,str2);,字符串比较函数,思考,charstr1100=fuxiangqiong;charstr220=“fuxiangqiong”;if(str1=str2)printf(“goodman.”);elseprintf(“badman.”);,badman.,字符串处理函数strlen(),【例5.12】从键盘输入一句英文,统计其字符数。,#includestdio.h#includestring.h#defineN30voidmain()charstrN;printf(Pleaseinputastring:);gets(str);pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届四川省成都市邛崃市数学三下期中复习检测模拟试题含答案
- 2025届嘉兴市桐乡市三下数学期末学业水平测试模拟试题(含答案解析)
- 2026年医疗设备行业报告:移动储能电源需求及充电设备应用分析
- 2026年化妆品行业个人消费报告:高端产品市场分析
- 2026年写字楼市场租赁市场细分研究报告
- 2026年虚拟现实行业市场趋势、产品创新、营销模式分析报告
- 2026年智能家居行业灰犀牛风险预测与应对措施报告
- 2026年互联网医疗行业发展与挑战报告
- 2026年能源行业门店客户拓展与复购策略报告
- 2026年民宿行业市场洞察与未来增长报告001
- 浙江台州市十校联考2026-2027学年高一上学期11月期中考试化学试卷
- 2026年钢铁企业行业分析报告及未来五至十年行业发展报告
- 2026年扫黑除恶常态化试题及答案
- 给水用聚乙烯(pe)管道系统第部分管件
- 2025年国家电网有限公司客户服务中心招聘15人(第一批)笔试参考题库附带答案详解(3卷)
- 《膜结构工程消耗量标准(征求意见稿)》
- 成渝中线可行性研究报告
- 5.1《自然灾害与防灾减灾》教学设计-八年级地理上册人教版
- DL∕T 567.3-2016 火力发电厂燃料试验方法 第3部分:飞灰和炉渣样品的采取和制备
- CJ/T 106-2016 生活垃圾生产量计算及预测方法
- 美食绘画食品安全
评论
0/150
提交评论