1、二级 C+-172 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:29,分数:72.00)1.C+流中重载了运算符,它是一个_。(分数:2.50)A.用于输出操作的成员函数B.用于输入操作的成员函数C.用于输入操作的非成员函数D.用于输出操作的非成员函数2.语句 ofstream f(“DATA.DAT“,ios_base:app |ios_base:binary);的功能是建立流对象 f,并试图打开文件 DATA.DAT 并与之连接,而且_。(分数:2.50)A.若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件B.若文件存在,将其截为空文件;若文件
2、不存在,打开失败C.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件3.在进行了任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入操作的函数的函数名是_。(分数:2.50)A.failB.eofC.badD.good4.执行语句序列 ofstream outfile(“DATA. DAT“); if(.)cout“OK“;else cout“FAIL“; 后,如果文件打开成功,显示“OK”,否则显示“FAIL”。由此可知,上面 if 语句的处的表达式是_。(分数:2.50)A.outfil
3、e.fail()或 outfileB.outfile.good()或!outfileC.out.file.good()或 outfileD.outfile.fail()或!outfile5.下列关于函数的说法中,正确的是(分数:2.50)A.C+允许在函数体中定义其他函数B.所有的内联函数都要用 inline 说明C.仅函数返回类型不同的同名函数不能作为重载函数使用D.有默认值的参数应从左至右逐个定义6.下列关于构造函数的说法中,正确的是(分数:2.50)A.构造函数不能重载B.构造函数的返回值为 voidC.构造函数中可以使用 this 指针D.用户必须为定义的类提供构造函数7.下列不属于
4、C+规定的类继承方式的是(分数:2.50)A.protectiveB.privateC.protectedD.public8.下列关于运算符重载的说法,错误的是(分数:2.50)A.new 和 delete 运算符可以重载B.重载运算符不能改变其原有的操作数个数C.三元运算符“?:”不能重载D.所有运算符既可以作为类的成员函数重载,又可以作为非成员函数重载9.下列关于函数模板的说法,正确的是(分数:2.50)A.在定义模板参数时关键字 typename 和 class 可以互换B.函数模板的形参表中只能有虚拟类型参数C.调用函数模板时,模板实参永远不能省略D.在函数模板的声明中,只能使用 1
5、个虚拟类型参数10.下列不属于 C+预定义的流对象的是(分数:2.50)A.cfileB.cinC.coutD.clog11.下列不属于 C+关键字的是(分数:2.50)A.defaultB.unsignedC.goD.try12.若变量 a 的定义为“int a=8;”,则下列逻辑表达式中其值为 false 的是(分数:2.50)A.a do i *=i; cout“#“; if(i1000) break; while(1); 运行这个程序段时,输出字符“#“的个数是(分数:2.50)A.3B.4C.5D.614.有如下程序段: int *a=new int2; a0=0; a1=1; in
6、t *b= cout*b; 运行这个程序段将输出(分数:2.50)A.整数 1B.a0的地址C.a1的地址D.整数 015.已知函数 foo 定义如下: void foo(int a, intb+;(*c)+; 且有如下程序段: int a=1,b=2,c=3; foo(a,b, coutabc; 运行这个程序段的输出是(分数:2.50)A.134B.123C.234D.编译错误16.已知类 MyClass 的定义如下: #include iostream using namespace std; class MyClass private: static int static:_data;
7、const int const_data; public: MyClass(int d):const_data(d) static void fool() coutconst_data; / void foo2()const coutstatic_data;/ ; int MyClass:static_data=0; 下列说法中正确的是(分数:2.50)A.编译时语句有错B.编译时语句有错C.编译时语句均有错D.编译时语句均无错17.已知类 Base 和类 Derived 的定义如下: class Base int n; public: Base(int d):n(d) ; class Der
8、ived: public Base public: _ ; 其中横线处应为类 Derived 的构造函数的定义。在下列构造函数的定义中,正确的是(分数:2.50)A.Derived(int i)Base(i);B.Derived(int i):Base(i)C.Derived(int i)n=i;D.Derived(int i):n(i)18.已知类 CC 以成员函数方式重载了二元运算符*,c1 和 c2 是 CC 类的两个对象,则下列对该运算符的调用中错误的是(分数:2.50)A.c1*c2;B.c1.operator*(c2);C.operator*(c1,c2);D.c2.operato
9、r*(c1);19.已知类模板 Test 定义如下: template typename T1, typename T2 class Test public: void foo(T2 t); ; 则以下针对 foo 函数的类外定义中语法正确的是(分数:2.50)A.template typename T1, typename T2 void Test:fooT2(T2 t)B.template typename T1, typename T2 void Test:fooT1,T2(T2 t)C.template typename T1, typename T2 void TestT2:foo(
10、T2 t)D.template typename T1, typename T2 void TestT1,T2:foo(T2 t)20.有如下输出语句: coutsetw(5)fixedsetprecision(3)3.1415926; 此语句的输出结果是(分数:2.50)A.3.141B.3.142C.3.1415D.3.141621.已知类 MyClass 的定义如下: class MyClass private: int num; public: MyClass(int d):num(d) MyClass(const MyClass 且有如下程序段: MyClass c(5); MyCl
11、ass *p1; p1= print(*p1); print(c); 运行这个程序段的过程中,对类 MyClass 的复制构造函数的调用次数是(分数:2.50)A.4B.3C.2D.122.已知类 Test 的定义如下: class Test private: static int num; public: void print(int num) cout+num; cout+this-num: ; int Test:num=0; 且有如下程序段: int main() Test t1.t2; t1. print(0); t2. print(1); return0; 运行这个程序段的输出是(分
12、数:2.50)A.1234B.1233C.1122D.122323.已知类 CC 和函数 test 的定义如下: class CC public: CC()cout“1“; CC()cout“0“; ; void test(CC c)cout“2“; 且有如下 main 函数: int main() CC c; test(c); return0; 运行这个 main 函数的输出是(分数:2.50)A.1200B.11200C.1020D.112024.已知类 AA 和 BB 的定义如下: class AA public: AA() cout“0“; AA() cout“1“; ; class
13、BB:public AA public: BB()cout“2“; BB()cout“3“; ; 且有如下主函数定义: int main() BB b: return0; 运行这个 main 函数的输出是(分数:2.50)A.0123B.0213C.2013D.023125.已知类 Base、Middle 和 Derived 的定义如下: class Base public: virtual void foo()cout“a“; ; class Middle: public Base public: void foo()cout“b“; ; class Derived: public Midd
14、le public: void foo()cout“c“; ; 且有如下程序段: Base *p1; Middle *p2; Derived d; p1= p1-foo(); p2= p2-foo(); 运行这个程序段的输出是(分数:2.50)A.aaB.bbC.ccD.ab26.类 Base 及其派生类 Derived 的定义如下: class Base private: int a; public: int b; friend class Derived; ; class Derived: public Base public: void foo() a=0;/ b=0;/ ; 则下列说法
15、正确的是(分数:2.50)A.编译时语句有错B.编译时语句有错C.编译时语句和均有错D.编译时语句和均无错27.已知类 Time 的定义如下: class Time/时间类 private: int hour, minute, second;/时、分、秒 public: Time(int h,int m, int s):hour(h),minute(m),second(s) _ switch(index) case0: return hour; case 1: return minute; default: return second; ; 其中横线处应为下标访问运算符的重载函数的函数头,横线
16、处应填入的代码是(分数:2.50)A.int Array(int n=0) int start; if(n=1)start=n-1; else start=n; data0=start; data1=start+1; ; 且有如下程序段: Array arr(2); coutarr.data0arr.data1; 则执行这个程序段的输出是(分数:2.00)A.23B.32C.12D.21二、填空题(总题数:8,分数:28.00)30.在 ios_base 类中定义的用于控制输入输出格式的枚举常量中,用于控制对齐方式的 3 个常量的名字是 1。 (分数:3.50)31.在 ios_base 类中
17、定义的用于控制输入输出格式的枚举常量中,用于控制浮点数表示形式(科学计数法、定点表示法)的 2 个常量的名字是 1。 (分数:3.50)32.表达式 cout“/n“还可表示为 1。 (分数:3.50)33.有如下的程序: #include iostream #include fstream using namespace std; int main() char s25=“Programming language“; ofstream f1(“DATA.TXT“); f1“C+Programming“; f1.close(); ifstream f2(“DATA.TXT“); if(f2.g
18、ood()f2s; f2.close(); couts; return0; 执行上面的程序将输出 1。 (分数:3.50)34.下面的程序的输出是: TTTTTTTTTT5.23 5.23TTTTTTTTTT 请将下横线上遗漏部分补充完整: #include iomanip using namespace std; int main() double i=5.23; cout 1setw(14)i; coutendl 2setw( 3)i; return0; (分数:3.50)35.有如下的程序: #include iostream using namespace std; class AT
19、friend ostream at; ostream int main() cout“MyHome“at“isH“; return0; 执行上面的程序将输出 1。 (分数:3.50)36.有如下的程序: #include iostream #include cstring using namespace std; class rev char*s; public: rev(const char*s) this-s=new charstrlen(s)+1; strcpy(this-s,s); rev(rev for(int i=0;istrlen(r.s);i+)si=r.sstrlen(r.s
20、)-1-i; sstrlen(r.s)=0; rev() delete s; friend ostream ; ostreami=0;i-) osc.si; return os; int main() char *p=“Hello,world!“; rev hay(“Hay!“); coutrev(p)endl; coutrev(hay); return0; 执行上面的程序将输出 1。 (分数:3.50)37.有如下的程序: #include fstream using namespace std; int main () ofstream outf(“D: /temp“ ,ios_base:
21、trunc); outf“World Wide Web“; outf.close (); ifstream inf(“D: /temp“); char s20; infs; inf.close(); couts; return0; 执行上面的程序将输出 1。 (分数:3.50)二级 C+-172 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:29,分数:72.00)1.C+流中重载了运算符,它是一个_。(分数:2.50)A.用于输出操作的成员函数B.用于输入操作的成员函数C.用于输入操作的非成员函数D.用于输出操作的非成员函数 解析:2.语句 ofstream f(“
22、DATA.DAT“,ios_base:app |ios_base:binary);的功能是建立流对象 f,并试图打开文件 DATA.DAT 并与之连接,而且_。(分数:2.50)A.若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件B.若文件存在,将其截为空文件;若文件不存在,打开失败C.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件 D.若文件存在,打开失败;若文件不存在,建立一个新文件解析:3.在进行了任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入操作的函数的函数名是_。(分数:2.50)A.failB.eof C.b
23、adD.good解析:4.执行语句序列 ofstream outfile(“DATA. DAT“); if(.)cout“OK“;else cout“FAIL“; 后,如果文件打开成功,显示“OK”,否则显示“FAIL”。由此可知,上面 if 语句的处的表达式是_。(分数:2.50)A.outfile.fail()或 outfileB.outfile.good()或!outfileC.out.file.good()或 outfile D.outfile.fail()或!outfile解析:5.下列关于函数的说法中,正确的是(分数:2.50)A.C+允许在函数体中定义其他函数B.所有的内联函数都
24、要用 inline 说明C.仅函数返回类型不同的同名函数不能作为重载函数使用 D.有默认值的参数应从左至右逐个定义解析:6.下列关于构造函数的说法中,正确的是(分数:2.50)A.构造函数不能重载B.构造函数的返回值为 voidC.构造函数中可以使用 this 指针 D.用户必须为定义的类提供构造函数解析:7.下列不属于 C+规定的类继承方式的是(分数:2.50)A.protective B.privateC.protectedD.public解析:8.下列关于运算符重载的说法,错误的是(分数:2.50)A.new 和 delete 运算符可以重载B.重载运算符不能改变其原有的操作数个数C.三
25、元运算符“?:”不能重载D.所有运算符既可以作为类的成员函数重载,又可以作为非成员函数重载 解析:9.下列关于函数模板的说法,正确的是(分数:2.50)A.在定义模板参数时关键字 typename 和 class 可以互换 B.函数模板的形参表中只能有虚拟类型参数C.调用函数模板时,模板实参永远不能省略D.在函数模板的声明中,只能使用 1 个虚拟类型参数解析:10.下列不属于 C+预定义的流对象的是(分数:2.50)A.cfile B.cinC.coutD.clog解析:11.下列不属于 C+关键字的是(分数:2.50)A.defaultB.unsignedC.go D.try解析:12.若变
26、量 a 的定义为“int a=8;”,则下列逻辑表达式中其值为 false 的是(分数:2.50)A.a do i *=i; cout“#“; if(i1000) break; while(1); 运行这个程序段时,输出字符“#“的个数是(分数:2.50)A.3B.4 C.5D.6解析:14.有如下程序段: int *a=new int2; a0=0; a1=1; int *b= cout*b; 运行这个程序段将输出(分数:2.50)A.整数 1B.a0的地址C.a1的地址D.整数 0 解析:15.已知函数 foo 定义如下: void foo(int a, intb+;(*c)+; 且有如下
27、程序段: int a=1,b=2,c=3; foo(a,b, coutabc; 运行这个程序段的输出是(分数:2.50)A.134 B.123C.234D.编译错误解析:16.已知类 MyClass 的定义如下: #include iostream using namespace std; class MyClass private: static int static:_data; const int const_data; public: MyClass(int d):const_data(d) static void fool() coutconst_data; / void foo2(
28、)const coutstatic_data;/ ; int MyClass:static_data=0; 下列说法中正确的是(分数:2.50)A.编译时语句有错 B.编译时语句有错C.编译时语句均有错D.编译时语句均无错解析:17.已知类 Base 和类 Derived 的定义如下: class Base int n; public: Base(int d):n(d) ; class Derived: public Base public: _ ; 其中横线处应为类 Derived 的构造函数的定义。在下列构造函数的定义中,正确的是(分数:2.50)A.Derived(int i)Base(
29、i);B.Derived(int i):Base(i) C.Derived(int i)n=i;D.Derived(int i):n(i)解析:18.已知类 CC 以成员函数方式重载了二元运算符*,c1 和 c2 是 CC 类的两个对象,则下列对该运算符的调用中错误的是(分数:2.50)A.c1*c2;B.c1.operator*(c2);C.operator*(c1,c2); D.c2.operator*(c1);解析:19.已知类模板 Test 定义如下: template typename T1, typename T2 class Test public: void foo(T2 t)
30、; ; 则以下针对 foo 函数的类外定义中语法正确的是(分数:2.50)A.template typename T1, typename T2 void Test:fooT2(T2 t)B.template typename T1, typename T2 void Test:fooT1,T2(T2 t)C.template typename T1, typename T2 void TestT2:foo(T2 t)D.template typename T1, typename T2 void TestT1,T2:foo(T2 t) 解析:20.有如下输出语句: coutsetw(5)fi
31、xedsetprecision(3)3.1415926; 此语句的输出结果是(分数:2.50)A.3.141B.3.142 C.3.1415D.3.1416解析:21.已知类 MyClass 的定义如下: class MyClass private: int num; public: MyClass(int d):num(d) MyClass(const MyClass 且有如下程序段: MyClass c(5); MyClass *p1; p1= print(*p1); print(c); 运行这个程序段的过程中,对类 MyClass 的复制构造函数的调用次数是(分数:2.50)A.4B.3
32、C.2 D.1解析:22.已知类 Test 的定义如下: class Test private: static int num; public: void print(int num) cout+num; cout+this-num: ; int Test:num=0; 且有如下程序段: int main() Test t1.t2; t1. print(0); t2. print(1); return0; 运行这个程序段的输出是(分数:2.50)A.1234B.1233C.1122 D.1223解析:23.已知类 CC 和函数 test 的定义如下: class CC public: CC()
33、cout“1“; CC()cout“0“; ; void test(CC c)cout“2“; 且有如下 main 函数: int main() CC c; test(c); return0; 运行这个 main 函数的输出是(分数:2.50)A.1200 B.11200C.1020D.1120解析:24.已知类 AA 和 BB 的定义如下: class AA public: AA() cout“0“; AA() cout“1“; ; class BB:public AA public: BB()cout“2“; BB()cout“3“; ; 且有如下主函数定义: int main() BB
34、b: return0; 运行这个 main 函数的输出是(分数:2.50)A.0123B.0213C.2013D.0231 解析:25.已知类 Base、Middle 和 Derived 的定义如下: class Base public: virtual void foo()cout“a“; ; class Middle: public Base public: void foo()cout“b“; ; class Derived: public Middle public: void foo()cout“c“; ; 且有如下程序段: Base *p1; Middle *p2; Derived
35、 d; p1= p1-foo(); p2= p2-foo(); 运行这个程序段的输出是(分数:2.50)A.aaB.bbC.cc D.ab解析:26.类 Base 及其派生类 Derived 的定义如下: class Base private: int a; public: int b; friend class Derived; ; class Derived: public Base public: void foo() a=0;/ b=0;/ ; 则下列说法正确的是(分数:2.50)A.编译时语句有错B.编译时语句有错C.编译时语句和均有错D.编译时语句和均无错 解析:27.已知类 Ti
36、me 的定义如下: class Time/时间类 private: int hour, minute, second;/时、分、秒 public: Time(int h,int m, int s):hour(h),minute(m),second(s) _ switch(index) case0: return hour; case 1: return minute; default: return second; ; 其中横线处应为下标访问运算符的重载函数的函数头,横线处应填入的代码是(分数:2.50)A.int Array(int n=0) int start; if(n=1)start=
37、n-1; else start=n; data0=start; data1=start+1; ; 且有如下程序段: Array arr(2); coutarr.data0arr.data1; 则执行这个程序段的输出是(分数:2.00)A.23 B.32C.12D.21解析:二、填空题(总题数:8,分数:28.00)30.在 ios_base 类中定义的用于控制输入输出格式的枚举常量中,用于控制对齐方式的 3 个常量的名字是 1。 (分数:3.50)解析:left, right, internal31.在 ios_base 类中定义的用于控制输入输出格式的枚举常量中,用于控制浮点数表示形式(科学
38、计数法、定点表示法)的 2 个常量的名字是 1。 (分数:3.50)解析:fixed, scientific32.表达式 cout“/n“还可表示为 1。 (分数:3.50)解析:coutendl33.有如下的程序: #include iostream #include fstream using namespace std; int main() char s25=“Programming language“; ofstream f1(“DATA.TXT“); f1“C+Programming“; f1.close(); ifstream f2(“DATA.TXT“); if(f2.good
39、()f2s; f2.close(); couts; return0; 执行上面的程序将输出 1。 (分数:3.50)解析:C+34.下面的程序的输出是: TTTTTTTTTT5.23 5.23TTTTTTTTTT 请将下横线上遗漏部分补充完整: #include iomanip using namespace std; int main() double i=5.23; cout 1setw(14)i; coutendl 2setw( 3)i; return0; (分数:3.50)解析:setfill(“T“) left 1435.有如下的程序: #include iostream using
40、 namespace std; class AT friend ostream at; ostream int main() cout“MyHome“at“isH“; return0; 执行上面的程序将输出 1。 (分数:3.50)解析:MyHomeisH36.有如下的程序: #include iostream #include cstring using namespace std; class rev char*s; public: rev(const char*s) this-s=new charstrlen(s)+1; strcpy(this-s,s); rev(rev for(int
41、 i=0;istrlen(r.s);i+)si=r.sstrlen(r.s)-1-i; sstrlen(r.s)=0; rev() delete s; friend ostream ; ostreami=0;i-) osc.si; return os; int main() char *p=“Hello,world!“; rev hay(“Hay!“); coutrev(p)endl; coutrev(hay); return0; 执行上面的程序将输出 1。 (分数:3.50)解析:!dlrow,olleH Hay!37.有如下的程序: #include fstream using namespace std; int main () ofstream outf(“D: /temp“ ,ios_base:trunc); outf“World Wide Web“; outf.close (); ifstream inf(“D: /temp“); char s20; infs; inf.close(); couts; return0; 执行上面的程序将输出 1。 (分数:3.50)解析:World