《全国计算机等级考试二级笔试样卷C++语言程序设计.pdf》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级笔试样卷C++语言程序设计.pdf(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、全国计算机等级考试二级笔试样卷 C+语言程序设计 一、选择题135每题 2 分,共 70 分 以下各题 A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。1以下选项中不符合良好程序设计风格的是 A源程序要文档化 B数据说明的次序要标准化 C防止滥用 goto 语句 D模块设计要保证高耦合、高内聚 2从工程管理角度,软件设计一般分为两步完成,它们是 A概要设计及详细设计 B数据设计及接口设计 C软件构造设计及数据设计 D过程设计及数据设计 3以下选项中不属于软件生命周期开发阶段任务的是 A软件测试 B概要设计 C软件维护 D详细设计 4在数据库
2、系统中,用户所见的数据模式为 A概念模式 B外模式 C内模式 D物理模式 5数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和 A编码设计 B测试阶段 C运行阶段 D物理设计 6设有如下三个关系表 R S T A B C A B C m 1 3 m 1 3 n n 1 3 以下操作中正确的选项是 ATRS BTRS CTRS DTR/S 7以下表达中正确的选项是 A一个算法的空间复杂度大,那么其时间复杂度也必定大 B一个算法的空间复杂度大,那么其时间复杂度必定小 C一个算法的时间复杂度大,那么其空间复杂度必定小 D上述三种说法都不对 8在长度为 64 的有序线性表中进展顺序查找,最坏情况下
3、需要比拟的次数为 A63 B64 C6 D7 9数据库技术的根本目标是要解决数据的 A存储问题 B共享问题 C平安问题 D保护问题 10对以下二叉树 进展中序遍历的结果是 AACBDFEG BACBDFGE CABDCGEF DFCADBEG 11以下有关内联函数的表达中,正确的选项是 A内联函数在调用时发生控制转移 B内联函数必须通过关键字 inline 来定义 C内联函数是通过编译器来实现的 D内联函数函数体的最后一条语句必须是 return 语句 12以下情况中,不会调用拷贝构造函数的是 A用一个对象去初始化同一类的另一个新对象时 B将类的一个对象赋值给该类的另一个对象时 C函数的形参是
4、类的对象,调用函数进展形参和实参结合时 D函数的返回值是类的对象,函数执行返回调用时 13以下有关继承和派生的表达中,正确的选项是 A如果一个派生类私有继承其基类,那么该派生类对象不能访问基类的保护成员 B派生类的成员函数可以访问基类的所有成员 C基类对象可以赋值给派生类对象 D如果派生类没有实现基类的一个纯虚函数,那么该派生类是一个抽象类 14以下运算符不能重载为友元函数的是 A=()-B+-+-C =D+=-=*=/=15关于在调用模板函数时模板实参的使用,以下表述正确的选项是 A对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得一样的信息,那么都可以省略 B对于虚拟类型参数所
5、对应的模板实参,如果它们是参数表中的最后的假设干个参数,那么都可以省略 C对于虚拟类型参数所对应的模板实参,假设能够省略那么必须省略 D对于常规参数所对应的模板实参,任何情况下都不能省略 16以下关于输入流类成员函数 getline()的描述中,错误的选项是 A该函数是用来读取键盘输入的字符串的 B该函数读取的字符串长度是受限制的 C该函数读取字符串时,遇到终止符便停顿 D该函数读取字符串时,可以包含空格 17以下符号中,正确的 C+标识符是 Aenum B2b Cfoo-9 D_32 18以下语句中,错误的选项是 Aconst int buffer=256;Bconst double*poi
6、nt;Cint const buffer=256;Ddouble*const point;19if 语句的语法格式可描述为:格式 1:if()或 格式 2:if()else 关于上面的语法格式,以下表述中错误的选项是 A局部可以是一个 if 语句,例如 if(if(a=0)B局部可以是一个 if 语句,例如 if()if()C如果在前加上逻辑非运算符!并交换 和 的位置,语句功能不变 D局部可以是一个循环语句,例如 if()while()20有如下说明 int a10=1,2,3,4,5,6,7,8,9,10,*p=a;那么数值为 9 的表达式是 A*p+9 B*(p+8)C*p+=9 Dp+
7、8 21假设有下面的函数调用:fun(a+b,3,max(n-1,b)那么 fun 的实参个数是 A3 B4 C5 D6 22以下关键字不能用来声明类的访问权限的是 Apublic Bstatic Cprotected Dprivate 23在公有继承的情况下,允许派生类直接访问的基类成员包括 A公有成员 B公有成员和保护成员 C公有成员、保护成员和私有成员 D保护成员 24关于运算符重载,以下表述中正确的选项是 AC+已有的任何运算符都可以重载 B运算符函数的返回类型不能声明为根本数据类型 C在类型转换符函数的定义中不需要声明返回类型 D可以通过运算符重载来创立 C+中原来没有的运算符 25
8、关于关键字 class 和 typename,以下表述中正确的选项是 A程序中的 typename 都可以替换为 class B程序中的 class 都可以替换为 typename C在模板形参表中只能用 typename 来声明参数的类型 D在模板形参表中只能用 class 或 typename 来声明参数的类型 26有如下程序#include#include using namespace std;int main()coutSETPRECISION(3)FIXEDSETFILL(*)SETW(8);cout12.345_34.567;return 0;假设程序的输出是:*12.345*3
9、4.567 那么程序中下划线处遗漏的操作符是 Asetprecision(3)Bfixed Csetfill(*)Dsetw(8)27有如下程序#include#include using namespace std;class MyClass public:MyClass()coutA;MyClass(char c)cout MyClass()coutB;int main()MyClass p1,*p2;p2=new MyClass(X);delete p2;return 0;执行这个程序屏幕上将显示输出 AABX BABXB CAXB DAXBB 28有如下程序#include using
10、 namespace std;int i=1;class Fun public:static int i;int value()return i-1;int value()const return i+1;int Fun:i=2;int main()int i=3;Fun fun1;const Fun fun2;_ return 0;假设程序的输出结果是:123 那么程序中下划线处遗漏的语句是 AcoutFun:i BcoutFun:ifun1.value()CcoutFun:i;Dcout 29有如下程序:#include using namespace std;class Obj stat
11、ic int i;public:Obj()i+;Obj()i-;static int getVal()return i;int Obj:i=0;void f()Obj ob2;cout int main()Obj ob1;f();Obj*ob3=new Obj;coutgetVal();delete ob3;cout return 0;程序的输出结果是 A232 B231 C222 D221 30有如下程序#include using namespace std;class Base protected:Base()coutA;Base(char c)cout;class Derived:pu
12、blic Base public:Derived(char c)cout;int main()Derived d1(B);return 0;执行这个程序屏幕上将显示输出 AB BBA CAB DBB 31有如下类定义:class MyBase int k;public:MyBase(int n=0):k(n)int value()const return k;class MyDerived:MyBase int j;public:MyDerived(int i):j(i)int getK()const return k;int getJ()const return j;编译时发现有一处语法错误
13、,对这个错误最准确的描述是 A函数 getK 试图访问基类的私有成员变量 k B 在类 MyDerived 的定义中,基类名 MyBase 前缺少关键字 public、protected 或 private C类 MyDerived 缺少一个无参的构造函数 D类 MyDerived 的构造函数没有对基类数据成员 k 进展初始化 32在一个派生类对象完毕其生命周期时 A先调用派生类的析构函数后调用基类的析构函数 B先调用基类的析构函数后调用派生类的析构函数 C如果基类没有定义析构函数,那么只调用派生类的析构函数 D如果派生类没有定义析构函数,那么只调用基类的析构函数 33有如下的运算符重载函数定
14、义:double operator+(int i,int k)return double(i+k);但定义有错误,对这个错误最准确的描述是 A+只能作为成员函数重载,而这里的+是作为非成员函数重载的 B两个 int 型参数的和也应该是 int 型,而这里将+的返回类型声明为 double C 没有将运算符重载函数声明为某个类的友元 DC+已经提供了求两个 int 型数据之和的运算符+,不能再定义同样的运算符 34语句 ofstream f(SALARY.DAT,ios_base:app);的功能是建立流对象 f,并试图翻开文件及 f 关联,而且 A假设文件存在,将其置为空文件;假设文件不存在,
15、翻开失败 B假设文件存在,将文件指针定位于文件尾;假设文件不存在,建立一个新文件 C假设文件存在,将文件指针定位于文件首;假设文件不存在,翻开失败 D假设文件存在,翻开失败;假设文件不存在,建立一个新文件 35有如下程序#include using namespace std;class A public:virtual void func1()coutA1;void func2()coutA2;class B:public A public:void func1()coutB1;void func2()coutfunc1();p-func2();return 0;运行此程序,屏幕上将显示输出
16、 A)B1B2 B)A1A2 C)B1A2 D)A1B2 二、填空题每空 2 分,共 30 分 请将每一个空的正确答案写在答题卡【1】【15】序号的横线上,答在试卷上不得分。1以下软件系统构造图 的宽度为 【1】。2 【2】的任务是诊断和改正程序中的错误。3一个关系表的行称为 【3】。4按“先进后出原则组织数据的数据构造是 【4】。5数据构造分为线性构造和非线性构造,带链的队列属于 【5】。6假设有定义语句:int*a,b;,那么变量 b 的数据类型是 【6】。7数组a中的元素个数为n,以下语句的作用是将下标为i的元素移动到下标为 i1 的单元,其中 1in。例如,当 n4,a 中原有数据为
17、1,2,3,4 时,那么移动后 a 中元素变为 2,3,4,4。请将语句补充完整:for(int i=0;i ai=a 【7】;8递归函数 f 的定义如下:int f(int n)if(n=1)return 1;/递归完毕情况 else return n*f(n-2);/递归 那么函数调用语句 f(5)的返回值是 【8】。9创立对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,那么调用缺省构造函数。以下程序涉及到对象数组的创立和单个对象的创立,其输出结果是 【9】。#include using namespace std;class Foo public:Fo
18、o(int x)cout A;Foo();int main()Foo f3,g(3);return 0;10以下程序的输出结果是 42,请将画线处缺失的局部补充完整。#include using namespace std;class Foo int value;public:Foo():value(0)void setValue(int value)【10】=value;/给 Foo 的数据成员 value 赋值 void print()cout value;int main()Foo f;f.setValue(42);f.print();return 0;11如果不使用多态机制,那么通过基
19、类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。以下程序没有使用多态机制,其输出结果是 【11】。#include using namespace std;class Base public:void print()cout B;class Derived:public Base public:void print()cout print();pd-print();delete pd;return 0;12在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承 private。有如下类定义:class Base protected:void fun();class
20、Derived:Base ;那么 Base 类中的成员函数 fun(),在 Derived 类中的访问权限是 【12】注意:要求填写 private、protected 或 public 中的一项。13在 MyClass 类的定义中,对赋值运算符=进展重载。请将画线处缺失的局部补充完整。【13】MyClass:operator=(const MyClass&rhs)if(this=&rhs)return*this;value=rhs.value;return*this;14插入排序算法的主要思想是:每次从未排序序列中取出一个数据,插入到已排序序列中的正确位置。InsertSort 类的成员函数
21、 sort()实现了插入排序算法。请将画线处缺失的局部补充完整。class InsertSort public:InsertSort(int*a0,int n0):a(a0),n(n0)/参数 a0 是某数组首地址,n 是数组元素个数 void sort()/此函数假设已排序序列初始化状态只包含 a0,未排序序列初始为 a1.an-1 for(int i=1;i int t=ai;int j;for(【14】;j0;-j)if(t=aj-1)break;aj=aj-1;aj=t;protected:int*a,n;/指针 a 用于存放数组首地址,n 用于存放数组元素个数;15以下程序的输出结果
22、是 【15】。#include using namespace std;class A int a;public:A():a(9)virtual void print()const couta;class B:public A char b;public:B()b=S;void print()const cout print();show(d1);show(d2);return 0;/b;/a;/Fun:ifun1.value()B+-+-C =D+=-=*=/=15关于在调用模板函数时模板实参的使用,以下表述正确的选项是 A对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得一样的
23、信息,那么都可以省略 B对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的假设干个参数,那么都可以省略 C对于虚拟类型参数所对应的模板实参,假设能够省略那么必须省略 D对于常规参数所对应的模板实参,任何情况下都不能省略 16以下关于输入流类成员函数 getline()的描述中,错误的选项是 A该函数是用来读取键盘输入的字符串的 B该函数读取的字符串长度是受限制的 C该函数读取字符串时,遇到终止符便停顿 D该函数读取字符串时,可以包含空格 17以下符号中,正确的 C+标识符是 Aenum B2b Cfoo-9 D_32 18以下语句中,错误的选项是 Aconst int buffer=
24、256;Bconst double*point;Cint const buffer=256;Ddouble*const point;19if 语句的语法格式可描述为:格式 1:if()或 格式 2:if()else 关于上面的语法格式,以下表述中错误的选项是 A局部可以是一个 if 语句,例如 if(if(a=0)B局部可以是一个 if 语句,例如 if()if()C如果在前加上逻辑非运算符!并交换 和 的位置,语句功能不变 D局部可以是一个循环语句,例如 if()while()20有如下说明 int a10=1,2,3,4,5,6,7,8,9,10,*p=a;那么数值为 9 的表达式是 A*
25、p+9 B*(p+8)C*p+=9 Dp+8 21假设有下面的函数调用:fun(a+b,3,max(n-1,b)那么 fun 的实参个数是 A3 B4 C5 D6 22以下关键字不能用来声明类的访问权限的是 Apublic Bstatic Cprotected Dprivate 23在公有继承的情况下,允许派生类直接访问的基类成员包括 A公有成员 B公有成员和保护成员 C公有成员、保护成员和私有成员 D保护成员 24关于运算符重载,以下表述中正确的选项是 AC+已有的任何运算符都可以重载 B运算符函数的返回类型不能声明为根本数据类型 C在类型转换符函数的定义中不需要声明返回类型 D可以通过运算
26、符重载来创立 C+中原来没有的运算符 25关于关键字 class 和 typename,以下表述中正确的选项是 A程序中的 typename 都可以替换为 class B程序中的 class 都可以替换为 typename C在模板形参表中只能用 typename 来声明参数的类型 D在模板形参表中只能用 class 或 typename 来声明参数的类型 26有如下程序#include#include using namespace std;int main()coutSETPRECISION(3)FIXEDSETFILL(*)SETW(8);cout12.345_34.567;return
27、 0;假设程序的输出是:*12.345*34.567 那么程序中下划线处遗漏的操作符是 Asetprecision(3)Bfixed Csetfill(*)Dsetw(8)27有如下程序#include#include using namespace std;class MyClass public:MyClass()coutA;MyClass(char c)cout MyClass()coutB;int main()MyClass p1,*p2;p2=new MyClass(X);delete p2;return 0;执行这个程序屏幕上将显示输出 AABX BABXB CAXB DAXBB
28、28有如下程序#include using namespace std;int i=1;class Fun public:static int i;int value()return i-1;int value()const return i+1;int Fun:i=2;int main()int i=3;Fun fun1;const Fun fun2;_ return 0;假设程序的输出结果是:123 那么程序中下划线处遗漏的语句是 AcoutFun:i BcoutFun:ifun1.value()CcoutFun:i;Dcout 29有如下程序:#include using namespa
29、ce std;class Obj static int i;public:Obj()i+;Obj()i-;static int getVal()return i;int Obj:i=0;void f()Obj ob2;cout int main()Obj ob1;f();Obj*ob3=new Obj;coutgetVal();delete ob3;cout return 0;程序的输出结果是 A232 B231 C222 D221 30有如下程序#include using namespace std;class Base protected:Base()coutA;Base(char c)
30、cout;class Derived:public Base public:Derived(char c)cout;int main()Derived d1(B);return 0;执行这个程序屏幕上将显示输出 AB BBA CAB DBB 31有如下类定义:class MyBase int k;public:MyBase(int n=0):k(n)int value()const return k;class MyDerived:MyBase int j;public:MyDerived(int i):j(i)int getK()const return k;int getJ()const
31、return j;编译时发现有一处语法错误,对这个错误最准确的描述是 A函数 getK 试图访问基类的私有成员变量 k B 在类 MyDerived 的定义中,基类名 MyBase 前缺少关键字 public、protected 或 private C类 MyDerived 缺少一个无参的构造函数 D类 MyDerived 的构造函数没有对基类数据成员 k 进展初始化 32在一个派生类对象完毕其生命周期时 A先调用派生类的析构函数后调用基类的析构函数 B先调用基类的析构函数后调用派生类的析构函数 C如果基类没有定义析构函数,那么只调用派生类的析构函数 D如果派生类没有定义析构函数,那么只调用基
32、类的析构函数 33有如下的运算符重载函数定义:double operator+(int i,int k)return double(i+k);但定义有错误,对这个错误最准确的描述是 A+只能作为成员函数重载,而这里的+是作为非成员函数重载的 B两个 int 型参数的和也应该是 int 型,而这里将+的返回类型声明为 double C没有将运算符重载函数声明为某个类的友元 DC+已经提供了求两个 int 型数据之和的运算符+,不能再定义同样的运算符 34语句 ofstream f(SALARY.DAT,ios_base:app);的功能是建立流对象 f,并试图翻开文件及 f 关联,而且 A假设文
33、件存在,将其置为空文件;假设文件不存在,翻开失败 B假设文件存在,将文件指针定位于文件尾;假设文件不存在,建立一个新文件 C假设文件存在,将文件指针定位于文件首;假设文件不存在,翻开失败 D假设文件存在,翻开失败;假设文件不存在,建立一个新文件 35有如下程序#include using namespace std;class A public:virtual void func1()coutA1;void func2()coutA2;class B:public A public:void func1()coutB1;void func2()coutfunc1();p-func2();ret
34、urn 0;运行此程序,屏幕上将显示输出 A)B1B2 B)A1A2 C)B1A2 D)A1B2 二、填空题每空 2 分,共 30 分 请将每一个空的正确答案写在答题卡【1】【15】序号的横线上,答在试卷上不得分。1以下软件系统构造图 的宽度为 【1】。2 【2】的任务是诊断和改正程序中的错误。3一个关系表的行称为 【3】。4按“先进后出原则组织数据的数据构造是 【4】。5数据构造分为线性构造和非线性构造,带链的队列属于 【5】。6假设有定义语句:int*a,b;,那么变量 b 的数据类型是 【6】。7数组a中的元素个数为n,以下语句的作用是将下标为i的元素移动到下标为 i1 的单元,其中 1
35、in。例如,当 n4,a 中原有数据为 1,2,3,4 时,那么移动后 a 中元素变为 2,3,4,4。请将语句补充完整:for(int i=0;i ai=a 【7】;8递归函数 f 的定义如下:int f(int n)if(n=1)return 1;/递归完毕情况 else return n*f(n-2);/递归 那么函数调用语句 f(5)的返回值是 【8】。9创立对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,那么调用缺省构造函数。以下程序涉及到对象数组的创立和单个对象的创立,其输出结果是 【9】。#include using namespace std
36、;class Foo public:Foo(int x)cout A;Foo();int main()Foo f3,g(3);return 0;10以下程序的输出结果是 42,请将画线处缺失的局部补充完整。#include using namespace std;class Foo int value;public:Foo():value(0)void setValue(int value)【10】=value;/给 Foo 的数据成员 value 赋值 void print()cout value;int main()Foo f;f.setValue(42);f.print();return
37、 0;11如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。以下程序没有使用多态机制,其输出结果是 【11】。#include using namespace std;class Base public:void print()cout B;class Derived:public Base public:void print()cout print();pd-print();delete pd;return 0;12在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承 private。有如下类定义:class Base protect
38、ed:void fun();class Derived:Base ;那么 Base 类中的成员函数 fun(),在 Derived 类中的访问权限是 【12】注意:要求填写 private、protected 或 public 中的一项。13在 MyClass 类的定义中,对赋值运算符=进展重载。请将画线处缺失的局部补充完整。【13】MyClass:operator=(const MyClass&rhs)if(this=&rhs)return*this;value=rhs.value;return*this;14插入排序算法的主要思想是:每次从未排序序列中取出一个数据,插入到已排序序列中的正确
39、位置。InsertSort 类的成员函数 sort()实现了插入排序算法。请将画线处缺失的局部补充完整。class InsertSort public:InsertSort(int*a0,int n0):a(a0),n(n0)/参数 a0 是某数组首地址,n 是数组元素个数 void sort()/此函数假设已排序序列初始化状态只包含 a0,未排序序列初始为 a1.an-1 for(int i=1;i int t=ai;int j;for(【14】;j0;-j)if(t=aj-1)break;aj=aj-1;aj=t;protected:int*a,n;/指针 a 用于存放数组首地址,n 用于存放数组元素个数;15以下程序的输出结果是 【15】。#include using namespace std;class A int a;public:A():a(9)virtual void print()const couta;class B:public A char b;public:B()b=S;void print()const cout print();show(d1);show(d2);return 0;
限制150内