1、国家二级 C+机试(运算符重载、模板和 C+流)模拟试卷 8及答案与解析 一、选择题 1 有如下程序: #include iostrearn using namespace std; int main() cout fill(*); cout width(6); cout fill(#); cout 123 endl; return 0; 执行后的输出结果是 ( )。 ( A) #123 ( B) 123# ( C) *123 ( D) 123* 2 下面关于 C+流的叙述中,正确的是 ( )。 ( A) cin是一个输入流对象 ( B)可以用 ifstream定义一个输出流对象 ( C)执行
2、语句序列 char*y=“PQMN; cout, y;将输出字符串 “PQMN”的地址 ( D)执行语句序列 char x80; cin getline(x,80);时,若键入 Happy new year 则 x中的字符串是 “Happy 3 有如下程序: #include iostream #include iomanip using namespace std; int main() cout fill(*); cout left setw(4) 123 OK endl; return 0; 执行这个程序的输出结果是 ( )。 ( A) 123*OK ( B) 123*OK* ( C)
3、*123OK ( D) *123*OK 4 下列关于输入流类成员函数 getline()的描述中,错误的是 ( )。 ( A)该函数是用来读取键盘输入的字符串的 ( B)该函数读取的字符串长度是受限制的 ( C)该函数读取字符串时,遇到终止符便停止 ( D)该函数读取字符串时,可以包含空格 5 有如下程序 #include iostream #include iomanip using namespace std; int main() cout setprecision(3) fixed setfill(*) setw(8); cout 12 345 _ 34 567; return 0:
4、若程序的输出是: *12 345*34 567 则程序中下划线处遗漏的操作符是 ( )。 ( A) setprecision(3) ( B) fixed ( C) setfill(*) ( D) setw(8) 6 使用输入输出操作符 setw,可以控制 ( )。 ( A)输出精度 ( B)输出宽度 ( C)对齐方式 ( D)填充字符 7 已知 一程序运行后执行的第一个输出操作是 ( )。 cout setw(10) setfill(*) 1234; 则此操作的输出结果是 ( A) 1234 ( B) *1234 ( C) *1234 ( D) 1234* 8 有如下 4个语句: cout A
5、 setfill(*) left setw(7) B endl; cout setfill(*) left setw(7) A B endl; cout A serfill(*) right setw(7) B endl; cout setfill(*) right setw(7) A B endl; 其中能显示 A*B的是 ( )。 ( A) 和 ( B) 和 ( C) 和 ( D) 和 9 下列语句分别是不同程序中的第一个输入输出语句,若去掉其中的 left“,输出效果将发生变化的是 ( )。 ( A) cout leR setfill(*) 357; ( B) cout left set
6、w(5) 357; ( C) cout left setw(5) ABCDE; ( D) cout left ABCDE; 10 假定下列语句都是程序运行后首次执行的输出语句,其中输出结果与另外三条语句不同的语句是 ( )。 ( A) cout setfill(*) 123 setw(9) 321; ( B) cout setfill(*) setw(6) left 123 setw(6) right 321; ( C) cout 123 setfill(*) setw(6) 321; ( D) cout setfill(*) setw(9) left 123 321; 11 有如下程序: #
7、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 *234 ( D) *123 234* 12 下列控制格式输入输出的操作符中,能够设置浮点数精度的是 ( )。 ( A) setprecision ( B) setw ( C) s
8、etfill ( D) showpoint 13 有如下程序: #include iostream #include iomanip using namespace std; int main() cout setw(10) setfill(x) setprecision(8) left; cout 12 3456793 _ 98765; return 0; 若程序的输出是 12 345679x98765xxxxx,则划线处缺失的部分是 ( )。 ( A) setw(10) ( B) setfill(x) ( C) setprecision(8) ( D) right 14 下列语句都是程序运
9、行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 ( )。 ( A) cout internal 12345; ( B) cout left 12345: ( C) cout right 12345; ( D) cout setw(6) 12345; 15 有如下程序: #include iomanip #include iostrearn using namespace std; int main() cout setfill(*) setw(6) 123 456; return 0; 运行时的输出结果是 ( )。 ( A) *123*456 ( B) *12345
10、6* ( C) *123456 ( D) 123456 16 下列控制对齐方式的操作符中,错误的是 ( )。 ( A) internal ( B) center ( C) left ( D) fight 17 有如下程序: #include iostrearm #include iomanip using namespace std; int main() cout setfill(#) setw(4) OK 123 endl; return 0; 运行这个程序的输出结果是 ( )。 ( A) #OK123 ( B) #OK#123 ( C) K#123 ( D) OK#123# 18 若磁盘
11、上已存在某个文本文件,其全路径文件名为 d: ncre test txt,下列语句中不能打开该文件的是 ( )。 ( A) ifstream file(d: ncre test txt); ( B) ifStream file(d: ncre test txt); ( C) ifstream file; file open(d: ncre test txt); ifstream(d: ncre test txt); ( D) ifstream*pFile=new 19 语句 ofstream f(SALARY DAT, ios_base: app);的功能是建立流对象 f,并试图打开文件 SA
12、LARY DAT与 f关联,而且 ( )。 ( A)若文件存在,将其置为空文件;若文件不存在,打开失败 ( B)若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件 ( C)若文件存在,将文件指针定位于文件首;若文件不存在,打开失败 ( D)若文件存在,打开失败;若文件不存在,建立一个新文件 20 如下函数的作用是以双倍行距输出文件 : void double_space(ifstream_ if(c= n)t put(c); 画线处缺失的部分是 ( )。 ( A) f get(c)与 t put(c) ( B) f put(c)与 t get(c) ( C) t get(c)与
13、f put(c) ( D) t put(c)与 f get(c) 21 要利用 C+流进行文件操作,必须在程序 中包含的头文件是 ( )。 ( A) iostream ( B) fstrearn ( C) strstream ( D) iomanip 22 当使用 ofstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为 ( )。 ( A) ios base: :in ( B) ios_base: binary ( C) ios_base: inlios_base: out ( D) ios_base: out 23 要建立文件流并打开当前目录下的文件 file dat用于
14、输入,下列语句中错误的是 ( )。 ( A) ifstream fin=ifstream open(file dat); ( B) itstream*fin=ew ifstream(file dat); ( C) ifstream fin; fin open(file dat); ( D) ifstream*fin=new ifstream0; fin- open(file dat); 24 当使用 ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为 ( )。 ( A) ios_base: fin ( B) ios_base: in ios_base: out ( C
15、) ios base: out ( D) ios base: in&ios base: out 25 在下列枚举符号中,用来表示 “相对于当前位置 ”文件定位方式的是 ( )。 ( A) ios_base: cur ( B) ios_base: beg ( C) ios_base: out ( D) ios_base: end 26 打开文件时可单独或组合使用下列文件打开模式 ( )。 ios_base: : app ios_base: binary ios_base: in ios_base: out 若要以二进制读方式打开一个文件,需使用的文件打开模式为 ( A) ( B) ( C) (
16、D) 27 下列关于文件流的描述中,正确的是 ( )。 ( A)文件流只能完成针对磁盘文件的输入和输出 ( B)建立一个文件流对象时,必须同时打开一个文件 ( C)若输入流要打开的文件不存在,将建立一个新文件 ( D)若输出流要打开的文件不存在,将建立一个新文件 28 若目前 D盘根目录下并不存在 test txt文件,则下列打开文件方式不会自动创建 test txt文件的是 ( )。 ( A) ifstream fin; fin open(d: test txt, ios_base: in); ( B) fstream rio; fio open(d: test txt, ios_base:
17、 out); ( C) ofstream lout; fout open(d: test txt, ios_base: out); ( D) ofstream fout; fout open(d: test txt, ios_base: app); 29 如需要向一个二进制文件尾部添加数据,则该文件的打开方式为 ( )。 ( A) ios_base: app ( B) ios_base: binary los_base: out ( C) ios_base: out ( D) ios_base: binary ios_base: app 30 有如下语句序列: ifstream inffie(
18、DATA DAT); if(infile good()cout A; else tout B; ofstream outfile(DATA DAT); if(outfile fail()cout C; else cout D; 若执行这个语句序列显示的是 BD,则说明文件 DATA DAT( )。 ( A)以读方式打开成功 ( B)以读方式打开失败,但以写方式打开成功 ( C)以读方式打开失败,以写方式打开也失败 ( D)以读方式打 开成功,以写方式打开也成功 国家二级 C+机试(运算符重载、模板和 C+流)模拟试卷 8答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 此题考查的是
19、I O格式化输出。函数 width(int n)设置输入输出宽度,当实际数据宽度小于制定的宽度时,多余的位置用填充字符填满;当实际数据宽度大于设置的宽度时,仍按实际宽度输出;函数 fill(char c)用来设置填充字符。 【知识模块】 C+流 2 【正确答案】 A 【试题解析】 此题考查的是 C+流的概念和 I O的格式化。 cin是类的对象,亦即输入流对象; ifstream是输入文件流类,不能定义一个输出流对象: C选项中最后输出的是字符串 “PQMN”: D选项中 x中字符串应该是 “Happy new year”。 【知识模块】 C+流 3 【正确答案】 A 【试题解析】 此题考查了
20、输出流的格式控制。 cout的 fill()是设置填充字符: left和 endl分别是使输出数据左对齐和换行; setw()函数的作用是设置输入输出的宽度,此设置效果只对以此输入或输出有效。此题中,输出整数 123时宽度为 4且左对齐,得到 “123*”;输出字符串 “OK”时宽度没有定义实际大小输出,结果得到OK:故最后得到的输出结果是 123*K。 【知识模块】 C+流 4 【正确答案】 A 【试题解析】 此题考查的是 getline()函数。 getline()函数的原型为:istream_type&getline(char_type*s,strearnsize,char_typede
21、lim);。其功能是从当前输入位置开始提取字符存入 s所指向的具有 n个字节的字符空间中。遇到以下情况时停止:已提取并存储了 n-1个字符;到流尾,无字符可取: 下一个要提取的字符等于结束标志字符 delim。故选项 B、 C、 D都是正确的。 getline()函数不仅可以用来读取键盘输入的字符串,还可以用来读取文件等数据流,故选项 A错误。 【知识模块】 C+流 5 【正确答案】 D 【试题解析】 此题考查的是输出函数的格式控制。此题中,操作符 setprecision的作用是设置浮点数的精度; fixed的作用是让浮点数按定点格式输出; setfill的作用是设置填充字符; setw的作
22、用是设置输入输出的宽度,一次有效的设置。下划线处应填一个让 34 567的输出 宽度为 8的操作符,即 setw(8)。 【知识模块】 C+流 6 【正确答案】 B 【试题解析】 此题考查的是 C+流的操作符。在 C+流中,操作符 setw的作用是设置输入输出宽度。 【知识模块】 C+流 7 【正确答案】 B 【试题解析】 此题考查的是输入输出的格式控制。 setw()控制的是输入输出的宽度; setfill()控制的是输出的填充字符。所以本题的输出结果是 *1234。 【知识模块】 C+流 8 【正确答案】 C 【试题解析】 此题考查 C+流的使用。 setfill()作用是设置填充字符;
23、left是使输出数据在指定宽度内左对齐: fight是使输出数据在指定宽度内右对齐。 【知识模块】 C+流 9 【正确答案】 B 【试题解析】 此题考查的是 C+流。 setfill()作用是设置填充字符; left是使输出数据在指定宽度内左对齐; setw()的作用是设置输入输出宽度,且只对当前一次有效。 【知识模块】 C+流 10 【正确答案】 B 【试题解析】 按照选项 B的输出格式控制符输出的结果为 “123*321”,而按照选项 A、 C、 D的输出格式控制符输出的结果为 “123*321”。 【知识模块】 C+流 11 【正确答案】 B 【试题解析】 在输出语句中定义了输出的格式是
24、字符宽度为 6,并且向右对齐,不足的位用 *补齐。在 C+中,输出格式的设置只对第一次输出有效,在完成了一个数据的输出后,宽度设置自动恢复为 0(表示按数据实际宽度输出 )。所以对于本题来说,在循环语句中输出数组 s0中的元素时,按照规定的格式输出,其结果为 *123,当输出 s1时,输出格式已经恢复到按数据实际宽度输 出,所以此时输出为 234。 【知识模块】 C+流 12 【正确答案】 A 【试题解析】 setprecision(int n):设置浮点数的精度 (有效位数或小数位数 ),等价函数调用: ioprecision(n)。 【知识模块】 C+流 13 【正确答案】 A 【试题解析
25、】 根据程序输出的结果最后 5个位置用 x进行填充,又因为 setw(10)设置输出的宽度效果只对一次输出有效。所以划线处应该填写 setw(10)。 【知识模块】 C+流 14 【正确答案】 D 【试题解析】 选项 A, B, C都没有指输出数据的宽度,所以在输出时,按实际字符的宽度输出,而选项 D指定输出字符的宽度为 6,而实际输出的宽度等于 5,所以最后一个字符用空格补齐。 【知识模块】 C+流 15 【正确答案】 C 【试题解析】 在主函数中第一次输出时调用函数 setfill(*)设置填充字符为 *,调用函数 setw(6)设置每次输出的宽度为 6,所以第一次输出 123时,多余的三
26、个空位用 *填充,即结果为 *123,第二次从输出流中输出 456。 【知识模块】 C+流 16 【正确答案】 B 【试题解析】 对齐方式的控制操作符 left的含义是在设定的宽度内左对齐输出,右端填已设定的填充字符: right(此为默认设置 )在设定的宽度内右对齐输出;intemal在设定的宽度内右对齐输出,但若有符号 (-或 +),符号置于最左端。 【知识模块】 C+流 17 【正确答案】 A 【试题解析】 setfill是设置填充字符, setw设置输出的宽度,它们的作用表现在紧接着输出的字符串上。这个宽度是填充后的宽度。所以 cout setfill(#)setw(4) OK 123
27、中, setfill和 s6tw只作用在 OK,表示在 OK前面填充 2个 #。 【知识模块】 C+流 18 【正确答案】 A 【试题解析】 此题考查的是转义字符。在字符常量或字符串中,以 “ ”开头的一系列字符被看做是一个转义字符。要表示 “ ”字符,必须使用转义字符 “ ”。 【知识模块】 C+流 19 【正确答案】 B 【试题解析】 此题考查的是文件打开模式。文件打开模式 iso base: app是为添加数据而打开 (总是在尾部写 ),故 只有选项 B说法正确。 【知识模块】 C+流 20 【正确答案】 A 【试题解析】 此题考查的是文件流。 get()函数作用是读入一个字符,所以调用
28、它的应该是输入文件流 ifstream对象 f put()函数作用是输出一个字符,所以调用它的应该是输入文件流 ofstre锄对象 t,故选项 B、 C排除。读入和输出应该是有顺序的,应该先读入后输出,所以前一空填 fget(c),后一空填 t put(c)。 【知识模块】 C+流 21 【正确答案】 B 【试题解析】 要使用文件流对象进行针对磁 盘文件的 I O操作,必须包含fstrem头文件。 【知识模块】 C+流 22 【正确答案】 D 【试题解析】 对于 ofstream,默认的打开方式是 ios_base: out, ofstream只能用于输出,它没有提供任何用于输入的操作。 【知
29、识模块】 C+流 23 【正确答案】 A 【试题解析】 在选项 A中,在赋值号的左侧表示建立一个输入流对象 fin,而在赋值号的右侧的表达式不正确,因为文件输入流类 ifstream不能直接调用其成员函数 open。 【知识模块】 C+流 24 【正确答案】 A 【试题解析】 对于 ifstream,默认打开模式是 ios_base: in。 ifstream只能用于输入,它没有提供任何用于输出的操作。 【知识模块】 C+流 25 【正确答案】 A 【试题解析】 C+流的定位方式 (也就是指针移动方式 )有三种,被定义为ios_base: seek dir中的一组枚举符号: ios base:
30、 beg相当于文件首; ios base: cur相当于当前位置 (负数表示当前位置之前 ); ios base: end相对于文件尾。 【知识模块】 C+流 26 【正确答案】 D 【试题解析】 模式 ios_base: binary作为二制进文件打开, ios_base: out为输出而打开文件。 【知识模块】 C+流 27 【正确答案】 D 【试题解析】 对于输入文件流类 ifstream,默认的打开模式是 ios base: in,当以这种方式打开文件而文件又不存在时,通过 fail()可测试打开失败 (返回值为true),对于输出文件流类 ofstream,默认的打开模式是 ios_
31、base: out,当以这种方式打开文件而文件又不存在时,将自动建立新文件。 【知识模块】 C+流 28 【正确答案】 A 【试题解析】 如果以 iso_base: in模式打开文件但文件又不存在时,可以通过fail()测出文件打开失败,不会自动创建文件。 【知识模块】 C+流 29 【正确答案】 D 【试题解析】 ios_base: binary模式是作为二进制文件打开, ios_base: app模式是作为添加数据而打开 (总是在尾部写 )。 【知识模块】 C+流 30 【正确答案】 B 【试题解析】 由这个语句序列显示的结果是 BD,说明执行了 cout B和cout “D“语句。 【知识模块】 C+流