福师09秋学期《C++程序设计》考试复习题一Share2010-03-1521:43:58阅读96评论0字号:大中小订阅一、选择填空:,(本大题共16小题,每小题2分,共32分)1.对类的构造函数和析构函数描述正确的是____B___。(涉及知识点:构造和析构函数,可参考教材第9章9.1-9.6小节,P293-317)A)构造函数不能重载,析构函数可以重载B)构造函数可以重载,析构函数不能重载C)构造函数可以重载,析构函数也可以重载D)构造函数不能重载,析构函数也不能重载2.类MyClass的定义如下:(涉及知识点:构造函数,类成员赋值,可参考教材9.1-9.3小节,P293-306)classMyClass{public:MyClass(){}MyClass(inti){value=newint(i);}int*value;}若要对value赋值,则下面语句正确的是:DA)MyClassmy;my.value=1000;B)MyClassmy;*my.value=1000;C)MyClassmy;my.*value=1000;D)MyClassmy(l0);3.假定MyClass为一个类,则执行MyClassa,b(2),*p;语句时,自动调用该类构造函数_A次。(涉及知识点:构造函数的调用,可参考教材9.1-9.3小节,P293-306)AA)2B)3C)4D)54.对于拷贝构造函数,正确的描述是___A_____。(涉及知识点:拷贝构造函数,可参考教材9.5小节,P311-316)A)在C++语言中,如不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数B)必须为每个类定义拷贝构造函数C)如果要使用拷贝构造函数,则必须在类中先定义D)当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数5.下面对于友元函数描述正确的是__C___。(涉及知识点:友元函数,可参考教材8.7小节,P281-288)A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函数C)友元函数破坏了类的封装性和隐藏性D)友元函数不能访问类的私有成员6.下面对静态数据成员的描述中,正确的是___D___。(涉及知识点:静态数据成员,可参考教材8.6小节,P277-280)A)静态数据成员可以在类体内进行初始化B)静态数据成员不可以被类的对象调用C)静态数据成员不能受private控制符的作用D)静态数据成员可以直接用类名调用7.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为___C____。()(涉及知识点:访问控制和静态数据成员,可参考教材8.4、8.6小节,P269-280)A)publicB)protectedC)privateD)static8.下列虚基类的声明中,正确的是___D_____。(涉及知识点:虚拟继承,可参考教材10.7小节,P350)A)classvirtua1B:publicAB)virtualclassB:publicAC)classB:publicAvirtualD)c1assB:virtualpublicA9.下面关于类和对象的描述中,错误的是___A______。(涉及知识点:类和对象,可参考教材第8和第9章)A)类就是C语言中的结构体类型,对象就是C语言中的结构体变量B)类和对象之间的关系是抽象和具体的关系C)对象是类的实例,一个对象必须属于一个已知的类D)类是具有共同行为的若干对象的统一描述体10.以下各选项组中,均是C++语言关键字的组是___A______。(涉及知识点:C++关键字,可参考教材附录A.4,P535)A)publicoperatorthisB)shodstringstaticC)itwhile=D)privatecoutprintf11.设inta=10,b=11,c=12;,表达式(a+b)?0:1的值为____B_____。(涉及知识点:算术运算,可参考教材3.1.5,P69)(没搞懂这题是什么意思?)A)2B)0C)-2D)112.下列描述正确的是___D______。(涉及知识点:关系与逻辑操作,switch语句和if语句,可参考教材4.4和2.2,P114,P27)A)表示mn为true或mn&&mB)switch语句结构中必须有default语句C)if语句结构中必须有else语句D)如果至少有一个操作数为true,则包含“||”运算符的表达式为true13.下列语句中不是死循环的是___A______。(涉及知识点:循环语句,可参考教材2.3小节,P34)A)inti=10;while(1){i--;if(i==1)break;}B)for(inti=1:i10;i++){i--;}C)inti=0;do{i++;}while(i=0)//这个i增大最大之后会变成负数,所以也不是死循环,但与A相比,选A更好。D)inti=1;for(;;)i=i+1;14.下面关于break语句的描述中,不正确的是___D______。(涉及知识点:break语句,可参考教材2.6小节,P51)A)break可以用于循环体内B)break语句可以在for循环语句中出现多次C)break语句可以在switch语句中出现多次D)break语句可用于if条件判断语句内(这个题有答案吗?)15.下面关于数组的描述错误的是____D_____。(涉及知识点:数组,可参考教材3.5小节,P83)A)在C++语言中数组的名字就是指向该数组第一个元素的指针B)长度为n的数组,下标的范围是0-n-1C)数组的大小必须在编译时确定D)数组只能通过值参数和引用参数两种方式传递给函数16.结构化程序设计的3种结构是___D______。(涉及知识点:结构化程序设计,可参考教材1.6.2小节,P16)A)顺序结构、选择结构、转移结构B)分支结构、等价结构、循环结构C)多分支结构、赋值结构、等价结构D)顺序结构、选择结构、循环结构二、写出下列程序的运行结果(本大题共3小题,共14分)1.(涉及知识点:构造函数设置默认参数,可参考教材9.2小节,P298-230)#includeiostream.hclassTdate{public:Tdate(intm=8,intd=20,inty=2009){month=m;day=d;year=y;coutmonth/day/yearendl;}protected:intmonth;intday;intyear;};voidmain(){Tdateaday;Tdatebday(7);Tdatecday(11,12);Tdatedday(8,2,2008);}结果:8/20/20097/20/200911/12/20098/2/20082.(涉及知识点:重载模板函数,可参考教材第14.1、14.2小节,P461或课件20.4小节)#includeiostream.h#includestring.htemplateclassTTmax(Ta,Tb){returnab?a:b;}char*max(char*a,char*b){return(strcmp(a,b)?a:b);}voidmain(){coutMax(\summer\,\autumn\)ismax(summer,autumn)endl;}这个程序通过不了编译的。Main()要改成:voidmain(){char*a=summer;char*b=antumn;coutMax(\summer\,\autumn\)ismax(a,b)endl;}结果是:Max(summer,autumn)issummer3.(涉及知识点:增量操作,可参考教材4.6小节,P122)#includestdio.hmain(){inta,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf(b,c,d:%d,%d,%d,b,c,d);return0;}输出结果为:b,c,d:10,12,120三、填空题,(本大题共3小题,共25分)1.应在下列程序划线处填入的正确语句#includeiostreamclassBase{public:voidfun(){coutBase::funENDL;}};classDerived:publicBase{voidfun(){_____①Base::fun();________//显示调用基类的函数fun()coutDerived::funENDL;}};(涉及知识点:继承,可参考教材第10章,P327)2.设有宏定义和变量说明:#defineT(x,y)x+yinta=T(3,4)*T(5);//这里T(5)少了一个参数。。则变量a的初值是(①)(涉及知识点:宏定义,可参考教材7.7.4小节,P246)3.对于下面定义的类MyClass,请在函数f()中添加对象成员把n的值修改为50。classMyClass{public:MyClass(intx){n=x;}voidSetNum(intn1){n=n1;}private:intn;};voidf(){MyClass*ptr=newMyClass(45);_____①ptr-SetNum(50);________}(涉及知识点:指针,类,可参考教材3.7小节和第8章,P91,P252)四、简单编程:(本大题共3小题,共29分)1、编写一个程序求一元二次方程的解。(涉及知识点:条件语句,可参考教材2.2小节,P27)讨论下述情形:(1)a=0,不是二次方程。(2)b^2-4ac=0,有两个相等实根。(3)b^2-4ac0,有两个不等实根。(4)b^2-4ac0,有两个复根(表示成x+yi,x-yi)。#includeiostream#includecmathusingnamespacestd;intmain(){inta,b,c;while(cinabc){if(a==0){cout不是二元方程endl;}else{intdeta=b*b-4*a*c;if(deta==0){cout有两个相等的根为:-b/(2*a)endl;}elseif(deta0){cout有两个不等实根为:(-b+sqrt(1.0*deta)/(2*a))(-b-sqrt(1.0*deta))/(2*a)endl;}else{doublef1=-1.0*b/2/a;doublef2=sqrt(-1.0*deta)/2/a;cout有两个复根为:f1+f2if1-f2i\n;}}}return0;}2.编程序求1/1!+1/2!+1/3!+...+1/100!(n!=1*2*3*…*(n-1)*n)(涉及知识点:循环语句,可参考教材2.3小节,P34)#includeiostreamusingnamespacestd;intmain(){//1/1!+1/2!+1/3!+...+1/100!(n!=1*2*3*…*(n-1)*n)doubledwResult=1.0;doubledwTmp=1.0;for(intnInc=2;nInc=100;nInc++){dwTmp=dwTmp/nInc;dwResult+=dwTmp;}cout结果为:dwResultendl;//结果为:.71828return0;}3、编程:统计在所输入的N个实数中有多少个正数、多少个负数、多少个零。(涉及知识点:循环语句,可参考教材2.3小节,P34)#includeiostreamusingnamespacestd;intmain(){//统计在所输入的N个实数中有多少个正数、多少个负数、多少个零intN;intnPositive=0,nNegative=0,nZero=0;doubledata;co