1、国家二级 C+机试(操作题)模拟试卷 349及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 pmj1下的工程 pmjl,此工程中含有一个源程序文件 pmj1 cpp。其中位于每个注释 “ ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: This object is no 1 注意:只修改注释 “ ERROR *found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include using namespace std; class NyClass public: NyClass(): count
2、(0)cout using namespace std; enum category ENPTY, ELEPHANT, NOUSE); char*output=”ENPTY”, ”ELE PHANT”, ”NOUSE”; ClasS Nammal public: Nammal(char*str) *found* name=new_ strcpy(name, str); virtual char*WhoAmI()=0; virtualNammal()deletename; void Print()toutPrint(); delete pm; pm=new Mouse(”Micky”); pm-
3、Print(); delete pm; return 0; 三、综合应用题 4 使用 VC6打开考生文件夹 proj3下的工程 proj3,其中声明了 MyString类,它是一个用于表示字符串的类。成员函数 reverse将字符串反转,例如 “abcde”反转后就成了 “edcba”。请补充完整函数 reverse。在 main函数中给出 了一个测试数据,此情况下程序的输出应该是: This is a string gnirts a si sihT 注意:只需在函数 reverse的 *333*和*666*之间填入若干语句,不要改动程序中的其他内容。 MyString h #include
4、using namespace std; char*dup(const char*); class MyString char*str; public: MyString(const char*s=”): str (dup(S) MyString(const MyString&m): str (dup(m str) 一 MyString()f deletestr; ) void reverse(); void show(ostream&os=cout)const OS #include”MyString h” void writeToFile(const char*path) char ful
5、l50; strcpy(full, path); strcat(full, ”out dat”); ofstream outfile(full); if(outfile fail()cerrInc(); 【试题解析】 (1)考查考生对 const的掌握,在 Inc函数的函数体cout”,而不能使用 “ ”。 2 【正确答案】 deletearray; COUtvar;。其中, vat代表一个变量, “”称为提取运算符,该语句的含义是,将用户输入的数据保存到 var中。 (3)考查语句的初始化,我们来看 MyClass类的构造函数: MyClass(lnt len) array=new intl
6、en; 给数组动 态分配空间,大小为 len arraysize=len; 赋值 for(int i=0; iarraySize; i+) arrayi=i+1; 循环给数组赋 值,从 1到 10 二、简单应用题 3 【正确答案】 (1)charstrlen(str)+1; (2)Mammal(str) (3)return outputMOUSE; (4)Elephant 【试题解析】 (1)主要考查分配空间,程序要给 name分配空间,由下一条语句中strcpy(name, str)可知程序要把字符串 str复制给 name,因 此要分配的空间大小为 strlen(str)+1。 (2)主要
7、考查考生对构造函数的掌握,因为 Elephant类是 Mammal类的派生类,所以其构造函数要使用成员列表先对 Mammal类初始化。 (3)主要考查考生对枚举类型的掌握,先看程序: enumcategoryEMPTY,ELEPHANT, MOUSE。再参考 Elephant类中的 WhoAmI函数:char*WhoAmI()return outputELEPHANT; 。可知这里要填写的返回语句为:return outputMOUSE;。 (4)主要考查考生对派生类的掌握,题目要求输出: ELEPHANT MOUSE 可知,要先调用 Elephant类的 WhoAmI函数,因此给指针 pm分
8、配 Elephant类空间。 三、综合应用题 4 【正确答案】 VOid MyString: reverse() int i, j; char ch; int len=strlen(str); for(i=0, j=len一 1; ij; i+, j-) ch=stri; stri =strj; strj =ch; 【试题解析】 程序定义了 MyString类,它包含一个成员: str字符指针;默认构造函数和复制构造函数通过 dup()函数,动态分配地址 p将参数拷贝到 p指向的内存空间,再使用 p初始化 str; show()成员函数将 str指向的字符串输出; reverse()成员函数将
9、 str指向的字符串反转;重载的 运算符函数调用形参 m对象的 show()函数输出 str指向的字符串。 main()函数首先构造一个 MyString类对象 m1,构造过程中传入字符串 “This is a string”,所以 m1对象中的 str指向一个动态分配的内存空间,该段内存存放拷贝的字符串 “This is a string”,输出 m1后;再调用 m1 reverse()函数,将 str指向的字符串进行反转,再输出 m1,题意要求我们完成 reverse()成员函数的定义,完成反转字符串的功能。 由题意,我们仅有的信息就是 str指向一个字符串,它是 char宰类型,需要对str指向的字符串进行反转,需要获得字符串的长度,然后将首尾字符进行交 换,直到交换到中间字符串为止,所以我们定义两个变量 i、 j,表示元素下标,分别从首 (i=0)和尾 (长度一 1)向中间遍历该字符串,每次遍历,首先判断 i是否小于 j,若i小于 j则将 i和 j下标对应的字符进行交换,交换完成后 i自增 1, j自减 1,直到i不小于 j为止。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1