计算机类 二级 C++
2014年全国计算机等级《二级C++》上机考试冲刺试题(4) 43 题 含答案 C++
1 单选题 1 / 43
有如下程序: #include using namespace std; class Base{ protected: Base(){cout<<’A’;} Base(char C){cout<<C;} }; class Derived:public Base{ public: Derived(char C){tout<<C;} }; int main(){ Derived dl(’B’); retum 0; } 执行这个程序的输出结果是( )。
A B B BA C AB D BB
查看答案 C. AB
2 单选题 2 / 43
下列符号中能够作为C++标识符的是( )。
A Coflst B 2a C _shape D Count
查看答案 C. _shape
3 单选题 3 / 43
有如下程序: #include using namespace std; class Base { private: void funl()const{tout<<”funl”;} protected: void fun2()const{tout<<”fun2”;} public: void fun3()const{cout<<”fhll3”;} }; class Derived:protected Base { public: void fhn4()const{cout<<”filn4”;} }; int main() { Derived obj; obj.funl();//① obj.fun2();//② obj.furd();//③ obj.fun4();//④ return U: } 其中有语法错误的语句是( )。
A ①②③④ B ①②③ C ②③④ D ①④
查看答案 B. ①②③
4 单选题 4 / 43
有如下程序: #include using namespace std; class Instrument{ public: virtual void Display()=0; }; class Pian0:public Instrument} public: void Display(){/*函数体略*/} }; intmain(){ Instrument S; Instrument*P=0: //…; return 0; } 下列叙述中正确的是( )。
A 语句“Insturment*P=0;”编译时出错 B 语句“Instnunent s;”编译时出错 C 类Pian0中的Display函数不是虚函数 D 类Instrument是一个虚基类
查看答案 B. 语句“Instnunent s;”编译时出错
5 单选题 5 / 43
如下函数模板: templateT square(T x){return x*x;} 其中T是( )。
A 函数形参 B 函数实参 C 模板形参 D 模板实参
查看答案 C. 模板形参
6 单选题 6 / 43
为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。
A 内联函数 B 重载函数 C 递归函数 D 函数模板
查看答案 A. 内联函数
7 单选题 7 / 43
有如下程序: #inClude using namespaCe std; Class Point{ publiC: statiC int number; publiC: Point( )t.number++;} ~Point( ){number--;} }; , int P0int::number=0; int main( ){ Point *ptr: Point A,B; Point*ptr_point=new Point[3]; ptr=ptr_point;’ } Point C; Cout<<POINT:::NUMBER<<ENDL;&NBSP;&NBSP;&NBSP; delete[]ptr; return 0; } 执行这个程序的输出结果是( )。
A 3 B 4 C 6 D 7
查看答案 C. 6
8 单选题 8 / 43
有三个关系R、S和T如下
由关系R和s通过运算得到关系T,则所使用的运算为( )。
A 并 B 自然连接 C 笛卡尔积 D 交
查看答案 D. 交
9 单选题 9 / 43
下列符号中,正确的c++标识符是( )。
A enum B 2b C f00一9 D _32
查看答案 D. _32
10 单选题 10 / 43
下列关于C++预定义流对象的叙述中,正确的是( )。
A Cin是C++预定义的标准输入流对象 B Cin是C++预定义的标准输入流类 C Cout是C++预定义的标准输入流对象 D Cout是C++预定义的标准输入流类
查看答案 A. Cin是C++预定义的标准输入流对象
11 单选题 11 / 43
下列情况中,不会调用拷贝构造函数的是( )。
A 用一个对象去初始化同一类的另一个新对象时 B 将类的一个对象赋值给该类的另一个对象时 C 函数的形参是类的对象,调用函数进行形参和实参结合时 D 函数的返回值是类的对象,函数执行返回调用时
查看答案 B. 将类的一个对象赋值给该类的另一个对象时
12 单选题 12 / 43
下列叙述中正确的是( )。
A 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C 线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D 线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性
查看答案 B. 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
13 单选题 13 / 43
类的析构函数的作用是( )。
A 一般成员函数的初始化 B 类的初始化 C 对象的初始化 D 删除类创建的对象
查看答案 D. 删除类创建的对象
14 单选题 14 / 43
下列运算符不能重载为友元函数的是( )。
A =()( )-> B + - ++ -- C > < >= <= D += -= *=/=
查看答案 A. =()( )->
15 单选题 15 / 43
下面关于运算符重载的描述错误的是( )。
A 运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构 B 不是所有的运算符都可以进行重载 C 运算符函数的调用必须使用关键字operat。 D 在C+十语言中不可通过运算符重载创造出新的运算符
查看答案 C. 运算符函数的调用必须使用关键字operat。
16 单选题 16 / 43
当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( )。
A ios::in B ios::0ut C ios::in I ios::0ut D 以上都不对
查看答案 D. 以上都不对
17 单选题 17 / 43
由于常对象不能被更新,因此( )。
A 通过常对象只能调用它的常成员函数 B 通过常对象只能调用静态成员函数 C 常对象的成员都是常成员 D 通过常对象可以调用任何不改变对象值的成员函数
查看答案 A. 通过常对象只能调用它的常成员函数
18 单选题 18 / 43
支持子程序调用的数据结构是( )。
A 栈 B 树 C 队列 D 二叉树
查看答案 A. 栈
19 单选题 19 / 43
有如下类定义: class B { public:void funl(){} private:void fun2(){} protected:void fun3(){} }; class D:public B j protected:void fun4(){} }; 若obj是类D的对象,则下列语句中不违反访问控制权限的是( )。
A obj.fun1(); B obj.fun2(); C obj.tim3(); D ohj.fun4();
查看答案 A. obj.fun1();
20 单选题 20 / 43
有如下语句序列: Char str[10];Cin>>str; 当从键盘输入“I love this game”时,str中的字符串是( )。
A ”I love this game” B ”I love thi” C ”I love” D ”I”
查看答案 D. ”I”
21 单选题 21 / 43
继承机制的作用是( )。
A 信息隐藏 B 数据封装 C 定义新类 D 数据抽象
查看答案 C. 定义新类
22 单选题 22 / 43
模板对类型的参数化提供了很好的支持,因此( )。
A 类模板的主要作用是生成抽象类 B 类模板实例化时,编译器将根据给出的模板实参生成一个类 C 在类模板中的数据成员都具有同样类型 D 类模板中的成员函数都没有返回值
查看答案 B. 类模板实例化时,编译器将根据给出的模板实参生成一个类
23 单选题 23 / 43
if语句的语法格式可描述为: 格式l:if(<条件>)<语句> 或 格式2:if(<条件>)<语句l> else<语句2> 关于上面的语法格式,下列表述中错误的是( )。
A <条件>部分可以是一个if语句,例如if(if(a==0)…)… B <语句>部分可以是一个if语句,例如if(…)if(…)… C 如果在<条件>前加上逻辑非运算符!并交换<语句l>和<语句2>的位置,语句功能不变 D <语句>部分可以是一个循环语句,例如if(…)while(…)…
查看答案 A. <条件>部分可以是一个if语句,例如if(if(a==0)…)…
24 单选题 24 / 43
下面的程序中,错误的语句是( )。 ①#inClude ②void main() ③{ ④ int *p=new int[1]; ⑧P=9; ⑥cout<<.*P< ⑦delete[]p; ⑧}
A ④ B ⑤ C ⑥ D ⑦
查看答案 B. ⑤
25 单选题 25 / 43
下面有关for循环的正确描述是( )。
A for循环只能用于循环次数已经确定的情况 B for循环是先执行循环体语句,后判断表达式 C 在for循环中,不能用break语句跳出循环体 D 在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
查看答案 D. 在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
26 单选题 26 / 43
下列叙述中正确的是( )。
A 算法就是程序 B 设计算法时只需要考虑数据结构的设计 C 设计算法时只需要考虑结果的可靠性 D 以上三种说法都不对
查看答案 D. 以上三种说法都不对
27 单选题 27 / 43
由于常对象不能被更新,因此( )。
A 通过常对象只能调用它的常成员函数 B 通过常对象只能调用静态成员函数 C 常对象的成员都是常成员 D 通过常对象可以调用任何不改变对象值的成员函数
查看答案 A. 通过常对象只能调用它的常成员函数
28 单选题 28 / 43
有如下程序: #include using namespace std; class MyClass{ public: MyClass(){cout<<’A’;} MyClass(char C.{cout<<C;} ~MyClass(){cout<<’B’;} }; int main(){ MyClass pl,+p2; p2=new MyClass(’X’); delete p2; return 0; } 执行这个程序的输出结果是( )。
A ABX B ABXB C AXB D AXBB
查看答案 D. AXBB
29 单选题 29 / 43
有如下程序: #include using namespace std; class Pair{ int m,n; public: Pair(int j,int k):m(j),n(k){} int get(){return m;} int get()const{return m+n;} }; int main(){ Pair a(3,5); const Pair b(3,5); tout<<A.GET()’< return U: } 执行这个程序的输出结果是( )。
A 33 B 38 C 83 D 88
查看答案 B. 38
30 单选题 30 / 43
执行下列语句段后,输出字符“*”的个数是( )。 for(int i=50;i>1;--i) Cout<<'*':
A 48 B 49 C 50 D 51
查看答案 B. 49
31 单选题 31 / 43
有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是( )。
A 自然连接 B 交 C 投影 D 并
查看答案 A. 自然连接
32 单选题 32 / 43
软件测试的目的是( )。
A 评估软件可靠性 B 发现并改正程序中的错误 C 改正程序中的错误 D 发现程序中的错误
查看答案 D. 发现程序中的错误
33 单选题 33 / 43
软件设计中划分模块的一个准则是( )。
A 低内聚低耦合 B 高内聚低耦合 C 低内聚高耦合 D 高内聚高耦合
查看答案 B. 高内聚低耦合
34 单选题 34 / 43
下列数据结构中,能够按照“先进后出”原则存取数据的是( )。
A 循环队列 B 栈 C 队列 D 二叉树
查看答案 B. 栈
35 单选题 35 / 43
有如下程序: #inClude using namespaCe std; Class Base{ publiC: Base(int x=0){Cout<<X;}&NBSP;&NBSP;&NBSP; Class Derived:publiC Base{ publiC: Derived(int X=0){Cout<<X;}&NBSP;&NBSP;&NBSP; Base val; }; int main() { Derived d(1); return 0; } 执行这个程序的输出结果是( )。
A 0 B 1 C 01 D 001
查看答案 D. 001
36 单选题 36 / 43
已知Value是一个类,value是Value的一个对象。下列以非成员函数形式重载的运算符函数原型中,正确的是( )。
A Value operator+(Value v,int i); B Value operator+(Value v=value,int i); C Value operator+(Value v,inl:i=0): D Value operator+(Value v=vallle,int i=0);
查看答案 A. Value operator+(Value v,int i);
37 单选题 37 / 43
有如下程序段: int i=0,J=1; nt&r=i;//④ ’ r=j;//② int * P=&i;//③ * P=&r;//④ 其中会产生编译错误的语句是( )。
A ④ B ③ C ② D ①
查看答案 A. ④
38 单选题 38 / 43
有如下程序: ﹟nclude using namespace std; int main() { int*P; *P=9: cout<<”The value at p:”<< *p; return 0; } 编译运行程序将出现的情况是( )。
A 编译时出现语法错误,不能生成可执行文件 B 运行时一定输出:l'lle value at P:9 C 运行时一定输出:llle value at P:*9 D 运行时有可能出错
查看答案 D. 运行时有可能出错
39 单选题 39 / 43
在软件设计中不使用的工具是( )。
A 系统结构图 B PAD图 C 数据流图(DFD图) D 程序流程图
查看答案 C. 数据流图(DFD图)
40 单选题 40 / 43
C++中的模板包括( )。
A 对象模板和函数模板 B 对象模板和类模板 C 函数模板和类模板 D 变量模板和对象模板
查看答案 C. 函数模板和类模板
41 主观题 41 / 43
请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中包含一个源程序文件main.cpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“//ERROR****found****”下的语句行有错误,请加以改正。改正后程序的输出结果应该是: 书名:C++语句程序设计总页数:299 已把“c++语言程序设计”翻到第50页 已把“c++语言程序设计”翻到第51页 已把“c++语言程序设计”翻到第52页 已把“c++语言程序设计”翻到第51页 已把书合上。 当前页:0 注意:只修改每个“//ERROR ***found***”下的那一行,不要改动程序中的其他内容。 #include using namespace std; class Book{ char*title; int num—pages;//页数 int cur_page;//当前打开页面的页码,0表示书未打开 public: //ERROR***********found*********** Book(const char*theTitle,int pages)num_pages(pages) { title=new char[strlen(theTitle)+1]; strepy(title,theTitle); cout<<ENDL<<”书名:”<<TITLE <<”总页数:”< } ~Book(){delete[]title;} bool isClosed()const{return cur_page==0;} //书合上时返回true,否则返回false bool isOpen()const{return!isClosed();}//书打开时返回true,否则返回false int numOfPages()const{return num_pages;}//返回书的页数 int currentPage()const{return cur_page;}//返回打开页面的页码 //ERROR***********found*********** void openAtPage(int page_no)const{ //把书翻到指定页 cout< i“page_nohum_pages){ tOUt<<”无法翻到第”< ClOSe(); } else{ cur_page=page_n0; tout<<”已把“"<<TIDE<<"”翻到第"< } } void openAtPrevPage(){openAtPage(cur page—1);{//把书翻到上一页 void openAtNextPage(){openAtPage(cur_page+1);}//把书翻到下一页 void close(){//把书合上 tout< if(isClosed()) tout<<"书是合上的。"; else{ //ERROR**********found********** num_pages=0; cout<<”已把书合上。”; } cOut< } }; int main(){ Book book(”C++语言程序设计”,299); book.openAtPage(50); book.openAtNextPage(); book.openAtNextPage(); book.openA.tPrevPage(); book.close(); tout<<”当前页:”<<BOOK.CURRENTPAGE()< return 0: }
查看答案 (1)Book(Const ChAr*thETiFlE,int pAGEs):num_pAGEs(pAGEs) (2)voiD opEnAtPAGE(int pAGE—no) //把书翻到指定页 (3)Cur_pAGE=0;
42 主观题 42 / 43
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有日期类Date、人员类Person及排序函数sortByName和主函数main的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为: 按姓名排序 排序前: 张三 男 出生日期:1978年4月20日 王五 女 出生日期:1965年8月3日 杨六 女 出生日期:1965年9月5日 李四 男 出生日期:1973年5月30日 排序后: 李四 男 出生日期:1973年5月30日 王五 女 出生日期:1965年8月3日 杨六 女 出生日期:1965年9月5日 张三 男 出生日期:1978年4月20日 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。 #include using namespace std; class Date{//日期类 int year,month,day;//年、月、日 public: Date(int year,int month,int day):year(year),month(month),day(day){} int getYear()const{return year;} int getMonth()const{return month;} int getDay()const{return day;} }; class Person{ //人员类 char name[14];//姓名 bool is—male;//性别,为true时表示男性 Date birth—date;//出生日期 public: Person(char*name,bool is—male,Date birth_date) //***************found*************** :—————— { { strcpy(this一>name,name); } const char * getName()const{return name;} bool isMale()const{return is—male;} Date getBirthdate()const{return birth—date;} //利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于 int compareName(const Person&p)const{ //***************found***************** ————} void show(){ cout< cout<<NAME<<”<<(IS_MALE?”男”:”女”)<<”<<”出生日期:”<<BIRTH—DATE.GETYEAR()< //**************found************** __________________________//显示出生月 << “birth—date.getDay()<<”日”;//显示出生日 } }; void sortByName(Person ps[],int size){ //将人员数组按姓名排列为升序 for(int i=0;i<SIZE一1;I++){ //采用选择排序算法 int m=i; for(int j=i+1;j<SIZE;J++) if(ps[j].eompareName(ps[m])<0) m=j; if(m>i){ Person P=ps[m]; ps[m]=ps[i]; ps[i]=p; } } } int main(){ Person staff[]={ Person(”张三”,true,Date(1978,4,20)), Person(”王五”,false,Date(1965,8,3)), Person(”杨六”,false,Date(1965,9,5)), Person(”李四”,tme,Date(1973,5,30)) }; const int size=sizeof(staff)/sizeof(staff[0]); int i; eout<<ENDL< cout<<ENDL< for(i=0;i sortByName(staff,size); cout<<ENDL<<ENDL< for(i_0;i cout< return 0; {
查看答案 (1)is—mAlE(is—mAlE),Birth—DAtE(Birth—DAtE) (2)rEtum strEmp(nAlnE,P.GEtNAmE()); (3)“Birth—DAtE.GEtMonth()“”月”
43 主观题 43 / 43
请使用VC6或使用【答题】菜单打开考生文件夹prosS下的工程pr093,其中包含了类TaxCaleulator(“个税计算器”)和主函数main的定义。创建“个税计算器”需要接收税率表信息和起征额信息。在main函数中,通过两个数组创建了如下的税率表:
利用这个税率表创建“个税计算器”时,假定起征额为2 000元(即不超过2 000元的所得不征收个人所得税)。请补充完成计算应纳个人所得税额的成员函数getTaxPayable,其中的参数income为月收入。此程序的正确输出结果应为:
月收入为800元时应缴纳个人所得税0元
月收入为l 800元时应缴纳个人所得税0元月收入为2 800元时应缴纳个人所得税 55元 月收入为3 800元时应缴纳个人所得税l55元
月收入为4 800元时应缴纳个人所得税295元月收入为5 800元时应缴纳个人所得税455元
注意:只能在函数9etTaxPayable中的“//**********333**********”和“//**********666**********”之间
填人若干语句,不要改动程序中的其他内容。 //Tax Calculator.h #include #include
using flamespace std; class TaxCalculator{ public:
TaxCalculator(double the—limits[],double the_rates[],int the—length,double the_threshold) :lower_limits(new double[the_length]),rates(new double[the—length]),
list_len(the_length),threshold(the—threshold){ for(int i=0;i<LIST—LEN;I++){
lower_limits[i]=the_limits[i]; rates[i]=the_rates[i];
} f
—TaxCalculator(){delete[]lower_limits;delete[]rates;}
double getTaxPayable(double income)eonst;//返回指定月收入的应纳个人所得税额 void showTaxPayable(double income)const;//显示指定月收入的应纳个人所得税额 private:
double$lower—limits;//适用收入段下限 double *rates; //适用税率
int list—len;//税率表项数
double threshold; //起征额 };
void writeToFile(consl char * path); //TaxCalcnlator.cpp
‘#include”TaxCalculator.h”
double TaxCalculator::getTaxPayable(double income)const{ double taxable=income—threshold;
//应纳税工资额
double tax_payable=0.0; //应纳个人所得税额
int i=list_len-1;
//从税率表的最高适用段开始计算 while(i>=0){
//**********333**********
//**********666**********
--i; }
return tax_payable;
} void TaxCalculator::showTaxPayable(double income)const{
cout<<”月收入为”<<SETW(6)<<INCOME<<”元时应缴纳个人所得税”&NBSP;&NBSP;&NBSP;
<<setw(4)<<getTaxPayable(income)<<”元”< }
//main.cpp
#include”TaxCalculator.h” int main(){
double limits[]={0.0,500.0,2000.0,5000.0,20000.0,40000.0,60000.0,80000。0,100000.0}; double rates[]={0.05,0.1,0.15,0.2,0.25,0.3,O.35,0.4,0.45};
TaxCaleulator calc(1imits,rates,9,2000.0); calc.showTaxPayable(800.0);
calc.showTaLPayable(1800.0); cale.showTaxPayable(2800.0); calc.showTaxPayable(3800.0); calc.showTaxPayable(4800.0); eaie.showTaxPayable(5800.0); writeToFile(””);
return 0;
}
查看答案 iF F inComE<=2000)//如果收入小于2000 return tax—payable; //直接tex—payable(初始代为零) i“taxable>lower_limits[i]){ //如果taxable(收入超出起征额的部分)大于lower—limits [i]阶段最低限额 tax_payable+=(taxable-lower-limits[i])* rates[i]: //把起过阶段最低限额的部分乘以该阶段的税率后,加到tax_payable(个人所得税) taxable=lower_limits[i]; //把fower_limits[i]赋值于taxable }