(完整)全国计算机二级C++等级考试真题及答案,推荐文档_第1页
(完整)全国计算机二级C++等级考试真题及答案,推荐文档_第2页
(完整)全国计算机二级C++等级考试真题及答案,推荐文档_第3页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2007 年 9 全国计算机等级考试二级笔试试卷一、选择题(每小题 2 分,共 70 分)(11) 在函数中,可以用 auto,extem,register,和 static 这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是 aa autob extemc registerd static(12) 对于一个类定义,下列叙述中错误的是 ba 如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数b 如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数c 如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数d 如果已经定义了构造函数和拷贝

2、构造函数,编译器不会生成任何构造函数(13) 如果派生类以 public 方式继承基类,则原基类的 protected 成员和 public 成员在派生类中的访问类型分别是 da public 和 publicb public 和 protectedc protected 和 publicd protected 和 protected(14) 下列运算符函数中肯定不属于类 funnumber 的成员函数的是 d a int operator-(funnumber)b funnumber operator-()c funnumber operator-(int) d int operator (

3、funnumber)(15) c+中的模板包括 ca 对象模板和函数模板b 对象模板和类模板c 函数模板和类模板d 变量模板和对象模板(16)如果调用 c+流进行输入输出,下面的叙述中正确的是 aa 只能借助于流对象进行输入输出b 只能进行格式化输入输出c 只能借助于 cin 和 cout 进行输入输出d 只能使用运算符 和 进行输入输出(17) 下列符号中不属于 c+关键字的是 da friendb namespacec continued byte(18) 下列各组的量申明中,含义相同的一组是 ba unsigned long int 和 longb signed short int 和

4、short b unsigned short 和 shortd short int 和 int(19) 必须用一对打括号括起来的程序段是 da switch 语句中的 case 标号语句b if 语句的分支c 循环语句的循环体d 函数的函数体(20) 语句的 int*p=&k 定义于指针 p,于这个语句等效的语句序列是 a a int*p;p=&kb int*p;p=kc int*p;*p=&kd int*p;*p=k (21)关于函数重载,下列叙述中错误的是 ca 重载函数的函数名必须相同b 重载函数必须在函数个数或类型上有所不同c 重载函数的返回值类型必须相同d 重载函数的函数体可以有所不

5、同(22) 有如下头文件int f1(); static int f2(); class ma publicint f3();static int f4();(静态函数);在所描述的函数中,具有隐含的 this 指针的是 ca f1b f2c f3d f4(23) 派生类的成员函数不能访问基类的 ca 共有成员和保护成员b 共有成员c 私有成员d 保护成员(24) 下列关于运算符重载的描述中,正确的是 aa 运算符重载为成员函数时,若参数表中五参数,重载的是一元运算符b 一元运算符只能作为成员函数重载c 二元运算符重载为非成员函数时,参数表中有一个参数d c+中可以重载所有的运算符(25) 下

6、列关于类模板的模板参数的叙述中,错误的是 da 模板参数可以作为数据成员的类型b 模板参数可以作为成员函数的返回类型c 模板参数可以作为成员函数的参数类型d 模板函数不能作为成员函数的局部变量的类型(26) 已知一程序运行后执行的第一个输出操作是 b coutsetw(10)setfill(*)1234则此操作的输出结构是a 1234b *1234 c *1234d 1234*(27)有如下程序#include using namespace std;class myclass public:myclass()+count;myclass()-count;static int getcount

7、()return count; privatestatic int count;int myclass:count=0;int main()myclass obj; coutobj,getcount(); myclass*ptr=new myclass;coutmyclass:getcount(); delete ptr; coutmyclass:gercount(); return();程序的输出结果是aa 121b 232c 221d 122程序的输出结果是 ca val=10const:val=20b const:val=10const:val=20 c const:val=10val=

8、20d val=10val=20(29) 有如下程序#include using namespace std;class partpublic;part(int x=():val(x)coutval;-part()coutval; private;int val;class whole public;whole(int x,int y,int z=0):p2(x),p1(y),val(z)coutval; whole()countval;private;part p1,p2;int val;int maintwhole obj(1,2,3);resturn();程序输出的结果是 da 1233

9、21b 213312c 213(30) 有如下程序:#include using namespace std; class basepublic:base(int x=0)coutx;class derived : public base public:derivedrin(x=y)coutx; priblic:base val;int main()derived d(!);return();程序的输出结果是 ca 0b 1c 01d 001(31)若有如下类定义:classs b void fun1() protected;double varl;public:void fun2();cla

