2007-2013全国计算机二级C++等级考试真题及答案(共39页).doc
精选优质文档-倾情为你奉上2007年9全国计算机等级考试二级笔试试卷一、选择题(每小题2分,共70分)(11)在函数中,可以用auto,extem,register,和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是 A A auto B extem C register D static(12)对于一个类定义,下列叙述中错误的是 B A 如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数 B 如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数 C 如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数 D 如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数(13)如果派生类以public方式继承基类,则原基类的protected成员和public成员在派生类中的访问类型分别是 D A public和 public B public和protected C protected 和 public D protected 和 protected(14)下列运算符函数中肯定不属于类FunNumber的成员函数的是 D A int operator-(FunNumber) B FunNumber operator-() C FunNumber operator-(int) D int operator (FunNumber)(15)C+中的模板包括 C A 对象模板和函数模板 B 对象模板和类模板 C 函数模板和类模板 D 变量模板和对象模板(16)如果调用C+流进行输入输出,下面的叙述中正确的是 A A 只能借助于流对象进行输入输出 B 只能进行格式化输入输出 C 只能借助于cin和cout进行输入输出 D 只能使用运算符 和 进行输入输出(17)下列符号中不属于C+关键字的是 D A friend B namespace C continue D byte(18)下列各组的量申明中,含义相同的一组是 B A unsigned long int 和 long B signed short int 和 short B unsigned short 和 short D short int 和int(19) 必须用一对打括号括起来的程序段是 D A switch 语句中的case标号语句 B if 语句的分支 C 循环语句的循环体 D 函数的函数体(20)语句的int*p=&k定义于指针P,于这个语句等效的语句序列是 A A int*p;p=&k B int*p;p=k C int*p;*p=&k D int*p;*p=k(21)关于函数重载,下列叙述中错误的是 C A 重载函数的函数名必须相同 B 重载函数必须在函数个数或类型上有所不同 C 重载函数的返回值类型必须相同 D 重载函数的函数体可以有所不同(22)有如下头文件 Int f1(); Static int f2(); Class MA Public Int f3(); Static int f4();(静态函数) ;在所描述的函数中,具有隐含的this指针的是 C A f1 B f2 C f3 D f4(23)派生类的成员函数不能访问基类的 C A 共有成员和保护成员 B 共有成员 C 私有成员 D 保护成员(24)下列关于运算符重载的描述中,正确的是 A A 运算符重载为成员函数时,若参数表中五参数,重载的是一元运算符 B 一元运算符只能作为成员函数重载 C 二元运算符重载为非成员函数时,参数表中有一个参数 D C+中可以重载所有的运算符(25)下列关于类模板的模板参数的叙述中,错误的是 D A 模板参数可以作为数据成员的类型 B 模板参数可以作为成员函数的返回类型 C 模板参数可以作为成员函数的参数类型 D 模板函数不能作为成员函数的局部变量的类型(26)已知一程序运行后执行的第一个输出操作是 B Cout<<setw(10)<<setfill(*)<<1234 则此操作的输出结构是 A 1234 B *1234 C *1234 D 1234*(27)有如下程序 #include <iostrcam> Using namespace std; Class myclass Public: MyClass()+count; MyClass()-count; Static int getcount()return count;Private Static int count;Int MyClass:count=0;Int main() Myclass obj; Cout<<obj,getCount(); MyClass*ptr=new MyClass; Cout<<MyClass:getcount(); Delete ptr; Cout<<MyClass:gercount(); Return(); 程序的输出结果是 AA 121 B 232 C 221 D 122程序的输出结果是 C A val=10 const:val=20 B const:val=10 const:val=20 C const:val=10 val=20 D val=10 val=20(29)有如下程序 #include <iostream> Using namespace std; Class part Public; Part(int x=():val(x)cout<<val; -part()cout<<val; Private; Int val; ; Class whole Public; Whole(int x,int y,int z=0):p2(x),p1(y),val(z)cout<<val; Whole()count<<val; Private; Part p1,p2; Int val; ; Int maint Whole obj(1,2,3); Resturn(); 程序输出的结果是 DA B C 213 (30) 有如下程序: #include <iostream> Using namespace std; Class base Public: Base(int x=0)cout<<x; ; Class derived : public base Public: Derivedrin(x=y)cout<<x; Priblic: Base val; ; Int main() Derived d(!); Return(); 程序的输出结果是 C A 0 B 1 C 01 D 001(31)若有如下类定义: Classs B Void fun1() Protected; Double varl; Public: Void fun2() ; Class D:public B Protected; Void fun3() ;已知obj是类D的对象,下列语句中不违反成员访问控制的权限的是 C A obj.fun1(); B obj.var1; C obj.fun2(); D obj.fun3();(32)有如下程序: #include<iostream> Using namespace sid; Class base Public; Void output()cout<<1; Virtual void print() cout<<B; ; Class derived:public base Public: Void output()cout<<2; Void print()cout<<D; ; Int main() Base * passnew derived; Ptr->output(); Ptr->print(); Delete ptr; Return(); 程序的输出结果是 D A 1B B 1D C 2B D 2D33.下列是重载乘法运算的函数原型声明,其中错误的是 A A myclass operator*(double,double);B myclass operator*(double,myclass);C myclass operator*(myclass,double);D myclass operator*( myclass , myclass);*是二元运算符,而且标准库里面已经有double*double的运算符定义,返回值为double,所以A的重载是错误的 34.A (35) 有如下程序: #include <iostream> using namespace std; class B public: virtual void show()cout<<"b" ; class D:public B public: void show()cout<<"D" ; void fun1(B*ptr)ptr->show(); void fun2(B &ref)ref.show(); void fun3(B b)b.show(); void main() B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); 程序的输出结果是 D A DBD B BBD C DBB D Dbb二、填空题(每空2分,共三十分)(6).在有定义语句:int a=3,b=2,c=1;则表达式a<b?a:b的值是_(7).执行下列语句后,变量sum的值是_.Int sum =0;For (int j=I;j<=I;j+) For (int j=I;j<=I;j+) Sum+;(8).已知有函数f的定义如下: Int f() Static int -6; s-2; return s 则在某程序中第二次执行函数用语句f();时,函数f的返回值是_.(9)已知如下程序得输出结果时23,请将划线处缺失得部分补充完整。 #include<iostream> Using namespace std; Class myclass Public: Void print() coutcout<<23; Int main() Myclass*p=new myclass(); _print(); Return(); Class sample Public: Sample() _ (14)请将如下程序补充完整,使得输出结果为bbaa #include <iostream> Using namespace std; Class A Public: _cout<<”aa”; ; Class B :public A Public: B()cout<<”bb”; ; Int main () B*p=new B; Delete p; Return(); (15)请将下列栈类stack补充完整 Class stack Private; Int plist100; /int 数组,用于存放栈的元素 Int top; /栈顶元素(数组下标) Public: Stack():top(0) Void push(sons int &item); /新元素item压入栈 Int pop(void); /将栈顶元素弹出栈 ; Void stack:pbsh(const int &item) If (top =99) /如果栈满,程序结束 Exit(1); Top+; /栈顶指针增1 _【15】_; Int stack:pop() If (top<0) /如果栈空,程序结束 Exit(1); Return plishtop-; 参考答案6.2 7.6 8.4 9.(*p) 10.ABBA 11.void Base:fun()12.virtual display()=0; 14.-A() 15.pListtop=item2008年9月计算机等级考试一、选择题(每小题2分,共70分)(11)在下列原型所示的 C+函数中,按“传值”方式传递参数的是(A)。A)void f1(int x); B)void f2(int*x); C)void f3(const int*x); D)void f4(int&x);(12)在 C+中,编译系统自动为一个类生成缺省构造函数的条件是(A)。A)该类没有定义任何有参构造函数 B)该类没有定义任何无参构造函数C)该类没有定义任何构造函数 D)该类没有定义任何成员函数(13)在一个派生类的成员函数中,试图调用其基类的成员函数“void f();”,但无法通过编译。这说明(C)。A)f()是基类的私有成员 C)派生类的继承方式为私有B)f()是基类的保护成员 D)派生类的继承方式为保护(14)下列关于运算符重载的叙述中,错误的是(B)。A)有的运算符可以作为非成员函数重载B)所有的运算符都可以通过重载而被赋予新的含义C)不得为重载的运算符函数的参数设置默认值D)有的运算符只能作为成员函数重载(15)下列关于模板的叙述中,错误的是(D)。A)调用模版函数时,在一定条件下可以省略模板实参B)可以用 int、double 这样的类型修饰符来声明模版参数C)模板声明中的关键字 class 都可以用关键字 typename 替代D)模板的形参表中可以有多个参数(16)要利用 C+流进行文件操作,必须在程序中包含的头文件是(B)。A)iostreamB)fstream C)strstreamD)iomanip(17)下列字符串中不能作为 C+标识符使用的是(B)。A)WHILE B)user C)_lvar D)9stars(18)下列语句中错误的是(D)。A)const int a; B)const int a=10; C)const int*point=0; D)const int*point=new int(10);(19)有如下程序:#include<iostream> using namespace std;int main()int sum;for(int i=0; i<6; i+=3)sum=i; for(int j = i; j<6; j+)sum+=j; cout<<sum<<end1; return 0;运行时的输出结果是(A)。A)3 B)10 C)12 D)15(20)下列语句中,正确的是(D)。A)char*myString="Hello-World!" B)char myString="Hello-World!"C)char myString11="Hello-World!" D)char myString12="Hello-World!"(21)若已经声明了函数原型“void fun(int a, double b=0.0);”,则下列重载函数声明中正确的是(C)。A)void fun(int a=90, double b=0.0); B)int fun(int a, double B); C)void fun(double a, int B); D)bool fun(int a, double b = 0.0);(22)有如下程序:#include<iostream> using namespace std;class Samplepublic:Sample() Sample()cout<<'*'int main()Sample temp2, *pTemp2; return 0;执行这个程序输出星号(*)的个数为(B)。A)1B)2C)3D)4(23)下列选项中,与实现运行时多态性无关的是(A)。A)重载函数 B)虚函数 C)指针 D)引用(24)下列运算符函数中,肯定不属于类 Value 的成员函数的是(B)。A)Value operator+(Value); B)Value operator-(Value, Value);C)Value operator*(int); D)Value operator/(Value); (25)下列模板声明中,有语法错误的是(D)。A)template<typename T>T fun(T x)return x;B)template<typename T>T fun(T x, int n)return x*n;C)template<class T>T fun(T *p)return *p;D)template<class T>T classAT n;(26)在语句“cout<<'A'”中,cout 是(B)。A)类名B)对象名 C)函数名D)C+的关键字(27)有如下程序:#include<iostream> using namespace std;class MyClass public: MyClass(int i=0)cout<<1;MyClass(const MyClass&x)cout<<2;MyClass& operator=(const MyClass&x)cout<<3; return*this; MyClass()cout<<4;int main()MyClass obj1(1),obj2(2),obj3(obj1); return 0:运行时的输出结果是(A)。A) B) C)D)(28)有如下程序:#include<iostream>using namespace std;class MyClass public:MyClass(int x):val(x)void Set(int x)val=x; void Print()constcout<<"val="<<val<<'t'private: int val; ;int main()const MyClass obj1(10);MyClass obj2(20);obj1.Print(); /语句 1obj2.Print(); /语句 2obj1.Set(20); /语句 3obj2.Set(30); /语句 4return 0;其主函数中错误的语句是(C)。 A)语句 1B)语句 2 C)语句 3D)语句 4(29)在类声明中,紧跟在“public:”后声明的成员的访问权限是(A)。A)私有B)公有C)保护D)默认(30)对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是(D)。A)公有或私有B)私有 C)保护或私有D)公有或保护(31)定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为(A)。A)私有继承 B)非私有继承 C)保护继承 D)公有继承(32)建立一个有成员对象的派生类对象时,各构造函数体的执行次序为(C)。A)派生类、成员对象类、基类 B)成员对象类、基类、派生类C)基类、成员对象类、派生类 D)基类、派生类、成员对象类(33)如果表达式 a>=b 中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为(A)。A)a.operator>=(b) B)b.operatotr>=(a) C)operator>=(a,b))operator>=(b,a)(34)当使用 ofstream 流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为(B)。A)ios base:in B)ios_base:binary C)ios_base:in|ios_base:out D)ios_base:out(35)在一个抽象类中,一定包含有(C)。A)虚函数 B)纯虚函数 C)模板函数 D)重载函数二、填空题(每空2分,共30分) (6)当使用关键字_void_作为函数返回类型时,该函数不返回任何值。(7)已知数组 a 中有 n 个元素,下列语句将数组 a 中从下标 x1 开始的 k 个元素移动到从下标 x2 开始的 k 个元素中,其中 0<=x1<x2<n,x2+k<n,请将下列语句补充完整。for (int i = x1+k-1; i>=x1; i-)a_x2+k-1_=ai; (8)有如下程序:#include<iostream> using namespace std;int fun1(int x) return+x; int fun2(int &x) return+x;int main()int x=1,y=2; y=fun 1(fun2(x);cout<<x<<','<<y; return 0: 程序的输出结果是_2,3_。(9)有如下程序:#include<iostream> using namespace std;class pumpkin public:pumpkin()+count;pumpkin()-count;static void total_count()cout<<count<<"pumpkin(s)"<<endl; private: static int count; ;int pumpkin:count=0;int main()pumpkin pl10;pumpkin:total_count();return 0; 这个程序的输出结果是_10pumpkin(s)_。(10)有如下递归函数:int Fun(int n) if(n<=1) return 1;_else return n*Fun(n-1);_请补充完整,使得函数 Fun 能够正确计算形参 n 的阶乘。(11)请在下列程序中的空格处填写正确的语句:class Samplepublic:Sample() Sample() void SetData(int data) /将 Sample 类成员变量 data 设置成形参的值_Sample:data=data_ /注意形参与成员同名 private: int data;(12)有如下类定义,请将Sample类的拷贝构造函数补充完整。class Sample public:Sample()Sample() if(p) delete p;)Sample (const Sample& s)_p=new int;*p=s.*p_ void SetData(int data) p=new int(data);private: int*p; ;(13)重载加法运算符“+”,其函数名是_operator +_。(14)有如下程序:#include<iostream> using namespace std;class Wages /"工资"类double base; /基本工资double bonus; /奖金double tax; /税金public: Wages(double CBase, double CBonus, double CTax):base(CBase), bonus(CBonus), tax(CTax)double getPay()const; /返回应付工资额Wages operator+(Wages w)const; /重载加法;double Wages:getPay()constreturn base+bonus-tax;Wages Wages:operator+(Wages w)const return Wages(base+w.base, bonus+w.bonus, tax+w.tax);int main()Wages wl(2000,500,100),w2(5000,1000,300);cout<<(wl+w2).getPay()<<endl; return 0;(15)有如下程序:#include<iostream>using namespace std; class Petchar name10;public:Pet(char*name)strcpy(this->name, name);const char*getName()const return name;virtual void call()const=0; class Dog: public Petpublic:Dog(char*name):Pet(name)void call()constcout<<"汪汪叫"class Cat:public Petpublic:Cat(char*name):Pet(name)void call()constcout<<"喵喵叫"int main() Pet *pet1=new Dog("哈克"), *pet2=new Cat("吉米");cout<<pet1->getName();pet1->call();cout<<end1;cout<<pet2->getName();pet2->call();cout<<end1;return 0;程序的输出结果是_哈克汪汪叫_吉米喵喵叫_2008年9月二级 C+笔试试卷参考答案二、填空题(6)void (7)X2+k-1 (8)2,3 (9)10pumpkin(s) (10)else return n*Fun(n-1);(11)Sample:data (12)p=new int; *p=s.*p; (13)operator + (14)81002009年9月全国计算机二级笔试C+一、 选择题(1-10,21-40每题2分,11-20每题1分)(11) 已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则 DA)FA必须定义在FB之前 B)FB必须定义在FA之前C)若FA定义在FB之后,则FA的原型必须出现在FB的定义之前D)若FB定义在FA之后,则FB的原型必须出现在FA的定义之前(12)有如下两个类定义 Cclass AA;class BB AA v1,*v2; BB v3; int *v4;其中有一个成员变量的定义是错误的,这个变量是A)v1 B)v2 C)v3 D)v4由于AA和BB都是类的定义,在类定义中无法声明一个自己的对象,所以在BB的类定义中,企图声明一个BB类的对象,是非法的。(13)有如下类定义: Bclass XX int xdata;public: XX(int n=0) : xdata (n) ;class YY : public XX int ydata;public: YY(int m=0, int n=0) : XX(m), ydata(n) ;YY类的对象包含的数据成员的个数是A)1 B)2 C)3 D)4(14) 下列有关运算符函数的描述中,错误的是 CA)运算符函数的名称总是以operator为前缀B)运算符函数的参数可以是对象C)运算符函数只能定义为类的成员函数(友元函数)D)在表达式中使用重载的运算符相当于调用运算符重载函数(15)下列关于模板形参的描述中,错误的是 BA)模板形参表必须在关键字template之后B)模板形参表必须用括弧( )括起来C)可以用class修饰模板形参D)可以用typename修饰模板形参(16)在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是 A