1、国家二级 C+机试(操作题)模拟试卷 242及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 cpp,该程序运行时有错误,请改正错误,使得程序正常运行。并使程序输出结果为: ABCDEF ABCDEF ABCDEF 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include iostream h void main() *error* char s1=“ABC “DEF“; *error* char s2=“ABCDEF“; *error* char s3=“ABC“+ “DEF“; cout
2、 s1 endl; cout s2 endl; cout s3 endl; return; 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。完成函数 fun(int a, int n),实现递归函数 fun(int a, int n)的返 回值是数组 a的前 n个元素之和。 注意:不能修改程序的其他部分,只能修改 fun()函数。 #include iostream h int fun(int a, int n) void main() int A=1, 2, 3, 4; cout fun(A, sizeof(A) izeof(int) endl; retur
3、n; 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)定义私有数据成员 year、 month、 day,分别用于年、月、日,它们都是 int型的数据,请在注释 *1*后添加适当的语句。 (2)完成判断数据成员 date2是否是闰年函数 intDate: IsLeapYear()定义,返回数据成员 date2是否是闰年的值,是则返回 1,否则返回 0。请在注释*2*后添加适当的语句。 (3)设置 SetData0的默认时间为: 2004-12-1,请在注释 *3*后添加适当的语句。 (4)完
4、 成主函数 main(),完成输出 date2 is a leapyear,请在注释*4*后添加适当的语句。 提示:公元纪年的年数可以被四整除,即为闰年;被 100整除而不能被 400整除为平年;被 100整除也可被 400整除的为闰年。 注意:增加或修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #include iostream using namespace std; class Date public: *3* void SetDate(int y, int m, int n); int IsLeapYear(); void print() cout year “-“ m
5、onth “-“ day endl; private: *1* ; void Date: SetDate(int y, int m, int d) year=y; month=m; day=d; int Date: IsLeapYear() *2* return int main() Date date1, date2; date1 SetDate(); date2 SetDate(2004, 12, 1); cout “date1: “; date1 Print(); cout “date2: “; date2 Print(); *4* cout “date2 is“ (“ “: “not“
6、) “a leapyear “ endl; return0; 国家二级 C+机试(操作题)模拟试卷 242答案与解析 一、基本操作题 1 【正确 答案】 (1)char s1=“ABC“ (2)char s2=“ABC (3)char s3=“ABC“ 【试题解析】 (1)字符串数组以 “: ”结束赋值语句,所以 “ABC“DEF”应该是字符串数组 s1的赋值语句,它的错误提示 “modi1 cpp(5): error C2001: newline in constant”,说明 “DEF”被认为是新的值,根据题目要求它其实应该是与 ABC是一个数组串的,所以应该在 ”ABC后面添加 “”,即
7、第 1个标识下修改为 “char s1=“ABC“”。 (2)根据题目中给出的输出结果,知道 s2的输出也是 ABCDEF,那么说明第 2个标识下的 s2值应该是 ABCDEF,第一行与第二行是一个字符串。在 C+中,在一个字符串中最后一个字符为 “ ”,则标识它是续行符,下一行的字符是该字符串的一部分,所以在第一行的 ABC后面添加 “ ”,即 “char s2=“ABC ”。 (3)字符串数组 s3的赋值语句,错误提示 “modi1 cpp(12): error C2110: cannot add two pointers”不能添加两个指针,不是用 “+”来连接的,两个字符串变量之 间不可
8、以用 “+”连接,所以这里删除 “+”,即第 3个标识下修改为 “char s3=“ABC“”。 二、简单应用题 2 【正确答案】 if(n 0) return an-1+fun(a, n-1);递归求 n项的和 return0;项数小于等于 0,返回求和值 0 【试题解析】 (1)如果要计算的项数小于等于 0,那么直接返回 0。 (2)否则调用递归语句 “an-1+fun(a, n-1)”,实现 0到第 n项的和。 三、综合应用题 3 【正确答案】 (1)int year, month, day; (2)将 “return”补充完整为: return(year 400=0)|(year 4=
9、0&year 100!=0); (3)将 “void SetDate(int y, int m, int n); ”补充完整为: void SetDate(int y=2004, int m=12, int n=1); (4)将 “cout “date2 is“ (“ “: “not“) “a leapyear “ endl; ”补充完整为: cout ”date2 is“ (date2 IsLeapYear()?“ “: “not“) “ aleapyear “ endl; 【试题解析】 (1)题目 1要求 “定义私有数据成员 year、 month、 day,分别用于年、月、日,它们都是
10、int型的数据 ”。在程序中的 Date类中的 priate区域添加数据成员 year、 month、 day的定义即可,其中它们的类型根据题目要求定义为 int型。即在第 1个标识下添加 “int year, month day; ”。 (2)题目 2要求 “完成判断数据成员 date2是否是闰年函数 int Date: IsLeapYear()的定义 ”。公 元纪年的年数可以被 100整除而不能被 400整除为平年;被 100整除也可被 400整除的为闰年。用程序语言表达为 “(year 400=0)|(year4=0&year 100!=0)”,即在第 2个标识补充的返回值语句为 “re
11、turn(year400=0)|(year 4=0&year 100!1=0); ”。 (3)题目 3要求 “设置 SetData()的默认时间为: 2004121”。程序中类 Date的成员函数定义为 “void SetDate(int y, int m, int n); ”,设置默认 时间为: 2004121,就是设置 SetDate函数中的变量值分别为 2004, 12, 1。即成员函数的定义语句修改为 “void SetDate(int y=2004 int m=12, int n=1); ”。 (4)题目 4要求 “完成主函数 main(),完成输出 date2 is a leapyear”。标识 4下的语句 “cout “date2 is“ “ “: “not“) “a leapyear “ endl; ”缺少字符串“date2 is”以及判断 date2是否为润年的 date2 IsLeapYear()函数调用,所以这条语句补全为 “cout “date2 is“ (date2 IsLeapYear()?“ “: “not“1 “a leapyear “ endl; ”。