上机部分
一、改错
使用VC6打开考生文件夹下的
kt5_1,此工程包含一个源程序文件kt5_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
(1,2)
5,6
(6,9)
源程序文件kt5_1.cpp清单如下:
#include
classA{
public:
A(inti,intj){a=i;b=j;}
/****************found*******************/
voidMove(intx,inty){a+=x;b+=y}
voidShow(){cout<<"("<答案】
(1)将void Move( int x, int y) {a+=x;b+=y}
改为:void Move( int x, int y) {a+=x;b+=y;}
(2)将B(int i,int j,int k,int l):(i,j) {x=k;y=l;}
改为:B(int i,int j,int k,int l):A(i,j) {x=k;y=l;}
(3)将void f1(){Show();}
改为:void f1(){A::Show();}
【试题解析】
(1)主要考查对
达式定义规则的掌握,此处缺少一个“;”,任何一个表达式都应该以分号作为结束标志;
(2)主要考查对派生类构造函数定义的掌握,参数列表中基类的成员应使用基类构造函数初始化,因此必须向基类传递参数,传递时直接使用基类名;
(3)主要考查对基类函数调用方法的掌握,为了调用基类的函数应该使用作用域符“::”以限定访问的位置。
二、简单应用题
请编写一个函数intpattern_index(charsubstr[],charstr[]),该函数执行含通配符"?"的字符串的查找时,该通配符可以与任一个字符匹配成功。当子串substr在str中匹配查找成功时,返回子串substr在str中的位置,否则返回值为0。要求使用for循环实现。输出结果如下:
子串起始位置:5
注意:部分源程序已存在文件kt5_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数pattern_index的花括号中填写若干语句。
文件kt5_2.cpp的内容如下:
#include
intpattern_index(charsubstr[],charstr[])
{
}
voidmain()
{
char*substring,*string;
intsame;
substring="???gram";
string="thisprogramreturnindexofsubstring";
same=pattern_index(substring,string);
if(same)
cout<<"子串起始位置:"<
classcomp
{inta;
intb;
public:
//**1**
friendcompplus(comp&x,comp&y);
voidinput(intx,inty)
{//**2**}
voidoutput()
{cout<