C++笔试要点(代C语言要点)

C++笔试要点(代C语言要点)

ID:83015472

大小:84.05 KB

页数:41页

时间:2023-09-19

上传者:灯火阑珊2019
C++笔试要点(代C语言要点)_第1页
C++笔试要点(代C语言要点)_第2页
C++笔试要点(代C语言要点)_第3页
C++笔试要点(代C语言要点)_第4页
C++笔试要点(代C语言要点)_第5页
C++笔试要点(代C语言要点)_第6页
C++笔试要点(代C语言要点)_第7页
C++笔试要点(代C语言要点)_第8页
C++笔试要点(代C语言要点)_第9页
C++笔试要点(代C语言要点)_第10页
资源描述:

《C++笔试要点(代C语言要点)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

C++笔试部分要点:1.标识符(可作为变量名、数组名、函数名等)的命名规范①由52个英文大小写字母,10个数字,ー个下划线构成②以英文字母或下划线开头,不能是保留字(例子)下列符号中可以用作C++标识符的是A)MainB)foo-barC)elseD)3room常见错误及注意事项:①以数字开头(如3room),②中间含有空格或非法字符(如foo-bar,或MyName)③区别大小写(如Main与main不同,if与If不同)④保留字(如if、while等)不能作为标识符⑤但编译预处理命令(如include、define、main等)不是保留字,它们可以被用作标识符。如,下列程序合法:#includevoidmain()(intinclude;cin»include;cout«include«endl;)#includevoidmain()(intmain;cin»main;cout«main«endl;#includevoidmain(){

1intdefine;cin»define;cout«define«endl;}2.各种类型常量书写规范0650X9A3.26F3.4f'CヘビV,ヽ,,,,ヽ,,,、、,0X9AL45L45135U35u2.3E822.3e-45.3e4'\24'MOI1'\x4.99a'"string”空字符へ0,,空格,1,空串””常见错误:①ハ进制数048,0后面跟大于?的数字②,\038T、0后面跟大于7的数字③十六进制数OxaG,Ox后面跟大于f/F的字符④5.3e4.2,指数部分写成了带小数点的实型数⑤-abcS单引号中括多个字符(例子)以下合法的常量是A)''28'B)'OXAB'C)2.3E8.0D)”ab\Ocd”#includemain()(printf(n%d,%d

2n,strlen(nab\Ocdn),sizeof(nab\Ocdn));)输出2,63,基本类型数据在内存中的长度以及存放形式:整型数据:补码形式存储正整数的补码与原码相同实型数据:浮点形式存储sizeof(char)=sizeof(unsignedchar)1字节sizeof(short)=sizeof(unsignedshort)2字节sizeof(int)=sizeof(unsigned

3int)2字节sizeof(Iong)=sizeof(unsignedlong)4字节sizeof(float)4字节sizeof(double)8字节sizeof(char*)=sizeof(int*)=sizeof(float*)=...=2即所有指针类型的变量的长度都是2〇4.不同整型数据(长度不同)相互赋值原则char,int,short,long,(每种类型前都可加signed和unsigned)得:signedchar,signedint,signedshort,signedlong,unsignedchar,unsignedint,unsignedshort,unsignedlong均可用作整型量赋值时:短ー长截取“长”数据的低位,然后赋值长一短将“短”数据扩展成等长数据,然后赋值扩展原则:若短数据为无符号型,则前面补〇(unsigned)若短数据为有符号型,则前面补符号位(例子)短ー长已知2"=65536,请写出下列程序段的输出。inti=65538;cout«i«,

4,;输出265538是长整型常量65538:00000000000000010000000000000010i:0000000000000010(例子)请写出下列程序段的输出。长一短voidmain()charcl=-3;unsignedcharc2=-3;/・短ー长・/intal=cl,a2=c2;/・长一短・/

5cout«al«,,,«a2«endl;输出ー3,253-3:1111111111111101(32位)整型常数cl:11111101(8位)c2:11111101(8位)al:1111111111111101(16位)a2:0000000011111101(16位)5.类型转换(赋值时的类型转换,混合运算时的类型转换)(例子)设有语句:for(ints=l,i=2;i<=6;i++)s*=i/2;执行该语句后,S的值是〇A.1B.12C.22D.22.5【解析】若两个量都是整型,则运算结果应是整型量。i/2的结果应是整型量,如i=3,贝リレ2的结果应是1。(例子)已知x=2.5,a=7,y=4.7求x+a%3*(int)(x+y)%2/4的值答案:2.5(例子)设有语句:chars[]=H246n,*ptr=s;cout«(char)(*(ptr+l)+l)«,

