国家二级C++机试(操作题)模拟试卷341
基本操作题
1.使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果:
(4,5)
7,8
(4,8)
注意:错误的语句在//********error********的下面,修改该语句即可。
#include
class CObj0.
{
public:
CObj0(int i,int j)
{
x=i;
y=j;
}
//********error********
virtual void move(int a;int b)
{
x+=a;
y+=b;
}
void print()
{
cout<<\\
(1)virtual void move(int a,int b)
(2)CObj1(int i,int j,int k,int 1):CObj0(i,j)
(3)CObj0::print();
解析:(1)编译程序可知第1标识下有错误,此处是声明虚函数,虚函数的声明方式为:virtual(),参数表中各参数之间应该用“,”隔开,因此第1个标识下应改为“virtual void move(int a,int b)”。
(2)在主函数里“CObjl obil(1,3,7,8);”,可知构造函数CObil()有四个参数,完成变量m、n、x和y的初始化,k和l赋值给m和n,i和i赋值给x和v,x和y的初始化可通过基类构造函数来完成对x和y的初始化,第2个标识下应改为CObil(int i,int i,intk,int 1):CObj0(i,j)。
(3)由程序运行结果可知标识3下调用的是基类的print()函数,而“print();”是调用的派生类的print()函数,因此此时只能通过类名来直接调用print()函数,即第3个标识下应改为“CObj0::print0;”。
简单应用题
2.使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(char*s,char*s1,char*s2)中形参字符串s1和s2有相同的字符个数,且s1中各字符互不相同。该函数实现将已知字符串S中所有在字符串s1中也存在的字符,都用字符串s2中的对应位置的字符代替。
例如:设字符串S、sl和s2分别为:
S[]=\\
char*p,*q;
for(;*s;s++)
//在串s中找符合条件的字符,然后替换
{
for(p=s1,q=s2;*p;p++,q++)
//让指针p,q分别指向s1和s2
{
if(*p==*s)
//如果s中存在s1中p指向的字符
{
*s=*q;
//那么用q指向的s2中的字符替换
}
}
}
解析:(1)让指针p,q分别指向s1和s2。
(2)然后利用for循环对s中的每一个当前字符与p指向的字符进行比较。
(3)如果(2)中的比较结果相等,那么用q指向s2中对应的字符替换。
综合应用题
3.使用VC6打开考生文件夹下的源程序文件modi3.cpp,阅读下列程序说明和代码,功能如下:
从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,然后把数据打印到屏幕,然后释放内存。
其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
(1)在父节点的Next中保存新插入的节点的指针,请在注释//********1********后添加适当的语句。
(2)把pNext的子节点赋给pNext本身,请在注释//********2********后添加适当的语句。
(3)判定P的子节点不为空,如果不为空,则打印P其中的数据到屏幕,请在注释//********3********后添加适当的语句。
(4)用tempi保存动态申请内存节点的链表头,请在注释//********4********后添加适当的语句。
注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。
#include
Class TestClass
{
public:
TestClass(int data=0)
{
This->data=data;
This->next=NULL;
};
int data;
TestClass* next;
};
void Insert(TestClass*p,int data)
{
TestClass*temp=new TestClass
(data);
TestClass*pParent=p;
TestClass*pNext=p一>next;
while(pNext)
{
if(data>pNext一>data)
{
//********1********
temp一>next=pNext;
return;
}
Else
{
pParent=pNext;
//********2********
}
}
if(pNext==NULL)
{
pParent一>next=temp;
return;
}
}
void printf(TestClass*p)
{
//********3********
while()
{
cout<
next一>data<<\\
(1)添加语句:pParent=>next=temp;
(2)添加语句:pNext=pNext=>next;
(3)将“while()”补充完整为:while(p=>next!=NULL)
(4)将“TestClass*tempi=;”补充完整为:
TestClass*templ=p=>next;
解析:(1)题目1要求“在父节点的Next中保存新插入的节点的指针”。对于指针的操作pParent->next为pPar
本文档预览:3600字符,共4042字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载