10、ss d:public b protected;void fun3();已知 obj 是类 d 的对象,下列语句中不违反成员访问控制的权限的是 ca obj.fun1();b obj.var1;c obj.fun2();d obj.fun3(); (32)有如下程序:#include using namespace sid; class basepublic;void output()cout1;virtual void print() coutb;class derived:public base public:void output()cout2; void print()coutoutp

11、ut();ptr-print();delete ptr;return();程序的输出结果是 da 1bb 1dc 2bd 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 的重载是

12、错误的34.a(35) 有如下程序:#include using namespace std; class bpublic:virtual void show()coutb;class d:public b public:void show()coutshow(); 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);程序的输出结果是 da dbdb bbdc dbbd dbb二、填空题(每空 2 分,共三十分)(6). 在有定义语句:in

13、t a=3,b=2,c=1;则表达式 ab?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 using namespace std; class myclass public:void print() co

14、utcout23;int main()myclass*p=new myclass(); print();return(); class sample public:sample()(14) 请将如下程序补充完整,使得输出结果为 bbaa #include 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 stackprivate;int plist1

15、00;/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 (top0)/如果栈空,程序结束exit(1);return plishtop-;参考答案6.27.68.49.(*p)10.abba11.void bas

16、e: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)该类没有定义任何成

17、员函数(13) 在一个派生类的成员函数中,试图调用其基类的成员函数“void f();”,但无法通过编译。这说明(c)。a)f()是基类的私有成员c)派生类的继承方式为私有b)f()是基类的保护成员d)派生类的继承方式为保护(14) 下列关于运算符重载的叙述中,错误的是(b)。 a)有的运算符可以作为非成员函数重载 b)所有的运算符都可以通过重载而被赋予新的含义c)不得为重载的运算符函数的参数设置默认值 d)有的运算符只能作为成员函数重载(15) 下列关于模板的叙述中,错误的是(d)。a) 调用模版函数时,在一定条件下可以省略模板实参b) 可以用 int、double 这样的类型修饰符来声明模

18、版参数c) 模板声明中的关键字 class 都可以用关键字 typename 替代d) 模板的形参表中可以有多个参数(16) 要利用 c+流进行文件操作,必须在程序中包含的头文件是(b)。a)iostreamb)fstreamc)strstreamd)iomanip(17) 下列字符串中不能作为 c+标识符使用的是(b)。 a)whileb)userc)_lvard)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) 有如下程序

19、:#include using namespace std; int main()int sum;for(int i=0; i6; i+=3) sum=i;for(int j = i; j6; j+)sum+=j;coutsumend1; return 0;运行时的输出结果是(a)。a)3b)10c)12d)15(20) 下列语句中,正确的是(d)。a)char*mystring=hello-world!;b)char mystring=hello-world!; c) char mystring11=hello-world!;d)char mystring12=hello-world!;(2

20、1) 若已经声明了函数原型“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) 有如下程序:#includeusing namespace std; class sample public:sample()sample()cout*;int main()sample temp2, *pte

21、mp2; 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) templatet fun(t x)return x; b)

22、templatet fun(t x, int n)return x*n; c)templatet fun(t *p)return *p; d) templatet classat n;(26) 在语句“couta;”中,cout 是(b)。a)类名b)对象名c)函数名d)c+的关键字(27) 有如下程序:#includeusing namespace std; class myclasspublic:myclass(int i=0)cout1; myclass(const myclass&x)cout2; myclass& operator=(const myclass&x)cout3; re

23、turn*this;myclass()cout4;int main()myclass obj1(1),obj2(2),obj3(obj1); return 0:运行时的输出结果是(a)。a)112444b)11114444c)121444d)11314444(28) 有如下程序:#includeusing namespace std; class myclass public:myclass(int x):val(x) void set(int x)val=x;void print()constcoutval=val=b 中的“=”是作为非成员函数重载的运算符,则可以等效地表示为(a)。a)a

24、.operator=(b)b)b.operatotr=(a)c)operator=(a,b))operator=(b,a)(34) 当使用 ofstream 流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为(b)。a)ios base:inb)ios_base:binaryc)ios_base:in|ios_base:outd) ios_base:out(35) 在一个抽象类中,一定包含有(c)。a) 虚函数b)纯虚函数c)模板函数d)重载函数二、填空题(每空 2 分,共 30 分)(6) 当使用关键字 void 作为函数返回类型时,该函数不返回任何值。(7) 已知数组 a 中有