6,;执行以上语句后,输出〇A.5B.6C.46D.56①coutw(*(ptr+l)+l)vv,

7二输出什么?

8②表达式(*(ptr+l)+l)的类型是什么?答案:①输出53(%,的ASCH码)②表达式类型是int型(例子)设有变量说明:inta=O,b=0;则表达式sizeof「a+b,)的值为:A.1B.2C.4D.8(例子)设有变量说明:floata=0,b=0;则表达式sizeof(a+b)的值为:A.1B.2C.4D.8【解析】横向:必定转换图2-3混合运算类型转换原则doubleAvfloat,tlongA1.ハunsignedA.Jint一-chai;short问题:①表达式3+5的类型?int型②sizeof(3+5)的值?2(3)coutv〈C3屮5,)vvendl;104(因为3和5的ASCII码分别是5I和53)④sizeof(*a**»b*)的值为?2⑤sizeof(3)的值?2⑥sizeof(3)的值?1⑦cout«3*«endl;3(8)cout«int(,3,)«endl;51

96.表达式的计算(逗号表达式,赋值表达式,逻辑表达式优化,关系表达式,整数求余%,整数整除/)(例子)设定义了说明语句:intk,j;下列选项中,没有语法错误的表达式是〇A.(k++)++B.(k+3)=5C.k-/=5D.k—j【解析】A.++不能作用于表达式B.C.赋值表达式的左值不能是表达式。D.k-j等价于(k--)-j,不是赋值表达式。自左至右扫描,尽量构成运算符。因此k—j不等价于k-(—j)o(例子)设有变量说明:inta=3,b=4,c=5;下列表达式中,值为〇的表达式是。A.B.a<=bC.a||b+c&&b-cD.!(ax)||(m=x

10答案:1,1,1以上两题适用于如下规则逻辑运算优化规则:不管优先级,从左至右扫描,若I!前为“真”,或者&&前为“假”,则停止。(“或”运算的前ー个值若为真,则后一个表达式不算)(“与”运算的前ー个值若为假,则后一个表达式不算)(例子)请写出下列程序段的输出。intx=-5;if(0

11n);本题答案:输出***表示数学关系OvxvlO的正确写法为:kx&&xvlO另外还有:,AY=ch&&ch<=1Z1不能写成:'Ay=chv=Z(例子)若al,a2,a3和a4均为整型变量,则以下选项中,符合C++语法规则的表达式是〇A.al=25%3.3B.a2=al+a3=3*5C.a3=078D.a4=0Xa2解析:%要求运算量为整型+比=优先级高078是非法常量6.=与=的区别(例子)

12设有语句:inti=10,j=10;if(j=O)i=i*i;elsei=i+j;执行以上语句后i的值为〇〃答案:10。J被赋值是〇,所以if里面是。,为假,若J被赋值是12(非零量即可),则输出I00;(例子)设有语句:inti=10,j=0;if(j==O)i=i*i;elsei=i+j;执行以上语句后i的值为〇//1006.前后缀++,(例子)执行以下程序段后,输出结果是〇intx=9,y=8;inta,b,c;a=(--x==y++)?-x:++y;//注意=与==的区别b=x++;c=y;cout«a«,,,«b«,,,«c«endl;A)7,7,9B)8,8,8C)8,9,8D)1,10,9(例子)有语句:inty=100;while(y--cout«ny=n«y«n

13n;其输出为:A)y=0B)while构成无限循环C)y=1D)y="I(例子)i=5;while(i++<10);运行结束后i=?答案:i=ll

146.运算符的优先级和结合性(例子)以下程序输出intx=5,y=6;y*=x+y;//等价于y=y*(x+y);cout«y«endl;【解析】・=的优先级与=ー样(例子)voidfun(int*a,int*b)〃a指向cl[0],b指向c2[0]{(*a)++;*b++;〃等价于*(b++),表达式b++的值是b的原始值,而++是作用在b上的*a++;(*b)++;cout«*a«,\f«*b«endl;)voidmain(void){intcl网={地20,30},c2[3]={40,50,60};fun(cl,c2);〃参数传递时,有int*a=cl;int*b=c2;cout«cl[0]«,\t,«cl[l]«endl;cout«c2[0]«,\t,«c2[l]«endl;)程序输出的第一行是,第二行是第三行是〃答案:20511120405110.1f语句的语义(else的匹配问题)(例子)写出程序的输出voidmain(){intx=2,y=-1,z=2;if(x

