当前位置:文档之家› C++面向对象程序设计上机考试题库[1]

C++面向对象程序设计上机考试题库[1]

一、第一类题目(20道,每题7分,在word中保留代码并将输出结果窗口保留)

1.定义盒子Box类,要求具有以下成员:长、宽、高分别为x,y,z,可设置盒子形状;

可计算盒子体积;可计算盒子的表面积。

#include

class Box

{ private:

int x,y,z; int v,s;

public:

void int(int x1=0,int y1=0,int z1=0) {x=x1;y=y1;z=z1;}

void volue() {v=x*y*z;}

void area() {s=2*(x*y+x*z+y*z);}

void show()

{cout<<"x= "<

Box box2(12,10,20);

cout<<"The volume of box2 is "<

return 0;

}

3.有两个长方柱,其长、宽、高分别为:(1)12,20,25;(2)10,30,20。分别求他们的体积。编一个基于对象的程序,且定义两个构造函数,其中一个有参数,一个无参数。

#include

using namespace std;

class Box

{public:

Box();

Box(int len,int w ,int h):length(len),width(w),height(h){}

int volume();

private:

int length;

int width;

int height;

};

int Box::volume()

{return(length*width*height);

}

int main()

{

Box box1(10,20,25);

cout<<"The volume of box1 is "<

Box box2(10,30,20);

cout<<"The volume of box2 is "<

return 0;

}

4.声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。

#include

using namespace std;

template//声明一个类模板

class Compare

{public:

Compare(numtype a,numtype b)

{x=a;y=b;}

numtype max()

{return (x>y)?x:y;}

numtype min()

{return (x

private:

numtype x,y;

};

int main()

{Compare cmp1(3,7);

cout<

cout<

Compare cmp2(45.78,93.6);

cout<

cout<

Compare cmp3('a','A');

cout<

cout<

return 0;

}

5.建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。初值自拟。

#include

using namespace std;

class Student

{public:

Student(int n,double s):num(n),score(s){}

void display();

private:

int num;

double score;

};

void Student::display()

{cout<

int main()

{Student stud[5]={

Student(101,78.5),Student(102,85.5),Student(103,98.5),

Student(104,100.0),Student(105,95.5)};

Student *p=stud;

for(int i=0;i<=2;p=p+2,i++)

p->display();

return 0;

}

6.建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。初值自拟。

#include

using namespace std;

class Student

{public:

Student(int n,float s):num(n),score(s){}

int num;

float score;

};

void main()

{Student stud[5]={

Student(101,78.5),Student(102,85.5),Student(103,98.5),

Student(104,100.0),Student(105,95.5)};

void max(Student* );

Student *p=&stud[0];

max(p);

}

void max(Student *arr)

{float max_score=arr[0].score;

int k=0;

for(int i=1;i<5;i++)

if(arr[i].score>max_score) {max_score=arr[i].score;k=i;}

cout<

}

7.用new建立一个动态一维数组,并初始化int[10]={1,2,3,4,5,6,7,8,9,10},用指针输出,最后销毁数组所占空间。

#include

#include

using namespace std;

void main(){

int *p;

p=new int[10];

for(int i=1;i<=10;i++)

{

*(p+i-1)=i;

cout<<*(p+i-1)<<" ";

}

cout<

delete []p;

return;

}

8.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和。初值自拟。

#include

using namespace std;

class Complex

{public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;}

double get_real();

double get_imag();

void display();

private:

double real;

double imag;

};

double Complex::get_real()

{return real;}

double Complex::get_imag()

{return imag;}

void Complex::display()

{cout<<"("<

Complex operator + (Complex &c1,Complex &c2)

{

return

Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());

}

int main()

{Complex c1(3,4),c2(5,-10),c3;

c3=c1+c2;

cout<<"c3=";

c3.display();

return 0;

}

9.定义一个复数类Complex,重载运算符“+”,“—”,使之能用于复数的加,减运算,运算符重载函数作为Complex类的成员函数。编程序,分别求出两个复数之和,差。

初值自拟。

using namespace std;

class Complex

{public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;}

Complex operator+(Complex &c2);

Complex operator-(Complex &c2);

void display();

private:

double real;

double imag;

};

Complex Complex::operator+(Complex &c2)

{Complex c;

c.real=real+c2.real;

c.imag=imag+c2.imag;

return c;}

Complex Complex::operator-(Complex &c2)

{Complex c;

c.real=real-c2.real;

c.imag=imag-c2.imag;

return c;}

void Complex::display()

{cout<<"("<

int main()

{Complex c1(3,4),c2(5,-10),c3;

c3=c1+c2;

cout<<"c1+c2=";

c3.display();

c3=c1-c2;

cout<<"c1-c2=";

c3.display();

return 0;

}

10.定义一个复数类Complex,重载运算符“*”,“/”,使之能用于复数的乘,除。运算符重载函数作为Complex类的成员函数。编程序,分别求出两个复数之积和商。初值自拟。提示:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i。两复数相除的计算公式为:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad) /(c*c+d*d)i。

#include

using namespace std;

class Complex

{public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;}

Complex operator*(Complex &c2);

Complex operator/(Complex &c2);

void display();

private:

double real;

double imag;

};

Complex Complex::operator*(Complex &c2)

{Complex c;

c.real=real*c2.real-imag*c2.imag;

c.imag=imag*c2.real+real*c2.imag;

return c;}

Complex Complex::operator/(Complex &c2)

{Complex c;

c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);

c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);