25、n 个元素,下列语句将数组 a 中从下标 x1 开始的 k 个元素移动到从下标 x2 开始的 k 个元素中,其中 0=x1x2n,x2+k=x1; i-) a_x2+k-1_=ai;(8) 有如下程序:#includeusing 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); coutx,y; return 0:程序的输出结果是_2,3_。(9) 有如下程序:#includeusing namespace std; class p

26、umpkin public: pumpkin()+count;pumpkin()-count; static void total_count()coutcountpumpkin(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); 请补充完整,使

27、得函数 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 in

28、t;*p=s.*p void setdata(int data) p=new int(data); private:int*p;(13) 重载加法运算符“+”,其函数名是 operator +_。(14) 有如下程序:#includeusing namespace std;class wages /工资类double base; /基本工资double bonus; /奖金double tax; /税金public:wages(double cbase, double cbonus, double ctax):base(cbase), bonus(cbonus), tax(ctax)doubl

29、e 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)有如下程序: #incl

30、udeusing 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 pet public:dog(char*name):pet(name) void call()constcout汪汪叫;class cat:public pet public:cat(char*name):pet(name)void call()c

31、onstcout喵喵叫;int main()pet*pet1=new dog(哈克),*pet2=new cat(吉米); coutgetname();pet1-call();coutend1;coutgetname(); pet2-call(); coutend1;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)op

32、erator +(14)81002009 年 9 月全国计算机二级笔试 c+1、选择题(1-10,21-40 每题 2 分,11-20 每题 1 分)(11) 已知函数 fa 调用 fb,若要把这两个函数定义在同一个文件中,则 d a)fa 必须定义在 fb 之前b)fb 必须定义在 fa 之前c) 若 fa 定义在 fb 之后,则 fa 的原型必须出现在 fb 的定义之前d) 若 fb 定义在 fa 之后,则 fb 的原型必须出现在 fa 的定义之前(12) 有如下两个类定义 c class aa;class bbaa v1,*v2;bb v3;int *v4;其中有一个成员变量的定义是错误

33、的,这个变量是a)v1b)v2c)v3d)v4由于 aa 和 bb 都是类的定义,在类定义中无法声明一个自己的对象,所以在 bb 的类定义中,企图声明一个 bb 类的对象,是非法的。(13) 有如下类定义: b class xxint 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)1b)2c)3d)4(14) 下列有关运算符函数的描述中,错误的是ca)运算符函数的名称总

34、是以operator为前缀b) 运算符函数的参数可以是对象c)运算符函数只能定义为类的成员函数(友元函数)d)在表达式中使用重载的运算符相当于调用运算符重载函数(15) 下列关于模板形参的描述中,错误的是 b a)模板形参表必须在关键字 template 之后b)模板形参表必须用括弧( )括起来c) 可以用 class 修饰模板形参d)可以用 typename 修饰模板形参(16) 在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是 a a) ios_base:curb)ios_base:begc)ios_base:outd)ios_base:end(17) 下列字符串可以用作 c+

35、标识符的是 da)2009varb)gotoc)test - 2009d)_123(18) 下列枚举类型的定义中,包含枚举值 3 的是 a a)enum test red, yellow, blue, black; b)enum test red, yellow=4, blue, black; c)enum test red=-1, yellow,blue, black; d)enum test red, yellow=6, blue, black;(19) 有如下程序段: c int i=1;while (1) i+;if(i = 10) break;if(i%2 = 0) cout *;执

36、行这个程序段输出字符*的个数是a)10b)3c)4d)5(20) 已知数组 arr 的定义如下: d int arr5 = 1,2,3,4,5;下列语句中输出结果不是 2 的是a)cout *arr+1 endl;b)cout *(arr+1)endl;c)cout arr1endl;d)cout *arr endl;(21) 计算斐波那契数列第 n 项的函数定义如下:b int fib(int n)if (n = 0) return 1; else if (n = 1) return 2;else return fib(n-1)+fib(n-2);若执行函数调用表达式 fib(2),函数 f

37、ib 被调用的次数是a)1b)2c)3d)4(22) sample 是一个类,执行下面语句后,调用 sample 类的构造函数的次数是 d sample a2, *p = new sample;a)0b)1c)2d)3(23) 下列关于虚基类的描述中,错误的是c a)使用虚基类可以消除由多继承产生的二义性b)构造派生类对象时,虚基类的构造函数只被调用一次c)声明“class b : virtual public a”说明类 b 为虚基类d)建立派生类对象时,首先调用虚基类的构造函数(24) 将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是b a)不合法的运算符b)一元运算符c)无操

