1、国家二级 C+机试(操作题)模拟试卷 236及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 cpp,该程序运行时有错误,请改正错误,使得程序输出: Hello test 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include iostream *error* template T void fun(T t) std: cout “test“ std: endl; *error* template bool void fun(bool t) std: cout (t?“Hello“: “H
2、i“) Std: endl; int main() *error* bool flag=TRUE; fun(flag); fun(int)flag); return0; 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。请完成函数fun(char*s),该函数完成以下功能: (1)把 S中的大写字母转换成小写字母,把其中的小写字母转换成大写字母。并且在函数中调用写函数 WriteFile()将结果输出到 modi2 txt文件中。 例如: s=“helloTEST“,则结果为: s=“HELLOtest“ (2)完成函数 WriteFile(char*s),把字
3、符串输入文件中。 提示:打开文件使用的第二参数为 ios base: binary|ios_base: app。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 #include iostream #include fstream #include cmath USing namespace std; void WriteFile(char*s) void fun(char*s) void ClearFile() ofstream out1; out1 open(“modi2 txt“); out1 close(); int main() ClearFile(); c
4、har s1024; cout “please input a string: “ endl; cin getline(s, 1024); fun(s); return0; 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。通过继承完成输入到屏幕指定的信息: TestClassA TestClassB TestClassC 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)完成类 B虚继承于 A,请在注释 *1*后添加适当的语句。 (2)完成类 C虚继承于 A,请在注释 *2*后添加适当的语句。 (3)完成类 D继承于 B, C,请在注释 *
5、3*后添加适当的语句。 (4)函数 fun通过调用基类的 fun,完成所输出的内容,请在注释*4*后添加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #include iostream h class TestClassA public: void fun() cout “TestClassA“ endl; ; *1* Class TestClassB public: void fun() cout “TestClassB“ endl; ; *2* classTestClassC public: void fun() cout “TestCla
6、ssC“ endl; ; *3* class TestClassD public: void fun() *4* ; void main() TestClassD test; test fun(); return; ; 国家二级 C+机试(操作题)模拟试卷 236答案与解析 一、基本操作题 1 【正确答案】 (1)template class T (2)删除 “template bool ” (3)bool flag=true; 【试题解析】 (1)C+中的模板类格式为 template class T,所以将题目中程序中的第 1个标识下语句 “template T ”修改为 “templat
7、e class T ”。 (2)在第 2个标识下的 “void fun(bool t)”函数中,其中 t变量为布尔型变量,是 C+中的基础变量,并不是模板变量,并没有使用到模板类,所以删除第 2个标识下的模板类型定义语句。 (3)第 3个标识下的 “bool flag=TRUE; ”是声明布尔型变量 flag,并将其值赋为逻辑真。而 TRUE并不是合法值, C+中区分大小写,所以逻辑真值应为 true,即“bool flag=true; ”。 二、简单应用题 2 【正确答案】 (1)void WriteFile(char*s)中的命令语句: ofStream out1; out1 open(“
8、modi2 txt“, ios_base: binary|ios_base: app);打开文件modi2 out1 s;写入字符串 s out1 close(); (2)void fun(char*s)中的命令语句: for(int i=0; Si!=0; 1+)循环判断每一个字符 if(si =A&si =Z)如果是大写字符,转换为小写字符 si=si-A+a; si-A+a等于字符 si+32 Else if(si =a&si =z)如果是小写字符,转换为大写字符 si=si-a+A; si-a+A等于字符 si-32 WriteFile(s); 【试题解析】 (1)在 WriteFil
9、e(char*s)函数中,利用标准流 ofstream实现字符串写入文件 modi2 txt。 (2)在 fun函数中,利用 for循环逐个判断字符是大写还是小写。 (3)如果是大写,那么加上 32实现大写转换为小写。否则,就减去 32,实现小写到大写的转换。最后调用前面实现的 WriteFile函数,将字符串写入文件。 三、综合应用题 3 【正确答案】 (1)将 “class TestClassB: ”补充完整为: class TestClassB: virtual public TestClassA (2)将 “class TestClassC: ”补充完整为: class TestCla
10、ssC: virtual public TestClassA (3)将 “class TestClassD: ”补充完整为: class TestClassD: public TestClassB, public TestClassC (4)添加语句: TestClassA: fun(); TestClassB: fun(); TestClassC: fun(); 【试题解析】 (1)题目 1要求 “完成类 B虚继承于 A”。在 C+中,声明虚基类的一般形式为: class派生类名: virtual继承方式基类名,由题目知道 TestClassA为基类, TestClassB为派生类,所以第 1个标识下修改为 “class TestClassB: virtual ptiblic TestClassA”。 (2)同 (1),题目 2和题目 3中要求的标识 2和 3下的语句修改为 “class TestClassC:virtual public TestClassA”和 “class TestClassD: public