一、第一类题目(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 cout< cout< Compare cout< cout< Compare 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=["< <<", volume="< cy1.setHeight(15); cy1.setRadius(7.5); cy1.setPoint(5,5); cout<<"\nnew cylinder:\n"< 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: