第1页上海应用技术学院2011—2012学年第一学期《面向对象程序设计》期(中)(B)试卷课程代码:B2042211学分:3考试时间:100分钟课程序号:1126045班级:学号:姓名:我已阅读了有关的考试规定和纪律要求,愿意在考试中遵守《考场规则》,如有违反将愿接受相应的处理。试卷共8页,请先查看试卷有无缺页,然后答题。一、选择题(每题2分,共20分)1、在C++语言中函数返回值的类型是由_________决定的。A)调用该函数时系统临时B)return语句中的表达式类型C)定义该函数时所指定的函数类型D)调用该函数时的主调函数类型2、在函数定义前加上关键字inline,表示该函数被定义为_________。A)重载函数B)内联函数C)成员函数D)普通函数3、假定MyClass为一个类,则该类的拷贝初始化构造函数的声明语句为_________。A)MyClass&(MyClassx);B)MyClass(MyClassx)C)MyClass(MyClass&x);B)MyClass(MyClass*x)4、下面对于友元函数描述正确的是_________。A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函数C)友元函数破坏了类的封装性和隐藏性D)友元函数不能访问类的私有成员5、为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能..把该成员的访问权限定义为_________。题号一二三四五六七八九十总分应得分20202436100实得分第2页A)publicB)protectedC)privateD)static6、下面对静态数据成员的描述中,正确的是_________。A)静态数据成员是类的所有对象共享的数据B)类的每个对象都有自己的静态数据成员C)类的不同对象有不同的静态数据成员值D)静态数据成员不能通过类的对象调用7、关于new运算符的错误..的描述是_________。A)使用运算符new创建对象数组时必须定义初始值B)使用运算符new创建对象时,会调用类的构造函数C)运算符new可以用来动态创建对象和对象数组D)使用new运算符创建的对象可以使用运算符delete删除8.下列给字符数组进行初始化中,__________是正确的。A.chars1[]=12345abcd;B.chars2[3]=xyz;C.chars3[][3]={'a','x','y'};D.chars4[2[3]={xyz,mnp};9、__________是析构函数的特征。A.一个类中只能定义一个析构函数;B.析构函数与类名不同;C.析构函数的定义只能在类体内;D.析构函数可以有各个或多个参数。;10、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,__________是正确的。A.A1.p=5;B.A1-p=5;C.A1.*p=5;D.*A1.p=5;二、填空题(每空2分,共20分)1、1在C++程序中,使用基本输入输出流需要包含的头文件是__iostream_______。2、执行___new___操作将动态分配P所指向的数据空间,执行__delete___操作将释放由P所指向的动态分配的数据空间。3、C++的三种作用域分别是全局作用域、文件作用域和_函数作用域。第3页4、在C++语言中,每个类都有一个隐含的指针叫做____this_____指针,该指针指向正在调用成员函数的对象。5、如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是引用类型或指针类型。10.类的访问权限有public、____private______和protected。7.在C++程序中,打开std命名空间的语句是__usingnamespacestd______。三、写出程序运行结果(每题4分,共24分)1、写出下列程序的运行结果。#includeiostreamusingnamespacestd;classMyPoint{public:MyPoint(intxx=5,intyy=5){X=xx;Y=yy;cout(X,Y);}private:intX,Y;};voidmain(){MyPointa(10,10),b;}(10,10)(5,5)2、写出下列程序的运行结果。#includeiostreamusingnamespacestd;inti=0;第4页voidfun(){{staticinti=1;couti++',';}couti',';}intmain(){fun();fun();return0;}1,2,1,23、写出下列程序的运行结果。#includeiostreamusingnamespacestd;classtest{private:inta;public:test(){coutconstructorendl;}test(inta){coutaendl;}~test(){coutdestructorendl;}};intmain(){testA(3);return0;第5页}3Destructor4.写出下列程序的运行结果。#includeiostreamusingnamespacestd;intfib(intn){intresult;coutn;if(n2)result=1;elseresult=fib(n-1);returnresult;}intmain(){coutfib(3)\n;return0;}3211第6页5.写出下列程序的运行结果。#includeiostreamusingnamespacestd;intcountp=0;classPoint{intX,Y;public:Point(intx=0,inty=0){X=x;Y=y;coutConstructor\n;countp++;}friendPointmyfun(Pointp1,Pointp2);};Pointmyfun(Pointp1,Pointp2){Pointtmp(p1.X+p2.X,p1.Y+p2.Y);coutCopyConstructor\n;returntmp;}voidmain(){Pointpp0,pp1(1,2);myfun(pp0,pp1);std::coutcountpendl;}ConstructorConstructorConstructorCopyConstructor3第7页6.写出下列程序的运行结果。#includeiostreamusingnamespacestd;classSample{intm,n;public:Sample(){}Sample(inti,intj){m=i;n=j;}intadd(){returnm+n;}};voidmain(){inti;Samplea[3]={Sample(0,1),Sample(3,4),Sample(6,8)};for(i=0;i3;i++)couta[i].add();coutendl;}1714四、编程题(每题9分,共36分)第8页1.通过递归的方式实现下列问题:有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。问第4个学生多少岁,他说比第3个学生大2岁。问第3个学生多少岁,他说比第2个学生大2岁。问第2个学生多少岁,他说比第1个学生大2岁。最后问第1个学生,他说是10岁。请问第5个学生多大?212314416518#includestdio.hintfun(int);//声明递归函数intmain(){intk=fun(5);printf(第5个人的年龄为:%d\n,k);return0;}//递归函数的实现intfun(intn){if(n==1)return10;//第一个人年龄为10岁elseif(n1)returnfun(n-1)+2;//后面每个人年龄依次在前一人基础上加2elsereturn-1;//如果你给的n值不合法(比如为负数),就返回-1}2.编写四个重载函数,返回值为参数的两倍,参数类型分别为int,long,float,double,返回值类型和参数类型一致。第9页#includeiostreamusingnamespacestd;intDouble(intx);longDouble(longx);floatDouble(floatx);doubleDouble(doublex);intmain(){intmyInt=6500;coutDouble(myInt)endl;longmyLong=65000;coutDouble(myLong)endl;floatmyFloat=6.5F;coutDouble(myFloat)endl;doublemyDouble=6.5e20;coutDouble(myDouble)endl;}intDouble(intx){return2*x;}longDouble(longx){return2*x;}floatDouble(floatx){return2*x;}doubleDouble(doublex){第10页return2*x;}3.定义一个Book类,拥有静态数据成员booksum,记录Book的个体数目;静态成员函数Getbooksum(),存取booksum。设计程序要求首先打印出booksum初始值,然后依次定义对象a,b,c,每次调用Getbooksum()输出Book的个数。4.定义一个处理日期的类TDate,它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,并实现如下要求:①构造函数重载;②成员函数设置缺省参数;③定义一个友元函数来打印日期;④定义一个非静态成员函数设置日期;⑤可使用不同的构造函数来创建不同的对象。