




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第十章字符串,知识点1:字符串1.字符串常量(1)C语言中字符串常量的形式,用一对双引号将一串字符括起来称为字符串常量。例如:“abcd”.(2)字符串的长度。一对双引号中字符的个数就是字符串的长度。可调用strlen函数求字符串长度,例如,strlen(“abcd”),字符串的长度为4.(3)字符串的结束标志。在字符串最后一个字符的后面,系统自动添加一个转义字符0作为字符串的结束标志。当人为地在字符串中间插入转义字符0时,例:“a0bcd”,系统就认为字符串到a为止,长度为1,不再顾及0后的字符。,2,(4)字符串常量的存储结构。1个字符串所占字节数为:字符串长度+1.例如字符串“abcd”,在内存上5个字节,其字符占4个字节,字符串结束标志0占一个字节。可调用sizeof函数求字符串所占字节数,如:sizeof(“abcd”).(5)字符串常量的面值和地址值。“abcd”是字符串的面值,而当把它赋给某个变量时,给出的是此字符串在内存所占连续存储区的首地址。,3,2.一维字符数组和字符串变量(1)一维字符数组的每个元素可以存放一个字符。(2)当一维字符数组中存放最后一个字符是0时,可称此一维字符数组内存放了一个字符串,同时可称此一维数组为字符串变量。3.通过赋初值给一维字符数组赋字符串赋字符串初值形式:(1)chars5=a,b,c,d,0;显示赋字符串结束标志。(2)chars5=a,b,c,d;系统会自动赋字符串结束标志。,4,(3)chars5=“abcd”;直接赋字符串常量。(4)chars5=“abcd”;把字符串常量放在一对花括号中。(5)chars=“abcd”;根据所赋字符串初值来确定数组长度。注意,若有定义:chars5=“aa”;,sizeof(s)的值为5,strlen(s)的值为2.前者是s在内存中所中字节数,后者是s中的字符个数。,5,10-1有以下程序main()chara=a,b,c,d,e,f,g,h,0;inti,j;i=sizeof(a);j=strlen(a);printf(“%d,%dn”,i,j);程序运行后结果是A.9,9B.8,9C.8,8D.9,8,6,10-2有以下程序#includemain()char*p=“abcde0fghjik0”;printf(“%dn”,strlen(p);程序运行后结果是A.12B.15C.6D.5,7,10-3以下不能正确进行字符串赋初值的语句是A.charstr5=“good!”;B.charstr=“good!”;C.char*str=“good!”;D.charstr5=g,o,o,d;,8,10-4有以下程序main()charp20,*q=p;scanf(“%s%s”,p,q);printf(“%s%sn”,p,q);若从键盘输入:abcdef,则输出结果是A.defdefB.abcdefC.abcdD.dd,9,10-5有以下程序main()chars=“ABCD”,*p;for(p=s+1;ps+4;p+)printf(“%sn”,p);程序运行结果是A.ABCDB.AC.BD.BCDBCDBCCDCDCDDDD,10,4.程序中给一维字符数组赋字符串有定义chars5;(1)不可以用赋值语句给s数组赋字符串。例如,s=“abcd”;是错误的,数组名s是一个常量,不可重新赋值。(2)可给数组元素一个一个赋字符:s0=a;s1=b;。(3)可调用strcpy函数把字符串复制到数组中。例如,strcpy(s,“abcd”).(4)若有定义:chars110,s220;,可用%s格式,调用scanf函数给字符数组输入字符串。例如,scanf(“%s%s”,s1,s2);.(5)用gets函数给字符数组输入一行字符串。例如,gets(s1);gets(s2);.输入的一串字符用回车结束。,11,5.使指针指向字符串(1)给基类型为char的指针赋字符串的地址,可通过以下赋初值方式使指针指向字符串常量。char*sp=“abcd”;把字符串“abcd”的首地址赋给基类型为char的指针变量。指针sp指向一个具有5个字节的连续存储区的开头,即指向字符a所在存储单元。char*sp=“abcd”;同上,12,(2)通过赋值语句给基类型为char的指针赋字符串。若有定义语句:char*sp;,则可通过赋值语句:sp=“abcd”;,把字符串“abcd”的首地址赋给指针变量sp。(3)若有以上定义和赋值语句,sp+;将移动指针sp,使其指向字符串中的字符b,这时sp指向字符串“bcd”.,13,10-6下列选项中正确的语句组是A.chars8;s=“Beijing”;B.chars8;s=“Beijing”;C.char*s;s=“Beijing”;D.char*s;s=“Beijing”;,14,6.通过指针引用字符串中的字符(1)若有定义:char*sp=“abcd”;,*sp代表字母a,*(sp+1)代表字母b,。(2)若有以上定义,sp0代表字母a,sp1代表字母b,。7.字符串的输出(1)可以调用printf函数,用%s格式输出字符数组中的字符串和字符指针所指的字符串。(2)可以调用puts函数,输出字符数组中的字符串和字符指针所指的字符串。,15,知识点2:字符串数组1.字符串数组赋值在二维字符数组的每一行存放一个字符串,此二维数组构成字符串数组。(1)例如,以下定义语句通过赋初值给每行赋字符串chars1380=“aa”,”bbbb”,”543211”,s2380;(2)可调用strcpy函数给每行赋字符串。for(i=0;i3;i+)strcpy(s2i,s1i);,16,(3)可通过输入语句给每行赋字符串。for(i=0;i=AA.abc+ABC=DEFdefB.abc+abc=defdefC.abcABCDEFdefD.abcabcdefdef,2019/12/13,21,可编辑,22,10-9有以下程序voidss(char*s,chart)while(*s)if(*s=t)*s=t-a+A;s+;main()charstr1100=“abcddfefdbd”,c=d;ss(str1,c);printf(“%sn”,str1);A.ABCDDEFEDBDB.abcDDfefDbDC.abcAAfefAbAD.Abcddfefdbd,23,10-10以下程序的输出结果是main()chars=“abcdef”;s3=0;printf(“%sn”,s);,24,10-11以下程序运行后的输出结果是main()chara=“Language”,b=“Programe”;char*p1,*p2;intk;p1=a;p2=b;for(k=0;k=7;k+)if(*(p1+k)=*(p2+k)printf(“%c”,*(p1+k);,25,第十一章对函数的进一步讨论,知识点1:main函数的参数1.执行程序时的命令行(1)C程序经过编译连接之后,将自动生成后缀为.exe的可执行文件。例如名为myp.c的C源程序,生成的可执行文件名为myp.exe。(2)在操作系统的提示符下,打入myp,就可执行myp程序,myp就被称为执行命令。所在行称为命令行。(3)在命令行中不仅有命令,其后还可跟随若干参数,通常各参数由空格隔开。每个参数由一串字符组成。例如:myphelloworld其中hello和world就是参数。,26,(4)系统将自动开辟存储区存放这些字符串,并如图所示通过无名指针数组指向字符串。,27,2.main函数后一对括号中的形参(1)在运行C程序时,可以通过命令行把参数传给main函数的形参,从而把命令行中的参数传给main函数。(2)main函数通常可用两个参数。例如:main(intarge,char*argv)或main(intarge,char*argv)其中arge和argv是用户标识符,用作形参,可取任何合法的名字。(3)arge中将存放命令行中字符串的个数。(4)形参argv被定义为指向指针的指针,它指向指针数组始元素。因此,通过argv可以引用命令行中的任一字符串,例如,对于上面的命令行,argv0指向字符串myp,argv1指向字符串hello,argv2指向字符串world。,28,例:若以下程序放在myp.c文件中,在编译连接后,已生成一个myc.exe文件,输出argc和argv中的数据main(intargc,char*argv)inti;printf(“argc=%dn”,argc);for(i=1;i程序将输出:argc=4ACOMMANDLINE,29,11-1不合法的main函数命令行参数表示形式是A.main(inta,char*c)B.main(intarc,char*arv)C.main(intargc,char*argv)D.main(intargv,char*argc),30,11-2有以下程序#includemain(intargc,char*argv)inti,len=0;for(i=1;iA.22B.17C.12D.9,31,知识点2:函数的递归调用(1)C语言中函数可以递归调用,即可以自己调用自己,也可以间接地调用自己。(2)分析递归调用的程序时需要建立以下概念。每一层调用时,系统将为本次调用所用到的形参和函数中定义的变量开辟独立的存储单元。所以分析时必需清楚是在哪一层调用,以及该层中各变量的值。递归算法必定有结束递归的条件,不可能无限递归下去,因此注意递归结束条件,然后有序地一层一层返回,有函数值的,同时返回函数值。元函数值的一定要注意本层中各变量的值。,32,11-3在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,是A.称为函数的直接递归调用B.称为函数的间接递归调用C.称为函数的循环调用D.C语言中不允许这样的递归调用,33,11-4有以下程序voidfun(int*a,inti,intj)intt;if(ij)t=ai;ai=aj;aj=t;i+;j-;fun(a,i,j);main()intx=2,6,1,8,i;fun(x,0,3);for(i=0;i4;i+)printf(“%2d”,xi);printf(“n”);A.1268B.8621C.8162D.8612,34,11-5有以下程序intf(intn)if(n=1)return1;elsereturnf(n-1)+1;main()inti,j=0;for(i=1;i3;i+)j+=f(i);printf(“%dn”,j);程序运行结果A.4B.3C.2D.1,35,11-6有以下程序voidf(inta,inti,intj)intt;if(ij)t=ai;ai=aj;aj=t;f(a,i+1,j-1);main()inti,aa5=1,2,3,4,5;f(aa,0,4);for(i=0;i5;i+)printf(“%d,”,aai);printf(“n”);程序执行结果A.5,4,3,2,1B.5,2,3,4,1C.1,2,3,4,5D.1,5,4,3,2,36,知识点3:指向函数的指针1.C语言中,函数名代表一个地址值,从这个地址开始存放函数的执行代码,称为函数的入口。所以不能把函数名作为变量,重新给它赋值。2.指向函数的指针。函数指针的定义有以下两种形式。(1)第1种形式:类型名(*指针变量名)();例如,int(*fp)();。说明了fp是一个指向函数的指针变量,它可以指向任何函数值为int类型的函数。,37,(2)第2种形式:类型名(*指针变量名)(类型名,类型名);例如,int(*fp)(int,int,int);。说明了fp是一个指向函数的指针变量,它可以指向任何函数值为int类型且具有3个int类型形参的函数。(3)注意,*fp外的一对圆括号不可省略,不能写成:int*fp(int,int,int);,此处,不再说明fp是一个指针变量,而是说明fp是一个函数名,此函数返回一个基类型为int的地址。这是一条函数说明语句。(4)注意,若函数没有形参,说明符后面的一对括号也不能省略。,38,(5)对于不同类型的指针变量,其定义格式不同。下图为有关指针的数据类型小结。,39,3.函数名作为实参。C语言中,函数名可以作为实参,这时对应的形参必须是一个类型相同的函数指针。4.通过函数指针调用函数。若有以下定义的说明intfindbig(int,int,int);int(*f)(int,int,int),x,y,z,big;则可通过以下方式调用findbig函数:f=findbig;big=(*f)(x,y,z);,40,11-7有以下程序i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河南-河南理疗技术员一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-河南-河南有线广播电视机务员五级(初级工)历年参考题库典型考点含答案解析
- 2024版机械加工承包合同范本
- 2025年事业单位工勤技能-河北-河北家禽饲养员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河北-河北兽医防治员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西园林绿化工二级(技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西经济岗位工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西管工(技师/高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西检验员一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西客房服务员三级(高级工)历年参考题库典型考点含答案解析
- 地下通道水泵房管理制度
- 溺水患者急救培训
- 2026版步步高大一轮高考数学复习讲义第十章 §10.1 计数原理与排列组合含答案
- 人力公司营销策划方案
- 医院医疗用房管理制度
- 股权代持协议终止协议书
- 捡土豆装车合同协议书
- 国际压力性损伤溃疡预防和治疗临床指南(2025年版)解读
- 海天对客户分级管理
- 薪资抵扣协议书模板
- 血管内导管相关性血流感染预防与诊治指南(2025)解读课件
评论
0/150
提交评论