[计算机类试卷]国家二级C++机试(运算符重载、C++流)模拟试卷2及答案与解析.doc

上传人:progressking105 文档编号:497770 上传时间:2018-11-30 格式:DOC 页数:17 大小:48.50KB
下载 相关 举报
[计算机类试卷]国家二级C++机试(运算符重载、C++流)模拟试卷2及答案与解析.doc_第1页
第1页 / 共17页
[计算机类试卷]国家二级C++机试(运算符重载、C++流)模拟试卷2及答案与解析.doc_第2页
第2页 / 共17页
[计算机类试卷]国家二级C++机试(运算符重载、C++流)模拟试卷2及答案与解析.doc_第3页
第3页 / 共17页
[计算机类试卷]国家二级C++机试(运算符重载、C++流)模拟试卷2及答案与解析.doc_第4页
第4页 / 共17页
[计算机类试卷]国家二级C++机试(运算符重载、C++流)模拟试卷2及答案与解析.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、国家二级 C+机试(运算符重载、 C+流)模拟试卷 2及答案与解析 一、选择题 1 关于运算符重载,下列表述中正确的是 ( )。 ( A) C+已有的任何运算符都可以重载 ( B)运算符函数的返回类型不能声明为基本数据类型 ( C)在类型转换符函数的定义中不需要声明返回类型 ( D)可以通过运算符重载来创建 C+中原来没有的运算符 2 下列关于运算符重载的描述中,正确的是 ( )。 ( A)运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符 ( B)一元运算符只能作为成员函数重载 ( C)二元运算符重载为非成员函数时,参数表中有一个参数 ( D) C+中可以重载所有的运算符 3 运算

2、符重载时不需要保持的性质是 ( )。 ( A)操作数个数 ( B)操作数类型 ( C)优先级 ( D)结合性 4 下列关于运算符重载的描述中,错误的是 ( )。 ( A)可以通过运算符重载在 C+中创建新的运算符 ( B)赋值运算符只能重载为成员函数 ( C)运算符函数重载为类的成员函数时,第一操作数是该类对象 ( D)。重载类型转换运算符时不需要声明返回类型 5 已知在一个类体中包含 如下函数原型: VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是 ( )。 ( A)这是运算符的重载运算符函数 ( B)这个函数所重载的运算符是一个一元运算符 (

3、C)这是一个成员函数 ( D)这个函数不改变类的任何数据成员的值 6 有如下的运算符重载函数定义: double operator+(int i, int k)return double(i+k); 但定义有错误,对这个错误最准确的描述是 ( )。 ( A) +只能作为成员函数重载,而这里的 +是作为非成员函数重载的 ( B)两个 int型参数的和也应该是 int型,而这里将 +的返回类型声明为 double ( C)没有将运算符重载函数声明为某个类的友元 ( D) C+已经提供了求两个 int型数据之和的运算符 +,不能再定义同样的运算符 7 下列是重载乘法运算符的函数原型声明,其中错误的是

4、 ( )。 ( A) MyClass operator*(double, double); ( B) MyClass operator*(double, MyClass); ( C) MyClass operator*(MyClass, double); ( D) MyClass operator*(MyClass, MyClass); 8 如果表达式 a =b中的 “ =”是作为非成员函数重载的运算符,则可以等效地表示为 ( )。 ( A) a operator =(b) ( B) b operatotr =(a) ( C) operator =(a, b) ( D) operator =(

5、b, a) 9 将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是 ( )。 ( A)不合法的运算符 ( B)一元运算符 ( C)无操作数的运算符 ( D)二元运算符 10 下列关于赋值运算符 “=”重载的叙述中,正确的是 ( )。 ( A)赋值运算符只能作为类的成员函数重载 ( B)默认的赋值运算符实现了 “深层复制 ”功能 ( C)重载的赋值运算符函数有两个本类对象作为形参 ( D)如果已经定义了复制 (拷贝 )构造函数,就不能重载赋值运算符 11 若要对 Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。 ( A) Data+(Data); ( B) D

6、ata operator+Data; ( C) Data+operatorData; ( D) operator+(Data, Data); 12 为类 Matrix重载下列运算符时,只能作为 Matrix类成员函数重载的运算符是( )。 ( A) + ( B) = ( C) ( D) + 13 若需要为 XV类重载乘法运算符,运算结果为 XV类型,在将其声明为类的成员函数时,下列原型声明正确的是 ( )。 ( A) XV operator*(XV, XV); ( B) XV*(XV); ( C) operator*(XV); ( D) XV operator*(XV); 14 下列运算符不能