15if(y<0)z=0;elsez+=l;cout«z«,

16,;}C)1D)0A)3B)2【解析】else与距它最近的尚未匹配的if匹配,而不是靠书写对齐来匹配(例子)写出程序的输出inta=l,b=2,c=3;if(a==b)if(b==c)printf(na=b=c

17n);注意:“表达式”中可以有变量。“常数i”只能是常数表达式,如,a1或3+2或3+N等,N是已定义的符号常数。(例子)设变量a,b是整型变量,下列switch语句中,语法正确的是:A.switch(a){casea:a++;break;caseb:b++;break;

18)A.switch(a+b){case1:b=a++;break;case1:a=-H-b;)B.switch(a*a){case10,12:++a;case14,16:++b;)C.switch(a/10+b){case3:b=a/10;break;default:a+=b;}(例子)#includevoidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y)•一\{case0:a++;break;jcase1:b++;breakj^^^case2:a++;b++;break;)cout«,,a=,,«a«,,,b=,,<

19,;程序输出为:A)a=2,b=lB)a=l,b=lC)a=l,b=0D)a=2,b=2

20(例子)voidmain(void){charc,*s="1234”;while(c=*s++)switch(c-'O'){case0:case1:printf("%c”,c+1);case2:printf("%c

21”,c+2);break;default:printf("%c

22",c+3);break;)printf("

23”);}程序的输出的第一行是〇答案:23程序的完整输出是:23467(例子)以下程序若输入china#则输出〃5,5voidmain()intvl=0,v2=0;charch;while(ch=getchar())!=*#*)switch(ch)|case'a':case'h':default:vl++;case’〇’:v2++;)

