}
【答案】
(1)void swap(int *px,int *py)
{
int temp;
temp=*px;
*px=*py;
*py=temp;
}
(2)void swap(int &px,int &py)
{
int temp;
temp=px;
px=py;
py=temp;
}
5.33.综合应用题
使用VC6打开考生文件夹下的工程test5_3。此工程包含一个源程序文件test5_3.cpp,其中定义了一个类Fn,用于求n!。请按要求完成下列操作,将程序补充完整。
(1)定义私有数据成员value(存放n)和fact(存放n!),它们都是int型的数据。请在注释"//**1**"之后添加适当的语句。
(2)完成默认构造函数Fn的定义,使Fn对象的数据成员value 值为i,fact值为1。请在注释"//**2**"之后添加适当的语句。
(3)完成函数Cal的定义,该函数计算value的阶乘,并将运算结果保存在fact中,要求使用while循环实现。请在注释"//**3**"之后添加适当的语句。
(4)将主函数补充完整,直接调用类的成员函数,在界面上输出value的阶乘值。请在注释"//**4**"之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test5_3.cpp清单如下:
#include
class Fn
{
//**1**
public:
Fn(int i);
void Cal();
void disp();
};
Fn::Fn(int i)
{
//**2**
}
void Fn::Cal()
{
//**3**
fact*=i--;
}
void Fn::disp()
{
cout<}
void main()
{
int value;
cout<<"Enter the value:";
cin>>value;
Fn A(value);
//**4**
}
【答案】
(1)int value;
int fact;
(2)value=i;
fact=1;
(3)int i=value;
while(i>1)
(4)A.Cal();
A.disp();
6.11.改错题
使用VC6打开考生文件夹下的工程test6_1,此工程包含一个源程序文件test6_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
Constructor2
Constructor1
i=0
i=10
Destructor
源程序文件test6_1.cpp清单如下:
#include
class CSample
{
int i;
public:
CSample(){cout<<"Constructor1"<i=0;}
CSample(int
val){cout<<"Constructor2"<~CSample(){cout<<"Destructor"<void disp();
};
/**********found**********/
void disp()
{
cout<<"i="<
}
void main()
{
CSample *a,b(10);
/**********found**********/
a->disp();
/**********found**********/
b->disp();
}
【答案】
(1)错误:void disp()
正确:void CSample::disp()
(2)错误:a->disp();
正确:a=new CSample; a->disp();
(3)错误:b->disp();
正确:b.disp();
6.22.简单应用题
编写函数fun(),它的功能是利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。
x n+1 =cos(x n)
迭代步骤如下:
(1)取x1初值为0.0。
(2)x0=x1,把x1的值赋给x0。
(3)x1=cos(x0),求出一个新的x1。
(4)若x0-x1的绝对值小于0.000001, 则执行步骤(5),否则执行步骤(2)。
(5)所求x1就是方程cos(x)-x=0的一个实根,做为函数值返回。
程序输出结果Root=0.739085。
注意:部分源程序已存在文件test6_2.cpp中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。
文件test6_2的内容如下:
#include
#include
#include
float fun()
{
}
void main()
{
cout<<"Root="<}
【答案】
float fun()
{ float x1=0.0,x0;
do
{ x0=x1;
x1=cos(x0);
}
while(fabs(x0-x1)>=1e-6);
return x1;
}
6.33.综合应用题
使用VC6打开考生文件夹下的工程test6_3,此工程包含一个源程序文件test6_3.cpp,其中定义了用于表示考生的类Student,请按要求完成下列操作,将程序补充完整。
(1)定义私有数据成员code、english分别用于表示考生的编号、英语成绩、它们都是int型的数据。请在注释"//**1**"之后添加适当的语句。
(2)完成成员函数void Student::inputinformation()的定义,该函数用于用户输入一个考生对象的信息,输入格式如下所示:输入编号:
英语成绩:
计算机成绩:
请在注释"//**2**"之后添加适当的语句。
(3)利用已实现的类Student的成员函数,完成函数void firstname(Student *A[],int num)的定义,该函数根据考生信息A[],输出num个考生中总分最高者的编号及其相应的总分,在此不考虑总分相同的情况。请在注释"//**3**"之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test6_3.cpp清单如下:
#include
class Student
{
//**1**
int computer;
int total;
public:
void getinformation();
void computesum();
int getcode();
int gettotalscore();
~Student();
};
void Student::getinformation()
{
//**2**
cout<<"英语成绩:";
cin>>english;
cout<<"计算机成绩:";
cin>>computer;
}
void Student::computesum()
{
total=english+computer;
cout<<"编号"<}
int Student::getcode()
{
return code;
}
int Student::gettotalscore()
{
return total;
}
void firstname(Student *A[],int num)
{
//**3**
tempsum=(*A[0]).gettotalscore();
for(int i=1;i{
if
(((*A[i]).gettotalscore())>tempsum)
{
tempcode=(*A[i]).getcode();
tempsum=(*A[i]).gettotalscore();
}
}
cout<<"总分最高者--"<"<}
void main()
{
Student *A[3];
int i,n=3;
for(i=0;i{
A[i]=new Student;
A[i]->getinformation();
}
for(i=0;i{
A[i]->computesum();
}
firstname(A,3);
}
【答案】
(1)int code;
int english;
(2)cout<<"输入编号:";
cin>>code;
(3)int tempcode,tempsum;
tempcode=(*A[0]).getcode();
7.11.改错题
使用VC6打开考生文件夹下的工程test7_1,此工程包含一个源程序文件test7_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
Constructor1
Constructor1
Constructor1
Destructor
Constructor2
Destructor
x=0
x=5
Destructor
Destructor
源程序文件test1_1.cpp清单如下:
#include
class B
{
int x;
public:
B(){x=0;cout<<"Constructor1"<B(int
i){x=i;cout<<"Constructor2"<~B(){cout<<"Destructor"</**********found**********/
~B(int i){cout<
Destructor"<void print(){ cout<<"x="<};
void main()
{
B *ptr;
ptr=new B[2];
/**********found**********/
ptr[0]=B(0);
ptr[1]=B(5);
/**********found**********/
for(int i=0;i<2;)
ptr[i].print();
delete []ptr;
}
【答案】
(1)错误:~B(int i){cout<
(2)错误:ptr[0]=B(0);
正确:ptr[0]=B();
(3)错误:for (int i=0;i<2;)
正确:for(int i=0;i<2;i++)
7.22.简单应用题
编写一个函数int charnum(char fn[10]),该函数以只读方式打开文件fn,,通过统计,返回文件中字符的个数,请使用while循环实现计数功能。
注意:部分源程序已存在文件test7_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数charnum的花括号中填写若干语句。
文件test7_2.cpp的内容如下:
#include
#include
#include
int charnum(char fn[10]);
void main()
{
int num;
num=charnum("abc.txt");
cout<<"num="<}
int charnum(char fn[10])
{
}
【答案】
int charnum(char fn[10])
{
fstream file;
file.open(fn,ios::in);
if(!file)
{
cout<<"abc.txt can't open"<abort();
}
char ch;
int i=0;
while(!file.eof())
{
file.get(ch);
i++;
}
file.close();
return i-1;
}
7.33.综合应用题
使用VC6打开考生文件夹下的工程test7_3,此工程包含一个源程序文件test7_3.cpp,其中含有一个类Circle的定义,但该类的定义并不完整。请按要求完成下列操作,将类Circle的定义补充完整。
(1)为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。请在注释"//**1**"之后添加适当的语句。
(2)为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序
Circle c;
c.SetRadius(5);
c.Print();
将输出:The circle has radius of 5!
请在注释"//**2**"之后添加适当的语句。
(3)完成友元函数void CompareR(Circle *c1,Circle *c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用if-else结构完成。请在注释"//**3**"之后添加适当的语句。
输出结果如下:
The circle has radus of 5!
The circle has radius of 10!
c1注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test7_3.cpp清单如下:
#include
class Circle{
public:
Circle():radius(5){}
//**1**
void SetRadius(int r) { radius=r; }
int GetRadius() { return radius; }
//**2**
friend void CompareR(Circle *c1,Circle
*c2);
private:
int radius;
};
void CompareR(Circle *c1,Circle *c2)
{
//**3**
cout<<"c1>c2"<else
if
((c1->GetRadius())==(c2->GetRadius()))
cout<<"c1=c2"<else
if
((c1->GetRadius())<(c2->GetRadius()))
cout<<"c1}
void main()
{
Circle c1;
c1.SetRadius(5);
c1.Print();
Circle c2(10);
c2.Print();
CompareR(&c1,&c2);
}
【答案】
(1)Circle(int rad):radius(rad){}
(2)void Print(){cout<<"The circle has radius of "<(3)if ((c1->GetRadius())>(c2->GetRadius())) 8.11.改错题
使用VC6打开考生文件夹下的工程test8_1,此工程包含一个源程序文件test8_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
f1 function of derive
f2 function of base
f4 function of base
源程序文件test8_1.cpp清单如下:
#include
class base
{
public:
/**********found**********/
void f1(){ cout<<"f1 function of
base"<virtual void f2(){ cout<<"f2 function of base"<virtual void f3(){ cout<<"f3 function of base"<void f4(){cout<<"f4 function of
base"<};
/**********found**********/
class derive::public base
{
void f1(){ cout<<"f1 function of derive"<void f2(int x){ cout<<"f2 function of derive"<void f4(){ cout<<"f4 function of derive"<};
void main()
{
base *p;
derive obj2;
/**********found**********/
p=obj2;
p->f1();
p->f2();
p->f4();
}
【答案】
(1)错误:void f1(){ cout<<"f1 function of base"<base"<(2)错误:class derive::public base
正确:class derive:public base
(3)错误:p=obj2;
正确:p=&obj2;
8.22.简单应用题
已知考生的记录由学号和学习成绩构成,N名考生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最低的考生记录,通过形参返回主函数(规定只有一个最低分)。已给予出函数的首部,请完成该函数。
注意:部分源程序已存在文件test8_2.cpp中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。
文件test8_2.cpp的内容如下:
#include
#include
#include
#define N 10
typedef struct ss
{char num[10];
int s;
} STU;
void fun(STU a[],STU *s)
{
}
void main( )
{STU
a[N]={{"A01",81},{"A02",89},{"A03",66},{" A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08 ",61},{"A09",80},{"A10",71}},m;
fun(a,&m);
cout<<"***** The original date
*****"<cout<<"The lowest :"<【答案】
fun(STU a[],STU *s)
{
int i, min;
min=a[0].s;
for(i=0;iif(a[i].s{min=a[i].s;
*s=a[i];
}
}
8.33.综合应用题
使用VC6打开考生文件夹下的工程test8_3,此工程包含一个源程序文件test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅读已有的代码,按要求完成下列操作,将程序补充完整。
(1)定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。请在注释"//**1**"之后添加适当的语句;
(2)完成类Table的成员函数print()的定义,该函数以"x*y=z"的格式打印出九九表中的一个乘法算式,请使用格式化输出函数printf实现,在注释"//**2**"之后添加适当的语句;
(3)完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕,请在注释"//**3**"之后添加适当的语句;
(4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释"//**4**"之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test8_3.cpp清单如下:
#include
#include
class Table
{
//**1**
int z;
public:
void print(int x,int y,int z);
};
void Table::print (int x,int y,int z)
{
//**2**
}
class Table9:public Table
{
public:
void print();
};
void Table9::print()
{
//**3**
int x,y,z;
for (i=1;i<10;i++)
{
for(j=1;j
{
x=i;
y=j;
z=i*j;
Table::print(y,x,z);
}
printf("\n");
}
}
main()
{
//**4**
return 0;
}
【答案】
(1)int x;
int y;
(2)printf( "%d*%d=%d ",x,y,z);
if(z<10) printf(" ");
(3)int i,j;
(4)Table9 t_9;
t_9.print();
9.11.改错题
使用VC6打开考生文件夹下的工程test9_1,此工程包含一个源程序文件test9_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
4,5
20
源程序文件test9_1.cpp清单如下:
#include
class A
{
protected:
int n,m;
public:
void set(int a,int b){m=a; n=b;}
void show(){cout</**********found**********/
}
class B:public A
{
int s;
public:
void set(){s=m*n;}
void shows(){cout<
};
void main()
{
B b;
/**********found**********/
b.set();
b.show();
b.set();
/**********found**********/
b.show();
}
【答案】
(1)错误:} 正确:};
(2)错误:b.set(); 正确:b.A::set(4,5);
(3)错误:b.show(); 正确:b.shows();
9.22.简单应用题
请编写一个函数int CalcDigital(char *str),该函数可返回字符串str中数字字符(即'0'-'9'这10个数字)的个数,如字符串"olympic2008"中数字字符的个数为4。请用if条件判断语句与for循环语句来实现该函数。
注意:部分源程序已存在文件test9_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数find 的花括号中填写若干语句。
文件test9_2.cpp的内容如下:
#include
#include
int CalcDigital(char *str);
void main()
{
char *str;
str=new char[255];
cout<<"输入字符串:";
cin>>str;
int num=CalcDigital(str);
cout<}
int CalcDigital(char *str)
{
}
【答案】int CalcDigital(char *str)
{
if(str==NULL) return 0;
int num_of_digital=0;
int len=strlen(str);
for(int i=0;iif(str[i]<='9' && str[i]>='0')
num_of_digital++;
return num_of_digital;
}
9.33.综合应用题
使用VC6打开考生文件夹下的工程test9_3,此工程包含一个源程序文件test9_3.cpp,其中定义了Circle类与Money类,Circle类可对半径为r的圆进行周长与面积的计算,而Money类用于计算一圆形游泳池的造价。游泳池四周有原形过道,过道外围上栅栏,过道宽度为3米,根据键入的游泳池半径,每米栅栏价格及每平方米过道价格,即可计算出游泳池的造价。请按要求完成下列操作,将程序补充完整。
(1)定义符号常量PI(值为3.14159f)与WIDTH(值为3.00f),分别用于表示圆周率与过道的固定宽度。请在注释"//**1**"之后添加适当的语句。
(2)定义Circle类默认构造函数,把私有成员radius初始化为参数r的值。请在注释"//**2**"之后添加适当的语句;
(3)完成Money类默认构造函数的定义,把私有成员FencePrice(每米栅栏的价格)、ConcretePrice(每平方米过道的价格)初始化为参数f,c的值。请在注释"//**3**"之后添加适当的语句。
(4)完成Money类成员函数float Money::TotalMoney(float fencelen, float conarea)的定义,根据参数fencelen(栅栏的长度)和conarea(过道的面积),返回栅栏与过道的总造价。请在注释
"//**4**"之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test9_3.cpp清单如下:
#include
//**1**
class Circle
{
private:
float radius;
public:
//**2**
float Circumference(){return 2 * PI * radius;}
float Area(){return PI * radius * radius;}
};
class Money
{
private:
float FencePrice;
float ConcretePrice;
public:
Money(float f,float c);
float TotalMoney(float fencelen, float conarea);
};
Money::Money(float f,float c)
{
//**3**
}
float Money::TotalMoney(float fencelen, float conarea)
{
//**4**
}
void main()
{
float radius,fence,concrete;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout << "Enter the radius of the pool: ";
cin >> radius;
cout << "Enter the FencePrice: ";
cin >> fence;
cout << "Enter the ConcretePrice: ";
cin >> concrete;
Circle Pool(radius);
Circle PoolRim(radius + WIDTH);
Money mon(fence,concrete);
float
totalmoney=mon.TotalMoney(PoolRim.Circumference (),(PoolRim.Area() - Pool.Area()));
cout << "The total money is RMB " << totalmoney << endl;
}
【答案】
(1)const float PI = 3.14159f;
const float WIDTH =3.00f;
(2)Circle(float r):radius(r){};
(3)FencePrice=f;
ConcretePrice=c;
(4)return
FencePrice*fencelen+ConcretePrice*conarea;
10.11.改错题
使用VC6打开考生文件夹下的工程test10_1,此工程包含一个源程序文件test10_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:
class Base
class D1
class D2
class D3
f in Base
源程序文件test10_1.cpp清单如下:
#include
class Base
{
public:
Base(){cout<<"class Base"<void f(){cout<<"f in Base"<};
class D1:virtual public Base
{
public:
D1(){cout<<"class D1"<void f(){ cout<<"f in D1"<};
/**********found**********/
class D2:public Base
{
public:
D2(){cout<<"class D2"<};
/**********found**********/
class D3::public D1,public D2
{
public:
D3(){cout<<"class D3"<};
void main()
{
D3 d;
/**********found**********/
d.f();
}
【答案】
(1)错误:class D2:public Base
正确:class D2:virtual public Base
(2)错误:class D3::public D1,public D2
正确:class D3:public D1,public D2
(3)错误:d.f(); 正确:d.Base::f();
10.22.简单应用题
请编写一个函数inline long sum(int n),用递归函数完成运算:sum(n)=1*1+2*2+? ??+n*n,递归表达式为sum(n)=sum(n-1)+n2。
注意:部分源程序已存在文件test10_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数sum 的花括号中填写若干语句。
文件test10_2.cpp的内容如下:
#include
inline long sum(int n)
{
}
void main()
{
int n;
cout<<"输入n:";
cin>>n;
cout<<"结果为:"<}
【答案】
inline long sum(int n)
{
if(n==1)
return 1;
else
return n*n+sum(n-1);
}
10.33.综合应用题
使用VC6打开考生文件夹下的工程test10_3,此工程包含一个源程序文件test10_3.cpp,其中定义了用于表示雇员信息的CEmployee类与表示公司信息的Company类,但这两个类的定义并不完整。请按要求完成下列操作。
(1)定义Cemployee类的私有数据成员name(大小为50的字符数组)和pay(double型数据),分别用于记录雇员姓名和月薪。请在注释"//**1**"之后添加适当的语句。
(2)完成Company类默认构造函数的定义,该构造函数将n值赋值给私有成员num,并完成指针emp所指的n个Cemployee对象空间的申请,请在注释"//**2**"之后添加适当的语句。
(3)完成Company类成员函数void Company::add(int code,char name[50],double pay)的定义,该函数将某一雇员的编号code、姓名name及月薪pay输入到公司信息中。请在注释"//**3**"之后添加适当的语句。
(4)完成Company类成员函数void Company::print()的定义,
使其以"_ is paid _RMB for one month"的格式输出公司内所有员工
的月薪信息。请在注释"//**4**"之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他
内容。
源程序文件test10_3.cpp清单如下:
#include
#include
class CEmployee
{
public:
void putname(char n[50]){strcpy(name,n);}
void getname(char n[50]){strcpy(n,name);}
void putpay(double d){pay=d;}
double getpay(){return pay;}
private:
//**1**
};
class Company
{
private:
CEmployee *emp;
int num;
public:
Company(int n);
void add(int code,char name[50],double pay);
void print();
};
Company::Company(int n)
{
//**2**
}
void Company::add(int code,char
name[50],double pay)
{
//**3**
}
void Company::print()
{
//**4**
for(int i=0;i{
(emp+i)->getname(c);
money=(emp+i)->getpay();
cout<}
}
void main()
{
Company com(2);
com.add(0,"Jack",200);
com.add(1,"Lee",300);
com.print();
}
【答案】
(1)char name[50];
double pay;
(2)num=n;
emp=new CEmployee[num];
(3)(emp+code)->putname(name);
(emp+code)->putpay(pay);
(4)char c[50];
double money; 11.11.改错题
使用VC6打开考生文件夹下的工程test11_1,此工程包含一个源程序文件test11_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:
ch1=7 ch2=9
源程序文件test11_1.cpp清单如下:
#include
class Sample
{
/**************** found ****************/
char ch1,ch2
public:
/**************** found ****************/
friend void set(Sample s, char c1,char c2)
{
s.ch1=c1;
s.ch2=c2;
}
void print(){cout<<"ch1="<ch2="<};
void main()
{
Sample obj;
/**************** found ****************/
obj.set(obj,'7','9');
obj.print();
}
【答案】
(1)错误:char ch1,ch2 正确:char ch1,ch2;
(2)错误:friend void set(Sample s, char c1,char c2)
正确:friend void set(Sample &s, char c1,char c2)(3)错误:obj.set(obj,'7' ,'9'); 正确:set(obj,'7' ,'9');
11.22.简单应用题
请编写一个函数int sum(int n),该函数完成1+2+3+…+n的运算,并返回运算结果,其中n>0。注意:请使用递归算法实现该函数。
注意:部分源程序已存在文件test11_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数sum 的花括号中填写若干语句。
文件test11_2.cpp的内容如下:
#include
int sum(int n)
{
}
void main()
{
int n;
cout<<"输入n: ";
cin>>n;
int result=sum(n);
cout<<"结果为:"<}
【答案】
int sum(int n)
{
if(n==1)
return 1;
else
return n + sum(n-1);
}
11.33.综合应用题
使用VC6打开考生文件夹下的工程test11_3。此工程包含一个test11_3.cpp,其中定义了类CPosition,但该类的定义都并不完整。请按要求完成下列操作,将类CPosition的定义补充完整。
(1)在类定义外完成重载的两个构造函数CPosition()和CPosition(double dx, double dy),其中前者为不带参数的构造函数,使CPosition对象的默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分别初始化为参数dx和dy的值。请在注释"// ** 1 ** "之后添加适当的语句。
(2)在类体中添加函数move(double ax, double ay)的定义,使得点的坐标x和y分别移动ax和ay个单位,请在注释"// ** 2 ** "之后添加适当的语句。
(3)完成函数double distance(double bx, double by)的定义,该函数返回*this和点(bx,by)的距离,请在注释"// ** 3 ** "之后添加适当的语句。
注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test11_3.cpp清单如下:
#include
#include
class CPosition
{
public:
CPosition();
CPosition(double dx, double dy);
double getx();
double gety();
// ** 2 **
double distance(double bx, double by);
private:
double x;
double y;
};
// ** 1 **
{
x=0; y=0;
}
CPosition::CPosition(double dx, double dy)
{
x=dx; y=dy;
}
double CPosition::getx()
{
return x;
}
double CPosition::gety()
{
return y;
}
double CPosition::distance(double bx, double by)
{
// ** 3 **
}
void main()
{
double a,b;
cout << "Input x, y position of a point: ";
cin >> a >> b;
CPosition psA(a, b);
cout << "Input x, y position of another point: ";
cin >> a >> b;
cout << "The distance is " <<
psA.distance(a,b) <}
【答案】
(1)CPosition::CPosition()
(2)void move(double ax, double ay){x += ax;y += ay;};
(3)return sqrt(pow(x-bx, 2) + pow(y-by, 2));
12.11.改错题
使用VC6打开考生文件夹下的工程test12_1,此工程包含一个源程序文件test12_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:
fun(Sample &p) 1 2
fun(Sample *p) 3 4
20 10
源程序文件test12_1清单如下:
#include
class Sample
{
private:
int x,y;
static int z;
public:
Sample(int a,int b){ x=a;y=b; }
void fun(Sample &p);
void fun(Sample *p);
static void print(Sample s);
};
/**************** found ****************/
int z=10;
void Sample::fun(Sample &p)
{
x=p.x; y=p.y;
cout<<"fun(Sample &p)"<<" "<"<}
void Sample::fun(Sample *p)
{
/**************** found ****************/
x=p.x; y=p.y;
cout<<"fun(Sample *p)"<<" "<"<}
void Sample::print(Sample s)
{
/**************** found ****************/
x=20;
cout<}
void main()
{
Sample p(1,2),q(3,4);
p.fun(p);
p.fun(&q);
p.print(p);
}
【答案】
(1)错误:int z=10; 正确:int Sample::z=10;
(2)错误:x=p.x; y=p.y; 正确:x=p->x; y=p->y;
(3)错误:x=20; 正确:s.x=20;
12.22.简单应用题
请编写一个函数int Count(double a[], int n),统计出具有n个元素的一维数组中大于等于所有元素平均值的元素个数并返回这个值。注意:请使用for循环实现该函数。
注意:部分源程序已存在文件test12_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数Count的花括号中填写若干语句。
文件test12_2的内容如下:
#include
int Count(double a[], int n)
{
}
void main()
{
double a[5];
cout<<"请输入5个double型的数字"<for(int i=0;i<5;i++)
{
cin>>a[i];
}
int result=Count(a,5);
cout<<"大于等于所有元素平均值的元素个
数:"<}
【答案】int Count(double a[], int n)
{
double m=0;
int i;
for(i=0;im=m/n;
int c=0;
for(i=0;iif(a[i]>=m) c++;
return c;
}
12.33.综合应用题
使用VC6打开考生文件夹下的工程test12_3,此工程包含一个test12_3.cpp,其中定义了类Base和类A,类A公有继承Base,但这两个类的定义都并不完整。请按要求完成下列操作,将程序补充完整。
(1)定义枚举类型变量en,它包含两个枚举符front和back,请在注释"// ** 1 ** "之后添加适当的语句。
(2)在类Base中添加常成员虚函数void E()的定义,该函数输出"In BaseE!",请在注释"// ** 2 ** "之后添加适当的语句。
(3)在类A中添加常成员虚函数void E()的定义,该函数先调用基类中的虚函数E()再输出"In AE!",请在注释"// ** 3 ** "之后添加适当的语句。
(4)完成类A构造函数的定义,请使用参数列表的形式初始化类A的成员,并输出"A constructor.",请在注释"// ** 4 ** "之后添加适当的语句。
输出结果如下:
Base constructor.
A constructor.
In BaseE!
In AE!
In BaseP!
In A!
1
A destructor.
Base destructor.
注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test12_3.cpp清单如下:
#include
// ** 1 **
class Base
{
protected:
int b1;
int b2;
public:
Base();
~Base();
int Getb1()const { return b1; }
void Setb1(int x){ b1 = x; }
int Getb2()const { return b2; }
void Setb2(int y) { b2 = y; }
void Print()const {cout<<"In
BaseP!"<// ** 2 **
};
Base::Base():b1(1),b2(5)
{
cout<<"Base constructor."<}
Base::~Base()
{
cout<<"Base destructor."<}
class A:public Base
{
protected:
en enA;
public:
A();
~A();
en GetColor()const { return enA; }
void SetColor(en color){ enA = color; }
void InA(){cout<<"In A!"<// ** 3 **
{
Base::E();
cout<<"In AE!"<}
};
// ** 4 **
{
cout<<"A constructor."<}
A::~A()
{
cout<<"A destructor."<}
void main()
{
A a1;
a1.E();
cout<a1.Print();
a1.InA();
cout<}
【答案】
(1)enum en{front,back};
(2)virtual void E()const {cout<<"In
BaseE!"<(3)virtual void E()const
(4)A::A():enA(front)
13.11.改错题
使用VC6打开考生文件夹下的工程test13_1,此工程包含一个源程序文件test13_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:
n=2
n=5
n=7
源程序文件test13_1清单如下:
#include
class Sample
{
int n;
public:
/**************** found *****************/
Sample()
Sample(int i){n=i;}
/**************** found *****************/
void add(Sample s1,Sample s2)
/*************** found ******************/
{
this.n=s1->n+s2.n;
}
void disp(){cout<<"n="<};
void main()
{
Sample s1(2),s2(5),s3;
s3.add(&s1,s2);
s1.disp();
s2.disp();
s3.disp();
}
【答案】
(1)错误:Sample() 正确:Sample(){}
(2)错误:void add(Sample s1,Sample s2)
正确:void add(Sample *s1,Sample s2)
(3)错误:this.n=s1->n+s2.n; 正确:this->n=s1->n+s2.n;
13.22.简单应用题
请编写一个函数int fun(int nFirst,int nSecond),求两个数的最小公倍数并返回这个值。
注意:部分源程序已存在文件test13_2.cpp中。如输入7和8时,结果是56。
请勿修改主函数main和其他函数中的任何内容,仅在函数fun 的花括号中填写若干语句。
文件test13_2的内容如下:
#include
int fun(int nFirst,int nSecond);
void main()
{
int nFirst, nSecond;
cout<<"Please input the first one\n";
cin>>nFirst;
cout<<"Please input the second one\n";
cin>>nSecond;
cout<<"最小公倍数:
"<}
int fun(int nFirst,int nSecond)
{
}
【答案】
int fun(int nFirst,int nSecond)
{
int nMax, nMin;
if (nFirst>nSecond)
{
nMax = nFirst;
nMin = nSecond;
}
else
{
nMax = nSecond;
nMin = nFirst;
}
int nMod = nMax % nMin;
while(nMod)
{
nMax = nMin;
nMin = nMod;
nMod = nMax % nMin;
}
int nMultiple = nFirst * nSecond / nMin;
return nMultiple;
}
13.33.综合应用题
使用VC6打开考生文件夹下的工程test13_3。此工程包含一个test13_3.cpp,其中定义了类Vector,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)完成构造函数的定义,把数据成员size初始化为参数s的值,数据成员buffer指向动态申请的int型size大小的空间。请在注释"// ** 1 ** "之后添加适当的语句。
(2)完成拷贝构造函数的定义,注意解决多次删除的问题。请在注释"// ** 2 ** "之后添加适当的语句。
(3)完成成员函数elem的定义,该函数返回buffer的第ndx个元素的值,注意如果ndx超界,请输出"error in index"。请在注释"// ** 3 ** "之后添加适当的语句。
(4)完成析构函数的定义,要求先将字符d打印在屏幕上,再释放buffer指向的空间。请在注释"// ** 4 ** "之后添加适当的语句。
输出结果如下:
1234567891012345678910dd
注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test13_3清单如下:
#include
#include
class Vector
{
public:
Vector(int s=100);
Vector(Vector &v);
int &elem(int ndx);
void display();
void set();
~Vector();
protected:
int size;
int *buffer;
};
Vector::Vector(int s)
{
// ** 1 **
}
Vector::Vector(Vector &v)
{
// ** 2 **
for(int i=0; i{
*(buffer+i)=*(v.buffer+i);
}
}
int &Vector::elem(int ndx)
{
// ** 3 **
{
cout<<"error in index"<exit(1);
}
return buffer[ndx];
}
void Vector::display()
{
for(int j=0;jcout<}
void Vector::set()
{
for(int j=0;jelem(j)=j+1;
}
Vector::~Vector()
{
// ** 4 **
}
void main()
{
Vector a(10);
Vector b(a);
a.set();
b.set();
a.display();
b.display();
}
【答案】
(1)size=s;
buffer=new int[size];
(2)size=v.size;
buffer=new int[size];
(3)if (ndx<0||ndx>=size)
(4)cout<<"d"<delete [] buffer;
14.11.改错题
使用VC6打开考生文件夹下的工程test14_1,此工程包含一个源程序文件test14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:
member1= 5 member2=5
member1=7 member2=9
源程序文件test14_1.cpp清单如下:
#include
class MyClass
{
/*************** found ******************/
friend void setMember(MyClass myObj,char mem1)
{
myObj.member1=mem1;
myObj.member2=mem1;
cout<<"member1="<}
void swap(int *x,int *y)
{
}
【答案】void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
14.33.综合应用题
使用VC6打开考生文件夹下的工程test14_3,此工程包含一个test14_3.cpp,其中定义了类File,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)完成构造函数的定义,使数据成员filename,content指向为空。请在注释"// ** 1 ** "之后添加适当的语句;
(2)完成函数set_contents的定义,该函数为content申请新的空间来存储new_content的内容,成功返回true,失败返回false。请在注释"// ** 2 ** "之后添加适当的语句;
(3)完成成员函数copy(File &source, File &target)的定义,该函数实现将source的内容拷贝至target的功能,注意必须使用已经定义的成员函数来实现。请在注释"// ** 3 ** "之后添加适当的语句;
(4)完成析构函数的定义,要求释放content指向的空间。请在注释"// ** 4 ** "之后添加适当的语句。
输出结果如下:
file2:file1 contents
file2:file2 contents
注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test14_3.cpp清单如下:
#include
#include
class File{
private:
char file_name[64];
char * contents;
public:
File(char *filename)
{
// ** 1 **
};
File::~File()
{
// ** 4 **
}
void
printfile(){cout<friend bool copy(File & source, File & target);
bool set_contents(char * new_contents);
};
bool File::set_contents(char *
new_contents)
{
// ** 2 **
if(contents==NULL)
return false;
strcpy(contents,new_contents);
return true;
}
bool copy(File &source,File &target)
{
// ** 3 **
}
void main()
{
File f1("file1"),f2("file2");
f1.set_contents("file1 contents");
copy(f1,f2);
f2.printfile();
f2.set_contents("file2 contents");
f2.printfile();
}
【答案】
(1)strcpy(file_name,filename);
contents=NULL;
(2)contents=new
char[(strlen(new_contents)+1)];
(3)return target.set_contents
(source.contents);
(4)delete []contents;
15.11.改错题
使用VC6打开考生文件夹下的工程test15_1,此工程包含一个源程序文件test15_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:
My object has member 7
源程序文件test15_1.cpp清单如下:
#include
class MyClass
{
public:
MyClass(int mem){member=mem;}
~MyClass(){}
int GetAge() const{ return member;}
private:
int member;
};
/**************** found ****************/
void main()
{
int mem=7;
/**************** found ****************/
MyClass myObj=MakeObject(mem);
cout<<"My object has member
"<GetAge()</**************** found ****************/
delete;
}
MyClass *MakeObject(int mem)
{
MyClass *pMyClass=new MyClass(mem);
return pMyClass;
}
【答案】
(1)添加函数定义MyClass *MakeObject(int mem);
(2)错误:MyClass myObj=MakeObject(mem);
正确:MyClass *myObj=MakeObject(mem);
(3)错误:delete;
正确:delete myObj;
15.22.简单应用题
请编写一个函数char MaxCharacter(char * str),该函数返回参数str所指向的字符串中具有最大ASCII码的那个字符(如字符串"world"中字符'w'具有最大的ASCII码)。当str所指向的字符串为空时,则返回空字符0x0或'\0'。
输出结果如下:
Good Morning!
Max char:r
注意:部分源程序已存在文件test15_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数MaxCharacter的花括号中填写若干语句。
文件test15_2.cpp的内容如下:
#include
#include
char MaxCharacter(char * str);
void main()
{
char str[100];
strcpy(str,"Good Morning!");
char maxc=MaxCharacter(str);
cout<cout<<"Max char:"<}
char MaxCharacter (char *str)
{
}
【答案】
char MaxCharacter (char *str)
{
if(str==NULL)
return 0x0;
char maxChar=0x0;
int len=strlen(str);
for(int i=0;i{
if(str[i]>maxChar)
maxChar=str[i];
}
return maxChar;
}
15.33.综合应用题
使用VC6打开考生文件夹下的工程test15_3。此工程包含一个test15_3.cpp,其中定义了类Time和Timex,Timex公有继承Time,但定义并不完整。请按要求完成下列操作,将程序补充完整。
(1)完成类Time构造函数的定义,将数据成员hours和minutes 分别初始化为参数new_hours和new_minutes的值。请在注释"// ** 1
** "之后添加适当的语句。
(2)完成类Timex的构造函数的定义,注意参数的传递。请在注释"// ** 2 ** "之后添加适当的语句。
(3)请按时间格式"hour:minute"和"hour:minute:second"分别输出对象time1和time2所表示的时间,注意必须使用已经定义的成员函数。请在注释"// ** 3 ** "之后添加适当的语句。
输出结果如下:
20:30
10:45:34
注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test15_3.cpp清单如下:
#include
class Time
{
public:
Time(int new_hours,int new_minutes)
{
// ** 1 **
}
int get_hours();
int get_minutes();
protected:
int hours,minutes;
};
int Time::get_hours()
{
return hours;
}
int Time::get_minutes()
{
return minutes;
}
class Timex:public Time
{
public:
Timex(int new_hours,int new_minutes,int new_seconds);
int get_seconds();
protected:
int seconds;
};
// ** 2 **
{
seconds=new_seconds;
}
int Timex::get_seconds()
{
return seconds;
}
void main()
{
Time time1(20,30);
Timex time2(10,45,34);
// ** 3 **
}
【答案】
(1)hours=new_hours;
minutes=new_minutes;
(2)Timex::Timex(int
new_hours,intnew_minutes,
int new_seconds):Time(new_hours,new_minutes) (3)
cout<cout<16.11.改错题
使用VC6打开考生文件夹下的工程test16_1,此工程包含一个源程序文件test16_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:
Which act(a or b)?b
act1
act2
Bact3
Bact4
Bend
源程序文件test16_1.cpp清单如下:
#include
class A
{
public:
virtual void
act1(){cout<<"act1\n";act2();}
void act2(){cout<<"act2\n";act3();}
/**************** found ****************/
void act3(){cout<<"Aact3\n";act4();}
/**************** found ****************/
virtual void
act4{cout<<"Aact4\n";act5();}
void act5(){cout<<"Aend\n";}
};
class B :public A
{
void act3(){cout<<"Bact3\n";act4();}
void act4(){cout<<"Bact4\n";act5();}
void act5(){cout<<"Bend\n";}
};
void main(void)
{
char c;
A *a;
cout<<"Which act(a or b)?";
/**************** found ****************/
cin<if(c=='a')
a = new A;
else
a = new B;
a->act1();
delete a;
}
【答案】
(1)错误:void act3(){cout<<"Aact3\n";act4();}
正确:virtual void act3(){cout<<"Aact3\n";act4();} (2)错误:virtual void act4{cout<<"Aact4\n";act5();}
正确:virtual void act4(){cout<<"Aact4\n";act5();} (3)错误:cin<正确:cin>>c;
16.22.简单应用题
请编写一个函数void fun(char ss[]),该函数将字符串ss翻转,如ss为"123abc"则翻转后为"cba321"。注意:用数组方式及for循环来实现该函数。
注意:部分源程序已存在文件test16_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数fun 的花括号中填写若干语句。
文件test16_2.cpp的内容如下:
#include
#include
void fun(char ss[]);
void main()
{
char s[80];
cout<<"请输入字符串:";
cin>>s;
fun(s);
cout<<"逆序后的字符串:"<
}
void fun(char ss[])
{
}
【答案】void fun(char ss[])
{
int n=strlen(ss);
for(int i=0;i<(n/2); i++)
{
char c=ss[i];
ss[i]=ss[n-1-i];
ss[n-1-i]=c;
}
}
16.33.综合应用题
使用VC6打开考生文件夹下的工程test16_3,此工程包含一个源程序文件test16_3.cpp,其中定义了类Cat,但类Cat的定义并不完整。请按要求完成下列操作,将类Cat的定义补充完整。
(1)定义类Cat的保护数据成员itsAge用于表示年龄,它是int 型的数据。请在注释"//**1**"之后添加适当的语句。
(2)完成成员函数GetAge()的类外定义,返回成员的itsAge值,请在注释"//**2**"之后添加适当的语句。
(3)完成成员函数SetAge(int age)的类外定义,把数据成员itsAge赋值为参数age的值,请在注释"//**3**"之后添加适当的语句。
(4)完成成员函数Meow的类外定义,使其输出字符串"meow."到屏幕上。请在注释"//**4**"之后添加适当的语句。
输出结果如下:
meow.
kitty is a cat who is 5 years old.
meow.
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test16_3.cpp清单如下:
#include
class Cat
{
public:
int GetAge();
void SetAge(int age);
void Meow();
protected:
//**1**
};
int Cat::GetAge()
{
//**2**
}
void Cat::SetAge(int age)
{
//**3**
}
void Cat::Meow()
{
//**4**
}
void main()
{
Cat kitty;
kitty.Meow();
kitty.SetAge(5);
cout<<"kitty is a cat who is ";
cout<cout<<" years old.\n";
kitty.Meow();
}
【答案】(1)int itsAge;
(2)return itsAge;
(3)itsAge=age;
(4)cout<<"meow.\n";
17.11.改错题
使用VC6打开考生文件夹下的工程test17_1,此工程包含一个源程序文件test17_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
Vehicle message
Car message
Vehicle message
源程序文件test17_1.cpp清单如下:
#include
class vehicle
{
int wheels;
float weight;
public:
/**************** found ****************/
void message(void){ cout<<"Vehicle message\n";}
};
class car:public vehicle
{
int passenger_load;
public:
/**************** found ****************/
void message (void){cout>>"Car
message\n";}
};
class truck:public vehicle
{
int passenger_load;
float payload;
public:
int passengers(void){return
passenger_load;}
};
void main()
{
vehicle * unicycle;
unicycle=new vehicle;
/**************** found ****************/
unicycle.message();
delete unicycle;
unicycle=new car;
unicycle->message();
delete unicycle;
unicycle=new truck;
unicycle->message();
delete unicycle;
}
【答案】
(1)错误:void message(void){ cout<<"Vehicle message\n";}正确:virtual void message(void){ cout<<"Vehicle message\n";}
(2)错误:void message (void){cout>>"Car message\n";}
正确:void message (void){cout<<"Car message\n";}(3)错误:unicycle.message();
正确:unicycle->message();
17.22.简单应用题
编写类AA的成员函数int Compare(AA b),该函数用于比较*this 与b的大小,若两者含有元素的个数n相同,并且数组中前n个元素值对应相同,则认为两者相等返回1,否则返回0。注意:用数组方式及for循环来实现该函数。输出结果如下:
a=b
a<>c
注意:部分源程序已存在文件test17_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数Compare的花括号中填写若干语句。
文件test17_2.cpp的内容如下:
#include
#include
class AA {
int *a;
int n;
int MS;
public:
void InitAA(int aa[], int nn, int ms)
{
if(nn>ms)
{
cout<<"Error!"<exit(1);
}
MS=ms;
n=nn;
a=new int[MS];
for(int i=0; i}
int Compare(AA b);
};
int AA::Compare(AA b)
{
}
void main()
{
AA a,b,c;
int x[]={1,2,3,4,5};
int y[]={1,2,3,6,7};
int z[]={1,2,5,7,9};
a.InitAA(x,3,5);
b.InitAA(y,3,5);
c.InitAA(z,3,5);
if (https://www.360docs.net/doc/ee799650.html,pare(b))
cout<<"a=b"<else
cout<<"a<>b"<if (https://www.360docs.net/doc/ee799650.html,pare(c))
cout<<"a=c"<else
cout<<"a<>c"<}
【答案】int AA::Compare(AA b)
{
if(n!=b.n) return 0;
for(int i=0; iif(a[i]!=b.a[i]) return 0;
return 1;
}
17.33.综合应用题
使用VC6打开考生文件夹下的工程test17_3,此工程包含一个源程序文件test17_3.cpp,其中定义了用于表示点的类Point和表示内容的类Text以及二者的派生类CircleWithText,但它们的定义并不完整。请按要求完成下列操作,将它们的定义补充完整。
(1)定义类Point的构造函数,请使用参数列表的形式将成员函数x和y分别初始化为参数x1和y1的值。请在注释"//**1**"之后添加适当的语句。
(2)完成类Text的构造函数Text(char *str)的定义,将char型的str指向的内容赋值给text并且输出str所指向的内容,请在注释
"//**2**"之后添加适当的语句。
(3)定义类CircleWithText的构造函数CircleWithText(int cx,int cy, char *msg),int 型的cx和cy用于赋值给x和y,char型的指针*msg 用于赋值给text,请在注释"//**3**"之后添加适当的语句。
输出结果如下:
Point: 3 4
hello
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test17_3.cpp清单如下:
#include
#include
class Point
{
int x,y;
public:
//**1**
{
cout<<"Point:"<}
~Point(){}
};
class Text
{
char text[100];
public:
Text(char *str)
{
//**2**
}
~Text(){}
};
class CircleWithText:public Point,public Text
{
public:
//**3**
{}
~CircleWithText() {}
};
void main()
{
CircleWithText cm(3,4,"hello");
}
【答案】(1)Point(int x1=0, int y1=0) :x(x1), y(y1)(2)strcpy(text,str);
cout<