1、国家二级 C+机试(操作题)模拟试卷 116及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 10 6 30 2 2 注意:错误的语句在 *error*的下面,修改该语句即可。 #include class CMyClass private: int number; int Add(int i) return number+=i ; int Sub(int i) return number一 =i ; int Mul(int i) return number*=i ; int Div(i
2、nt i) if(i!=0) return number =i ; else return number; *error* typedef int(FUNC)(int); *error* FUNC func; public: CMyClass() func0=CMyClass: Add; func1=CMyClass: Sub; func2=CMyClass: Mul; func3=CMyClass: Div; number=0 ; int CallFunction(int i, int j) *error* return(funci)(j); ; void main() CMyClass m
3、yobj; cout 2 int fun(char*data) 3 4 5 6 void main() 7 8 char Str1 024; 9 cout clasS TestClasS public: TestClass(int data=0) this一 data=data; this一 next=NULL; ; int data; TestClass*next; ; void Insert(TestClas s*P, int data) TestClass*temp=new TestClass (data); TestClass*pParent=p; TestClass*pNext=p一
4、 next; while(pNext) if(datapNext一 data) *1* temp一 next=pNext; return, E1se pParent=pNext ; *2* if(pNext=NULL) PParent一 next=temp; return; void printf(TestClass*P) *3* while() coutnext一 datanext; coutnext; delete templ; templ=temp2; void main() int i=0 ; TestClass head; do int data; coutdata; if(data
5、=0)break; Insert( (3)将 “while()”补充完整为: while(p一 next!=NULL) (4)将 “TestClass*templ:; ”补充完整为: TestClass*templ=p一 next; 【试题解析】 在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的 math主函数开始入手,可以看出程序通过调用类 TestClass实现各种输出操作。 解题思路 (1)题目 1要求 “在父节点的 Next中保存新插入的节点的指针 ”。对于指针的操作pParent-next为 pParent的子结点,在父节点
6、的 Next中保存新插入的节点的 指针,即 “pParent-next=temp; “。 (2)题目 2要求 “把 pNext的子节点赋给 pNext本身 “。 pNe-next为 pNext的子结点,把 pNext的子节点赋给 pNext本身,即 “pNext=pNext-next; ”。 (3)注释 *3*下是判定 P的子节点不为空。 P的子节点是 p-next。程序中的 “while()”缺乏 P的子节点不为空的判断条件,所以修改为“while(p next!=NULL)”。 (4)题目 4要求 “用 tempi保存动态申请内存节点的链表 头 ”。 P为链表, p-next为链表头。程序中的语句 “TestClass*templ=; ”中 templ没有被赋值,所以修改为“TestClass*templ=p-next; ”。