24cout«vl«','«v2«endl;)12.循环(1)for语句中的条件表达式缺省,则条件为永“真”。(例子)设el和e3是表达式,与语句for(el;;e3)s;等同的语句是〇A.for(el;el;e3)sB.for(el;e3;e3)sC.for(el;0;e3)sD.for(el;1;e3)s⑵while(或for)与do-while的区别,循环体执行的次数(3)循环的执行次数(例子)设有循环语句:for(inti=0,x=0,s=0;i<=9&&x!=55;i++){scanf(“%d",&x);s+=x;)在这个循环语句中,循环体最多执行为一次,最少执行次。答案:101(例子)执行以下语句时,循环的次数是:for(intx=0,y=0;!x&&y<=5;y++);正确的程序是这样

25A.无次数B.0C.5D.6(例子)执行以下语句时,循环的次数是:for(intx=0,y=0;!x&&y<=5;y—);A.无次数B.0C.5D.6答案:我们习题汇编中给出的答案是A,省考试中心给出的标准答案是D(我们题目录入错误)实际上此题在C语言环境中无正确答案,循环次数应该是32769次。y实际变化的过程是:y=0(0000000000000000)y=-l(1111111111111111)y=-2(1111111111111110)y=-32768(-215)其内存内容是:(1000000000000000)再次减1,发生溢出(即比int型数值的下限还要小),y变为:(0111111111111111)值为32767(2J)即int型数值的上限。此yv=5不成立,循环结束。为了验证了上述观点,修改上述程序:#includemain(){intx,y;longcount=0;//count用于统计循环次数for(x=0,y=0;!x&&y<=5;y)count++;printf(n%ld

26",count);

27输出:3276912.嵌套循环,循环中的break,continue(例子)有一种只在循环语句或switch语句中使用的流程控制语句,表示该语句的关键字是(例子)//判断一个二维数组是否关于主对角线对称voidmain(void)|inta[4][4]={1,2,3,4,2,2,5,63,5,2,7,4,6,7,4};1234225635274674inti,j,flag=O;for(j=0;j<4;j++)for(i=0;i<=j;i++){if(a|j][i]==a[i][j])continue;〃流程转至リ哪里?if(flag)cout«nNo!n«endl;elsecout«nAllRight!n«endl;}输出:AllRight!(例子)程序输出为:#includevoidmain(){inti,j,sum=0;for(i=0;i<5;i++)for(j=0;j<6;j++){sum++;if(i==3)break;"break跳出哪一个循环?)cout«sum«,,,«i«,,,«j«endl;

28输出:25,5,6(例子16)#include[T20-13-2-3。40-55-6601_voidmain(void){inta[4][4J={{l,2,0,-1},{3,-2,-3,0},{4,0,-5,5},{-6,6,0,7}};for(inti=0,s=0;i<4;i++)for(intj=0;j<4;j++)(if(a[i][j]<0)continue;if(a[i][j]==O)break;s+=a[i][j];}cout«s«endl;)程序的输出是〇输出:16(例子)voidmain(){intx=3,y=6,a=0;while(x++!=(y-=l))〃注意:比较时,x,y的值{a+=1;//比较后,x,y的值if(yvoidmain(){inti,a[20],sum,count;

29sum=count=0;for(i=0;;i++){if(i>19);//break;cin»a[i];if(a[i]==0);//break;if(a[i]<0);//continue;sum+=a[i];count++;}cout«nsum=n«sum«,\t,«,,count=,,«count«endl;)12.函数原型说明,函数调用,函数的返回值(例子)下列关于C++函数的叙述中,正确的是A)每个函数至少要具有一个参数B)每个函数都必须返回一个值〇函数在被调用之前必须先声明D)函数不能自己调用自己(例子)下列叙述中,不正确的是:A.ー个函数中可以有多个return语句B.函数可通过return语句返回数据C.必须用ー个独立的语句来调用函数D.函数main也可以带有参数【解析】函数调用可以作为表达式的一部分,如y=4+f(x);(例子)在以下的函数原型说明中,存在语法错误的是A.voidf(inta,int);B.voidf2(int,int);

30C.voidi3(int,int);D.intf4(intx;inty);15.函数的声明原则:正确程序如下:#includeusingnamespacestd;intmain()(floatadd(floatx,floaty);floata,b,c;cout«,fpleaseentera,b:cin»a»b;c=add(a,b);coutvv"sum="«c«endl;return0;}floatadd(floatx,floaty){floatz;z=x+y;return(z);或者:#includeusingnamespacestd;floatadd(floatx,floaty){floatz;z=x+y;return(z);)intmain()(floata,b,c;cout«"pleaseentera,b:"cin»a»b;c=add(a,b);cout«"sum="«c«endl;return0;〃对add函数作声明〃调用add〃定义add函数〃定义add函数〃调用add16.函数参数逆向求值

31(例子)写出以下程序的输出voidfun(intx,inty,intz)cout«x«y«z«\,;}voidmain(){inta=3,b=5;fun(++a,++b,a+b);cout«a«b«endl;}输出:468,46(例子)voidmain(){inta=3;printf("%d%d%d

32”,a++,a++,a++);}输出:543F从后向前17.存储类别,静态变量、全局变量的使用(例子)下列关于变量的叙述中,不正确的是:A.C++语言中将变量分为auto,static,extern和register四种存储类型B.自动变量和外部变量的作用域为整个程序文件C,函数内定义的静态变量的作用域为定义它的函数体D,外部静态变量的作用域为定义它的文件内(例子)程序输出为:intfun(intk)

33{staticintm=l;//静态变量,第一次到达该语句时初始化一次intn=2;m=k+m+n++;returnm;voidmain(){for(inti=0;i<3;i++)注意:i的值的变化,在循环和fun中都所以循环两次cout«fun(i+4-)«*\t*;cout«,

34,;)答案:3717.递归(如何解决?)画图(1)问题的规模向终结逼近(2)终结条件(例子)程序输出为#includevoidfunc(charc){printf("%c",c);if(c〈’3')func(c+1);printf("%c",c);)voidmain(){func(’〇’);}答案:01233210(例子)#includeintm=10;voidfun(intn){m+=m;if(n<=l)cout«m«,

35,;

36else{fun(n-l);m+=m;cout«m«,

37,;)}voidmain(void){fun(3);fun(5);}程序输出的第一行至第三行分别是ヽヽ0答案:80160320(例子)#includeintf(intn,intx){x+=l;if(n==3)returnx;elsereturnx+f(n+l,x+1);)voidmain(void){cout«f(3,l)«endl;cout«f(2,l)«endl;cout«f(l,l)«endl;eout«f(0,l)«endl;}程序输出的四行分别是ーヽーヽー和一〇答案:261220(例子)在下面函数的横线处填上适当的内容,使该函数能够利用递归方法求解字符串str的长度(不得使用系统提供的字符串处理函数)。

38intGetLen(char*str)(if(L11)return[21;elsereturnl+GetLen(str+l);}答案:【1]!str[O]或str[O]==,\O,[2]017.宏代换,技巧:“一定要手工写出代换结果”(例子)程序输出为#defineMOD(x,y)x%yvoidmain(){intz,a=5,b=10;z=MOD(b+3,a);〃直接简单代换,不加括号cout«z++«endl;}A)5B)3C)13D)14(例子)若有宏定义:#defineT(x,y)x*y/4则表达式T(3+4,4+4)的值为//20(例子)设有宏定义和变量说明:#defineT(x,y)x+yinta=T(3,4)*T(3,5);则变量a的初值为//2020.指针的意义,函数参数的形式(传值调用)(普通变量、指针、作参数)考得较多定义指针:intx=8,*p;p=&x;*p间接访问x,或者说・p与x访问同一变量。>普通变量做参数:对应的实参与形参是不同的变量,不管是否同名。(值传递)

39>指针做参数:实参指针值赋给形参指针变量(参数单向传递)。(指针传递)(例子)在C中函数参数传递方式有两种:第一种是值传递,第二种是传递。答案:指针(或地址)例1:普通变量做函数参数#includevoidswap(intx,inty)〃实参和形参占用不同的存储空间{〃参数传递时,intx=x,inty=y,形参是局部变量intt;t=x;x=y;y=t;voidmain()形参改变不能改变实参intx=3,y=9;swap(x,y);cout«x«*,*«y«endl;)输出?3,9注意例2:指针做函数参爵ー#includevoidswap(int*px,int*py)〃实参指针和形参指针是不同的指针{〃参数传递时,int*px=pl,int*py=p2Eit=*px;*px=*py;*py=t;}voidmain()intx=3,y=9,*pl,*p2;pl=&x;p2=&y;swap(pl,p2);cout«x«*,*«y«endl;)

40输出?9,3例3:指针做函数参数#includevoidswap(int*px,int*py)〃实参指针和形参指针是不同的指针{〃参数传递时,int*px=&x,int*py=&yint*tp;tp=px;px=py;py=tp;voidmain()(intx=3,y=9;swap(&x,&y);cout«x«,,,«y«endl;}输出?3,9(例子)#includevoidfun(int*x,inty)/Z参数y是fun的局部变量,(〃不影庙主函数中的X。y=*x+y;〃参数x是指针,指向主函数中的y,*x=y%4;〃fun函数中・x访问主函数中的y。〃参数传递时,int*x=&y,inty=xcout«*x«,,,«y«endl;}voidmain(void)intx=4,y=5;fun(&y,x);cout«x«,,,«y«endl;fun(&x,y);cout«x«,,,«y«endl;

41}程序输出的第一行是,第二行是,第四行是〇答案:1,94,11,121.返回指针值的函数(例子)#includechar*f(char*s,charch){char*p=s,*q=s;while(*q=*p++)if(*q!=ch)q++;//p往后跑的快returns;〃返回的是字符串首指针}voidmain(void){charsl[]=nHelloHowareyou”,§2[]="110010111”;cout«f(sl,,e,)«,

