搜档网
当前位置:搜档网 › C++ 编程题库

C++ 编程题库

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

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

#include

#include

using namespace std;

class Box{

public:

int weight;

int length;

int hight;

void box_shape(int w, int l, int h);

int box_volume(int w, int l, int h);

int box_area(int w, int l, int h);

};

int main()

{

Box mybox;

cout << "Please Enter weight and length and hight:";

cin >> mybox.weight >> mybox.length >> mybox.hight;

int box_v, box_a;

mybox.box_shape(mybox.weight, mybox.length, mybox.hight);

box_v = mybox.box_volume(mybox.weight, mybox.length, mybox.hight);

cout << "This box's volume =" << box_v << endl;

box_a = mybox.box_area(mybox.weight, mybox.length, mybox.hight);

cout << "This box's area = " << box_a << endl;

}

void Box::box_shape(int w, int l, int h)

{

if(w == l && l == h)

cout << "This is a Cube!" << endl;

else

cout << "This is a cuboid!" << endl;

}

int Box::box_volume(int w, int l, int h)

{

return w * l * h;

}

int Box::box_area(int w, int l, int h)

{

return 2 * w * l + 2 * l * h + 2 * w * h;

}

求他们的体积。编一个基于对象的程序,在类中用带参数的构造函数。

#include

class Box{

private:

int length;

int weight;

int hight;

public:

Box(int, int, int);

int volume();

};

int main()

{

using namespace std;

Box mybox1(30, 20, 10);

cout << "The first Box's volume = " << mybox1.volume() << endl;

Box mybox2(12, 10, 30);

cout << "The second Box's volume = " << mybox2.volume() << endl;

return 0;

}

Box::Box(int l, int w, int h)

{

length = l;

weight = w;

hight = h;

}

int Box::volume()

{

return (hight * weight * length);

}

求他们的体积。编一个基于对象的程序,且定义两个构造函数,其中一个有参数,

一个无参数。

#include

class Box{

private:

int length;

int wight;

int height;

public:

Box();

Box(int, int, int);

int volume();

};

int main()

{

using namespace std;

Box mybox1;

cout << "The first box's volume = " << mybox1.volume() << endl;

Box mybox2(10, 30, 20);

cout << "The second box's volume = " << mybox2.volume() << endl;

return 0;

}

Box::Box()

{

length = 12;

wight = 20;

height = 25;

}

Box::Box(int l, int w, int h)

{

length = l;

wight = w;

height = h;

}

int Box::volume()

{

return length * wight * height;

}

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

#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()

{Comparecmp1(3,4);

cout<

cout< cmp2(45.78,93.6);

cout<

cout<

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

cout<

cout<

return 0;

}

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

#include

using namespace std;

class Student

{

public:

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

void display()

{cout<

private:

int num;

int score;

};

int main()

{

Student

stud[5]={Student(01,70),Student(02,71),Student(03,72),Student(04,73),Student(05, 74)};

Student *p=stud;

p->display();

return 0;

}

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

#include

using namespace std;

class Student

{

public:

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

int num;

int score;

};

int main()

{

Student

stud[5]={Student(01,70),Student(02,71),Student(03,72),Student(04,73),Student(05, 74)};

void max(Student *);

Student *p=&stud[0];

max(p);

return 0;

}

void max(Student *arr)

{

float max_score=arr[0].score;

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

if(max_score

{max_score=arr[i].score;}

cout<

}

38.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算

#include

class Complex{

private:

double real;

double image;

public:

Complex();

Complex(double, double);

double get_real();

double get_image();

};

Complex operator + (Complex &, Complex &);

int main()

{

Complex s1(3, 4);

Complex s2(5, -10);

Complex c3;

c3 = s1 + s2;

std::cout << "s1 + s2 = ";

std::cout << "(" << c3.get_real() << ", " << c3.get_image() << "i)" << std::endl; // Complex s1(3, 4);

// std::cout << s1.get_real() << std::endl;

return 0;

}

Complex::Complex(double r, double i)

{

real = r;

image = i;

}

Complex::Complex()

{

real = 0;

image = 0;

}

return real;

}

double Complex::get_image()

{

return image;

}

Complex operator + (Complex & s1, Complex & s2)

{

Complex c(s1.get_real() + s2.get_real(), s1.get_image() + s2.get_image());

return c;

}

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

和,差。初值自拟。

#include

class Complex{

private:

double real;

double image;

public:

Complex();

Complex(double, double);

Complex operator + (Complex &);

Complex operator - (Complex &);

void display();

};

int main()

{

Complex s1(3, 4), s2(5, 6), c;

c = s1 + s2;

c.display();

c = s1 - s2;

c.display();

return 0;

}

Complex::Complex()

{

real = 0;

image = 0;

}

Complex::Complex(double r, double i)

{

real = r;

image = i;

}

Complex Complex::operator + (Complex & s1)

{

Complex c;

c.real = s1.real + real;

c.image = s1.image + image;

return c;

}

Complex Complex::operator - (Complex & s1)

{

Complex c;

c.real = real - s1.real;

c.image = image - s1.image;

return c;

}

void Complex::display()

{

using namespace std;

cout << real << " " << image << endl;

}

40.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加

运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。例如:

c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。编程序,分别求两个

复数之和、整数和复数之和。初值自拟。

#include

class Complex

{

private:

double imag;

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();

};

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()

{

using namespace std;

cout<<"("<

}

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

{

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

}

int main()

{

using namespace std;

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;

}

41.有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用

于矩阵相加。如c=a+b。初值自拟。

#include

using namespace std;

class Matrix //定义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;

}

