2008年4月-9月全国计算机二级考试c++真题及答案
2008年4月二级C++笔试试题及参考答案(考试时间90分钟,满分100分)一、选择题(每小题2分,共70分) <附件内为WORD文档,注册可下载>(1)程序流程图中带有箭头的线段表示的是()。A)图元关系B)数据流C)控制流D)调用关系(2)结构化程序设计的基本原则不包括()。A)多元性B)自顶向下C)模块化D)逐步求精(3)软件设计中模块划分应遵循的准则是()。A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合(4)在软件开发中,需求分析阶段产生的主要文档是()。A)可行性分析报告B)软件需求规格说明书C)概要设计说明书D)集成测试计划(5)算法的有穷性是指()。A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的C)算法程序的长度是有限的D)算法只能被有限的用户使用(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。A)快速排序B)冒泡排序C)直接插入排序D)堆排序(7)下列关于栈的叙述正确的是()。A)栈按“先进先出”组织数据B)栈按“先进后出”组织数据C)只能在栈底插入数据D)不能删除数据(8)在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A)需求分析阶段B)概念设计阶段C)逻辑设计阶段D)物理设计阶段(9)有三个关系R、S和T如下:RSTBCDa0k1b1n1由关系R和S通过运算得到关系T,则所使用的运算为()。A)并B)自然连接C)笛卡尔积nD)交(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为()。A)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩(11)下列有关函数重载的叙述中,错误的是A)函数重载就是用相同的函数名定义多个函数B)重载函数的参数列表必须不同C)重载函数的返回值类型必须不同D)重载函数的参数可以带有默认值(12)下列有关类成员的叙述中,正确的是A)友元函数是类的成员函数B)类成员的默认访问权限是私有的C)类成员函数必须声明为公有的D)类的静态数据成员不能是常成员(13)下列有关类继承的叙述中,错误的是A)继承可以实现软件复用B)虚基类可以解决由多继承产生的二义性问题C)派生类构造函数要负责调用基类的构造函数D)派生类没有继承基类的私有成员(14)下列有关运算符重载的叙述中,正确的是A)运算符重载是多态性的一种表现B)C++中可以通过运算符重载创造新的运算符C)C++中所有运算符都可以作为非成员函数重载D)重载运算符时可以改变基结合性(15)下列有关模板的叙述中,正确的是A)函数模板不能含有常规形参B)函数模板的一个实例就是一个函数定义C)类模板的成员函数不能是模板函数D)用类模板定义对象时,绝对不能省略模板实参(16)下列有关C++流的叙述中,错误的是A)C++操作符setw设置的输出宽度永久有效B)C++操作符endl可以实现输出的回车换行C)处理文件I/O时,要包含头文件fstreamBCDa0k1BCDf3h2a0k1n2x1D)进行输入操作时,eof()函数用于检测是否到达文件尾(17)下列符号中能够作为C++标识符的是A)constB)2aC)_shapeD)-count(18)已知枚举类型声明语句为:enumCOLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=10n};则下列说法中错误的是A)枚举常量YELLOW的值为1B)枚举常量RED的值为6C)枚举常量BLACK的值为10D)枚举常量WHITE的值为1(19)执行下列语句段后,输出字符“*”的个数是for(inti=50;i>1;I-=2)cout<<'*';A)24B)25C)26D)50(20)有如下定义:inta[5]={1,3,5,7,9},*p=a;下列表达式中不能得到数值5的是A)a[2]B)a[3]C)*(p+2)D)*p+4(21)已知函数f的原型是voidf(int*a,long&b);,变量v1、v2的定义是:intv1;loongv2;下列调用语句中正确的是A)f(v1,&v2);B)f(v1,v2);C)f(&v1,&v2);D)f(&v1,v2);(22)有如下类定义:classPoint{private;staticinthow_many;};______how_many=0;要初始化Point类的静态成员how_many,下划线处应填入的内容是A)ingB)staticintC)intPoint::D)staticintPoint::(23)在下列关键字中,不能用来表示继承方式的是A)privateB)staticC)publicD)protected(24)已知Value是一个类,Value是Value的一个对象。下列以非成员函数形式重载的运算符函数原形中,正确的是A)Valueoperator+(Valuev,inti);B)Valueoperator+(Valuev=value,inti);C)Valueoperator+(Valuevinti=0);D)Valueoperator+(Valuev=value,inti=0);(25)下面是一个模板声明的开始部分:templute
double__由此可知A)这可能是一个函数模板的声明B)这可能是一个类模板的声明C)这既可能是一个函数模板的声明,也可能是一个类模板的声明D)这肯定是一个错误的模板声明(26)有如下4个语句:①cout<<'A'<getPI();和cout<getPI();和cout<getPI();D)cout<usingnamespacestd;classVAC{public;intf()const{return3;}intf(){return5;}};Intmain(){VACv1;constVACv2;cout<usingnamespacestd;classBase{intx;public;Base{intn=0};x(n){cout<Usingnamespacenstd;ClassAmount{intamount;public;Amount(intn=0):amount(n){}IntgetAmount()const{returnamount;}Amount&operator+=(Amounta){amount+=a.amount;return;}};intmain(){Amountx(3),y(7);x+=y;cout<usingnamespacestd;classGA{public;virtualintf(){retuml;}};classGB:publicGA{public;virtualintf(){return2;}};voidshow(GAg){cout<usingnamespacestd;classBase{public;intm,n;};classDerived1:___________Base{};classDerived2:publicDerived1{public:voidSetMN(intM,intN){M=M;n=N;}intGetSumMN(){retum(m+n);}};intmain(){Derived2objD;objD.SetMN(3,4);cout<<"M+N="<usingnamespacenstd;classBase{intb;public;Base(inti){b=i;}voiddisp(){cout<<"Base:b="<#include#includeusingnamespacestd;classPhoneMumber{public;voidsetNumber(stringnumber){this->number=number;}//重载流插入操作符friend___________(ostream&output,constPhoneNumber&num){output<#includeusingnamespacestd;classTwoDShape{//二维图形类charname[20];public;TwoDShape(char*n="unknown"){strcpy(name,n);}char*getNa:ne(){returnname;}___________=0;};classRec:publicTwoDShape{doublewidth,height;public;Rec(doublew=0.0,doubleh=0.0):TwoDShape("rectamgle"){width=w;height=h;}doublegetWidth(){returnwidth;}doublegetHeight(){returnheight;}doublearea(){returnwidth*height;}};intmain(){TwoDShape*shape;shape=newRec(2.1,3.0);cout<<"objectis"<getName()<<"n";cout<<"Areais"<area()<<"n";return0;}请将程序补充完整,使程序在运行时输出:objectistriangleAreais6.3(15)如下程序声明了一个使用两个通用数据类型的模板类dataClass,其中构造函数用于初始化两个数据成员,成员函数show用于输出两个数据成员的数值。#includenusingnamespacestd;___________T1i;T2j;public;dataClass(T1aT2b){i=a;j=b;}voidshow(){cout<ob1(10,0.23);dataClassob2('X',"mydata");ob1.show();ob2.show();retum0;}请将程序补充完整,使程序在运行时输出:10,0.23X,mydata__2008年4月二级C++笔试试题答案一、选择题(1)C(2)A(3)B)(4)B)(5)A)(6)D(7)B(8)C(9)D)(10)C)(11)C(12)B(13)D(14)A(15)B)(16)A(17)C(18)D(19)B(20)B)(21)D(22)C(23)B(24)B(25)A)(26)C)27)A(28)D(29)A(30)B)(31)C(32)D(33)D(34)B(35)C)二、填空题(1)输出(2)16(3)24(4)关系(5)数据定义语言(6)对象(7)指针或指针变量(8)地址(9)构造(10)静态(11)private(12)Base(j)(13)PhoneNumberoperator<<(14)virvaldoublearea()(15)templateclassdataClassn2008年9月全国计算机等级考试二级笔试试卷C++语言程序设计(考试时间90分钟,满分100分)一、选择题(每小题2分,共70分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是A)12345ABCDEB)EDCBA54321C)ABCDE12345D)54321EDCBA(2)下列叙述中正确的是A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D)循环队列中元素的个数是由队头指针和队尾指针共同决定(3)在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是A)O(n)B)O(n2)C)O(log2n)D)O(nlog2n)(4)下列叙述中正确的是A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间(5)数据流图中带有箭头的线段表示的是A)控制流B)事件驱动C)模块调用D)数据流(6)在软件开发中,需求分析阶段可以使用的工具是A)N-S图B)DFD图C)PAD图D)程序流程图(7)在面向对象方法中,不属于“对象”基本特点的是A)一致性B)分类性C)多态性D)标识唯一性(8)一间宿舍可住多个学生,则实体宿舍和学生之间的联系是A)一对一B)一对多C)多对一D)多对多(9)在数据管理技术发展的三个阶段中,数据共享最好的是A)人工管理阶段B)文件系统阶段C)数据库系统阶段D)三个阶段相同n(10)有三个关系R、S和T如下:RSTAB BC ABCm1 13 m13n2 35 由关系R和S通过运算得到关系T,则所使用的运算为A)笛卡尔积B)交C)并D)自然连接(11)在下列原型所示的C++函数中,按“传值”方式传递参数的是()。A)voidf1(intx); B)voidf2(int*x);C)voidf3(constint*x); D)voidf4(int&x); (12)在C++中,编译系统自动为一个类生成缺省构造函数的条件是()。A)该类没有定义任何有参构造函数B)该类没有定义任何无参构造函数C)该类没有定义任何构造函数D)该类没有定义任何成员函数(13)在一个派生类的成员函数中,试图调用其基类的成员函数“voidf();”,但无法通过编译。这说明()。 A)f()是基类的私有成员C)派生类的继承方式为私有B)f()是基类的保护成员D)派生类的继承方式为保护 (14)下列关于运算符重载的叙述中,错误的是()。A)有的运算符可以作为非成员函数重载B)所有的运算符都可以通过重载而被赋予新的含义C)不得为重载的运算符函数的参数设置默认值D)有的运算符只能作为成员函数重载(15)下列关于模板的叙述中,错误的是()。A)调用模版函数时,在一定条件下可以省略模板实参B)可以用int、double这样的类型修饰符来声明模版参数C)模板声明中的关键字class都可以用关键字typename替代D)模板的形参表中可以有多个参数(16)要利用C++流进行文件操作,必须在程序中包含的头文件是()。 A)iostreamB)fstreamC)strstreamD)iomanip(17)下列字符串中不能作为C++标识符使用的是( )。A)WHILEB)userC)_lvarnD)9stars(18)下列语句中错误的是( )。A)constinta;B)constinta=10;C)constint*point=0;D)constint*point=newint(10);(19)有如下程序:#include usingnamespacestd;intmain(){ intsum; for(inti=0;i<6;i+=3){ sum=i; for(intj=i;j<6;j++)sum+=j; } cout< usingnamespacestd;classSample{public: Sample(){} ~Sample(){cout<<'*';}};intmain(){ Sampletemp[2],*pTemp[2]; returnn0;}执行这个程序输出星号(*)的个数为( )。 A)1 B)2 C)3 D)4 (23)下列选项中,与实现运行时多态性无关的是( )。A)重载函数 B)虚函数 C)指针 D)引用(24)下列运算符函数中,肯定不属于类Value的成员函数的是()。 A)Valueoperator+(Value);C)Valueoperator*(int); B)Valueoperator-(Value,Value);D)Valueoperator/(Value); (25)下列模板声明中,有语法错误的是( )。A)templateTfun(Tx){returnx;}B)templateTfun(Tx,intn){returnx*n;}C)templateTfun(T*p){return*p;}D)templateTclassA{Tn;};(26)在语句“cout<<'A';”中,cout是( )。 A)类名C)函数名(27)有如下程序:#include usingnamespacestd;classMyClass{public: MyClass(inti=0){cout<<1;} MyClass(constMyClass&x){cout<<2;} B)对象名D)C++的关键字 MyClass&operator=(constMyClass&x){cout<<3;return*this;} ~MyClass(){cout<<4;}};intmain(){ MyClassobj1(1),obj2(2),obj3(obj1);n return0:}运行时的输出结果是( )。A)112444B)11114444C)121444D)11314444(28)有如下程序:#includeusingnamespacestd;classMyClass{public: MyClass(intx):val(x){} voidSet(intx){val=x;} voidPrint()const{cout<<"val="<=b中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为()。A)a.operator>=(b)B)b.operatotr>=(a)C)operator>=(a,b)D)operator>=(b,a)(34)当使用ofstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为()。 A)iosbase::in B)ios_base::binary C)ios_base::in|ios_base::outnD)ios_base::out(35)在一个抽象类中,一定包含有()。A)虚函数B)纯虚函数C)模板函数 D)重载函数二、填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。(1)对下列二叉树进行中序遍历的结果【1】。ABCEDFXZY (2)按照软件测试的一般步骤,集成测试应在【2】测试之后进行。(3)软件工程三要素包括方法、工具和过程,其中,【3】支持软件开发的各个环节的控制和管理。(4)数据库设计包括概念设计、【4】和物理设计。(5)在二维表中,元组的【5】不能再分成更小的数据项。(6)当使用关键字___________作为函数返回类型时,该函数不返回任何值。(7)已知数组a中有n个元素,下列语句将数组a中从下标xl开始的k个元素移动到从下标x2开始的k个元素中,其中0<=xl=xl;i--) a[___________]=a[i];(8)有如下程序:#include usingnamespacestd;intfun1(intx) {return++x;}intfun2(int&x){return++x;}intmain(){ intx=1,y=2; y=fun1(fun2(x)); cout< usingnamespacestd;classpumpkin{public: npumpkin(){++count;} ~pumpkin(){--count;} staticvoidtotal_count(){ cout< usingnamespacestd;classWages{ //“工资”类 doublebase; //基本工资 doublebonus; //奖金 doubletax; //税金public: Wages(doubleCBase,doubleCBonus,doubleCTax): base(CBase),bonus(CBonus),tax(CTax){} doublegetPay()const; //返回应付工资额 Wagesoperator+(Wagesw)const; //重载加法};doubleWages::getPay()const{returnbase+bonus-tax;}WagesWages::operator+(Wagesw)const{ returnWages(base+w.base,bonus+w.bonus,tax+w.tax);}intmain(){ Wageswl(2000,500,100),w2(5000,1000,300); cout<<(wl+w2).getPay0<usingnamespacestd; classPet{ charname[10];public: Pet(char*name){strcpy(this->name,name);} constchar*getName()const{returnname;} virtualvoidcall()const=0;};classDog:publicPet{public: Dog(char*name):Pet(name){} voidcall()const{cout<<"汪汪叫";}};nclassCat:publicPet{public: Cat(char*name):Pet(name){} voidcall()const{cout<<"喵喵叫";}};intmain(){ Pet*pet1=newDog("哈克"),*pet2=newCat("吉米"); cout<getName();pet1->call();cout<getName();pet2->call();cout<
查看更多