42,;cout«f(s2,,0,)«,

43,;)程序输出第一行是ー,第二行是ー〇答案:HiloHowaryou111111【解析】函数f的功能是删除字符串S中出现的字符Ch。22.ー维数组的定义、做函数参数(参数的意义和形式)考得较多(例子)要定义数组A,使得其中每个元素的数据依次为:3、9、4、8、〇、〇、0,错误的定义语句是A)intA[]={3,9,4,8,0,0,0);

44A)intA[7]={3,9,4,8);//后面的元素值为〇B)intA[1={3,9,4,8);〃数组长度是4D)intA[7]={3,9,4,8,0,0,0};说明:intA[7];若A是局部数组,则其元素值不确定若A是全局数组,则其元素值均为0若有:intA[7]={3};只要给出至少ー个初值,其余元素为0(例子)下列数组定义中,错误的是〇A.intal[2]={l};B.inta2[][2]={{1},{2}};C.inta3|3];D.inta4|][3];【解析】定义数组时(不论ー维还是二维),必须指定每ー维的大小。要么显式写出,要么从给出的初值中能够判断维数的大小。但是,若用数组做函数参数,写形参时,对ー维数组来说,长度是否写出无关紧要,因为传递的是首指针;对二维数组来说行数是否写出也无关紧要,因为传递的是行指针,对行指针而言,关键是一行中有几个元素,即列数,所以形参中列数必须写出。(例子)针对数组定义intdata[101;,下列表述中错误的是A)用・data可访问到数组的首元素〃数组元素下标从0开始B)用data[9]可访问到数组的末元素C)用data[10]可访问到数组元素会超出数组边界〃越界C)data共有!0个元素,其首元素是data[l](例子)设定义了宏:#defineN2以下定义数组的选项中,存在语法错误的是:A.intn;scanf("%d'',&n);inta[n];B.intconstn=5;inta[n];〃n是常数

