1、国家二级 C+机试(操作题)模拟试卷 307及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请改正程序中的错误。 本题的功能是:从键盘输入字符串 S,然后输出字符串 S中的字符个数。 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。#includeiostreamint main() *error* cout“please input a string:“endl; *error* namespace std;
2、char s256; cingetline(s,256); coutstrlen(s)endl; return 0;(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。函数 convert(cha*des,char*str)实现的功能是: (1)如果字符串最后面有空格,则全部删除; (2)转换后的数据放到 des,并且指针作为返回值返回。 注意:不能修改程序的其他部分,只能补充 convert()函数。 #include #include #defime MAXLEN 1024
3、char*convert(char*des,char* str) Void main() char destMAXLEN; char*string=“abc def “: cout string “-“ endl; cout“-“_三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp,其中定义了类 baseA、priA1 和 priA2,其中priA1类由 baseA类公有派生,priA2 类由 priA1类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。 程序输出结果如下: 10 5 10 5 7 (1)定义类
4、baseA的构造函数,该构造函数有一个整型的参数 m,在构造函数中请将 m赋值给数据成员 a。请在注释“*1*”之后添加适当的语句。 (2)定义类 priA1的构造函数,该构造函数有两个整型的参数 m和 n,在构造函数中请将 m赋值给数据成员 b,将 n作为基类 baseA构造函数的参数值传入。请在注释“*2*”之后添加适当的语句。 (3)定义类 priA2的构造函数,该构造函数有三个整型的参数 m,n 和 k,在构造函数中请将 m赋值给数据成员 c,将 n和 k分别赋值给基类研 A1构造函数的参数 m和 n。请在注释“*3*”之后添加适当的语句。 (4)完成类 priA2的成员函数 Show
5、的定义,该函数调用基类成员函数,输出基类私有成员 a和 b及类 priA2自身的数据成员C的值,上述三个值在输出时以空格隔开。请在注释“*4*”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeiostreamhClass baseA int a;public: *1* int geta()return a;) ; class priAl:public baseA int b;public: *2* int getb()return b;) ; class priA2:public priAl int c;public: *3* Void sho
6、w() *4* ;Void main() priA2 a(7,5,10); coutageta()endl; coutagetb()endl; ashow();(分数:2.00)_国家二级 C+机试(操作题)模拟试卷 307答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请改正程序中的错误。 本题的功能是:从键盘输入字符串 S,然后输出字符串 S中的字符个数。 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。#in
7、cludeiostreamint main() *error* cout“please input a string:“endl; *error* namespace std; char s256; cingetline(s,256); coutstrlen(s)endl; return 0;(分数:2.00)_正确答案:(正确答案:(1)std:cout“please input a string:“解析:解析:(1)第 1个标识下实现在屏幕上输出“please input a string:”提示语句。在程序中用到C+标准库时,要使用 std标准命名空间进行限定。cout 为标准库函数,所
8、以要声明 tout是在命名空间std中定义的流对象,即第 1个标识下的“std:cout“please input a string:“二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。函数 convert(cha*des,char*str)实现的功能是: (1)如果字符串最后面有空格,则全部删除; (2)转换后的数据放到 des,并且指针作为返回值返回。 注意:不能修改程序的其他部分,只能补充 convert()函数。 #include #include #defime MAXLEN 1024
9、char*convert(char*des,char* str) Void main() char destMAXLEN; char*string=“abc def “: cout string “-“ endl; cout“-“_正确答案:(正确答案:int length=0; int i; for(length=0;strlength !=NUL L; length+); 求数组长度 length-;下标从 0len-1,下标减 l表示最后一个字符的下标值 for(i=length;i=0;i-) if(stri!= ) 判断结尾是否有空格,从后往前判断直到不是不是空格了跳出循环 brea
10、k; for(length =0 ; length=i;length+) deslength=strlength; 从前面开始,逐个将 str中的字符拷贝到 des数组中,不含最后面的空格 deslength=NULL; 最后一字符为 NULL return des;)解析:解析:(1)利用循环将字符串 str的长度求出,然后从字符串的尾部开始检索,用循环从字符串的最后一个字符往前面逐个检查,如果该字符不是空格则退出循环,这个时候就找到了最后一个非空格字符所在的下标位置,然后从下标 0开始到该位置,逐个将 str里面字符拷贝到 des中。 (2)程序当中使用了3次循环:计算长度、寻找最后一个非
11、空格字符和拷贝三个过程。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp,其中定义了类 baseA、priA1 和 priA2,其中priA1类由 baseA类公有派生,priA2 类由 priA1类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。 程序输出结果如下: 10 5 10 5 7 (1)定义类 baseA的构造函数,该构造函数有一个整型的参数 m,在构造函数中请将 m赋值给数据成员 a。请在注释“*1*”之后添加适当的语句。 (2)定义类 priA1的构造函数,该构造函数有两个整型的参数 m和 n,
12、在构造函数中请将 m赋值给数据成员 b,将 n作为基类 baseA构造函数的参数值传入。请在注释“*2*”之后添加适当的语句。 (3)定义类 priA2的构造函数,该构造函数有三个整型的参数 m,n 和 k,在构造函数中请将 m赋值给数据成员 c,将 n和 k分别赋值给基类研 A1构造函数的参数 m和 n。请在注释“*3*”之后添加适当的语句。 (4)完成类 priA2的成员函数 Show的定义,该函数调用基类成员函数,输出基类私有成员 a和 b及类 priA2自身的数据成员C的值,上述三个值在输出时以空格隔开。请在注释“*4*”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动
13、程序中的其他内容。#includeiostreamhClass baseA int a;public: *1* int geta()return a;) ; class priAl:public baseA int b;public: *2* int getb()return b;) ; class priA2:public priAl int c;public: *3* Void show() *4* ;Void main() priA2 a(7,5,10); coutageta()endl; coutagetb()endl; ashow();(分数:2.00)_正确答案:(正确答案:(1)
14、添加语句:baseA(int m) a=m;) (2)添加语句: priA1(int m,int n):baseA(n)b=m;) (3)添加语句:priA2(int m,int n,int k):priA1(n,k) c=m;) (4)添加语句: coutgeta()“getb()“ “cendl;)解析:解析:(1)根据题目 1要示,构造函数函数名和类名一致,显然 baseA构造函数名为 baseA(),在baseA0qb通过参数 in完成对成员变量 a的赋值,因此构造函数名为 baseA(int m),在函数内部对成员 a赋值,故第 1个标识下应添加“baseA(int m)a=m;”。
15、 (2)根据题目 2要示,构造函数形式为priA1(int m,int n),m 赋值给 priA1类成员 b,将 n作为基类 baseA构造函数的参数值传入,故第 2个标识下应添加“priA1(int m,int n):baseA(n)b=m;”。 (3)根据题目 3要示,函数形式为priA2(int m,intn,int k),在构造函数中将 m赋值给数据成员 c,将 n和 k分别赋值给基类 priA1构造函数的参数 m和 n,因此第 3个标识下应添加“priA2(int m,int n,intk):priAl(n,k)c=m;”。(4)根据题目 4要示,priA2 类公有派生于 priA1,而研 A1公有派生于 baseA,因此在 priA2类中可以调用基类的 geta()和 getb()来获得基类私有成员 a和 b,再输出 priA2的私有成员 C即满足要求,因此第4个标识下应添加“coutgeta0“ “getb0“ “cendl;”。