收藏 分销(赏)

C++面向对象程序的设计上机考试题库完整.docx

上传人:二*** 文档编号:4455104 上传时间:2024-09-23 格式:DOCX 页数:95 大小:48KB 下载积分:5 金币
下载 相关 举报
C++面向对象程序的设计上机考试题库完整.docx_第1页
第1页 / 共95页
本文档共95页,全文阅读请下载到手机保存,查看更方便
资源描述
C++面向对象程序设计上机考试题库 一、第一类题目〔20道,每题7分,在word中保存代码并将输出结果窗口保存〕 1.定义盒子Box类,要求具有以下成员:长、宽、高分别为x,y,z,可设置盒子形状;可计算盒子体积;可计算盒子的外表积。 #include<iostream> 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= "<<x<<" y= "<<y<<" z="<<z<<endl; cout<<"s= "<<s<<" v= "<<v<<endl; } }; void main() { Box a; a.init(2,3,4); a.volue(); a.area(); a.show(); } 2. 有两个长方柱,其长、宽、高分别为:〔1〕30,20,10;〔2〕12,10,20。分别求他们的体积。编一个基于对象的程序,在类中用带参数的构造函数。 #include <iostream> using namespace std; class Box {public: Box(int,int,int);//带参数的构造函数 int volume(); private: int length; int width; int height; }; Box::Box(int len,int h,int w) {length=len; height=h; width=w; } //Box::Box(int len,int w,int,h):length(len),height(h),width(w){} int Box::volume() {return(length*width*height); } int main() { Box box1(30,20,10); cout<<"The volume of box1 is "<<box1.volume()<<endl; Box box2(12,10,20); cout<<"The volume of box2 is "<<box2.volume()<<endl; return 0; } 3. 有两个长方柱,其长、宽、高分别为:〔1〕12,20,25;〔2〕10,30,20。分别求他们的体积。编一个基于对象的程序,且定义两个构造函数,其中一个有参数,一个无参数。 #include <iostream> 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 "<<box1.volume()<<endl; Box box2(10,30,20); cout<<"The volume of box2 is "<<box2.volume()<<endl; return 0; } 4. 声明一个类模板,利用它分别实现两个整数、浮点数和字符的比拟,求出大数和小数。 #include <iostream> using namespace std; template<class numtype>//声明一个类模板 class Compare {public: Compare(numtype a,numtype b) {x=a;y=b;} numtype max() {return (x>y)?x:y;} numtype min() {return (x<y)?x:y;} private: numtype x,y; }; int main() {Compare<int> cmp1(3,7); cout<<cmp1.max()<<" is the Maximum of two inteder numbers."<<endl; cout<<cmp1.min()<<" is the Minimum of two inteder numbers."<<endl<<endl; Compare<float> cmp2(45.78,93.6); cout<<cmp2.max()<<" is the Maximum of two float numbers."<<endl; cout<<cmp2.min()<<" is the Minimum of two float numbers."<<endl<<endl; Compare<char> cmp3('a','A'); cout<<cmp3.max()<<" is the Maximum of two characters."<<endl; cout<<cmp3.min()<<" is the Minimum of two characters."<<endl; return 0; } 5. 建立一个对象数组,放5个学生的数据〔学号、成绩〕,用指针指向数组首元素,输出第1,3,5个学生的数据。初值自拟。 #include <iostream> 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<<num<<" "<<score<<endl;} 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 <iostream> 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<<arr[k].num<<" "<<max_score<<endl; } 7. 用new建立一个动态一维数组,并初始化int[10]={1,2,3,4,5,6,7,8,9,10},用指针输出,最后销毁数组所占空间。 #include<iostream> #include<string> 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<<endl; delete []p; return; } 8. 定义一个复数类Complex,重载运算符“+〞,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和。初值自拟。 #include <iostream> 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<<"("<<real<<","<<imag<<"i)"<<endl;} 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<<"("<<real<<","<<imag<<"i)"<<endl;} 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 <iostream> 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; return c;} void Complex::display() {cout<<"("<<real<<","<<imag<<"i)"<<endl;} 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 <iostream.h> 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<<"("<<real<<","<<imag<<"i)"<<endl;} 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 <iostream.h> 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:"<<endl; 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<<mat[i][j]<<" ";} cout<<endl;} } int main() {Matrix a,b,c; a.input(); b.input(); cout<<endl<<"Matrix a:"<<endl; a.display(); cout<<endl<<"Matrix b:"<<endl; b.display(); c=a+b; cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl; c.display(); return 0; } 13. 将运算符“+〞重载为适用于复数加法,重载函数不作为成员函数,而放在类外,作为Complex类的友元函数。初值自拟。 #include <iostream.h> 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 real; double imag; }; Complex operator+ (Complex &c1,Complex &c2) { return Complex(c1.real+c2.real, c1.imag+c2.imag); } void Complex::display() {cout<<"("<<real<<","<<imag<<"i)"<<endl;} 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 <iostream.h> #include <string.h> 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<<p;} 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<<endl; } int main() {String string1("Hello"),string2("Hello"); compare(string1,string2); return 0; } 15. 定义一个字符串类String,用来存放不定长的字符串,重载运算符"<",用于两个字符串的小于的比拟运算。初值自拟。 #include <iostream.h> #include <string.h> 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<<p;} 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<<endl; } int main() {String string1("Book"),string2("Computer"); compare(string1,string2); return 0; } 16. 定义一个字符串类String,用来存放不定长的字符串,重载运算符">",用于两个字符串的大于的比拟运算。初值自拟。 #include <iostream.h> #include <string.h> 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<<p;} 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<<endl; } int main() {String string1("Hello"),string2("Book"); compare(string1,string2); return 0;} 17. 定义一个描述学生根本情况的类,数据成员包括、学号、C++成绩、英语和数学成绩,成员函数包括输出数据,求出总成绩和平均成绩。数据自拟。 #include"string.h" #include <iostream.h> 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<<":"<<strName; cout<<"学号:"<<strStuNO; cout<<" C++成绩:"<<fScore[0]<<"英语成绩:"<<fScore[1]<<"数学成绩:"<<fScore[2]<<endl; } 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<<"平均成绩为 "<<one.GetAverage()<<"\n"; cout<<"总成绩"<<one.GetSUM()<<"\n";} 18. 先建立一个Point〔点〕类,包含数据成员x,y〔坐标点〕。以它为基类,派生出一个Circle〔圆〕类,增加数据成员r〔半径〕,再以Circle类为直接基类,派生出一个Cylinder〔圆柱体〕类,在增加数据成员h〔高〕。编写程序,重载运算符“<<〞和“>>〞,使之能够用于输出以上类对象。 #include <iostream.h> 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<<"["<<p.x<<","<<p.y<<"]"<<endl; 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=["<<c.x<<","<<c.y<<"], r="<<c.radius<<", area="<<c.area()<<endl; 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::
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服