45B.inta[2*N+l]〃2*N+1是常量表达式C.inta[]={1,2,3,4,5};doubleb[sizeof(a)];//sizeof(a)也是常量♦ー维指针做参数:注意形参的写法(形参是指针变量)访问数组的各种方式!intfsum(int*b,intn)〃或intb[10]{inti,s=0;for(i=0;i(图)voidfun(float*pl,float*p2,float*s){s=(float*)malloc(sizeof(float));*s=*pl+*(p2++);)voidmain()floata[2]={l.l,2.2};

46floatb[2]={10.0,20.0},*s=a;fun(a,b,s);*s);}程序输出为:D)1.1A)11.1B)12.1C)21.1♦ー维数组与指针inta[10J;图加t*P;}而*p=a;p=a;第i个元素的值a[i],*(a+i),p[i],*(p+i),p=p+i;*p第i个元素的地址a+i,&a[i],p+i,&p[i],p=p+i;p(例子)程序中有如下语句for(inti=0;i<5;i++)cout«*(p+i)«w,w;能够依次输出int型ー维数组DATA的前5个元素。由此可知,变量p的定义及初始化语句是。答案:int*p=DATA(例子)有如下定义和语句,其中04iV6,inta[]={1,3,5,7,9,11),*P,i;P=a;则对数组a的元素地址的正确表示是:A)&(a+i)B)a++C)&(p+i)D)&p[i](例子)#include〃数组元素逆置,部分元素逆置voidf(int*s,intnl,intn2){intt;while(nl

47{t=*(s+nl);*(s+nl)=*(s+n2);*(s+n2)=t;nl++;n2-;)}voidmain(void){inta[10]={l,2,3,4,5,6,7,8,9,0},i,*p=a;f(P,o,3);f(p+2,1,6);for(i=l;i<10;i++){if(i%5==0)printf(n

48n);printf(n%dn,a[i]);}printf(n

49n);}程序输出的第一行是ー,第二行是ー〇答案:32987651023.字符指针初始化,字符指针指向字符数组(例子)以下四组语句中,不符合C++语法规则的是A.charstr[]=nGoodmorning";B.charstr[20];str="Goodmorning";C.char*p="Goodmorning";〃C和D等价D.char*p;p="Goodmorning";//字符串的值是其起始地址(例子)若有char*p="Hello";则以下选项中错误的是A.chara=*p;//*p是'H,B.char*s=*p;〃*p表示字符,不能赋值给指针sC.char*q=p+2;〃将指针p+2赋值给qD.p=p+2;

