欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言数组讲解.pptx

    • 资源ID:87544048       资源大小:360.62KB        全文页数:87页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言数组讲解.pptx

    /17 v 若要统计高于平均分的人数,则无法实现。若要统计高于平均分的人数,则无法实现。markmark是一个简单变量,存放的是最后一个学生是一个简单变量,存放的是最后一个学生的成绩。的成绩。用已有知识解决方法:用已有知识解决方法:1.1.再重复输入成绩,带来两个问题:再重复输入成绩,带来两个问题:(1 1)输入数据的工作量成倍增加;)输入数据的工作量成倍增加;(2 2)若本次输入的成绩与上次不同,则统计的)若本次输入的成绩与上次不同,则统计的结果不正确。结果不正确。2.2.使用使用100100个变量个变量mark1mark1,mark2,mark99,mark2,mark99,mark100mark100。第1页/共87页/17分析:分析:1.1.1.1.此此100100100100个变量均为学生成绩,表示同一类对象。个变量均为学生成绩,表示同一类对象。2.2.2.2.数据类型相同。数据类型相同。3.3.3.3.可以用序号区分不同的变量。可以用序号区分不同的变量。vv 解解解决决决此此此问问问题题题的的的根根根本本本方方方法法法,引引引入入入数数数组组组,始始始终终终保保保持输入的数据,一次输入,多次使用。持输入的数据,一次输入,多次使用。持输入的数据,一次输入,多次使用。第2页/共87页n除了int、float、char等基本数据类型外,C语言还提供了构造数据类型,来满足不同应用的需要。n构造数据类型是由基本数据类型按一定规则组成的,也称作“导出类型”。n构造数据类型包括数组、结构体、共用体。n数组(array)能将具有相同类型的数据组合在一起,通常是用于处理批量数据。nAn array is a data type that uses subscripted variables and makes possible the representation of a large number of homogeneous values.第第4章章 数组和指针数组和指针第3页/共87页数组的维数数组中能唯一确定数组元素的下标的个数称为数组的维数一维数组:只用一个下标就能区分数组中的不同元素的二维数组:要用两个下标才能区分数组中的不同元素16一维数组34二维数组234三维数组inta6;intb34;intc234;第4页/共87页/174.1 4.1 一维数组一维数组的定义与初始化 1 1.一维数组定义 类型定义符 数组名整型常量表达式;【例如】inta6;a00145a1a2a3a4a523a数组名表示内存首地址,是地址常量编译时系统分配连续内存内存字节数内存字节数=数组维数数组维数*sizeof(元素数据类型元素数据类型)数组a在内存占24字节(6*4字节)第5页/共87页A one-dimensional array declaration is a type followed by an identifier with a bracketed constant integral expression.The value of the expression,which must be positive,is the size of the array.It specifies the number of elements in the array.The array subscripts can range from 0 to size-1.The lower bound of the array subscripts is 0 and the upper bound is size-1.第6页/共87页/17一维数组的定义与初始化【例如】float score50;char name20;注意:不能用变量定义数组的长度。float scoren;当定义数组语句中不同时给变量赋值时,方括号内不得为空。int a;数组一旦定义,数组的大小就不能再改变。常用的办法是用符号常量来指定元素个数。#define size 50 float scoresize;第7页/共87页/174.1.1 4.1.1 一维数组的定义与初始化2.一维数组初始化类型定义符 数组名常量=值1,值2,值n;例如:inta6=1,2,3,4,5,6;inta=1,2,3,4,5,6;两者等价于:a0=1;a1=2;a2=3;a3=4;a4=5;a5=6;例如:inta6=1,2;等价于:a0=1;a1=2;a2=0;a3=0;a4=0;a5=6;intc10=0;/将0赋给c0c9inta=1,2;/等价于:a0=1;a1=2;第8页/共87页/174.1.2 4.1.2 一维数组元素的引用与操作1.数组元素的引用 数组名下标注意:(1)数组元素的下标从0开始(2)引用数组元素时,只能单个引用,不能一次引用整个数组inta6;a=3,4,5,6,7;a6=3,4,5,6,7;(3)下标不要超出数组的范围,否则导致错误的程序结果。第9页/共87页2.2.数组的赋值可以在定义数组时对数组中的全部变量或部分变量赋值(即数组的初始化)。可以在语句中为变量赋值。利用循环依次为每个数组元素赋值或输入值。4.1.2 4.1.2 一维数组元素的引用一维数组元素的引用与操作与操作main()inti,a5;for(i=0;i5;i+)ai=i;/用循环结构直接对数组赋初值用循环结构直接对数组赋初值for(i=0;i5;i+)printf(%d,ai);printf(n);运行结果为:0,1,2,3,4,第10页/共87页用交互的循环结构对数组赋初值main()inti,a5;for(i=0;i5;i+)printf(a%d=,i),scanf(%d,&ai);for(i=0;i5;i+)printf(%d,ai);printf(n);第11页/共87页例:定义长度为1010的整型类型一维数组并完成以下功能:从键盘输入1010个整数,分别存放在1010个数组元素中;输出数组中的各元素值;按逆序输出数组中的各元素值。main()inti,a10;for(i=0;i10;i+)printf(第第%d个数据个数据:,i+1),scanf(%d,&ai);for(i=0;i=0;i-)printf(%4d,ai);printf(n);应用举例第12页/共87页下标越界:差一错误 off-by-one erroroff-by-one errorl在C语言中,有N个元素的数组其元素下标的允许取值范围为0到N-1,不存在下标为N的元素。例如这段代码本意是要设置数组a中的10个元素均为0。但通常编译器按内存递减方式分配内存,使得内存中a9a9之后的4个字节分配给i i。本来计数器i i的值为10,循环体内将并不存在的a10a10设为0,实际是将i i值设为0,就陷入死循环!main()inti,a10;for(i=1;i=10;i+)ai=0;printf(%d,ai);第13页/共87页4.1.3 4.1.3 数组应用1.1.比较法排序由键盘输入10个数,按由小到大排序输出解题方法:将1010个数存入数组a a将a(0)a(0)与a(1)a(1)、a(2)a(9)a(2)a(9)依次比较,哪个元素的值比a(0)a(0)小,就将它与a(0)a(0)的值交换,这样就将最小的数送到了a(0)a(0)中。再将a(1)a(1)与a(2)a(2)、a(3)a(9)a(3)a(9)依次比较,哪个元素的值比a(1)a(1)小,就将它与a(1)a(1)的值交换,这样就将最小的数送到了a(1)a(1)中。重复以上步骤。对于n n个数,比较排序法的总运行次数为:(n-1)+(n-2)+3+2+1=n*(n-1)/2.(n-1)+(n-2)+3+2+1=n*(n-1)/2.第14页/共87页/171.1.比较法排序比较法排序第15页/共87页1.1.比较法排序#includemain()inti,j,a10;srand(time(0);for(i=0;i10;i+)ai=rand()%101;printf(%4d,ai);putch(n);forfor(i=0;i9;i+)(i=0;i9;i+)forfor(j=i+1;j10;j+)(j=i+1;jaj)ai=aj=ai=aj;for(i=0;ia1)则两者交换,这样就将将最大的数放在an-1中;再将a0、a1、an-2这n-1个数进行同样的相邻两数比较,若为逆序则两者交换,这样就将这n-1个数中最大的数被放在an-2中;重复以上步骤,经过n-1趟比较交换完成冒泡法排序。第17页/共87页/17用冒泡法排序将10个整数按从小到大的次序排列出来。2.2.冒泡法排序冒泡法排序第18页/共87页/17#include#defineN10/数据的个数数据的个数main()intaN=5,12,29,47,9,18,13,50,38,2;inti,j,k,t;for(i=0;iN-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;printf(n最后的排序结果最后的排序结果:n);for(i=0;iN;i+)printf(%5d,ai);2.2.冒泡法排序冒泡法排序第19页/共87页数组应用II-II-插入向一个有序数组中插入一个数字,插入后不改变原有顺序向一个有序数组中插入一个数字,插入后不改变原有顺序a01a12a23a34a46a57a68a79a810a90a01a12a23a34a45a56a67a78a89a910插入数字前插入数字后第20页/共87页/17方法1:找到插入点后再移位。从前向后循环,从第1个元素开始依次将数组元素与要插入的数x比较,当xai时,将aia8依次向后移动,这时ai就可以存放x了。for(i=0;i9;i+)/将要插入的数与每个元素比较,找插入的位置将要插入的数与每个元素比较,找插入的位置if(x=i;j-)aj+1=aj;ai=x;/插入数据后退出整个循环插入数据后退出整个循环break;数组应用II-插入第21页/共87页/17方法2:边找插入点边移位。从后向前循环,直接从最后1个元素开始,将其与要插入的数x比较,如果xx,因此x要赋值给ai+1。/从最后从最后1个元素开始,依次将要插入的数与每个元素比较个元素开始,依次将要插入的数与每个元素比较for(i=8;i=0;i-)/如果要插入的数比元素值小,则该元素直接向后移位如果要插入的数比元素值小,则该元素直接向后移位if(xai)ai+1=ai;elsebreak;/表示找到插入点,退出循环表示找到插入点,退出循环ai+1=x;/插入数据插入数据数组应用数组应用II-II-插入插入第22页/共87页数组应用III:III:不改变顺序,删除指定的数字main()inti,j,del=0,inta10=1,2,3,4,5,6,7,8,9,10,x=5;for(i=0;i10;i+)printf(%4d,ai);putch(n);for(i=0;i10-del;i+)/删除后数组的容量减小一删除后数组的容量减小一if(x=ai)for(j=i;j10;j+)aj=aj+1;i-;/还原到删除位置,以处理连续删除还原到删除位置,以处理连续删除del+;for(i=0;i10-del;i+)printf(%4d,ai);删除前:删除前:1 2 3 4 5 5 7 8 9 101 2 3 4 5 5 7 8 9 10删除后:删除后:1 2 3 4 7 8 9 101 2 3 4 7 8 9 10第23页/共87页二分法检索(在序列x中检索y的位置)前提:有序数列(以递增序为例)原理:等分区间;若y小于中间数,则取左半边,否则取右半边。再等分,再比较 例:对于区间a,b 等分为若 y=xk 则位置为k若yxk 则取新区间 k+1,b (即a=k+1)数组应用数组应用IVIV二分查找二分查找(检索检索)第24页/共87页二分法查找递增序列main()intx10=34,56,78,87,88,90,101,112,520,888;inty,i,k,a=0,b=9;for(i=0;i10;i+)printf(%d,xi);scanf(%d,&y);while(a=b)/二分法查找k=(b+a)/2;printf(x%d=%dn,k,xk);if(y=xk)break;if(yb)printf(ERROR);elseprintf(nx%d=%dn,k,xk);getch();第25页/共87页/174.2 4.2 二维数组 二维数组的定义和初始化1.定义需要两个下标才能标识数组中某个元素的位置,也称为矩阵。Use a two-dimensional array if two other identifiers are needed to determine the value of interest.定义格式为:类型定义符 数组名常量表达式1 常量表达式2列数行数inta23;逻辑结构存储结构第26页/共87页/17 二维数组的定义和初始化2.二维数组的初始化和引用两种初始化方式:按行初始化:每一对花括号对应一行的元素。按存放顺序初始化:按内存中的存放顺序将初始值分别赋值给对应的元素。inta23=1,2,3,4,5,6;inta23=1,2,3,4,5,6;inta3=1,2,3,4,5,6;第27页/共87页/17 二维数组的定义和初始化intd34=1,2,3,4,5,6;intd4=1,2,3,4,5,6;intd34=1,0,0,0,2,3,0,0,4,5,6;intd4=1,0,0,0,2,3,0,0,4,5,6;inte34=0,0,0,1,0,0,2,3,0,4,5,6;inte4=0,0,0,1,0,0,2,3,0,4,5,6;inte34=0,0,0,1,0,0,2,3,0,4,5,6;第28页/共87页/17 二维数组的定义和初始化3.二维数组在内存中的存放M行N列的二维数组a,aij的位置公式为:i*N+j+1数组元素aij存储映射关系为:aija0N*i+jnReal computer memory has only one dimension,i.e.each location is identified with only one component of address.n因此,二维数组元素可用它相对数组首元素00位置的偏移量来表示(称为存储映射关系storage mapping)。对二维数组元素的操作除了用二重循环外,还可以用一重循环实现。nIn C,or any other language supporting arrays with dimension sizes greater than one,two-dimensional arrays simulate the effect of using two components of address.To do this,the array is mapped into consecutive memory with row 0s values first,then row ones values,etc.nYou can think of this as a set of one dimensional arrays holding the column values as a single value in the rows values.第29页/共87页/17二维数组元素的引用对二维数组int a34中各元素的输出操作for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,aij);for(i=0;i3;i+)for(j=0;j4;j+)/用相对a00位置的偏移量来表示 printf(%4d,a04*i+j);for(i=0;i12;i+)/用相对a00位置的偏移量 printf(%4d,a0i);第30页/共87页求矩阵 特征值之和#defineN3main()inti,j,s=0,aNN=1,1,1,2,1,1,2,2,1;/显示矩阵a33printf(对于矩阵a%d%dn,N,N);for(i=0;iN;i+)for(j=0;jN;j+)printf(%4d,aij);putch(n);/主对角线元素之和for(i=0;iN;i+)s+=aii;printf(n主对角线元素之和s=%dnn,s);二维数组的应用举例二维数组的应用举例矩阵矩阵第31页/共87页/副对角线元素之和s=0;for(i=0;iN;i+)s+=aiN-1-i;printf(副对角线元素之和s=%dnn,s);/上 元素之和s=0;for(i=0;iN;i+)for(j=i;jN;j+)s+=aij;printf(“上 元素之和s=%dnn,s);二维数组的应用举例二维数组的应用举例矩阵(续矩阵(续1)第32页/共87页/下 元素之和s=0;for(i=0;iN;i+)for(j=0;j=i;j+)s+=aij;printf(下 元素之和s=%dnn,s);/周边元素之和s=0;for(i=0;iN;i+)for(j=0;jN;j+)if(i=0|i=N-1|j=0|j=N-1)s+=aij;printf(周边元素之和s=%dnn,s);getch();二维数组的应用举例二维数组的应用举例矩阵(续矩阵(续2)第33页/共87页Tips:对于int型一维数组a和二维数组b用 sizeof(a)/sizeof(int)得到数组a的大小;用 sizeof(b)/sizeof(b0)二维数组b的行数sizeof(b0)/sizeof(int)二维数组b的列数【例】显示二维数组b的各元素#include main()int b4=0,1,0,0,1,0,0,0,2,6,4,i,j;for(i=0;isizeof(b)/sizeof(b0);i+)for(j=0;jsizeof(b0)/sizeof(int);j+)printf(%5d,bij);printf(n);二维数组的应用举例二维数组的应用举例sizeof的使用的使用第34页/共87页main()intx43=1,2,3,2,3,4,3,4,5,0,0,1;inti,j,k,row=0,column=0,min,m=4,n=3;for(i=0;im;i+)/按行查找max=xi0;for(j=1;jmax)max=xij,row=i,column=j;for(k=0;km;k+)/接下来判断max是否本列最小值if(xkcolumn-1&column-1)printf(鞍点是该行上的最大值该列上的最小值n);printf(鞍点是x%d%d=%dn,row,column,max);应用举例:求二维数组的鞍点saddle point,即该位置上的元素是该行上的最大值,是该列上的最小值。鞍点可能不存在第35页/共87页main()inta53=1,2,3,2,3,4,3,4,5,4,5,6,5,6,7;inti,j,max5,min3;/先把每行第1个数当最大值每列第1个数当最小值for(i=0;i5;i+)maxi=ai0;for(j=0;j3;j+)minj=a0j;/比对找出每行最大值和每列最小值for(i=0;i5;i+)for(j=0;jmaxi)maxi=aij;if(aijminj)minj=aij;/如最大值最小值是同1个数,找到鞍点for(i=0;i5;i+)for(j=0;j3;j+)if(maxi=minj)printf(a%d%d=%d是鞍点n,i,j,aij);寻找鞍点方法二:直接找出所有行的最大值所有列的最小值。一比对,若该行的最大值与该列的最小值相等,该位置的数就是鞍点。第36页/共87页4.2.3 多维数组当需要用多个下标来确定数组元素时,数组称为多维数组。There is no limit in the language as to the number of dimensions that an array may be given.Each dimension requires a size specifier within a pair of brackets.1.多维数组的定义类型数组名常量表达式1常量表达式2常量表达式n;【例如】定义一个整型三维数组:intb234;b000 b001 b002 b003b010 b011 b012 b013b020 b021 b022 b023 以下标 0、1为变量 i,下标0、1、2为变量j,下标0、1、2、3为变量k,就可以用三重循环结构对数组的每一个元素进行处理了。第37页/共87页多维数组初始化对于三维数组,可将其看作多个二维表格,即可以把它看成是由多个二维数组构成的。依此类推,一个n维数组可以看成是由多个n-1维数组构成的。前面数组b有24个元素,它们在内存中排列顺序跟二维数组类似:先变化第三个下标,然后变化第二个下标,最后变化第一个下标。【例如】以三维数组初始化为例:intb234=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24;由第一维为2,可认为b数组由两个二维数组组成,每个二维数组为3行4列。初始化时,对每个二维数组以按行初始化的方法,分别用花括号把各行元素值括起来,并且将三行的初值再用花括号括起来。第38页/共87页多维数组的一维表示多维数组元素也可用它相对数组首元素位置的偏移量来表示。三维数组bLMN的数组元素bijk的存储映射关系为:bijkb00M*N*i+N*j+kExample:intb234;causes the compiler to reserve space for 2 arrays of 3 arrays of 4 integers in contiguous memory.Thus 24 contiguous integers are reserved.A storage mapping function is used to translate an array reference into a pointer reference.In this case,the storage mapping function maps:bijk*(b000+3*4*i+4*j+k)第39页/共87页4.3 4.3 字符型数组 在在C语言中,存储字符串必须使用类型为语言中,存储字符串必须使用类型为char的字的字符型数组。符型数组。字符型数组的每个数组元素存放一个字符的字符型数组的每个数组元素存放一个字符的ASCII码。码。字符串的结束标志是字符串的结束标志是0。在存储一个字符串时,系统自动在其末尾添加一个在存储一个字符串时,系统自动在其末尾添加一个结束标志结束标志0(数字(数字0)。)。0不包括在字符串不包括在字符串长度内。长度内。The string in C programming language is actually a one-dimensional array of characters which is terminated by a null character 0.例如,对于定义的字符数组例如,对于定义的字符数组chara10=Hello;H e l l o 0 0 0 0 0字符串结束符字符串结束符其余元素自动赋值为其余元素自动赋值为 0第40页/共87页n通常,一个字符串用一维字符型数组来存放,多个字符串用二维字符型数组来存放。n如果要将三个字符串置于字符数组s中How are you Good morningGood bye 可定义为:chars313;s0s1s24.3 4.3 字符型数组 How are you00Good morning0Good bye00000第41页/共87页4.3.1 字符数组的初始化chara=abcde;charc5=Boy,Girl;以下赋值语句也是合法的:chara6=abcde;chara6=abcde;chara6=a,b,c,d,e;chara=a,b,c,d,e,0;charc25=Boy,Girl;charc5=Boy,Girl;charc25=Boy,Girl;第42页/共87页注意(1)字符数组的长度应该大于实际存储的字符串长度。否则按语法错误处理。(2)使用字符常量初始化时,如果字符末尾没有0,则字符数组不能按字符串处理,只能对字符逐个进行处理。比如,数组a用单个字符来初始化,char a5=a,b,c,d,e;最后一个元素不是0,它就不是字符串,就不能用字符串方法(如gets()、puts()、scanf()或printf()中%s格式)来操作。(3)一维字符数组在初始化时,可以省略其长度,默认长度为初始化字符串的长度加1。如果没有初始化赋值,则必须说明数组的长度。(4)单引号是字符常量定界符,双引号是字符串常量定界符。(5)不能使用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。chara5;a=abcde;/是错误的。4.3.1 字符数组的初始化字符数组的初始化第43页/共87页字符数组的输入从键盘输入的三种方法1 1、用gets函数输入整个字符串 能输入含空格字串并把回车转成002、在scanf函数中用格式符%s 输入整个字串 只能输入不含空格符的字符串chara10;scanf(%s,a);3、在scanf函数中用格式符%c逐个输入字符 chara12;inti;for(i=0;i12;i+)scanf(%c,&ai);a12=0;chara12;gets(a);chars313;inti;for(i=0;i3;i+)gets(si);第44页/共87页 对于二维字符数组,可看成若干个一维字符数组(每个一维字符数组是一个字符串),使用时用二维字符数组行下标来表示二维字符数组中各个字符串的首地址。main()chars313;inti;for(i=0;i3;i+)gets(si);for(i=0;i3;i+)printf(%s,si);执行时输入:Howareyou Goodmorning Goodbye 程序中的si 是一维数组名,它是一个地址常量。二维字符数组的输入第45页/共87页字符数组的输出从屏幕输出的三种方法1 1、puts函数输出整个字符串 这种输出方式遇到00就自动换行2、printf函数格式符%s%s输出整个数组 遇到遇到00不换行3、printf函数格式符%c逐个输出数组元素char a12=“How are you”;puts(a);chars25=Boy,Girl;puts(s0);puts(s1);char a12=How are you;printf(%s,a);char s313=How are you,Good morning,Good bye;printf(%sn,s0);printf(%sn,s1);printf(%sn,s2);chars12=Howareyou;inti;for(i=0;i13;i+)printf(%c,si);第46页/共87页 例例:输入0-99数字,显示读法(由于汉字为双字节码,所以不能用一维数组,要用二维数组。)main()intx,i,j,k;char a113=零,壹,贰,叁,肆,伍,陆,柒,捌,玖,拾;scanf(%d,&x);i=x/10;/十位j=x%10;/个位if(i=0)printf(%s,aj);/个位数直接显示elseif(j=0)printf(%s%s,ai,a10);/个位为0的十位数elseprintf(%s%s%s,ai,a10,aj);getch();字符数组的应用举例第47页/共87页4.3.4 字符串函数字符串函数 n在C语言中,由于字符串的处理通常要用字符数组,而字符数组名是地址常量不是变量(不能出现在赋值号的左边),所以对字符串的连接、复制、比较等操作就比较麻烦。nC语言提供了一些专门用于字符串处理的函数,以方便用户的使用。nC supports a wide range of functions that manipulate null-terminated strings,such as strlen(),strcat(),strcpy(),strcmp(),strlow()and strupr().第48页/共87页常用的字符串处理函数 1 1、测字串长度函数 string length string length strlen()2 2、字串连接函数 string cast string cast strcat()3 3、字串复制函数 string copy string copy strcpy()strncpy()4 4、字串比较函数 string compare string compare strcmp()5 5、小写转换函数 string lower string lower strlwr()6 6、大写转换函数 string upper string upper strupr()因为字符串处理函数不是C语言的组成部分而是系统提供的公共函数,因此调用字符串处理函数前,通常要加预编译命令:#include 第49页/共87页strlen(字符数组)测试字符串长度,不包含“0”在内。例如:#includemain()chars=Howdoyoudo;intc;c=strlen(s);printf(%dn,c);运行结果是:13 改为改为 s30=How do you do0s30=How do you do0 运行结果也是运行结果也是1313常用的字符串处理函数-求字符串长度 第50页/共87页例:显示一个字串中的大写字母main()charc,s30,i;printf(输入一个字串:);gets(s);for(i=0;i=A&si=Z)printf(%c,si);常用的字符串处理函数-求字符串长度函数举例 第51页/共87页例:指针表示法显示一个字串中的大写字母main()charc,s30,*p;printf(输入一个字串:);gets(s);for(p=s;p-s=A&*p=Z)printf(%c,*p);第52页/共87页连接两个字符数组中的字符串:把字符数组2接在字符数组1的后面,放到字符数组1中,并得到一个函数值,该函数值是字符数组的起始地址。注1:字符数组1必须足够大;注2:字符数组2也可以是一个字符串常量。常用的字符串处理函数常用的字符串处理函数-字符串连接字符串连接 strcat(字符数组(字符数组1,字符数组,字符数组2)第53页/共87页例如#includemain()char c30=abcden,s20=How do you do;strcat(c,s);/将S接在C的后边/printf(%sn,c);运行结果是:abcde How do you do strcat(c,Howdoyoudo);printf(%sn,c);常用的字符串处理函数-字符串连接举例 第54页/共87页strcpy(t,a);strcpy(a,b);strcpy(b,t);常用的字符串处理函数-字符串拷贝 n将字符数组将字符数组2拷贝到字符数组拷贝到字符数组1中。中。复制后的结果放在字符数组中,字符数组不变。函数值是字符数组1的地址。n字符数组1必须写成数组名形式,如s。n字符数组2可以是字符数组名,也可以是一个字符串常量。n说明:(1)字符数组1定义时其长度要大于等于字符数组2的长度。(2)复制时连同字串中的0一起被复制到字串中。(3)若字符数组中原存有字符,则原有字符不再存在。n字串间的赋值不能用字串间的赋值不能用 a=b;n只能用只能用strcpy(a,b)strcpy(字符数组(字符数组1,字符数组,字符数组2)第55页/共87页strncpy(字符数组1,字符数组2,n)n将字符数组2的前n个字符拷贝到字符数组1中。复制后的结果放在字符数组中,字符数组不变。函数值是字符数组1的地址。例如:main()chara=helloworld!;strncpy(a,HELLOWORLD!,2);puts(a);getch();v显示:HElloworld!常用的字符串处理函数-字符串拷贝第56页/共87页strcmp(字符串1,字符串2)如果两个字符串一样大,函数值为0;如果字符串1大,函数值为一正整数;如果字符串2大,函数值为负整数。对于字符数组a和b而言:strcmp(a,b)=0a、b两字串相等strcmp(a,b)0a字串b字串strcmp(a,b)0a字串b字串(字符串比大小,按ASCII码比较,先比第1个字符。)常用的字符串处理函数-字符串比较第57页/共87页#includemain()charc7=abcdef,s4=abc,t=acb;inta,b;a=strcmp(c,s);b=strcmp(c,s);printf(%dn%d,a,b);常用的字符串处理函数-字符串比较举例 在中的运行结果在中的运行结果:100-1在在VC+VC+中的运行结果中的运行结果:1-1第58页/共87页数据比较时应注意判断两个字符串是否相等时:不能使用if(a=b)应使用if(strcmp(a,b)=0)相等比较的总结字符串字符串strcmp(a,b)=0整数整数 a=b实数实数fabs(a-b)1e-6第59页/共87页例如main()inti=0;chara=abcd,b=abcd;if(a=b)printf(Yes);elseprintf(No);结果居然是No,将if语句改为:if(strcmp(a,b)=0)后,结果就为Yes。字符串比较时应注意第60页/共87页strlwr(字符串)(字符串)将字符串中的大写字母转换成小写字母strupr(字符串)(字符串)将字符串中的小写字母转换成大写字母 例:大小写转换函数应用main()chars100;gets(s);strupr(s);puts(s);strlwr(s);puts(s);常用的字符串处理函数-字母大小 写转换第61页/共87页#includemain()chara=wang,b=1234,user100,psw100;dosystem(cls);printf(请输入用户名);gets(user);strlwr(user);printf(请输入密码);gets(psw);while(strcmp(a,user)!=0|strcmp(b,psw)!=0);printf(n欢迎您:%s,user);字符串应用举例:用户名和密码的验证 I第62页/共87页#includemain()chara=wang,b=1234,user100,psw100;inti;dosystem(cls);printf(请输入用户名);gets(user);strlwr(user);printf(请输入密码);i=-1;doi+;pswi=getch();putch(*);while(pswi!=13);pswi=0;while(strcmp(a,user)!=0|strcmp(b,psw)!=0);printf(n欢迎您:%s,user);字符串应用举例:用户名和密码的验证 II第63页/共87页#includemain()chara1020=广州,武汉,上海,北京,成都,太原,郑州,南京,石家庄,天津,t20;inti,j;for(i=0;i9;i+)for(j=i+1;j0)strcpy(t,ai),strcpy(ai,aj),strcpy(aj,t);for(i=0;i10;i+)printf(%st,ai);字符串应用举例:字符串的排序第64页/共87页4.4 指针和数组指针的应用与数组是密不可分的。指针的应用与数组是密不可分的。n数组a的指针是指数组a的起始地址,即&a0,n数组元

    注意事项

    本文(C语言数组讲解.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开