7、重载为友元函数的是 ( )。 ( A) = () - ( B) + - + - ( C) = = ( D) += -= *= = 15 下列关于 C+流的说明中,正确的是 ( )。 ( A)与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现 ( B)从流中获取数据的操作称为插入操作,向流中添加数据的操作称为提取操作 ( C) cin是一个预定义的输入流类 ( D)输出流有一个名为 open的成员函数,其作用是生成一个新的流对象 16 下列有关 C+流的叙述中,错误的是 ( )。 ( A) C+操作符 setw设置的输出宽度永久有效 ( B) C+操作符 endl可以实现输出的回车换行 (

8、 C)处理文件 I O时,要包含头文件 fstream ( D)进行输入操作时, eof()函数用于检测是否到达文件尾 17 在 C+中, cin是一个 ( )。 ( A)类 ( B)对象 ( C)模板 ( D)函数 18 要利用 C+流实现输入输出的各种格式控制,必须在程序中包含的头文件是( )。 ( A) fstream ( B) istreara ( C) ostream ( D) iomanip 19 在 C+中既可以用于文件输入又可以用于文件输出的流类是 ( )。 ( A) fstream ( B) ifstream ( C) ofstream ( D) iostream 20 下面

9、关于 C+流的叙述中,正确的是 ( )。 ( A) cin是一个输入流对象 ( B)可以用 ifstream定义一个输出流对象 ( C)执行语句序列 char *y=“PQMN“; cout y;将输出字符串 “PQMN“的地址 ( D)执行语句序列 char x80; cin getline(x,80);时,若键入 Happy new year则x中的字符串是 “Happy“ 21 有如下程序 #include iostream #include iomanip using namespace std; int main() cout setprecision(3) fixed setfil

10、l(*) setW(8); cout 12 345 _ 34 567; return 0; 若程序的输出是: *12 345*34 567 则程序中下划线处遗漏的操作符是 ( )。 ( A) setprecision(3) ( B) fixed ( C) setfill(*) ( D) setw(8) 22 有如下 4个语句: cout A setfill(*) lefc setw(7) B endl; cout setfill(*) left setw(7) A B endl; cout A serfill(*) right setw(7) B endl; cout setfill(*) r

11、ight setw(7) A B endl; 其中能显示 A*B的是 ( )。 ( A) 和 ( B) 和 ( C) 和 ( D) 和 23 有如下程序: include iostream include iomanip using namespace std; int main() int s=123, 234; cout right setfill(*) setw(6); for(int i=0; i 2; i+)cout si endl; return 0; 运行时的输出结果是 ( )。 ( A) 123 234 ( B) *123 234 ( C) *123 *234123 ( D)

12、*123 234* 24 下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 ( )。 ( A) cout intemal 12345; ( B) cout left 12345; ( C) cout right 12345; ( D) cout setw(6) 12345; 25 有如下程序: #include iostream #include iomanip using namespace std; int main() cout setfill(#) setw(4) “OK“ 123 endl; return 0; 运行这个程序的输出结果是 (

13、 )。 ( A) OKl23 ( B) OK123 ( C) OK 123 ( D) OK 123 26 如下函数的作用是以 双倍行距输出文件: void double_space(ifstream&f, ofstream&t) char c; while(_) ; _ if( c= n)t put(c); 画线处缺失的部分是 ( )。 ( A) f get(c)与 t put(c) ( B) f put(c)与 t get(c) ( C) t get(c)与 f put(c) ( D) t put(c)与 f get(c) 27 要建立文件流并打开当前目录下的文件 rile dat用于输入,

14、下列语句 中错误的是 ( )。 ( A) ifstream fin=ifstream open(“tile dat“); ( B) ifStream *tin=new ifstream(“tile dat“); ( C) ifstream tin; tin open(“tile daf“); ( D) ifstream *fin=new ifstream(); tin- open(“file dat“); 28 打开文件时可单独或组合使用下列文件打开模式 ios_base: app ios_base: binary ios_base: in ios_base: out 若要以二进制读方式打开一

15、个文件,需使用的文件打开模式为 ( )。 ( A) ( B) ( C) ( D) 29 如需要向一个二进制文件尾部添加数据,则该文件的打开方式为 ( )。 ( A) ios_base: app ( B) ios_base: binary ios_base: out ( C) ios_base: out ( D) ios_base: binary ios_base: app 国家二级 C+机试(运算符重载、 C+流)模拟试卷 2答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 此题考查的是运算符重载的概念。 C+语言规定, “ ”、 “ *”、“- *”、 “: ”和 “?: ”这五个