5023.strlen和sizeof"China"字符串的长度是5,但其存储空间是6〇(例子)设有说明语句:chars[J="ab\0\123\\

5179nstrlen(s)的值是〇A.2B.3C.8D.14而sizeof(s)的值是9〇(例子)以下语句的输出是〇chars[20]="ATS\0JK\\";cout«strlen(s)«","«sizeof(s)«","〃注意s是数组名«sizeof("ATS\OJK\

52)«endl;答案:3,20,8(例子)注意字符串的意义:,MT结尾,strlen(nATS

53O12\l\

54)的结果是9strlen("ATS\012\l\\")的结果是6strlen(nATS\0\l\\")的结果是3chars[20];char*p=s;sizeof(p)?sizeof(s)?答案:220sizeof()括号中若是数组名,则求的是数组总空间;若是指针变量,则求的是指针变量自身的长度。(例子)若有doublea[3H4];则sizeof(a)的值是〇A.7B.12C.48D.96(例子)inta[3][4];intb[10];int(*pa)[4]=a,*pb=b;

55则sizeof(a)的值是48则sizeof(pa)的值是2〃任何类型的指针,长度都是2则sizeof(b)的值是40则sizeof(pb)的值是225.字符指针的意义(指针空间,串空间,*p的含义)考得较多char*pc,s[20],pc=s;pc=pc+i;*pc;>pc[i],通过指针访问字符数组中的字符>pc通过指针访问ー维字符数组整体cout«pc;输出的是pc指向的字符串,而不是地址cout«*pc;输出的是pc指向的字符字符串处理函数的参数为字符串首地址,即字符串中第1个字符的地址。(例子)charsl[10]="123n,s2[10]=nabcn;strcpy(sl+2,s2+l);〃输出I2bc〃输出2bcprintf(M%s,,>si);cout«sl+1;cout«strlen(sl+l);〃输出3strcpy(sl,nwl23n);strcpy(s2,**erwl23H);cout«strcmp(sl+l,s2+3);〃输出0(例子)设有说明语句:chars[]=**123\t456\00089**,*p=s;执行以下两个语句:printf("%c

56”,*(p+5));printf("%s”,p+5);则输出分别为和〇〃答案:556

57(例子)设有语句:inti;char*s=na\04+04V\0V\bn;for(i=0;*s++;i++);执行以上语句后,变量i的值为〇//6若改为:inti;char*s="a\08+04\,\0V\bH;for(i=0;*s++;i++);则执行以上语句后,变量i的值为:1(例子)#include#includevoidswap(char*sl,char*s2)(chart;t=*sl;*sl=*s2;*s2=t;}voidmain(){charsl[]=”BD”,s2[]=”BC”,s3[]=”AB”;if(strcmp(sl,s2)>0)swap(sl,s2);if(strcmp(s2,s3)>0)swap(s2,s3);if(strcmp(sl,s2)>0)swap(sl,s2);printf("%s

58”,si);/Z第一行输出ADprintf("%s

59”,s2);//第二行输出BCprintf("%s

60",s3);/Z第三行输出BB)(练习)下列程序的输出结果是#include

61usingnamespacestd;intmain(){chara[]="Hello,Worldn;char*ptr=a;while(*ptr)(if(*ptr>='a'&&*ptr<=,z,)cout«char(*ptr+,A,-,a,);〃字符的大小写转换elsecout«*ptr;ptr++;}return0;)A)HELLO,WORLDB)Hello,WorldC)hELLO,wORLDD)hello,world26.常用字符串处理函数(strlen,strcpy,strcat,strcmp等)(另外还要会自己编写字符串处理函数,实现系统的字符串处理函数相同的功能。)见实验手册算法总结27.二维数组的定义和存放形式、做函数参数(实参和形参)考得较少,inta[4][5];intCp),51;\int(*p)[5]=a;〃两行等价于一行P=a:一p[i]UL*(*(p+i)+j),*(p[i]+j),(*(p+i))LH,第i行第j列元素的值a[il[j],*(*(a+i)+j),(*(a+i))|j|,第i行第j列元素的地址イ(*(a+i)+j,*(p+i)+j,

62"べ川+j,P【i]+j,ノ元素指针行指针:如a,p,加1,移动一行元素位置(大元素)歹!]指针(元素指针):如a[i],*(a+i),*(p+i),*p加1»移动一列(ー个)元素位置行指针前加・变为列指针(例子)有以下定义inta[3][4],(*p)[4]=a;对数组元素的错误引用是A)p[01H]B)*(p+l)[2]C)*(p[2]+3)D)*(a[l]+l)E)(*(p+D)[2]♦二维指针做参数:注意形参的写法(形参是指针变量)例:求二维数组全体元素之和二维数组嘴:等价地写成:inttotal(int(*p)[4],intn)//n行数„:。{或:intp[3][4]inti,j,sum=O;for(i=0;i

6328.二维字符数组(例子)#include#includeintisvowel(charc)//判断c是否为元音字母{return(c==,a,||c==,e,||c=='i'||c=='o”|c=='u');}voidpluralize(char*s)〃使成复数{intlen=strlen(s);char*p=s+len-l;char*q=s+len-2;if(*p=='h'&&(*q=='c'||*q=='s'))strcat(p,"es");//strcat函数实现两个字符串的拼接elseif(*p==,s,)strcat(p,"esn);elseif(*p=*y*)if(isvowel(*q))strcat(p,"s");elsestrcpy(p,”ies'‘);elseif(*p=*z*)if(isvowel(*q))strcat(p,nzesn);elsestrcat(p,nesn);elsestrcat(p,**sH);voidmain(void)(〃二维字符数组,6个子串。charword[6][20]={”wish'',"bus","toy”,"navy","quiz","computer"};for(inti=0;i<6;i++)pluralize(word|i|);〃word[i]是第i行字符串的指针printf("%s\t”,word[i]);if((i+l)%2==0)printf(*

64*);))程序输出第一行是ー,第二行是ー,第三行是ー〇