38、作数的运算符d)二元运算符(25) 有如下模板声明: dtemplate class a;下列声明中,与上述声明不等价的是a)template class a;b)template classa;c)template class a;d)template classa;(26) 下列关于 c+流的描述中,错误的是 aa)couta表达式可输出字符 ab)eof()函数可以检测是否到达文件尾c)对磁盘文件进行流操作时,必须包含头文件 fstreamd)以 ios_base:out 模式打开的文件不存在时,将自动建立一个新文件27) 有 如 下 程 序 :c #include using name

39、space std; class toypublic:toy(char* _n) strcpy (name,_n); count+;toy() count-; char* getname() return name; static int getcount() return count; private:char name10; static int count;int toy:count=0; int mail()toy t1(“snoopy”),t2(“mickey”),t3(“barbie”); coutt1.getcount()endl;return 0;运行时的输出结果是a)1b)2

40、c)3d)运行时出错(28)有如下程序 b#include using namespace std; class a public:a(int i):rl(i) void print( ) couter1-;void print( ) const coutcr1*r1-; private:int rl;int main()a al(2);const a a2(4);al.print();a2.print(); return 0;运行时的输出结果是a)运行时出错b)e2-c16-c)c4-c16-d)e2-e4-29) 有 如 下 程 序 : d #includeusing namespace

41、std; class namechar name20; public:name()strcpy(name,);cout?;name(char *fname) strcpy(name,fname);cout?;int main()name names3=name(“张三”),name(“李四”); return 0;运行此程序输出符号?的个数是a)0b)1c)2d)3(30) 有如下程序: a #includeusing namespace std; public:aa() cout1; ;class bb: public aa int k;public:bb():k(0) cout2; bb(

42、int n):k(n) cout3;int main() bb b(4), c;return 0;运行时的输出结果是a)1312d)132c)32d)141(31) 有如下程序:b #includeusing namespace std; class c1public:c1() cout1; ;class c2: public c1 public:c2() cout2; ;int main() c2 cb2; c1 *cb1; return 0;运行时的输出结果是a)121b)21c)211d)12(32) 有如下程序 d #includeusing namespace std;class p

43、ublication /出版物类char name30;public:publication(char *name=未知名称) strcpy(this-name,name);const char * getname()const return name; virtual const char * gettype()const return 未知类型;class book: public publication /书类public:book(char *name): publication(name)virtual const char * gettype()const return 书;voi

44、d showpublication( publication &p) coutp.gettype():p.getname()endl;int main()book book(精彩人生); showpublication(book);return 0;运行时的输出结果是a)未知类型:未知名称b)未知类型:精彩人生c)书:未知名称d)书:精彩人生(33) 下列关于运算符重载的描述中,错误的是 c a):运算符不能重载 b)类型转换运算符只能作为成员函数重载c)将运算符作为非成员函数重载时必须定义为友元d)重载运算符应完成“下标访问”操作(34) 有如下程序: b #include#include

45、using namespace std; int main()int s=123, 234;coutrightsetfill(*)setw(6); for(int i=0; i2; i+) coutsi20; i-=2) couti,;运行时循环体的执行次数是 【7】 。(8) 利用表达式 ai可以访问 int 型数组 a 中下标为 i 的元素。在执行了语句 int *p=a;后, 利用指针 p 也可访问该元素,相应的表达式是 【8】 。(9) 下面是一个递归函数,其功能是使数组中的元素反序排列。请将函数补充完整。void reverse(int *a, int size)if(size2)

46、return; int k=a0; a0=asize-1; asize-1=k;reverse(a+1, 【9】 );(10) 类 sample 的构造函数将形参 data 赋值给数据成员 data。请将类定义补充完整。class samplepublic:sample(int data=0);private:int data;sample:sample(int data)【10】(11) 有如下类定义:class sample public:sample();sample();private:static int date;将静态数据成员 data 初始化为 0 的语句是 【11】 。(12

47、) “图形”类 shape 中定义了纯虚函数 calarea(),“三角形”类 triangle 继承了类shape,请将 triangle 类中的 calarea 函数补充完整。class shapepublic:virtual int calarea()=0;class triangle: public shape public:triangleint s, int h: side(s),height(h) 【12】 return side*height/2 ; private:int side; int height;(13) 有如下程序: #include using namespace std; class grandchild public:grandchild() strcpy (name,unknown); const char *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论