1、国家二级 C+机试(操作题)模拟试卷 109及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在界面输出以下类似内容: 0012FF68 1 0012FF3C 5 0012FF6C 2 0012FF44 4 0012FF70 3 0012FF4C 3 0023FF74 4 0012FF54 2 0012FF78 5 0012FF5C 1 006AFDCC006AFDEF数据可能因为机器的不同,程序的输出的内容会有差异。只要相差为 4的连续地址即可。 注意:不要改动 main函数,不能增行或
2、删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include using namespace std; int main() int*p, a5=1, 2, 3, 4, 5; double*q, b5=5 0, 4 0, 3 0, 2 0, 1 0), int x; P=a; q=b; *error* for(x=0;x class NODE public: int data; NODE*next; ; void fun(NODE*list, int x) void main() int X; NODE*head, *P; *首先建立只有辅助表元的空链表 * head=n
3、ew NODE; head-next=NULL; std: coutx; if(x=0) break; fun(head, x); for(p=head一 next; P!=NULL; p=p一 next) std: coutdatanext; delete head ; head=P ; while(p); 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)定义私有数据成员 year、 month、 day,分别用于年、月、日,它们都是 int型的数据,请在注释 *error*后添加适当的语
4、句。 (2)完成判断数据成员 date2是否是闰年函数 intDate: IsLeapYear0定义,返回数据成员 date2是否是闰年的值,是则返回 1,否则返回 0。请在注释 *2*后添加适当的语句。 (3)设置 SetData0的默认时间为: 2004 12 1,请在注释 *3*后添加适当的语句。 (4)完成主函数 main(),完成输出 date2 is a leapyear,请在注释 *4*后添加适当的语句。 提示:公元纪年的年数可以被四整除,即为闰年;被 100整除而不能被 400整除为平年;被 100整除也可被 400整除的为闰年。 注意:增加或修改代码的位置已经用符号表示出来。
5、请不要修改其他的程序代码。 1 #include 2 using namespace std; 3 C1ass Date 4 5 public: 6 *3* 7 void SetDate(int y, int m, int n); 8 int IsLeapYear(); 9 VOid Print() 10 coutnext; while(v!=NULL, & xdata) 寻找插入的位置 U=V; V=V一 next; if(V=NULL- xv一 data) 判断是否为新的元素 p=new NODE; p一 data=x; 生成新的元素 p一 next=v; u一 next=p; 插入新的元
6、素 【试题解析】 (1)该程序功能是构造一个以大到小顺序链接的链表。它的解题思路,首先寻找插入的位置,然后判断是否为新元素,最后插入。 (2)从己给部分源程序的 main主函数开始入手,核心函数 void fun(NODE*list, int x)中的 list参数为单链表, x为要插入的数据。 【解题思路】 (1)首先利用 while循环寻找插入元素的位置。 (2)然后判断要插入的元素是否为新元素。 (3)如果为新元素,那么执行单链表的操作,插入元素。 三、综合应用题 3 【正确答案】 (1)int year, month, day; (2)将 “return”补充完整为: return(y
7、ear 400= 0)l l(year 4=0&year 100 1=0); (3)将 “void SetDate(int Y, int m, int n); ” 补充完整为: void SetDate(int y=2 0 04, int m=12, int n=1); (4)将 “cout “date2 is”(*: “not。 )”a leapyear fIendl; ”补充完整为:cout”date2 is”(date2 IsLeapYear()?”: “not”)” a leapyear ”endl ; 【试题解析】 本题中程序的功能是判断 2004年是否为闰年。其中成员函数SetDa
8、te设置日期, IsLeapYear函数判断是否为闰年。在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的 main主函数开始入手,可以看出程序通过调用类 Date和和其成员函数实现各种功能。 解题思路 (1)题目 1要求 “定义私有数据成员 year、 month、 day,分别用于年、月 、日,它们都是 int型的数据 ”。在程序中的 Date类中的 priate区域添加数据成员 year、month、 day的定义即可,其中它们的类型根据题目要求定义为 int型。即在第 1个标识下添加 “int year,month, day; ”
9、0 (2)题目 2要求 “完成判断数据成员 date2是否是闰年函数 int Date: IsLeapYear0的定义 ”。公元纪年的年数可以被 100整除而不能被 400整除为平年;被 100整除也可被 400整除的为闰年。用程序语言表达为 “(year 4000)ll(year4=0&year 100 !=0)”,即在第 2个标识补充的返回值语句为 “return(year0400=0)(year 4=0&year 100!=0); ”。 (3)题目 3要求 “设置 SetData()的默认时间为: 2004-12-1”。程序中类 Date的成员函数定义为 “void SetDate(in
10、t y,int m, int n); ”,设置默认时间为: 200412-1,就是设置 SetDate函数中的变量值分别为 2004, 12, 1。即成员函数的定义语句修改为 “void SetDate(int y=2004, intm=12, int n=1); ”。 (4)题目 4要求 “完成主函数 main(),完成输出 date2 isa leapyear”。标识 4下的语句 “cout“date2 is“(“”: “not”)“a leapyear ”endl; “缺少字符串 “date2 is”以及判断 date2是否为润年的 date2 IsLeapYear0函数调用,所以这条语句补全为 “cout”date2 is”(date2 IsLeapYear07” : “not”1”a leapyear ”endl; ”。