第1页共6页1《C++面向对象程序设计语言》期末试卷及参考答案[夜清风工作室整理版]QQ群:天津理工大学华信软件(196667902)首发。此试卷所有代码在另一个文件夹内。声明:由于附加内容是学酥敲键盘敲出来的,个别地方文字若有误,敬请谅解。注释不明,不详,或错误处,请告知一下。[仅供参考]希望大家取得好的成绩!搜索微信公众号“夜清风工作室”,点击关注,第一时间接收资料,通知等信息。一、判断题)1.按照标识符的要求,下划线是不能组成正确标识符的。(x)[标识符是程序员定义的单词,它命名程序正文中的一些实体,如函数名、变量名、类名、对象名称。C++标识符构成规则如下:1.以大写字母、小写字母或下划线(_)开始。2.可以由大写字母、小写字母、下划线(_)或数字0~9组成。3.大写字母和小写字母代表不同的标识符。4.不能是C++关键词。]2.引用就是某个变量的别名,对引用的操作,实质上就是对被引用的变量的操作。(v)[引用是一种特殊类型的变量,可以被认为是另一个变量的别名,通过引用名与通过被引用的变量名访问变量的效果是一样的。]3.在不同类型操作数组成的表达式中,其表达式类型一定是最高类型double型。(x)[转换的基本原则是降低类型数据转换为高类型数据,具体参考C++课本35页]4.For循环是只有可以确定的循环次数时才可使用,否则不能用for循环。(x)[可以无限循环下去滴,死循环]5.返回值类型、参数个数和参数类型都相同的函数也可以重载。(x)[返回值类型,参数类型,参数个数不同,或者函数后面跟const变成常函数才可重载]6.重新定义的标识符在定义它的区域内是可见的,而与其同名的原标识符在此区域内是不可见的但是却是存在的。(v)7.通常的拷贝初始化函数的参数是某个对象的成员名或对象的引用名。(v)8.已知:类A中一个成员函数说明如下:voidSet(A&a);其中A&a的含意是将a的地址值赋给变量Set。(x)[Set(A&a)是拷贝构造函数。前面的Set是类名,后面的A&a是对一个A类型对象a的引用,如果没有&,即(Aa),里面的a是传进来参第2页共6页2数的一个副本,对a的操作不会改变原来的对象,但要构造这个临时对象a,如果有&,即(A&a),就是对传进来的对象a的引用,可以直接操作对象a,没有构造临时对象在传进来,这样节省时间,提高了效率。]9.具有转换函数功能的构造函数,是指只能带有一个或两个参数的构造函数。(x)[]二、读程题,写出程序的运行结果。1、#includeiostream.hvoidmain(){inti(0);while(++i){if(i==10)break;if(i%3!=1)continue;coutiendl;}}答案:1,4,7[1。简单的来说,++i和i++,在单独使用时,就是i=i+1。而a=++i,相当于i=i+1;a=i;而a=i++,相当于a=i;i=i+1;2。%是求余数,/是求商,但注意浮点型运算结果,如5.0/2=2.5。3。continue出现在循环体中,其作用是结束本次循环,接着开始判断决定是否继续执行下一次循环,简单的说满足if条件就结束本次循环,从头开始下一次循环,不满足条件就继续执行逻辑上的下一步,针对本题是cout。4。i(0)与i=0是一样的。!5.补充一下,不知有没有跟我一样的数盲:1除以3商0余1,2除以3商0余2.]2、#includeiostream.hinta[8]={1,2,3,4,5,6,7};voidfun(int*pa,intn);voidmain(){intm=8;fun(a,m);couta[7]endl;}voidfun(int*pa,intn){for(intI=0;In-1;I++)*(pa+7)+=*(pa+I);}[28]3、#includeiostream.h第3页共6页3voidff(intx),ff(doublex);voidmain(){floata(88.18);ff(a);charb('a');ff(b);}voidff(intx){coutff(int):xendl;}voidff(doublex){coutff(double):xendl;}[ff(double):88.18ff(int):97]4、#includeiostream.hclassAA{public:AA(inti,intj){A=i;B=j;coutConstructor\n;}AA(AA&obj){A=obj.A+1;B=obj.B+2;coutCopy_Constructor\n;}~AA(){coutDestructor\n;}voidprint(){coutA=A,B=Bendl;}private:intA,B;};voidmain(){AAa1(2,3);AAa2(a1);a2.print();AA*pa=newAA(5,6);pa-print();deletepa;}[ConstructorCopy_ConstructorA=3,B=5ConstructorA=5,B=6Destructor第4页共6页4DestructorDestructor]三、编程题1、编写程序求1至100间所有素数之和,其中求素数要求用函数实现;[1、#includeiostream.hintprime(intx);voidmain(){intsum=0;for(inti=51;i100;i+=2)sum+=prime(i);coutSum=sumendl;}intprime(intx){for(intj=2;jx;j++)if(x%j==0)break;if(j=x)returnx;elsereturn0;}2、编程打印如下图形:1223334444555552、#includeiostream.hvoidmain(){for(inti=1;i=5;i++){for(intj=1;j=i;j++)couti;cout\n;}第5页共6页5}四、综合分析应用题1、阐述C++中函数三种调用的方式实现机制、特点及其实参、形参的格式,最好用代码说明(10分)。[1、(简答)格式:传值:实参用变量名(或常数),形参用变量名;#includeiostreamusingnamespacestd;voidswap(inta,intb){intt=a;a=b;b=t;}intmain(){intx=5,y=10;coutx=xy=yendl;swap(x,y);coutx=xy=yendl;return0;}//运行结果://x=5y=10//x=5y=10传址:实参用地址,形参指针;#includeiostreamusingnamespacestd;voidswap(int*a,int*b){intt=*a;*a=*b;*b=t;}intmain(){intx=5,y=10;coutx=xy=yendl;swap(&x,&y);coutx=xy=yendl;system(pause);第6页共6页6return0;}//运行结果://x=5y=10//x=10y=5引用:实参用变量名,形参用引用;#includeiostreamusingnamespacestd;voidswap(int&a,int&b){intt=a;a=b;b=t;}intmain(){intx=5,y=10;coutx=xy=yendl;swap(x,y);coutx=xy=yendl;return0;}//运行结果://x=5y=10//x=10y=5传值调用:是单向的,实参把值拷贝一份给形参,形参值的改变不会影响实参;传址调用:是双向的,把实参的地址传给形参,形参就指针了实参变量,因此形参的改变会影响实参;引用调用:形参是实参的别名,形参的改变也肢影响实参,注意,实参只能用变量名,不能用常量!]2、用代码举例说明如何定义指向普通常量的指针、指向一维数组的指针、指向对象的指针(10分)[2、(简答):intx,*px=&x;//定义指向普通常量的指针intarr[5]={1,2,3,4,5},*pa=a;//定义指向一维数组的指针myclassobject,*pobj=&object;//定义指向对象的指针]