42.将运算符“+”重载为适用于复数加法,重载函数不作为成员函数,而放在类外,

作为Complex类的友元函数。初值自拟。

#include

class Compare

{

private:

int real;

int imag;

public:

Compare();

Compare(int, int);

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

void display();

};

int main()

{

Compare c1(3, 4), c2(2, 5), c3;

c3 = c1 + c2;

c3.display();

return 0;

}

Compare::Compare()

{

imag = 0;

}

Compare::Compare(int r, int i)

{

real = r;

imag = i;

}

void Compare::display()

{

using namespace std;

cout << real << " " << imag << "i" << endl;

}

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

{

Compare c(c1.real + c2.real, c1.imag + c2.imag);

return c;

}

43.定义一个字符串类String,用来存放不定长的字符串,重载运算符“==”,,用

于两个字符串的等于比较运算。初值自拟。

44.定义一个字符串类String,用来存放不定长的字符串,重载运算符"<",用于两个

字符串的小于的比较运算。初值自拟。

45.定义一个字符串类String,用来存放不定长的字符串,重载运算符">",用于两个

字符串的大于的比较运算。初值自拟。

#include

#include

using namespace std;

class String

{

public:

String() { p=NULL;}

String(char *str);

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

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

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;

}

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

{

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

return true;

else

return false;

}

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();}

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

{

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

}

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

{

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

}

cout<

}

int main()

{

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

string3("Computer"),string4("Hello");

compare(string1,string2);

compare(string2,string3);

compare(string1,string4);

return 0;

}

46.定义一个描述学生基本情况的类,数据成员包括姓名、学号、C++成绩、英语和数学

成绩,成员函数包括输出数据,求出总成绩和平均成绩。数据自拟。

#include

class Student

{

private:

char * name;

int id;

int cpp_source;

int eng_source;

int math_source;

public:

Student(char *, int, int, int, int);

void sum_source();

void avg_source();

};

int main()

{

Student s("John", 1, 90, 80, 97);

s.sum_source();

s.avg_source();

return 0;

}

Student::Student(char * n, int i, int cs, int es, int ms)

{

name = n;

id = i;

cpp_source = cs;

math_source = ms;

}

void Student::sum_source()

{

std::cout << name << " The sum of source: " <<

cpp_source+eng_source+math_source << std::endl;

}

void Student::avg_source()

{

double avg;

avg = (cpp_source + eng_source + math_source) / 3;

std::cout << "The avg of source: " << avg << std::endl;

}

47.先建立一个Point(点)类,包含数据成员x,y(坐标点)。以它为基类,派生出

一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生

出一个Cylinder(圆柱体)类,在增加数据成员h(高)。编写程序,重载运算符

“<<”和“>>”,使之能够用于输出以上类对象。

#include

class Point

{

protected:

int x, y;

public:

Point(){x = 0, y = 0;}

Point(int a, int b)

{

this->x = a;

this->y = b;

}

void setX(int a){x = a;}

void setY(int b){y = b;}

int getX(){return x;}

int getY(){return y;}

};

class Circle:public Point