return c;}

void Complex::display()

{cout<<"("<

int main()

{Complex c1(3,4),c2(5,-10),c3;

c3=c1*c2;

cout<<"c1*c2=";

c3.display();

c3=c1/c2;

cout<<"c1/c2=";

c3.display();

return 0;

}

11.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。例如:c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。编程序,分别求两个复数之和、整数和复数之和。初值自拟。

#include

class Complex

{public:

Complex(){real=0;imag=0;}

Complex(double r,double i){real=r;imag=i;}

Complex operator+(Complex &c2);

Complex operator+(int &i);

friend Complex operator+(int&,Complex &);

void display();

private:

double real;

double imag;

};

Complex Complex::operator+(Complex &c)

{return Complex(real+c.real,imag+c.imag);}

Complex Complex::operator+(int &i)

{return Complex(real+i,imag);}

void Complex::display()

{cout<<"("<

Complex operator+(int &i,Complex &c)

{return Complex(i+c.real,c.imag);}

int main()

{Complex c1(3,4),c2(5,-10),c3;

int i=5;

c3=c1+c2;

cout<<"c1+c2=";

c3.display();

c3=i+c1;

cout<<"i+c1=";

c3.display();

c3=c1+i;

cout<<"c1+i=";

c3.display();

return 0;

}

12.有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如c=a+b。初值自拟。

#include

class Matrix

{public:

Matrix();

friend Matrix operator+(Matrix &,Matrix &);

void input();

void display();

private:

int mat[2][3];

};

Matrix::Matrix()

{for(int i=0;i<2;i++)

for(int j=0;j<3;j++)

mat[i][j]=0;

}

Matrix operator+(Matrix &a,Matrix &b)

{Matrix c;

for(int i=0;i<2;i++)

for(int j=0;j<3;j++)

{c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}

return c;

}

void Matrix::input()

{cout<<"input value of matrix:"<

for(int i=0;i<2;i++)

for(int j=0;j<3;j++)

cin>>mat[i][j];

}

void Matrix::display()

{for (int i=0;i<2;i++)

{for(int j=0;j<3;j++)

{cout<

cout<

}

int main()

{Matrix a,b,c;

a.input();

b.input();

cout<

a.display();

cout<

b.display();

c=a+b;

cout<

c.display();

return 0;

}

13.将运算符“+”重载为适用于复数加法,重载函数不作为成员函数,而放在类外,作为Complex类的友元函数。初值自拟。

#include

class Complex

{public:

Complex(){real=0;imag=0;}

Complex(double r){real=r;imag=0;}

Complex(double r,double i){real=r;imag=i;}

friend Complex operator+ (Complex &c1,Complex &c2);

void display();

private:

double imag;

};

Complex operator+ (Complex &c1,Complex &c2)

{

return Complex(c1.real+c2.real, c1.imag+c2.imag);

}

void Complex::display()

{cout<<"("<

int main()

{Complex c1(3,4),c2(5,-10),c3;

c3=c1+c2;

cout<<"c1="; c1.display();

cout<<"c2="; c2.display();

cout<<"c1+c2="; c3.display();

return 0;

}

14.定义一个字符串类String,用来存放不定长的字符串,重载运算符“==”,,用于两个字符串的等于比较运算。初值自拟。

#include

#include

class String

{public:

String(){p=NULL;}

String(char *str);

friend bool operator==(String &string1,String &string2);

void display();

private:

char *p;

};

String::String(char *str)

{p=str;

}

void String::display()

{cout<

bool operator==(String &string1,String &string2)

{if(strcmp(string1.p,string2.p)==0)

return true;

else

}

void compare(String &string1,String &string2)

{if(operator==(string1,string2)==1)

{string1.display();cout<<"=";string2.display();}

cout<

}

int main()

{String string1("Hello"),string2("Hello");

compare(string1,string2);

return 0;

}

15.定义一个字符串类String,用来存放不定长的字符串,重载运算符"<",用于两个字符串的小于的比较运算。初值自拟。

#include

#include

class String

{public:

String(){p=NULL;}

String(char *str);

friend bool operator<(String &string1,String &string2);

void display();

private:

char *p;

};

String::String(char *str)

{p=str;

}

void String::display()

{cout<

bool operator<(String &string1,String &string2)

{if(strcmp(string1.p,string2.p)<0)

return true;

else

return false;

}

void compare(String &string1,String &string2)

{if(operator<(string1,string2)==1)

{string1.display();cout<<"<";string2.display();}

cout<

}

int main()

{String string1("Book"),string2("Computer");

compare(string1,string2);

return 0;

}

16.定义一个字符串类String,用来存放不定长的字符串,重载运算符">",用于两个字符串的大于的比较运算。初值自拟。

#include

#include

class String

{public:

String(){p=NULL;}

String(char *str);

friend bool operator>(String &string1,String &string2);

void display();

private:

char *p;

};

String::String(char *str)

{p=str;

}

void String::display()

{cout<

bool operator>(String &string1,String &string2)

{if(strcmp(string1.p,string2.p)>0)

return true;

else

return false;

}

void compare(String &string1,String &string2)

{if(operator>(string1,string2)==1)

{string1.display();cout<<">";string2.display();}

cout<

}

int main()

{String string1("Hello"),string2("Book");

compare(string1,string2);

return 0;}

17.定义一个描述学生基本情况的类,数据成员包括姓名、学号、C++成绩、英语和数学成绩,成员函数包括输出数据,求出总成绩和平均成绩。数据自拟。

#include"string.h"

#include

class CStuScore

{ public:

char strName[12];

char strStuNO[9];

void SetScore( char sname[12], char NO[9],float s0, float s1, float s2)

{

strcpy(strName, sname);

strcpy(strStuNO, NO);

fScore[0] = s0;

fScore[1] = s1;

fScore[2] = s2; }

void print()

{ cout<<

cout<<"姓名:"<

cout<<"学号:"<

cout<<" C++成绩:"<

"<

float GetSUM()

{ return (float)((fScore[0] + fScore[1] + fScore[2])); }

float GetAverage();

private:

float fScore[3];

};

float CStuScore::GetAverage()

{ return (float)((fScore[0] + fScore[1] + fScore[2])/3.0); }

void main()

{ CStuScore one;

float a,b,c;

char Name[12];

char StuNO[9];

cout<<"姓名:";

cin>>Name;

cout<<"学号:";

cin>>StuNO;

cout<<" 成绩1:"<<" 成绩2: "<<" 成绩3: "<<"\n";

cin>>a>>b>>c;

one.SetScore(Name,StuNO,a,b,c);

one.print();

cout<<"平均成绩为 "<

cout<<"总成绩"<

18.先建立一个Point(点)类,包含数据成员x,y(坐标点)。以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,在增加数据成员h(高)。编写程序,重载运算符“<<”和“>>”,使之能够用于输出以上类对象。

#include

class Point

{public:

Point(float=0,float=0);

void setPoint(float,float);

float getX() const {return x;}

float getY() const {return y;}

friend ostream & operator<<(ostream &,const Point &);

protected:

float x,y;

};

Point::Point(float a,float b)

{x=a;y=b;}

void Point::setPoint(float a,float b)

{x=a;y=b;}

ostream & operator<<(ostream &output,const Point &p)

{output<<"["<

return output;

}

class Circle:public Point

{public:

Circle(float x=0,float y=0,float r=0);

void setRadius(float);

float getRadius() const;

float area () const;

friend ostream &operator<<(ostream &,const Circle &);

protected:

float radius;

};

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::setRadius(float r)

{radius=r;}

float Circle::getRadius() const {return radius;}

float Circle::area() const

{return 3.14159*radius*radius;}

ostream &operator<<(ostream &output,const Circle &c)

{output<<"Center=["<

area="<

return output;

}

class Cylinder:public Circle

{public:

Cylinder (float x=0,float y=0,float r=0,float h=0);

void setHeight(float);

float getHeight() const;

float area() const;

float volume() const;

friend ostream& operator<<(ostream&,const Cylinder&);

protected:

float height;

};

Cylinder::Cylinder(float a,float b,float r,float h)

:Circle(a,b,r),height(h){}

void Cylinder::setHeight(float h){height=h;}

float Cylinder::getHeight() const {return height;}

float Cylinder::area() const

{ return 2*Circle::area()+2*3.14159*radius*height;}

float Cylinder::volume() const

{return Circle::area()*height;}

ostream &operator<<(ostream &output,const Cylinder& cy)

{output<<"Center=["<

Point &pRef=cy1;

cout<<"\npRef as a point:"<

Circle &cRef=cy1;

cout<<"\ncRef as a Circle:"<

return 0;

}

19.写一个程序,定义抽象类型Shape,由他派生三个类:Circle(圆形),Rectangle (矩形),Trapezoid(梯形),用一个函数printArea分别输出三者的面积,3个图形的数据在定义对象是给定。

#include

using namespace std;

class Shape

{public:

virtual double area() const =0;

};

class Circle:public Shape

{public:

Circle(double r):radius(r){}

virtual double area() const {return 3.14159*radius*radius;};

protected:

double radius;

};

class Rectangle:public Shape

{public:

Rectangle(double w,double h):width(w),height(h){}

virtual double area() const {return width*height;}

protected:

double width,height;

};

class Trapezoid:public Shape

{public:

Trapezoid(double w,double h,double

len):width(w),height(h),length(len){}

virtual double area() const {return 0.5*height*(width+length);} protected:

double width,height,length;

};

void printArea(const Shape &s)

{cout<

int main()

{

Circle circle(12.6);

cout<<"area of circle =";

printArea(circle);

Rectangle rectangle(4.5,8.4);

cout<<"area of rectangle =";

printArea(rectangle);

Trapezoid trapezoid(4.5,8.4,8.0);

cout<<"area of trapezoid =";

printArea(trapezoid);

return 0;

}

20.定义一个人员类Cperson,包括数据成员:姓名、编号、性别和用于输入输出的成员函数。在此基础上派生出学生类CStudent(增加成绩)和老师类Cteacher(增加教龄),并实现对学生和教师信息的输入输出。

#include

#include

class CPerson

{

public:

void SetData(char *name, char *id, bool isman = 1)

{ int n = strlen(name);

strncpy(pName, name, n); pName[n] = '\0';

n = strlen(id);

strncpy(pID, id, n);

pID[n] = '\0';

bMan = isman;

}

void Output()

{

cout<<"姓名:"<

cout<<"编号:"<

char *str = bMan?"男":"女";

cout<<"性别:"<

}

private:

char pName[20];

char pID[20];

bool bMan;

};

class CStudent: public CPerson

{

public:

void InputScore(double score1, double score2, double score3) {

dbScore[0] = score1;

dbScore[1] = score2;

dbScore[2] = score3;

}

void Print()

{

Output();

for (int i=0; i<3; i++)

cout<<"成绩"<

}

private:

double dbScore[3];

};

class Cteacher: public CPerson

{

public:

void Inputage(double age)

{

tage = age;

}

void Print()

{

Output();

cout<<"教龄:"<

}

private:

double tage;

};

void main()

{

CStudent stu;

Cteacher tea;

stu.SetData("LiMing", "21010211");

stu.InputScore( 80, 76, 91 );

stu.Print();

tea.SetData("zhangli","001");

tea.Inputage(12);

tea.Print();

}

二、第二类题目(20道,每题9分,请自行设计输出格式)

1.某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记下目前库存货物的总量,要求把商店货物购进和卖出的情况模拟出来。

#include

using namespace std;

class Goods

{ public :

Goods ( int w) { weight = w; totalWeight += w ; } ;

~ Goods ( ) { totalWeight -= weight ; } ;

int Weight ( ) { return weight ; } ;

static int TotalWeight ( ) { return totalWeight ; } ;

private : int weight ;

static int totalWeight ;

} ;

int Goods :: totalWeight = 0 ;

main ( )

{ int w ;

cin >> w ; Goods *g1 = new Goods( w ) ;

cin >> w ; Goods *g2 = new Goods( w ) ;

cout << Goods::TotalWeight ( ) << endl ;

delete g2 ;

cout << Goods::TotalWeight ( ) << endl ;

}

2.设计一个Time类,包括三个私有数据成员:hour,minute,sec,用构造函数初始化,内设公用函数display(Date &d),设计一个Date类,包括三个私有数据成员:m o n t h,d a y,y e a r,也用构适函数初始化;分别定义两个带参数的对象t1(12,30,55),d1(3,25,2010),通过友员成员函数的应用,输出d1和t1的值。

#include

using namespace std;

class Date;

class Time

{public:

Time(int,int,int);

void display(const Date&);

private:

int hour;

int minute;

int sec;

};

Time::Time(int h,int m,int s)

{hour=h;

minute=m;

sec=s;

}

class Date

{public:

Date(int,int,int);

friend void Time::display(const Date &);

private:

int month;

int day;

int year;

};

Date::Date(int m,int d,int y)

{month=m;

day=d;

year=y;

}

void Time::display(const Date &da)

{cout<

cout<

}

int main()

{Time t1(12,30,55);

Date d1(3,25,2010);

t1.display(d1);

return 0;

}

3. 设计一个Time类,包括三个私有数据成员:hour,minute,sec,用构造函数初始化, ,设计一个Date类,包括三个私有数据成员:month,day,year,也用构适函数初始化;设计一个普通函数display(…),将display分别设置为T ime类和Date类的友元函数,在主函数中分别定义两个带参数的对象t1(12,30,55),d1(3,25,2010),调用desplay,输出年、月、日和时、分、秒。

#include

using namespace std;

class Date;

class Time

{public:

相关主题
文本预览
相关文档 最新文档