1、国家二级 C+机试(操作题)模拟试卷 22及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错误,请改正错误,使得程序输出: Hello test 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 1 #include 2 *error* 3 七 emplate 4 void fun(T t) 5 6 std: cout 10 void fun(bool t) 11 12 std: cout 2 #include 3 #define MAXLEN 1024 4 char* con
2、vert(char*des, char*str) 5 6 7 8 void main() 9 10 char destMAXLEN; 11 char*string=“abe def “; 12 cout 2 class TestClass0 3 4 public: 5 *1* 6 7 ; 8 *2* 9 class TeStClassl 10 11 public: 12 void fun() 13 14 coutfun(); 25 return 0; 26 国家二级 C+机试(操作题)模拟试卷 22答案与解析 一、基本操作题 1 【正确答案】 (1)template (2)删除 “templa
3、te” (3)bool flag=true; 【试题解析】 程序要求输出字符串 Hello test。从已定源程序的 main主函数开始入手,调用函数 fun实现字符的输出。 解题思路 (1)C+中的模板类格式为 template,所以将题目中程序中的第 1个标识下语句 “template”修改为 “template”。 (2)在第 2个标识下的 “void fun(bool t)”函数中,其中 t变量为布尔型变量,是C+中的基础变量,并不是模板变量,并没有使用到模板类,所以删除第 2个标识下的模板类型定义语句。 (3)第 3个标识下的 “bool flag=TRUE; ”是声明布尔型变量 f
4、lag,并将其值赋为逻辑真。而 TRUE并不是合法值, C+中区分大小写,所以逻辑真值应为 true,即 “bool flag=true; ”。 二、简单应用题 2 【正确答案】 1 int length=0; 2 int i ; 3 for(length=0 ; strlengch !=NULL; length+); 求数组长度 4 length一一; 下标从 0 len=1,下标减 1表示最后一个字符的下标值 5 for(i=length; i=0 ; i-) 6 7 if(stri!= ) 判断结尾是否有空格,从后往前判断直到不是不是空格了跳出循环 8 break ; 9 10 for(
5、length=0 ; length=i ; length+) 11 12 deslength =str1ength; 从前面开始,逐个将 str中的字符拷贝到 des数组中,不含最后面的空格 13 14 des1ength=NULL; 最后一个字符为 NULL 15 return des ; 【试题解析】 函数 convert(cha*des,char*str)实现的功能是将字符串最后面有空格删除,并将转换后的数据放到 des,返回指针,可以将字符串最后空格前的所有所有字符拷贝到 des中,关键是确定下标从那开始到最后都是空格。 解题思路 (1)利用循环将字符串 str的长度求出,然后从字符串
6、的尾部开始检索,用循环从字符串的最后一个字符往前面逐个检查,如果该字符不是空 格则退出循环,这个时候就找到了最后一个非空格字符所在的下标位置,然后从下标 0开始到该位置,逐个将 str里面字符拷贝到 des中。 (2)程序当中使用了 3次循环:计算长度、寻找最后一个非空格字符和拷贝三个过程。 三、综合应用题 3 【正确答案】 (1)添加语句: virtual void fun()=0; (2)将 “class Testclassl”补充完整为: class TestClassl: publlc TestClass0 (3)添加语句: Testclass0* p; (4)添加语句: p=&obj
7、; 【试题解析】 本题中的程序功能是利用派生类中的 fun成员函数输出字符串“fun”。在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从己定源程序的 main主函数开始入手,可以看出程序通过调用类的成员函数实现各种输出操作。 解题思路 (1)题目 1要求 “定义纯虚类 TestClass0”。在 C+中,虚函数在基类用 virtual声明类为虚类。纯虚类是在声明虚类时被 “初始化 ”为 0的函数。所以第 1个标识下应添加 “virtual void fun()=0; ”。 (2)题目 2要求 “完成类 TestClassl,以公有继承 TestCl
8、assO”。公有继承是在定义一个派生类时将基类的继承方式指定为 public的,称为公用继承。所以这里补全“classTestClassl: public TestClassO”。 (3)题目 3要求 “定义 TestClassO对象指针 p”。定义类的对象指针变量,一般的格式为:类名指针变量,所以这里添加 “TestClassO*p; ”。 (4)题目 4要求 “把 TestClassl的 对象 obi的指针赋给 TestClassO指针 p”。将指针指向的对象赋值给另一个指针,其实是将其地址指向另一个指针的地址,所以使用取地址运算符 “&”,即在第四个符号下添加语句 “p=&obji; ”。