




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,第六章数组,前面所用到的数据均为基本类型(整、实、字符),为了丰富数据类型,须提供强有力的数据表达方式。C语言提供了一种构造类型数据由基本类型按某一规则组合在一起。,其中数组:同一种(基本)类型按一定顺序组合在一起的数据类型。,.,2,6.1一维数组,6.1.1一维数组的定义,形式:类型说明符数组名常量表达式;,例:inta20;floatx100;,.,3,编译时分配连续内存内存字节数=数组维数*sizeof(元素数据类型),例inta6;,数组名表示内存首地址,是地址常量,.,4,3.常量表达式为常量和符号常量。不允许有变量,其表达式的值代表了元素的个数。,例:inta20;表示有20个元素且元素从0开始编排:a0,a1,a19,1.数组名的确定方法同变量名。,2.C语言用方括号表示数组元数个数。,.,5,4.可在定义时对数组赋初值,方法如下:,对部分元素赋初值inta10=0,1,2,3,4;,对全部元素赋初值inta10=10,11,12,13,14,15,16,17,18,19,如此,只有前5个元素初值确定,后5个元素为0,.,6,如对数组元素赋同一初值,必须一一写出:inta10=0,0,0,0,0,0,0,0,0,0;inta10=0;0是特例不可写成:inta10*0;,若赋全部元素的初值,可省略常量表达式a=0,1,2,3;表示a4,即只有4个元素。,.,7,6.1.2一维数组的引用,2.引用方式:数组名下标代表了一个元素,等价一个同类型的变量。,3.一般地,一维数组各元素分配在连续地内存单元之中。,1.须象使用变量那样,先定义,后使用,例:a05+a16为正确的算术表达式,.,8,6.1.3一维数组的应用,用循环for实现:for(i=2;i20;i+)fi=fi2+fi1;,例:求Fibonacci数列。定义数组,并赋初值intf20=1,1;,注意:下标越界问题:i=2且i20,.,9,程序如下:mian()inti;intf20=1,1;for(i=2;i20;i+)fi=fi2+fi1;for(i=0;i10,打印结果,结束,内循环,外循环,B,A,No,Yes,Yes,No,.,16,程序:main()inta10;inti,j,t;printf(pleaseinput10numbers:n);for(i=0;iaj),.,17,t=ai;ai=aj;aj=t;printf(thesortednumbers:n);for(i=0;i=9;i+)printf(%d,ai);,另一种排序法:冒泡排序法(详见教材),.,18,6.2二维数组,6.2.1二维数组的定义,1.不可将定义写为inta4,10。,形式类型说明符数组名常量表达式常量表达式,例:inta410;floatx820;,.,19,2.可将二维数组的元素看成为若干个特殊的一维数组。如:intb34;,则:有三个特殊的一维数组b0,b1,b2,每一个又有四个元素:b00,b01,b02,b03,b10,b11,b12,b13,b20,b21,b22,b23,b30,b31,b32,b33,.,20,3.二维数组的存放方式为:按行存放。由此可推广至三维、n维数组的定义和存放。即:最右边的下标变化最快。,4.初始化:按行给二维数组赋初值:inta34=1,2,3,4,5,6,7,8,9,10,11,12,;可以去掉其中的。,.,21,可以对部分元素赋初值,但需表达清楚。如:inta34=1,2,3,8。,可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小.staticinta4=1,2,3,12;,.,22,6.2.2二维数组元素的引用,形式:数组名下标下标,其中的下标为整型表达式,但不得越界。与一维数组元素一样,二维数组元素相当于同类型的简单变量。,.,23,6.2.3程序举例,程序如下:,main()inta23=1,2,3,4,5,6;intb32,i,j;,例1将一个二维数组行和列元素互换,存到另一个二维数组中。例如:,.,24,printf(arraya:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(arrayb:n);for(i=0;i=2;i+),.,25,for(j=0;j=1;j+)printf(%5d,bij);printf(n);,运行结果如下:arraya:123456,.,26,arrayb:142536,数组元素数据的输入必须以循环方式进行或者定义时置初值。,.,27,例2.有一个34的矩阵,要求编程序求出其中值最大的那个元素的值,以及所在的行号和列号。,先用NS流程图表示算法,见图6.6,二维数组一般用二重循环,.,28,据此写出以下程序:,main()inti,j,row=0,colum=0,max;staticinta34=1,2,3,4,9,8,7,6,10,10,5,2max=a00;for(i=0;imax),.,29,max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);,输出结果为:max=10,row=2,colum=1,.,30,6.3字符数组,6.3.1字符数组的定义,类型名,数组名,大小,1.初始化:直接给出字符串中的各字符chara4=G,o,o,d;,存放字符数据。字符串用字符数组存放。,charc10;,若字符多于元素个数,则语法错,反之,后而补0,.,31,可以去掉定义时的大小设置,而通过自动赋值决定长度(大小)charx=I,a,m,a,s,t,u,d,e,n,t;,前面说过,字符串常量用“”表示,且由0结尾.charx=Iamastudent.;则长度为15+1=16,其中x15存放0,其中亦可省略。,2.字符数组的引用每一个字符数组元素相当于一个字符变量。,.,32,格式符:%c逐个输入/输出字符。%s整个串一次输入/输出。,1.输出(用%s)用%s输出时,不输出0.,在printf中须直接写数组名.charc=Iamastudent;printf(%s,c);,6.3.2字符数组的输入输出,.,33,若数组长度大于字符串长度,则遇到0即停止输出charc10=china;printf(%s,c);,输出时遇到第一个0即结束。,.,34,2.输入(用%s),输入多个字符串,可用空格隔开。charstr15,str25,str35;scanf(%s%s%s,str1,str2,str3);,输入字符串时,系统自动加上0,则:输入Howareyou?str1:How0str2:are0str3:you0,.,35,输入:Howareyou则只会将How输入,且存为,scanf中须用地址量,数组名表示地址量。,但若:charstr13scanf(%s,str);,.,36,6.3.3字符串处理函数,.,37,1.字符串I/0函数,charname10;,scanf(%s,name);,printf(%s,name);,格式描述串中使用转换字符串“%s”,WangLi,Wang,.,38,字符串I/0函数:puts,gets,charname10;gets(name);puts(name);,WangLi,WangLi,从键盘上读入一个完整的行,存入字符数组name。并用空字符0取代行尾的换行符n。,把字符数组中的字符串输出到显示器。,.,39,字符串I/0函数,puts函数完全可以由printf函数取代。当需要按一定格式输出时,通常使用printf函数。,printf(n雇员姓名是:);puts(name);printf(n雇员所属部门是:);puts(dept);,printf(n雇员姓名是:%s,name);printf(n雇员所属部门是:%sn,dept);,使用puts函数输出字符串,使用printf函数输出字符串,.,40,2.字符串处理函数,与字符串有关的内置函数在头文件string.h中定义要使用标准库字符串处理函数,程序前应该包含:#include,string.h,strlen,strcpy,strcmp,strcat,.,41,字符串处理函数,语法strlen(s);描述计算字符串s中字符的个数,并将字符的个数作为函数的返回值。在计算字符个数时不计表示字符串结束的空字符0。,strlen,#include#includevoidmain()chararr=Beijing;intlen1,len2;len1=strlen(arr);len2=strlen(Shanghai);printf(nstring=%slength=%d,arr,len1);printf(nstring=%slength=%dn,Shanghai,len2);,string=Beijinglength=7string=Shanghailength=8,.,42,字符串处理函数,语法strcpy(dest,src)描述其中,dest是目标字符串,src是源字符串。相当于把字符数组src中的字符串拷贝到字符数组dest中。结束标志0也一同拷贝。src可以是一个字符串常量。字符数组dest应足够大,以保证字符串复制不越界。,strcpy,#include#includevoidmain()charsource=Wechangelives;chartarget20;strcpy(target,source);printf(n源字符串=%s,source);printf(n目标字符串=%sn,target);,源字符串=Wechangelives目标字符串=Wechangelives,.,43,字符串处理函数,语法strcmp(str1,str2)描述按照ASCII码顺序比较字符串str1和str2的大小,比较的结果由函数返回。在两个字符串str1和str2相同时返回0;字符串str1大于字符串str2时返回一个正值,否则就返回负值。,strcmp,#include#includevoidmain()charusername15,pwd15;printf(n请输入用户名:);gets(username);printf(n请输入密码:);gets(pwd);if(strcmp(username,John)=0),请输入用户名:john请输入密码:123456用户名和/或密码无效,请输入用户名:John请输入密码:123456您已成功登录,.,44,字符串处理函数,语法strcat(dest,src)描述把字符串src中的字符串连接到字符串dest中字符串的后面。本函数返回值是字符数组dest的首地址。连接后字符串的总长度将是字符串src的长度加上字符串dest的长度。目标字符串dest的大小应足够存储最终的字符串。,strcat,#include#includevoidmain()charsource_string=isverygood;chartarget_string30=ACCP4.0;strcat(target_string,source_string);printf(n源字符串=%s,source_string);printf(n目标字符串=%sn,target_string);,源字符串=isverygood目标字符串=ACCP4.0isverygood,.,45,6.3.4字符串数组举例,例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。,程序如下:#includestdio.hmain()charstring81;inti,num=0,word=0;,.,46,charc;gets(string);c=stringi;for(i=0;stringi!=0;i+,c=stringi;)if(c=)word=0;elseif(word=0)word=1;num+;,.,47,printf(Thereare%dwordsinthelinen,num);,运行情况如下:Iamaboy.Thereare4wordsintheline,.,48,#includemain()intk,a10;for(k=0;k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烟草咨询规划方案模板
- 探究2025年新能源行业技术创新投入与成果转化分析报告
- 新能源行业安全管理培训体系构建与2025年提升策略报告
- 线上视频评比活动方案策划
- 2025年地热能发电行业人才需求分析与培养策略报告
- 第一节 伽利略对落体运动的研究教学设计-2025-2026学年高中物理沪科版2020必修第一册-沪科版2020
- 小麦检验员考试题及答案
- 聪明的同学测试题及答案
- DB65T 4367-2021 水质 甲基汞和乙基汞的测定 液相色谱-原子荧光光谱法
- 1.2石油与国家安全教学设计-2024-2025学年高中地理鲁教版(2019)选择性必修3
- 校长讲法治课课件
- 2025至2030中国工业云平台行业发展研究与产业战略规划分析评估报告
- 2025餐饮合伙经营合同协议书
- 《国家机构有哪些》课件
- 履约保函标准文本与应用示例
- 五年级数学口算训练题库及解题技巧
- 催化原理教学课件
- 2025下半年新疆生产建设兵团事业单位招聘(2398人)考试参考试题及答案解析
- 经桡动脉脑血管造影护理课件
- 2025年海南省公务员录用考试《行测》真题及答案解析(记忆版)
- 2025年湖北省公务员公开遴选笔试试题及答案(综合类)
评论
0/150
提交评论