16、运算符不能被重载,故选项 A错误:运算符函数的返回类型由该运算符所组成的表达式的值的类型来决定,故选项 B说法是错误的;运算符重载是针对原有运算符,并不能通过重载创造出新的运算符,故选项D错误。 【知识模块】 运算符重载 2 【正确答案】 A 【试题解析】 此题考查的是运算符的重载。运算符重载为成员函数时,形 参个数一般为运算符元数减 1:重载为非成员函数时,形参个数一般和运算符元数相等。所以二元运算符重载为非成员函数时,参数表中应有两个参数, C选项错误;运算符重载为成员函数,若参数表中无参数,重载的是一元运算符,选项 A正确:一元运算符中, “-”(取负 )、 “+”、 “-”等均可重载为

17、成员函数; C+语言中,“ ”、 “ *”、 “- *”、 “: ”、 “?: ”五个运算符不能重载。 【知识模块】 运算符重载 3 【正确答案】 B 【试题解析】 运算符重载应该体现为原有运算符的功能在新的数据类型上的延伸。重 载的运算符保持原有运算符的操作个数、优先级和结合性三个最基本的特征。 【知识模块】 运算符重载 4 【正确答案】 A 【试题解析】 运算符重载应尽可能保持其原有的基本语义,而不是创建新的运算符。重载的运算符应该体现为原运算符的功能在新数据类型上的延伸,它的使用应当使程序中算法的表达式显得更流畅、自然,使阅读程序的人在不借助于其他说明资科的情况下就能够正确理解。 【知识

18、模块】 运算符重载 5 【正确答案】 B 【试题解析】 此题考查的是运算符的重载。运算符 “-”有一元和二元两种 ,在本题中它作为一个二元运算符,所以它不能更新对象的数据成员,也不能调用该类中没有 const修饰的成员函数。 【知识模块】 运算符重载 6 【正确答案】 D 【试题解析】 此题考查的是运算符的重载。 C+语言规定,不能作为非成员函数重载的运算符有 =、 、 ()、 -以及所有的类型转换运算符,故选项 A错误;运算符重载对返回值类型没有限制,故选项 B错误; C+并不强制要求非成员重载的运算符一定是某个类的友元,所以 C选项错误;题目中重载的 “+”运算符的两个参数都是 int类型

19、,而 C+已经提供了求两 个 int型数据之和的运算符 +,编译器无法区分应该调用哪一个,所以应该选择 D选项。 【知识模块】 运算符重载 7 【正确答案】 A 【试题解析】 此题考查的是运算符重载。本题中,选项 A重载运算符 “-”使用的形参是两个 double,而系统中的 “*”运算原本就能计算两个 double,所以这样违反了重载函数的原则,当执行 a*b这样的表达式时,系统不能识别是否执行运算符重载函数。故答案是 A选项。 【知识模块】 运算符重载 8 【正确答案】 C 【试题解析】 运算符函数作为非成员函数时, 没有隐含的 this指针,因此所有的操作数必须出现在参数表中,对于二元运

20、算符,参数表中有两个参数,分别代表第一操作数和第二操作数,且顺序不能改变。 【知识模块】 运算符重载 9 【正确答案】 B 【试题解析】 对于一元或二元运算符函数作为成员函数重载时,第一操作数就是对象本身,并不显式地出现在参数表中。即第一操作数仅以 this指针的形式隐含存在于参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。 【知识模块】 运算符重载 10 【正确答 案】 A 【试题解析】 赋值运算符 “=”只能作为成员函数重载。 【知识模块】 运算符重载 11 【正确答案】 B 【试题解析】 “+”是一个二元运算符,因此作为成员函数重载时参数

21、表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字 operator构成的。 【知识模块】 运算符重载 12 【正确答案】 B 【试题解析】 在 c+中, =、 、 ()、 -以及所有的类型转换运算符只能作为成员函数重载。 【知识模块】 运算 符重载 13 【正确答案】 D 【试题解析】 “*”是一个二元运算符,在作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数就是对象本身,仅以 this指针的形式隐藏在参数表中。 【知识模块】 运算符重载 14 【正确答案】 A 【试题解析】 此题考查的是运算符重载的概念。 C+语