65答案:wishesbusestoysnaviesquizzescomputers另外:参见教材P156,例9.29和例9.30,尤其是例9.30。〃例9.30改写例9.29,学习如何使用指针数组做函数参数。#include#includevoidmain(){voidsort(char*[],int),print(char*[],int);〃函数原型说明,因为函数定义在后char*name[]〃指针数组★={"George","Mary",“Susan","Tom","Davis"};intn=5;sort(name,n);print(name,n);)voidsort(char*name[],intn)〃函数定义,注意参数的写法{char*ptr;inti,j,k;for(i=0;i0)k=j;if(k!=i){ptr=name[i];name[i]=name[k];name[k]=ptr;}))voidprint(char*name[],intn)〃函数定义,注意参数的写法

66{for(inti=0;i

6728.函数指针做参数(例子)#includedoublefl(doublex)(returnx+x;)doublef2(double(*f)(doublex),inta){intx;doublesum=0;for(x=a;x<=a+l;x++)sum+=f(x)*f(x);returnsum;}voidmain(void){doublesum;for(inti=l;i<5;i++){sum=f2(fl,i);cout«sum«endl;}}程序输出的四行分别是ヽヽ和〇答案:2052100164(例子)#includeintfl(int&x){returnx++;}intf2(int(*f)(int&),inty){intsum=O,count=0;for(inti=0;i<=y;i++){sum+=f(i)+f(i);count++;cout«sum«endl;

68)returncount;)voidmain(void){intcount;count=f2(fl,5);cout«count«endl;)程序输出的第一行是,第二行是第三行是答案:18228.关于typedef>typedef为ー个已存在的数据类型名,提供ー个新的等价名。例如:typedefintINTEGER;〃注意:有分号〃指定用标识符INTEGER代表int类型typedefdoubleREAL;〃注意:有分号〃指定用标识符REAL代表double类型则,以下两行等价:inti,j;doublea,b;INTEGERi,j;REALa,b;>为数组类型定义新类型名。例如:若有typedefintARRAY[100|;/*ARRAY为整型数组类型*/贝リARRAYa;等价于inta[100];>可以为结构体等类型定义新名。例如,若有:typedefstructdate{

69intmonth;intday;intyear;}DATE;为结构体类型structdate起了一个新的名字DATE〇DATE是ー个数据类型名,可以定义变量和指针:DATEbirthday;〃相当于structdatebirthday;DATE*p;〃相当于structdate*p;A当然也可以为指针类型定义新名。若有:typedefint*IPTR;则IPTRp;等价于int*p;>定义字符指针若有typedef[har|STRING;STRINGp,s|10];相当于定义char*p,*s[10];说明:(1)typedef可以声明各种新的类型名,但不能用来定义变(2)typedef只是增加类新的类型名,但没有创造新的类型。(3)常用typedef声明一些数据类型,把它们单独放在ー个头文件中,然后在需要用到它们的文件中用#include命令把它们包含进来,以提高编程效率。(4)使用typedef有利于程序的通用与移植。33.结构体变量,结构体成员的访问(练习)与成员访问表达式p->name等价的表达式是〇//(*p).name例如:structStudent

70{charname[20];structStudentst,*p;p=&st;st.name<=>p->nanieg(*p).name33.枚举类型、枚举变量、常量(例子)已知枚举类型定义语句为:enumToken{NAME,NUMBER,PLUS=5,MINUS,PRINT=10}t;则下列叙述中错误的是A)枚举常量NAME的值为1B)枚举常量NUMBER的值为1C)枚举常量MINUS的值为6D)枚举常量PRINT的值为!0注意:•枚举类型的第一个常量默认值是〇。•若重新指定了某个枚举常量的值,则其后的枚举常量值默认值依次增加lo•枚举类型常量的值允许彼此相同。•虽然枚举常量的值是整数,但不允许使用整数直接赋值给枚举型变量,如t=3非法。•枚举类型量可与整型量进行比较,如t>3合法。文件操作???

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
最近更新
更多
大家都在看
近期热门
关闭