{

protected:

int r;

public:

Circle(int x, int y, int r):Point(x, y){this->r = r;}

int getR(){return r;}

};

class Cylinder:public Circle

{

protected:

int h;

public:

Cylinder():Circle(0, 0, 0),h(0){}

Cylinder(int x, int y, int r, int h):Circle(x, y, r){this->h = h;} void setH(int a){h = a;}

int getH(){return h;}

friend std::istream & operator>>(std::istream &, Cylinder &);

friend std::ostream & operator<<(std::ostream &, Cylinder &);

};

std::istream & operator>>(std::istream & input, Cylinder & cc)

{

int _x, _y, _r, _h;

std::cout << "Enter the Cylinder: " << std::endl;

input >> _x >> _y >> _r >> _h;

cc.setX(_x);

cc.setY(_y);

cc.setR(_r);

cc.setH(_h);

return input;

}

std::ostream & operator<<(std::ostream & os, Cylinder & cc)

{

os << cc.getX() << cc.getY() << cc.getR() << cc.getH() << std::endl;

return os;

}

int main()

{

using namespace std;

Cylinder cc;

cin >> cc;

cout << cc;

return 0;

}

48.写一个程序,定义抽象类型Shape,由他派生三个类:Circle(圆形),Rectangle

(矩形),Trapezoid(梯形),用一个函数printArea分别输出三者的面积,3个

图形的数据在定义对象是给定。

#include

class Shape

{

public:

virtual double area() const = 0;

};

class Circle:public Shape

{

private:

double r;

public:

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

virtual double area() const

{

return 3.14 * r * r;

}

};

class Rectangle:public Shape

{

private:

double h, w;

public:

Rectangle(double a, double b):h(a),w(b){}

virtual double area() const

{

return h * w;

}

};

class Trapezoid:public Shape

{

private:

double h, w;

public:

Trapezoid(double a, double b):h(a), w(b){}

virtual double area() const

{

}

};

void printArea(const Shape & c)

{

std::cout << c.area() << std::endl;

}

int main()

{

Circle c(2);

printArea(c);

Rectangle r(2, 4);

printArea(r);

Trapezoid t(3, 5);

printArea(t);

return 0;

}

49.定义一个人员类Cperson,包括数据成员:姓名、编号、性别和用于输入输出的成

员函数。在此基础上派生出学生类CStudent(增加成绩)和老师类Cteacher(增加教

龄),并实现对学生和教师信息的输入输出。

#include

class Cperson

{

protected:

char name[10];

int id;

int sex;

public:

virtual void getInfor() = 0;

virtual void printInfor() = 0;

};

class CStudent:public Cperson

{

protected:

int course;

public:

virtual void getInfor()

{

cout << "Enter the student's inforamtion" << endl;

cout << "Enter the name: ";

cin >> name ;

cout << "Enter the id: ";

cin >> id;

cout << "Enter the sex (1 or 0 1.men 0.women): ";

cin >> sex;

cout << "Enter the course:";

cin >> course;

}

virtual void printInfor()

{

using namespace std;

cout << id << endl;

cout << name << endl;

cout << sex << endl;

cout << course << endl;

}

};

class Cteacher:public Cperson

{

protected:

int age;

public:

virtual void getInfor()

{

using namespace std;

cout << "Enter the teacher's inforamtion" << endl;

cout << "Enter the name: ";

cin >> name ;

cout << "Enter the id: ";

cin >> id;

cout << "Enter the sex (1 or 0 1.men 0.women): ";

cin >> sex;

cout << "Enter the age:";

cin >> age;

}

virtual void printInfor()

{

using namespace std;

cout << id << endl;

cout << name << endl;

cout << sex << endl;

}

};

int main()

{

CStudent stu;

stu.getInfor();

stu.printInfor();

Cteacher tea;

tea.getInfor();

tea.printInfor();

return 0;

}

50.定义一个学生类Student做基类,再派生一个Graduate类,学生类有学号、姓名、

和分数,研究生增加工资,它们有同名的函数display(),利用虚函数,编程分别输

出学生和研究生的数据,具体数据自拟。

#include

#include

using namespace std;

class Student

{

protected:

int id;

string name;

int score;

public:

Student(int ,string , int);

virtual void display();

};

Student::Student(int i, string n, int cr)

{

id = i;

name = n;

score = cr;

}

void Student::display()

{

//using namespace std;

相关主题