已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽宁师范大学计算机与信息技术学院蔡静,C语言程序设计,目录,C语言程序设计初步数据描述与基本操作C程序的流程控制函数数组指针结构体和共用体位运算文件综合应用,第五章数组,5.1一维数组5.2变量的存储属性5.3编译预处理,辽宁师范大学蔡静,4,数组是构造型数据,由基本类型数据按一定规则组成,是有序数据的集合。数组中元素类型相同,用数组名和下标来唯一标识数组中元素。,789687.,Stud0stud1stud2.Stud99,Stud,Stud(100)有100个元素:stud0stud99,数组的概念,辽宁师范大学蔡静,5,5.1一维数组5.1.1一维数组的定义,格式:类型说明符数组名常量表达式例:floatfstud100;intinum6;charcname9;说明:数组名命名规则与变量名的命名规则相同;中的常量表达式的值是数组长度,即元素个数;C规定,数组为静态存储(static),所以常量表达式中不能含有变量。,.,辽宁师范大学蔡静,6,5.1.2数组元素的引用,数组名下标例:fstud3表示数组fstud中第四个元素。说明:先定义后使用;下标从0开始;0,数组长度-1C规定只能引用单个元素,不能一次引用整个数组。例:,辽宁师范大学蔡静,7,5.1.3一维数组的初始化,1.定义时赋初值(1)对全部元素赋初值;指定长度staticintinum4=8,2,5,4;不指定长度staticintinum=8,2,5,4;(2)对部分元素赋初值;必须指定长度staticintinum5=1,2,3,4;/*给前四个元素赋值*/staticintinum5=1,3,4,5;/*error*/staticintinum=1,2,3;/*系统认为数组inum的长度为3*/,8254,inum,inum0inum1inum2inum3,辽宁师范大学蔡静,8,5.1.3一维数组的初始化(续),不能对数组这样整体赋初值例:staticintinum10=7*10;若不赋初值,系统对static数组的数值型元素自动赋初值为数值0;对static数组的字符型元素自动赋初值为字符0。例1CJ_Array_score_sum_ave_grade.C:输入N个学生成绩,求平均分。若该生成绩高于平均分10分,记为“A”等,若低于平均分10分,记为“C”等,其余记为“B”等。,辽宁师范大学蔡静,9,例2:CJ_Array1_ChangeInsertDelete.C,编写程序。N个数,把第1个数给第2个数,第2个数给第3个数,,以此类推,把第N-1个数给第N个数,最后把第N个数给第1个数。编写程序。N个数,把第2个数给第1个数,第3个数给第2个数,,以此类推,把第N个数给第N-1个数,最后把第1个数给第N个数。N个数,删除其中第m个数。N个数,键盘接收一个数插入到其中第m个位置。,辽宁师范大学蔡静,10,5.1.4一维数组元素的查找与排序,排序冒泡排序算法、选择排序算法例:查找折半查找算法例:,排序之冒泡法。思想:比较相邻两数,小数上浮。,972651,792651,729651,726951,726591,726519,72651,27651,26751,26571,26517,2651,2651,2561,2516,251,251,215,21,12,第一轮6个数比较5次,第二轮5个数比较4次,第三轮4个数比较3次,第四轮3个数比较2次,第五轮2个数比较1次,N个数:比较N-1轮;第j轮,N-j+1个数,比较N-j次。,排序之选择法。思想:分别与其后的各数比较,每轮得到1个当前的最小数.,972651,792651,297651,297651,297651,197652,97652,79652,69752,59762,29765,9765,7965,6975,5976,976,796,697,97,79,第一轮6个数比较5次,第二轮5个数比较4次,第三轮4个数比较3次,第四轮3个数比较2次,第五轮2个数比较1次,N个数:比较N-1轮;第j轮,N-j+1个数,比较N-j次,查找之折半查找法。前提:数据已排序思想:先检索序列1/2处的数据,看它是否为所需的数据,若不是,则判断要找的数据是在当中数的哪一边,下次就在这个范围内查找,。每次将查找范围缩小一半,直到找到这个数或得出找不到的结论为止。,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,2,5,6,7,8,13,15,17,19,21,23,25,26,27,28,35,41,52,63,第1轮查找,top=0,mid=(top+bot)/2,bot=n-1,10,11,12,13,14,15,16,17,18,23,25,26,27,28,35,41,52,63,第2轮查找,top,mid,bot,10,11,12,13,23,25,26,27,第3轮查找,top,mid,bot,bot=mid-1,12,13,26,27,第4轮查找,top,mid,bot,top=mid+1,折半查找中的三个临时变量间的迭代,1.键盘接收10个数,按由小到大排序,再输入一个数,插在相应位置。2.将一个数组中的元素按逆序重新存放。如:2,15,8,9-9,8,15,2,一维数组作业,CJ_Array2_YangHuiTriangle.C.打印杨辉三角形的前10行。,二维数组导入,11112113311464115101051.,辽宁师范大学蔡静,17,5.2二维数组和多维数组5.2.1二维数组及其定义,类型说明符数组名常量表达式常量表达式;例:staticfloatfstud564;staticintinum783;说明:数组元素从00到M-1N-1一共M*N个,按行存放;如:数组inum24:inum00inum01inum03inum10inum11inum13,inum00inum01inum02.inum12inum13,inum,辽宁师范大学蔡静,18,二维数组元素的存储按行存放,辽宁师范大学蔡静,19,把二维数组看作一种特殊的一维数组,这个一维数组的元素又是一个一维数组。,辽宁师范大学蔡静,20,5.2.2二维数组的初始化,方1:分行赋初值例:staticintinum23=1,2,3,2,6,4,0,6,9;方2:按序赋初值例:staticintinum23=1,2,3,2,4,6,0,6,9;,1.定义时赋初值(1)对全部元素赋初值。可以缺省第一维的长度(分行、按序皆可);例:staticintinum3=1,2,3,4,5,6;staticintinum3=1,2,3,4,5,6;(2)对部分元素赋初值。若缺省第一维长度则必须分行赋值。例:staticintinum3=0,0,3,7,6/*0,0,3,0,0,0,7,6,0*/,2.不赋初值,则系统自动赋初值为数值0或字符0。例:staticintinum24;/*0,0,0,0,0,0,0,0*/staticcharcname23;/*0,0,0,0,0,0*/,辽宁师范大学蔡静,22,二维数组的引用,数组名下标1下标2说明:先定义后使用;下标为常量表达式,对于数组MN,范围在0M-1,0N-1,即00到M-1N-1,不存在元素MN。例CJ_Array2_MatrixSum.C:已知一个M*N的矩阵,求每一行、每一列的和,并输出(以2*4矩阵为例)。例CJ_Array2_MatrixTranspose.c:已知一个M*N的矩阵,将矩阵转置(即行列互换),并输出(以2*4矩阵为例)。,M个学生N门课程,求每门课程的平均分,求每个学生的总分,并将学生总分按序输出(由低到高).,辽宁师范大学蔡静,24,5.3字符数组5.3.1字符数组和字符串,字符数组的定义格式:char或int数组名常量表达式说明:同数值型数组。staticcharstr8;字符数组的初始化方1:单个字符逐个赋值例:staticcharcname5=C,h,i,n,a;说明:每个元素(字符)用单引号括起来;字符可以是转义字符;数组长度=字符个数。,辽宁师范大学蔡静,25,5.3.1字符数组的定义和初始化(续),字符数组的初始化方2:字符串赋值例:staticcharcname6=“China”;说明:所有元素(字符串)用双引号括起来;字符可以是转义字符;数组长度=字符个数+1,但字符数组的元素并不包括结束符0。二维字符数组同理(也可分行或逐个赋值)。,辽宁师范大学蔡静,26,5.3.2字符串和字符串的存储方法,系统自动为字符串数组和字符串常量加一个0作为结束符。因此得到一种新的字符数组初始化方法:charc=I,a,m,h,a,p,p,y,0;等价于:charc=“Iamhappy”;或charc=“Iamhappy”;不等价于:charc=I,a,m,h,a,p,p,y;此写法仍合法,因为C不要求数组最后一个字符是0,只是人们为与系统自动加0保持一致就人为也加0。,辽宁师范大学蔡静,27,5.3.3字符串的输入输出,方1:单个字符输入输出。%c-数组元素例:scanf(“%c”,说明:字符串中可以有多个0,但遇到第一个结束符0就结束字符串的输出。输出的结束仅取决于0,而与数组的长度无关。方3:字符串输入输出函数gets()puts(),此处无把字符串末的0转化为n输出,即自动转换;只对一个字符串操作。执行成功时返回字符数组收元素的地址。例:,2.字符串输入函数格式:gets(字符数组)相关:scanf(“%s”,字符数组名)功能:键盘输入字符串到字符数组,返回字符数组的地址。说明:getchar()从输入流中取一字符,无参数,返回该字符;gets(字符数组)只对一个字符串操作。例:puts(gets();输入DaLian则输出DaLian执行成功时返回字符数组收元素的地址。,辽宁师范大学蔡静,30,例:字符串的输入/输出,CJ_Array1_Str01_InOut1.cCJ_Array1_Str01_InOut2.c,辽宁师范大学蔡静,31,小结1:,不需要在scanf函数中的字符数组名前加地址运算符puts(strcat(s1,s2);puts(strcat(s2,s1);则:ChinaJapan/*0转化为n*/JapanChinaJapan/*此时的s1已改变*/,辽宁师范大学蔡静,34,字符串拷贝函数1.,strcpy(字符数组1,字符数组2/字符串2)功能:把串2拷贝到字符数组1中,将其内容覆盖。说明:字符数组1应有足够长度;字符数组1只能是数组名,不能是字符串形式;不可直接赋值的方式来拷贝,只能用strcpy(,)例:s1=s2;s1=“China”s1=“China”strcpy(s1,“China”),辽宁师范大学蔡静,35,字符串拷贝函数2.,strncpy(字符数组1,字符数组2/字符串2,n)功能:把串2的前n个字符拷贝到字符数组1中,将其内容覆盖。说明:字符数组1应有足够长度;字符数组1只能是数组名,不能是字符串形式;可拷贝串2中前面若干字符到字符数组1中。例:staticchars120=1234567890,s2=Republic;puts(strncpy(s1,s2,4);/*输出Repu567890*/,辽宁师范大学蔡静,36,字符串比较函数,strcmp(字符数组1,字符数组2)功能:比较两个字符串的大小(按ASCII码值逐个字符比较),返回:正整数(串1串2)0(串1=串2)负整数(串1串2)说明:比较两个字符串的大小,if(s1=s2)/*/if(strcmp(s1,s2)=0)./*/,测字符串长度函数strlen(字符数组)功能:测字符串的长度(字符个数,不包括0),返回长度。例:printf(“%d”,strlen(“computer”);/*8*/字符串转换成小写的函数strlwr(字符串)功能:字符串被改为小写,返回字符串地址。字符串转换成大写函数strupr(字符串)功能:字符串被改为小写,返回字符串地址。,辽宁师范大学蔡静,38,字符串函数:,辽宁师范大学蔡静,39,例:字符串处理函数,例:puts(strlwr(“China”);/*china*/puts(strupr(“China”);/*CHINA*/puts(“China”);/*China*/例:CJ_Array1_Str02_Functions1.c字符串函数应用例:CJ_Array1_Str02_Functions2.c键盘输入5个字符串,输出其中最小的字符串,例CJ_Array1_StrWordsCount.c:键盘输入一行字符,统计其中共有多少个单词,单词之间用空格隔开。例CJ_Array1_StrDeleteChar.c:键盘输入一字符串,删除指定的第m个字符。,例CJ_Array1_StrTelegraphCoding.c:翻译密码。有一行电文,按规律译成密码:A-Z,B-Y,C-X,a-z,b-y,c-x,.非字母字符不变,要求编程序将密码译回原文,并打印密码和原文。分析:大写字母ABC.strk.Z相对位置123.i.绝对位置64656667.64+i.相对位置为i的字母的ASCII值为:64+i该字母的译码的相对位置为:27-i该字母的译码的ASCII值=64+(27-i)=64+(27-(strk-64)=155-strk小写字母同理可得:=96+(27-i)=96+(27-(strk-96)=219-strk,CJ_Array2_StrArray.c、将多个字符串(BASIC,FORTRAN,PASCAL)赋给数组并输出。,辽宁师范大学蔡静,43,5.2.4多维数组,三维数组及多维数组的概念:一个n维的数组可以看作是一个n-1维的同类型的数组组成的一维数组(这个定义是递归的)。一个三维数组,可以看作是类型相同的二维数组组成的向量,而每个二维数组又可以看成类型相同的一维数组组成的向量。关于三维数组的形象表示:一个三维数组,可以看成由一些“页”(二维数组)组成;每一页又可以看成又由一些“行”(一维数组)组成;每一行看成由一些“列”组成。每个三维数组,要按页的顺序存储,每页又按行的顺序存储,每行按列顺序存储。,辽宁师范大学蔡静,44,三维数组及其存储:,辽宁师范大学蔡静,4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中英语学习总结
- 初一政治教案大全
- 单位团队获奖感言
- 互联网+糖尿病远程管理平台构建与应用
- 论文格式模板图片手写
- 主动脉瓣狭窄TAVR适应症拓展
- 论功能对等理论下的散文翻译-以《落花生》为例
- 2026年中国粮食行业发展展望及投资策略报告
- 甲状腺疾病相关检查
- 学术论文的科学性怎么写
- 竞聘库房管理岗位
- 石灰岩矿开采及综合利用项目施工方案
- 2025年安全信息考试试题及答案
- 2025衢州市市级机关事业单位第三期编外招聘39人笔试考试参考试题及答案解析
- 2025标准网签购房合同范本下载
- 2025 年氢能工业与应用研究报告
- 云南人力资源开发有限责任公司招聘笔试题库2025
- 人教版八年级上册生物第五单元第一章综合实践项目 设计并制作生态瓶
- 山西某污水处理厂投资估算编制分析
- 2025河南城发环保能源有限公司下属项目公司校园招聘110人笔试考试参考题库及答案解析
- 2025全国医疗应急能力培训系列课程参考答案
评论
0/150
提交评论