《面向对象程序设计(C++)(第二版)》自我测试练习参考答案(主编:王明福)第1章初识C语言一、简答题1.面向对象方法是如何产生和发展的。2.C++语言有何特点,它对C语言有哪些发展。3.C++程序中的注释有什么作用?如何使用C++中的两种注释方法?二、填空题1.C++语言程序的三大区域从上到下分别是(声明部分)、(主函数部分)和(函数定义部分)。2.每一条执行语句都是以(分号“;”)结尾。3.引用头文件使用(#include)指令。三、编程题1.请用VisualC++6.0开发工具,在工程“HelloWorld”中,添加一个C++程序,输出以下信息。*********************************************Hello,World!*********************************************#includeiostream.hvoidmain(){cout*********************************************\n;coutHello,World!\n;cout*********************************************\n;}2.在工程“HelloWorld”中(见题1),编制一个名为MyFirst的程序,该程序在计算机显示器上输出以下文字:①喂,你好!②你真聪明,你已经会用VC++编写程序了!#includeiostream.hvoidmain(){cout喂,你好!\n;cout你真聪明,你已经会用VC++编写程序了!\n;}3.在工程“HelloWorld”中(见题1),编制一个名为MyAdd的程序,该程序要求由用户输入2个整数,然后将和数输出。第2章数据类型、运算符和表达式一、单选题1.下列合法的标识符是(D)。A.charB.a$C.a-9D.x_y2.C++语言规定,程序中用到的变量一定要(A)。A.先定义后使用B.先使用后定义C.使用时再定义D.前面3种都行3.下列字符串中,合法的字符常量是(B)。A.nB.‘\n’C.110D.“n”4.C++程序中,运算对象必须为整数的运算符是(C)。A.*B./C.%D.++5.intk=xy?(xz?x:z):(yz?y:z)语句的目的是(A)。A.求x,y,z最大值B.求x,y,z最小值C.求x,y,z中间值D.求x,y,z平均值二、填空题1.写出下面各表达式的值(假设a=1,b=2,c=3,x=4,y=3)。(1)!ab&&b!=c||x+y=3(1)(2)a||1+‘a’&&b&&‘c’(1)2.写出下面程序的运行结果是(aabbabc)。#includestdio.hmain(){charc1=‘a',c2=‘b',c3=‘c',c4=‘\101',c5=‘\116';printf(a%cb%c\tabc\n,c1,c2,c3);printf(\t\b%c%c,c4,c5);}3.写出下面程序的运行结果是(x=11,y=21,m=10,n=21x=10,y=20,m=11,n=20)。#includeiostream.hvoidmain(){intx=10,y=20,m,n;m=x++;n=++y;coutx=x,y=y,m=m,n=nendl;m=x--;n=--y;coutx=x,y=y,m=m,n=nendl;}4.假设a=12,表达式a%=(5%2)中a的运算结果是(0)。三、编程题1.编程求C语言表达式4a2+5b3的值,假设a=3,b=1.5。#includeiostream.hvoidmain(){inta=3;doubleb=1.5;cout4*a*a+5*b*b*bendl;}2.假设a=10,编程求表达式a+=a-=a*=a中a的运算结果。#includeiostream.hvoidmain(){inta=10;a+=a-=a*=a;couta=aendl;}3.计算表达式的值intx=1,y=2,z=-2;(1)(x+3)4(2)x&&y=z(3)x+y||z(4)x||yz#includeiostream.hvoidmain(){intx=1,y=2,z=-2;inta,b,c,d;a=(x+3)4;b=x&&y=z;c=x+y||z;d=x||yz;cout(1)(x+3)4=aendl;cout(2)x&&y=z=bendl;cout(3)x+y||z=cendl;cout(4)x||yz=dendl;}4.从键盘输入三角形的三个边长a,b,c,求出三角形的面积。求三角形的面积用公式:area=sqrt(s*(s-a)*(s-b)*(s-c)),其中s=1/2(a+b+c)。#includeiostream.h#includemath.hvoidmain(){doublea,b,c,area,s;cout请输入三个边长a,b,c:;cinabc;s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));coutarea=areaendl;}第3章控制结构一、单选题1.下面程序段运行结果是(C)。intiNum=0;while(iNum=2)coutiNum;A.2B.3C.死循环,无限个0D.有语法错误2.以下是if语句的基本形式:if(表达式)语句;其中“表达式”(D)。A.必须是逻辑表达式B.必须是关系表达式C.必须是逻辑表达式或关系表达式D.可以是任意合法的表达式3.以下循环语句执行次数是(C)。inti=1;for(;i==0;)couti;A.2次B.1次C.0次D.无限次4.以下正确的描述是(B)。A.continue语句的作用是结束整个循环的执行B.只能在循环体内和switch语句体内使用break语句C.在循环体内使用break语句或continue语句的作用相同D.从多层循环嵌套中退出时,只能使用goto语句5.与while(E)不等价的是(C)。A.while(!E==0)B.while(E0||E0)C.while(E==0)D.while(E!=0)二、填空题1.以下程序的功能是计算s=1+12+123+1234+12345,请填空。voidmain(){intt=0,iSum=0,i;for(i=1;i6;i++){t=i+(t*10);iSum=iSum+t;}(coutiSum);}2.以下程序的功能是输出100以内能被3整除且个位数为6的所有整数,请填空。voidmain(){inti,j;for(i=0;i10;i++){j=i*10+6;if(j%3)continue;coutj;}}3.下面程序的输出结果是(02)。#includeiostream.hvoidmain(){inti,j;i=j=2;if(i==2)if(i==1)couti+j;elsecouti-j;cout\ti;}4.下面程序的输出结果是(5)。#includeiostream.hvoidmain(){intx=2;switch(x){case1:case2:x++;case3:x+=2;case4:coutx;break;default:coutxunknow\n;}}三、编程题1.编程统计全班学生成绩。要求每次用键盘输入一个学生的2门分数,计算输出每个学生的总分和平均分,此外,如果平均分大于等于85,为优秀,60~85为通过。统计出成绩优秀的学生和及格的学生人数。#includeiostream.h#defineN4voidmain(){intx,y,sum,a85=0,a60=0,i;floatav;for(i=0;iN;i++){cout输入成绩:;cinxy;sum=x+y;av=sum/2.0;if(av=85)a85++;if(av=60&&av85)a60++;}cout优秀的学生=a85,及格的学生人数=a60endl;}2.一个数如果恰好等于他的因子之和,这个数就称为“完全数”。例如6的因子是1,2,3,而6=1+2+3。因此6是一个完全数。编程序找出1000之内的所有完全数。#includeiostream.hvoidmain(){inti,j,x;for(i=1;i1000;i++){for(j=1,x=0;j=i/2;j++)if(i%j==0)x+=j;if(i==x)couti;}}3.打印出所有的“水仙花数”、所谓“水仙花数。是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33。#includeiostream.hvoidmain(){inti,a1,a2,a3,x;for(i=100;i1000;i++){a1=i%10;a2=i%100/10;a3=i/100;x=a1*a1*a1+a2*a2*a2+a3*a3*a3;if(i==x)couti;}cout\n;}4.下列乘法算式中:每个汉字代表1个数字(1~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。赛软件*比赛=软件比拼试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。#includestdio.hvoidmain(){longa1,a2,a3,a4,a5;longx,y;for(a1=1;a110;a1++)for(a2=1;a210;a2++)for(a3=0;a310;a3++)for(a4=1;a410;a4++)for(a5=0;a510;a5++){x=(a1*100.0+a2*10.0+a3)*(a4*10.0+a1);y=a2*1000.0+a3*100.0+a4*10.0+a5;if(y==x)printf(%ld%ld%ld*%ld%ld=%ld%ld%ld%ld\n,a1,a2,a3,a4,a1,a2,a3,a4,a5);}printf(\n);}5.求sum=a+aa+aaa+…+aaaaa…a(n个a)之值,其中a是一为数字。例如,当a=3,n=6时,sum=3+33+333+3333+33333+333333。a和n的值由键盘输入。#includeiostream.hvoidmain(){inta,n;longsum=0L,t=0;cout请输入a和n:;cinan;for(inti=1;i=n;i++){t=t*10+a;sum+=t;}coutsumendl;}第4章复合数据类型一、单选题1.对于一维数组a[10],判断下列对数组元素的引用正确的是(A)。A.a[2+3]B.a[3/1.0]C.a[5+8]D.a[3.4]2.对于二维数组a[5][10],判断下列对数组元素的引用正确的是(C)。A.a[5][0]B.a[0.5][4]C.a[4][4+5]D.a[1][4+9]3.以下错误的定义语句是(C)。A.intx[][3]={{0},{1},{1,2,3}};B.intx[4][3]={1,2,3,1,2,3,1,2,3,1,2,3};C.intx[][3]={1,2,3};D.intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};4.以下程序运行结果是(A)。#includeiostream.h#includestring.hvoidmain(){charchA[10]=abcdef,chB[10]=AB\0c;strcpy(chA,chB);coutchA[3]endl;}A.