22、言规定, =、 、 ()、 -以及所有的类型转换运算符只能作为成员函数重载,如果要重载为友元函数就必须重载为非成员函数。 【知识模块】 运算符重载 15 【正确答案】 A 【试题解析】 此题考查的是 C+流的概念。从输入流中提取数据称为提取操作,把表达式插入到输出流中的操作称为插入操作,故选项 B错误: cin是一个预定义的输入流对象而不是流类,故选项 C错误:输入输出流中没有 open成员函数,故选项 D错误。 【知识模块】 C+流 16 【正确答案】 A 【试题解析】 此题考查的是 C+流。 C+操作符 setw()的作用是设置输入输出宽度,且只对当前一次有效,并非永久有效,故选项 A叙述

23、错误。 【知识模块】 C+流 17 【正确答案】 B 【试题 解析】 cin为 istream流类的对象。 【知识模块】 C+流 18 【正确答案】 D 【试题解析】 要使用 setw、 fixed等操作符,须包含 iomanip这个文件。 【知识模块】 C+流 19 【正确答案】 A 【试题解析】 文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。 ifstream是文件输入流类; ofstream是文件输出流类, fstream是文件输入输出流类,当使用 cin、 cout的预定义流对象进行针对标准设备的 I O操作,则需要使用 iostream文件。 【知识模块】 C

24、+流 20 【正确答案】 A 【试题解析】 此题考查的是 C+流的概念和 I O的格式化。 cin是类的对象,亦即输入流对象; ifsream是输入文件流类,不能定义一个输出流对象: C选项中最后输出的是字符串 “PQMN”; D选项中 x中字符串应该是 “Happy new year”。 【知识模块】 C+流 21 【正确答案】 D 【试题解析】 此题考查的是输出函数的格式控制。此题中,操作符 setprecision的作用是设置浮点数的精度; fixed的作用是让浮点数按定点格式输出: setfill的作用是设置填充字符: setw的作用是设置输入输出的宽度,一次有效的设置。下划线处应填一

25、个让 34 567的输出宽度为 8的操作符,即 setw(8)。 【知识模块】 C+流 22 【正确答案】 C 【试题解析】 此题考查 C+流的使用。 setfill()作用是设置填充字符; left是使输出数据在指定宽度内左对齐: fight是使输出数据在指定宽度内右对齐。 【知识模块】 C+流 23 【正确答案】 B 【试题解析】 在输出语 句中定义了输出的格式是字符宽度为 6,并且向右对齐,不足的位用 *补齐。在 C+中,输出格式的设置只对第一次输出有效,在完成了一个数据的输出后,宽度设置自动恢复为 O(表示按数据实际宽度输出 )。所以对于本题来说,在循环语句中输出数组 s0中的元素时,

26、按照规定的格式输出,其结果为 *123,当输出 s1时,输出格式已经恢复到按数据实际宽度输出,所以此时输出为 234。 【知识模块】 C+流 24 【正确答案】 D 【试题解析】 选项 A), B), C)都没有指输出数据的宽度,所以在输出时,按实际字符的宽度输出,而选项 D)指定输出字符的宽度为 6,而实际输出的宽度等于5,所以最后一个字符用空格补齐。 【知识模块】 C+流 25 【正确答案】 A 【试题解析】 setfill是设置填充字符 setw设置输出的宽度,它们的作用表现在紧接着输出的字符串上。这个宽度是填充后的宽度。所以 cout setfill( )setw(4) “OK“ 12

27、3中, setfill和 setw只作用在 “OK“,表示在 “OK“前面填充 2个。 【知识模块】 C+流 26 【正确答案】 A 【试题解析】 此题考查的是文件流。 get()函数作用是读入一个字符,所以调用它的应该是输入文件流 ifstream对象 f; put()函数作用是输出一个字符,所以调用它的应该是输入文件流 ofstream对象 t,故选项 B、 C排除。读入和输出应该是有顺序的,应该先读入后输出,所以前一空填 f get(c),后一空填 t put(c)。 【知识模块】 C+流 27 【正确答案】 A 【试题解析】 在选项 A中,在赋值号的左侧表示建立一个输入流对象 fin,而在赋值号的右侧的表达式不正确,因为文件输 入流类 ifStream不能直接调用其成员函数 open。 【知识模块】 C+流 28 【正确答案】 D 【试题解析】 模式 ios_base: binary作为二制进文件打开, ios_base: out为输出而打开文件。 【知识模块】 C+流 29 【正确答案】 D 【试题解析】 ios_base: binary模式是作为二进制文件打开, ios_base: app模式是作为添加数据而打开 (总是在尾部写 )。 【知识模块】 C+流

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1