C++面向对象程序设计习题集
更新时间:2024-04-23 09:40:01 阅读量: 综合文库 文档下载
C++面向对象程序设计习题集
编程题:用面向对象的程序设计方法编制如下程序。 1.
设计一个Bank类,实现银行某账号的资金往来账管理,包括建账号、存入、取出等。Bank类包括私有数据成员top(当前指针)、date(日期)、money(金额)、rest(余额)和sum(累计余额)。另有一个构造函数和3个成员函数bankinO(处理存入账)、bankout()(处理取出账)和disp( )(出明细账)。 【知识点】:2.2 2.3 【参考分】:25分 【难易度】:B 【答案】:
#include
int top;
char date[Max][10];//日期 int money[Max];//金额 int rest[Max];//余额
static int sum;//累计余额 public:
Bank(){top=0;}
void bankin(char d[ ],int m) {
strcpy(date[top],d); money[top]=m; sum=sum+m; rest[top]=sum; top++; }
void bankout(char d[],int m) {
strcpy(date[top],d);
money[top]=-m; //取出数用负数表示 sum=sum-m; rest[top]=sum; top++; }
void disp() {
int i;
cout<<\日期 存入 取出余额\
for(i=0;i cout< cout<<\ else cout< int Bank::sum=0; void main() { Bank obj; obj.bankin(\ obj.bankin(\ obj.bankout(\ obj.bankout(\,800); obj.disp(); } 2. 编写一个程序,已有若干个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。 【知识点】:2.2 2.3 【参考分】:20分 【难易度】:B 【答案】: #include int no; char name[10]; int deg; static int sum; static int num; public: Stud(int n,char na[],int d) { no=n;deg=d; strcpy(name,na); sum+=d; num++; } static double avg() { return sum/num; } void disp() { cout< int Stud::sum=0j int Stud::num=O; void main() { Stud s1(1,\,s2(2,\,s3(3,\ cout:<<\学号 姓名 成绩\ s1.disp(); s2.disp(); s3.disp(); cout<<\平均分=\} 3. 有10个单词存放在一维指针数组words中,编写一个程序,根据用户的输入找出所有与之从前向后匹配的单词和个数。 【知识点】:2.2 【参考分】:25分 【难易度】:B 【答案】:设计一个Word类,包含一个私有数据成员words、一个构造函数和一个公有成员函数lookup(),构造函数用于给words赋初值,lookup()用于找出所有与之从前向后匹配的单词和个数。程序如下: #include char words[10][12]; public: Word() //构造函数给words赋初值 { strcpy(words[0],\strcpy(words[1],\; strcpy(words[2],\strcpy(words[3],\; strcpy(words[4],\strcpy(words[5],\strcpy(words[6],\; strcpy(words[7],\; strcpy(words[8],\; strcpy(words[9],\; } void lookup(char s[ ]); }; void Word::lookup(char s[ ]) { char *w; int i,j,n=0; //n记录相匹配的单词个数 cout<<\匹配的单词:\ for(i=0;i<10;i++) //一个单词一个单词地匹配 { for(w=words[i],j=0;s[j]!='\\0'&&*w!='\\0'&&*w==s[j]; j++,w++); if(s[j]=='\\0') //匹配成功 { n++; cout<<\ < cout<<\相匹配的单词个数:\} void main() { Word obj; char str[20]; cout<<\输入单词:\ cin>>str; obj.lookup(str); } 4. 创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、changenameO、display()的函数原型放在类定义中,构造函数初始化每个成员,display()~数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。 【知识点】:2.2 2.3 3.1 【参考分】:20分 【难易度】:B 【答案】: #include protected: char name[10]; //姓名 char street[20]; //街道地址 char city[10]; //市 char prov[10]; //省 char post[7]; //邮政编码 int no; //记录序号 public: Employee(char[],char[],char[],char[],char[],int); void changename(char str[]); void display(); }; Employee::Employee(char n[],char s[],char c[],char pl[],char p2[],int num) { strcpy(name,n); strcpy(Street,s); strcpy(city,c); Strcpy(prov,p1); strcpy(post,p2); no=num; } void Employee::changename(char n[]) { strcpy(name,n); } void Employee::display() { cout<<\输出记录\; cout<<\姓名:\; cout<<\街道地址:\; cout<<\市:\ tout<<\省:\; cout<<\邮政编码:\} void main() { Employee obj1(\王华\,\中华路15号\武汉市\湖北省\,1); Employee obj2(\杨丽\,\天津路30号\南京市\江苏省\obj1.display(); obj2.display(); } 5. 编写一个程序,已有若干个学生数据,这些数据包括学号、姓名、语文成绩、数学成绩和英语成绩,求各门课程的平均分。要求设计不同的成员函数求各门课程的平均分,并使用成员函数指针调用它们。 【知识点】:2.2 2.3 3.1 【参考分】:20分 【难易度】:C 【答案】:设计一个学生类student,包括no(学号)、name(姓名)、degl(语文成绩)、deg2(数学成绩)、deg3(英语成绩)数据成员和3个静态数据成员suml(累计语文总 分)、sum2(累计数学总分)、sum3(累计英语总分);另外有一个构造函数、3个求三门课程平均分的成员函数和一个disp( )成员函数。程序如下: #include int no;//学号 char name[10];//姓名 int degl;//语文成绩 int deg2;//数学成绩 int deg3;//英语成绩 static int suml;//语文总分 statac int sum2;//数学总分 static int sum3;//英语总分 public: student(int n,char na[],int dl,int d2,int d3) { no=n; strcpy(name,na); degl=dl;deg2=d2;deg3=d3; suml+=degl;sum2+=deg2;sum3+=deg3; } double avgl(){return(suml*1.0)/N;} double avg2(){return(sum2*1.0)/N;} double avg3(){return(sum3*1.0)/N;}} void disp() { cout< int student::suml=0; int student::sum2=0; int student::sum3=0; void main() { double (student::*fp)(); //定义成员函数指针 student s1(1,\student s2(2,\student s3(3,\student s4(4,\; cout<<\输出结果\ cout<<\学号 姓名 语文数学英语\s1.disp(); S2.disp(); S3.disp(); S4.disp(); fp=student::avgl; cout<<\语文平均分:\; fp=student::avg2; cout<<\数学平均分:\fp=student::avg3; cout<<\英语平均分:\ } 6. 编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求只输出成绩在80~89分数段的学生数据。 【知识点】:2.2 2.3 【参考分】:20分 【难易度】:B 【答案】:设计一个学生类Stud,包括no(学号)、name(姓名)和deg(成绩)数据成员,另有两个普通成员函数setdata()和disp(),前者用于设置对象数据,后者用于只输出成绩在80~89分数段的学生数据。在main()函数中定义了一个对象数组用于存储输入的学生数据。 程序如下: #include int no; char name[10]; int deg; publiC: void setdata(int n,char na[],int d) { no=n;deg=d; strcpy(name,na); } void disp() { if(deg>=80&°<=89) cout< void main() { Stud st[N]; int i,n,d; char na[10]; cout<<\输入学号姓名成绩\ for(i=0;i cout<<\第\个学生:\ cin>>n>>na>>d; St[i].Setdata(n,na,d); cout<<\输出数据\ cout<<\学号 姓名 成绩\for(i=0;i 7. 编写一个程序统计学生成绩,其功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前70%的学生定为合格(PASS),而后30%的学生定为不及格(FAIL)。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:A 【答案】:设计一个类student,包含学生的姓名和成绩等数据,以及setname()、setdeg()、getname()和 getdeg()等4个成员函数。设计一个类compute,包含两个私有数据成员,即学生人数ns和student类的对象数组na[],另有3个公共成员函数getdata( )、sort( )、disp( ),它们的功能分别用于数据获取、按成绩排序和输出数据。 程序如下: #include char name[10]; int deg; public: void setname(char na[]){strcpy(name,na);} char *getname(){return name;} void setdeg(int d){deg=d;} int getdeg(){return deg;} }; class compute { int ns; student na[Max]; public: void getdata(); void sort(); void disp(); }; void compute::getdata() { int i,tdeg; char tname[10]; cout<<\输入学生人数:\ cin>>ns; cout<<\输入学生姓名和成绩:\ for(i=O;i cout<<\第\个学生:\ cin>>tname>>tdeg; na[i].setname(tname); me[i].setdeg(tdeg); } } void compute::sort() { int i,j,pick; student temp; for(i=0;i pick=i; for(j=i+1;j if(na[J].getdeg()>na[pick].getdeg()) pick=j; } temp=na[i]; na[i]=na[pick]; na[pick]=temp; } } void compute::disp() { int cutoff,i; cout<<\输出结果\ cout<<\ 姓名 成绩合格否\ cout<<” ------- ---- ------”< cout< cout<<\ else cout<<\ } } void main() { compute obj; obj.getdata(); obj.sort(); obj.disp() } 8. 编写一个程序,输入用户的姓名和电话号码,按姓名的词典顺序排列后,输出用户的姓名和电话号码。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:B 【答案】:设计一个类person,包含学生的姓名和电话号码等数据,以及semame()、setnum()、gemame()和gemum()等4个成员函数。设计一个类compute,包含一个私有数据成员,即person类的对象数组pn[],另有3个公共成员函数getdata()、sort()、disp(),它们的功能分别用于数据获取、按姓名的词典顺序排序和输出数据。程序如下: #include char name[10]; char num[10]; public: void setname(char na[]){strcpy(name,na);} void setnum(char nu[]){strcpy(num,nu);) char *getname(){return name;} char *getnum(){return num;) }; class compute { person pn[N]; public: void getdata(); void getsort(); void outdata(); }; void compute::getdata() { int i; char na[10],nu[10]; cout<<\输入姓名和电话号码\ for (i=0; i cout<<\ 第\个人:\ cin>>na>>nu; pn[i].setname(na); pn[i].setnum(nu); } void compute::getsort() int i,j,k; person temp; for(i=0;i for(j=i+1;j if(strcmp(pn[k].getname(),pn[j].getname())>0) k=j; temp=pn[k]; pn[k]=pn[i]; pn[i]=temp; } } void compute::outdata() { int i; cout<<\输出结果:\ cout<<\ 姓名 电话号码\ cout << \ -------- --------\ << endl; for(i=0;i cout< void main() { compute obj; obj.getdata(); obj.getsort(); obj.outdata(); } 9. 编写一个程序,输入n个学生的姓名和出生日期,并按年龄从大到小输出。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:A 【答案】:设计一个结构体person,包含学生的姓名和出生日期等数据:设计一 个类compute,包含私有数据成员,即person结构体数组st[],另有3个私有成员函数daynum()、count day()、leap()和3个公共成员函数getdam()、sort()、disp(),它们的功能分别用于数据获取、按出生日期排序和输出数据,在实现过程中调用前面的3个私有成员函数。sort()成员函数按结构体数组元素的d成员排序,d存放的是该学生从1900年1月l日到出生日期的天数。程序如下: #include int count day(int,int,int,int); int leap(int); struct person { char name[10]; struct dates int year; int month; int day; }date; int d; //从1900.1.1到出生日的天数 }; class compute { struct person st[N]; int daynum(int,int,int,int,int,int); int count_day(int,int,int,int); bool leap(int); public: void getdata(); void sort(); void disp(); }; int compute::daynum(int s_year,int s_month,int s_day,int e_year, int e_month,int e_day) { int year,day,dayl,day2; if(s year day=count_day(s_year,s_month,s_day,0); for(year=s_year+l;year day+=365L; day+=count_day(e_year,e_month,e_day,1); } else if(s_year==e_year) { dayl=count_day(s_year,s_month,s_day,1); day2=count_day(e_year,e_month,e_day,1); day=day2-dayl; } else day=-1; return day; } int compute::count_day(int year,int month,int day,int flag) { staric int day_tab[2][12]={(31,28,31,30,31,30,3l,31,30,31,30,3l}, {31,29,31,30,31,30,31,31,30,31,30,31}}; //使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年 int p,i,s; if(leap(year)) p=1; else p=0; if(flag) { s=day; for(i=1;i s=day_tab[p][month]-day; for(i=month+1;i<=12;i++) s+=day_tab[P][i一1]; } return(s); } bool compute::leap(int year) { if(year%4==O&&year0!=O||year@0==O) //是闰年 return true; else //不是闰年 return false; } void compute::sort() { int i,j; struct person temp; for(i=O;i if(st[j].d>st[j+1].d) { temp=st[j]; st[j]=st[j+1]; st[j+1]=temp; } } void compute::getdata() { int i; for(i=0;i cout<<\输入第\个学生姓名:\ cin>>st[i].name; cout<<\ 出生日期:\ cin>>st[i].date.year>>st[i].date.month>>st[i].date.day; st[i].d=daynum(1900,1,1,st[i].date.year, st[i].date.month,st[i].date.day); } } void compute::disp() { int i; cout<<\输出结果:\ cout<<\ 姓名 出生日期\ for(i=0;i cout< void main() { compute obj; obj.getdata(); obj.sort(); obj.disp(); } 10. 设计一个集合类Set,包括将集合置空、添加元素、判断元素是否在集合中、输出集合以及将集合中元素逆置,另外还有一个复制构造函数,并使用一些数据进行测试。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:B 【答案】:Set类包括私有数据data(存放集合元素)、Bum(集合中元素个数),一个缺省构造函数和复制构造函数Set(Set &s),另有成员函数setempty()(将集合置空)、issetempty()(判断集合是否为空)、ismemberof()(判断元素是否在集合中)、add()(添加元素)、disp()(输出集合)、reverse()(将集合中元素逆置)。其中,issetempty、ismemberof和disp函数设计为常成员函数。程序如下: #include const int Max=10; C1ass Set { int data[Max]; int num; public: Set(){num=0;} Set(Set &s); //对象引用作为参数 void setempty(){num=0;} bool issetempty()const; bool ismemberof(int n) const; int add(int n); void disp() const; void reverse(); }; Set::Set(Set &S) nUm=S.num; for(int i=0;i bool Set::issetempty() const { return(num==0); } bool Set::ismemberof(int n) const { for(int i=0;i int Set::add(int n) { if (ismemberof(n)) return 1; else if(num>Max) return 0; else { data[num++]=n; return 1; } } void Set::disp() const { cout<<\ for(int i=0;i float price; static float discount; static float sum; static int n; }; void Product::total() {float rate=1.0; if(quantity>10) rate=0.98*rate; sum=sum+quantity*price*rate*(1-discount); n=n+quantity; } void Product::display() {cout< cout< float Product::average() {return(sum/n);} float Product::discount=0.05; float Product::sum=0; int Product::n=0; int main() { Product Prod[3]={ Product(101,5,23.5),Product(102,12,24.56),Product(103,100,21.5) }; for(int i=0;i<3;i++) Prod[i].total(); Product::display(); return 0; } 16. 有一个学生类student,包括学生姓名、成绩,设计一个友元函数比较两个学生成绩的高低,并求出最高分者和最低分者。 【知识点】:3.6 【参考分】:30分 【难易度】:B 【答案】: #include char name[10]; int deg; public: student(char na[],int d) f strcpy(name,na); deg=d; } char *getname(){return name;) friend int compare(student &s1,student &s2) { if(s1.deg>s2.deg) return 1; else if(s1.deg==s2.deg) return 0; else return -1; } }; void main() { student st[]={student(\王华\李明\ student(\张伟\孙强\ int i,min=0,max=0; for(i=1;i<4;i++) { if(compare(st[max],st[i])==-1) max=i; else if(compare(st[min],st[i])==1) min=i; } cout<<\输出结果:\ cout<<\ 最高分者:\ cout<<\最低分者:\} 17. 有一个学生类Student,包括学生姓名、成绩,设计一个友元函数输出成绩对应的等级:大于等于90为优;80~89为良:70~79为中;60~69为及格;小于60为不及格。 【知识点】:3.6 【参考分】:30分 【难易度】:B 【答案】: #include { char name(10]; int deg; char level[7]; public: Student(char na[],int d) { strcpy(name,na); deg=d; char *getname(){return name;} friend void trans(Student &s) { if(s.deg>=90) strcpy(s.1evel,\优\ else if(s.deg>=80) strcpy(s.1evel,\良\ else if(s.deg>=70) strcpy(s.level,\中\ else if(s.deg>=60) strcpy(s.1evel,\及格\ else Strcpy(s.level,\不及格\ } void disp() { cout< void main() { Student st[]=fStudent(\王华\李明\ Student(\张伟\孙强\ cout<<\输出结果:\ cout< trans(st[i]); st[i].disp(); } } 18. 设计一个长方体,包含有长、宽和高度私有数据成员,用友元函数的方法求长方体的体积。 【知识点】:3.6 【参考分】:20分 【难易度】:C 【答案】: #include float Length; //长度 float Width; //宽度 float High; //高度 public: Cuboid(float l,float w,float h) { Length=l;Width=w;High=h; } friend float Volume(Cuboid &); }; float Volume(Cuboid &c) { return c.Length *c.Width *c.High; } void main() { Cuboid c(2,5,6); cout<<\长方体积=\} 19. 设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。 【知识点】:3.6 4.2 【参考分】:20分 【难易度】:B 【答案】:在Triangle类中设计一个友元函数operator+(Triangle tl,Triangle t2),它重载运算符“+”,返回tl和t2两个三角形的面积之和。程序如下: #include int x,y,z; double area; public: Triangle(int i,int j,int k) { double s; x=i;y=j;z=k; s=(x+y+z)/2.0; area=sqrt(s *(s-x)*(s-y)*(s-z)); } void disparea() { cout<<\ } friend double operator+(Triangle t1,Triangle t2) { return t1.area+t2.area; } }; void main() { Triangle t1(3,4,5),t2(4,5,6); double s; cout<<\:\ cout<<\:\ s=t1+t2; cout<<\总面积=\} 20. 设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求任意多个三角形的面积之和。 【知识点】:3.6 4.2 【参考分】:30分 【难易度】:B 【答案】:对于式子:s=t1+t2+t3,先计算tl+t2,返回一个double数,然后再进行该double数+t3的计算,显然没有这样的重载运算符“+”友元函数,只需添加这样的重载运算符“+”友元函数即可。程序如下: #include int x,y,z; double area; public: Triangle(int i,int j,int k) { double s; x=i;y=j; z=k; s=(x+y+z)/2.0; area=sqrt(s*(s-x)*(s-y)*(s—z)); } void disparea() { cout<<\ } friend double operator+(Triangle t1,Triangle t2) { return t1.area+t2.area; } friend double operator+(double d,Triangle t) { return d+t.area; } }; void main() { Triangle tl(3,4,5),t2(4,5,6),t3(5,6,7),t4(6,7,8); double s; cout<<\ cout<<\ cout<<\ cout<<\ s=t1+t2+t3+t4; cout<<\总面积=\} 21. 设计一个学生类Student,包括姓名和三门课程成绩,利用重载运算符“+’’将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分。 【知识点】:4.2 【参考分】:30分 【难易度】:B 【答案】: #include char name[10]; int degl,deg2,deg3; public: Student() {degl=deg2=deg3=0;} Student(char na[],int dl,int d2,int d3) { strcpy(name,na); degl=dl;deg2=d2;deg3=d3; } friend Student operator+(Student s1,Student s2) { statiC Student st; st.degl=sl.degl+s2.degl; st.deg2=sl.deg2+s2.deg2; st.deg3=sl.deg3+s2.deg3; return st; } void disp() { cout< friend void avg(Student &s,int n) { tout< void main() { Student sl(\ Student s3(\ cout<<\输出结果\ s1.disp(); s2.disp(); s3.disp(); s4.disp(); s=sl+s2+s3+s4; //调用重载运算符 avg(s,4); //友元函数求平均分 } 22. 设计一个时间类Time,包括时、分、秒等私有数据成员。要求实现时间的基本运算,如一时间加上另一时间、一时间减去另一时间等。 【知识点】:4.2 【参考分】:40分 【难易度】:B 【答案】:在Time类中设计如下重载运算符函数: ·Time operator+(Time):返回一时间加上另一时间得到的新时间。 ·Time operator-(Time):返回一时间减去另一时间得到的新时间。 程序如下: #include int hour,minute,second; public: Time(){}; Time(int h,int m,int s) { hour=h;minute=m;second=s; } Time(int h,int m) { hour=h;minute=m;second=0; } Time(int h) { hour=h;minute=0;second=0; } void sethour(int h){hour=h;) void setminute(int m){minute=m;) void setsecond(int s){second=s;} int gethour(){return hour;) int getminute(){return minute;) int getsecond(){return second;) Time operator+(Time); Time operator-(Time); void disp() { cout< Time Time::operator+(Time t) { int carry,hh,mm,ss; ss=getsecond()+t.getsecond(); if(ss>60) { SS--=60; carry=l; //进位标记 }else carry=0; mm=getminute()+t.getminute()+carry;if(mm>60) { mm-=60; carry=l; } else carry=0; hh=gethour()+t.gethour()+carry; if(hh>24) hh-=24; static Time result(hh,mm,ss); return result; } Time Time::operator-(Time t) { int borrow,hh,mm,ss; ss=getsecond()-t.getsecond(); if(ss<0) ss+=60; \:\ borrow=l; //借位标记 } else borrow=l; mm=getminute()-t.getminute()-borrow; if(mm<0) { mm+=60; borrow=1; } else borrow=0; hh=gethour()-t.gethour()-borrow; if(hh<0) hh+=24; Static Time resuit(hh,mm,ss); return result; } void main() { Time now(2,24,39), Time Start(17,55); Time tl=now-start,t2=now+Start; cout<<\输出结果:\ cout<<\: \ cout<<\:\ cout<<\相差:\cout<<\相加:\} 23. 设计一个点类Point(包含x和y两个私有数据成员),实现点对象之间的加、减、判相同、判不同等各种运算。 【知识点】:2.2 4.2 【参考分】:40分 【难易度】:B 【答案】: #include int x,y; public: Point(){x=y=0;) Point(int i,int j){x=i;y=j;} Point(Point &); ~Point(){} void offset(int,int); //提供对点的偏移 void offset(Point); //重载,偏移量用Point类对象表示 bool operator==(Point); //运算符重载,判断两个对象是否相同 bool operator!=(Point); //运算符重载,判断两个对象是否不相同 void operator+=(Point); //运算符重载,将两个点对象相加 void operator-(Point); //运算符重载,将两个点对象相减 Point operator+(Point); //运算符重载,相加并将结果放在左操作数中 Point operator-(Point); //运算符重载,相减并将结果放在左操作数中 int getx(){return x;) int gety(){return y;} void disp() { cout<<”(\ } }; Point::Point(Point &p) x=P.X;y;p.y; void Point::offset(int i,int j) { x+=i;y+=j; } void Point::offset(Point P) { x+=P.getx();y+=P.gety(); } bool Point::operator==(Point P) { if(x==P.getx()&&y==p.gety()) return 1; elee return 0; } bool Point::operator!=(Point P) { if(x!=P.getx()||y!=p.gety()) return 1; else return 0; } void Point::operator+=(Point P) { x+=P.getx();y+=p.gety(); } void Point::operator-=(Point P) { X-=p.getx();y-=p.gety(); } Point Point::operator+(Point P) { this->x+=p.x;this->y+=p.y; return *this; } Point Point::operator=(Point P) { this->x-=p.x;this->y-=p.y; return *this; } void main() { Point pl(2,3),p2(3,4),p3(p2) cout<<\:p3.disp(); p3.offset(10,10); cout<<\:\ cout<<\:\ < cout<<\:\ p3-=p2; cout<<\:\ p3=pl+p3; //先将pl+p3的结果放在p1中,然后赚给p3,所以pl=p3 cout<<\:\.disp(); p3=pl-p2; cout<<\} 24. 编写一个对具有n个元素的数组x[]求最大值的程序,要求将求最大值的函数设 计成函数模板。 【知识点】:3.6 【参考分】:20分 【难易度】:C 【答案】: #include int 1; T maxv=x[0]; for(i=1;i void main() { int a[]=(4,5,2,8,9,3}; double b[]={3.5,6.7,2,5.2,9.2}; cout<<\数组最大值:\,6)< 25. 编写一个函数模板,它返回两个值中较小者,同时要求能正确处理字符串。 【知识点】:3.6 【参考分】:20分 【难易度】:C 【答案】:设计一个函数模板template #include return(a char *min(char *a,char *b) { return(strcmp(a,b)<0?a:b); } void main() { double a=3.56,b=8.23; char s1[]=\,s2[]=\ cout<<\输出结果:\ cout<< \中较小者:\,b) < 26. 设计一个数组类模板Array #include T *elems; int size; public: Array(int S); //构造函数 ~Array(); T& operator[](int); //重载下标运算符 void operator=(T); //重载等号运算符 }; template size=s; elems=new T[SiZe]; for(int i=0;i template delete elems; } template return elems[index]; } template for(int i=0;i void main() { int 1,n=10; Array arr1[i]='a'+i; //调用重载运算符 arr2[i]='a'+i; } cout<<\ ASCII码 字符\; for(i=O;i cout< 一个Sample类模板的私有数据成员为T n,在该类模板中设计一个“operator==”重载运算符函数,用于比较各对象的n数据是否相等。 【知识点】:3.6 【参考分】:20分 【难易度】:C 【答案】: #include T n; public: Sample(T i){n=i;} int operator==(Sample &); }; template if(n==s.n) return 1; else return 0; } void main() { Sample cout<<\与s2的数据成员\相等\:\不相等\ Sample cout<<\与s4的数据成员\相等\不相等\} 28. 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标。 【知识点】:3.6 【参考分】:25分 【难易度】:B 【答案】: #include Sample(){} Sample(T a[],int i); int seek(T c); void disp() { for (int i=0; i n=i; for(int j=O; j template int low=0,high=n-l,mid; while(low<=high) { mid=(low+high)/2; if(A[mid]==c) return mid; else if (A[mid] return -1; } void main() { char a[]=”acegkmpwxz”; Sample cout<<\元素序列:\.disp(); cout<<\元素'g'的下标:\.seek('g')< 29. 编写一个程序,设计一个点类Point,并由此派生出一个圆类。 【知识点】:5.1 5.2 【参考分】:20分 【难易度】:B 【答案】: #include int x,y; public: Clothes Clothes1(\西装\,\黑色'),Clothes2(\运动服\,\蓝色\ Pants Pants1(\西裤\,\黑色\,Pants2(\运动裤\,\蓝色\ Shoe Shoe1(\皮鞋\,\棕色\,Shoe2(\运动鞋\,“黑色\; p1.wear(Clothes1); p1.wear(Pants1); P1.wear(Shoe1); p2.wear(Clothes2); p2.wear(Pants2); p2.wear(Shoe2;; cout<<\输出结果:\ p1.show(); p2.show(); } 33. 设计一个父亲类Father、母亲类Mother和子女类child,其主要数据是姓名,子 女使用父亲的姓,最后输出子女的姓名和父母姓名。 【知识点】:5.4 【参考分】:30分 【难易度】:B 【答案】:设计好类Father和类Mother,类child是从Father和Mother类公共派生的。程序如下: #include protected: char fname[5]; //姓 char sname[10]; //名 public: Father(){} Father(char *fn,char *sn) { strcpy(fname,fn); strcpy(shame,sn); } char *getfname() { return fname; } void show(){cout< class Mother { protected: char fname[5]; //姓 char shame[10]; //名 public: Mother(){} Mother(char *fn,char *sn){strcpy(fname,fn);strcpy(shame,sn);} char *getfname(){return fname;} void show() { cout< class child:public Father,public Mother { private: Father *myFather; Mother *myMother; public: child(Father &fa,Mother &mo,char *na):myFather(&fa),myMother(&mo) { strcpy(Father::fname,fa.getfname()); //这里的Father::fname是指从 strcpy(Father::shame,na); //Father继承的fname } void show() { cout<<\姓名:\::show(); cout< cout<<\ 父亲:\;myFather->show(); cout< cout<<\ 母亲:”;myNother->show(); cout< void main() { Father fa1(\陈\,\国强\,fa2(\王\,\伟\ Mother mo1(\李\,\丽\,mo2(\许\,\英\ child ch1(fal,mo1,\文化\,ch2(fa2,mo2,\萍\ cout<<\输出结果:\ ch1.show(); ch2.show(); } 34. 编写一个求出租车收费的程序,输入起始站、终止站和路程,计费公式是起价8 元,其中含3公里费用,以后每半公里收费0.7元。 【知识点】:5.4 【参考分】:40分 【难易度】:B 【答案】:设计一个站类Station(用于设置起始站、终止站)和路程类Mile(用于设置路程),由这两个类派生出收费类Price(用于计费)。程序如下: #include { protected: char from[Max]; char to[Max]; public: Station() { strcpy(from,\;strcpy(to,\ } Station(char f[],char t[]) { strcpy(from,f); strcpy(to,t); } void getdata() { cout<<”输入起始站终止站:”; cin>>from>>to ; } void disp() { cout<<”从”< Class Mile { protected: double mile; public: Mile(){mile=0;} Mile(double m){mile=m;) void getdata() { cout<<”输入里程:”; cin>>mile; } void disp() { cout<<\是\公里\ } }; class Price:public Station,public Mile { double price; public: Price():Station(),Mile() { price=0; } Price(char f[],char t[],double m):Station(f,t),Mile(m) { price=8+(int)((m-3+0.49)*2)*0.7; } void getdata() { Station::getdata(); Mile::getdata(); price=8+(int)((mile-3+0.49)*2)*0.7; } void disp() { cout<<\ \ Station::disp(); Mile::disp(); cout<<”,价格是”< void main() { Price A; A.getdata(); Price B(”关山口”,”中山公园”,32.6); cout<<”输出结果:”< 35. 设计一个基类Base,包括编号、姓名、住址以及相关的成员函数,由它派生出学生类Student和教师类Teacher,并用一些数据进行测试。 【知识点】:5.4 【参考分】:40分 【难易度】:B 【答案】: #include int no; //编号 char *name; //姓名 char *add; //住址 public: Base(){} void setno(int n){no=n;} void setname(char na[]) { name=new char[strlen(na)+1]; strcpy(name,na); } void setadd(char ad[]) { add=new char[strlen(ad)+1]; strcpy(add,ad); } int getno(){ return no;} char *getname(){return name;} char *getadd(){return add;} }; class Teacher:public Base { char *prof; //职称 int salary; //工资 public: Teacher(){) void setprof(char pr[]) { prof=new char[strlen(pr)+1]; strcpy(prof,pr); } void setsalary(int sa1)f salary=sa1;} char *getprof(){return prof;) int getsalary(){return salary;} }; class Student:public Base { int score; //成绩 char *major; //专业 int level; //年级 public: Student(){} void setscore(int s){score=s;} void setmajor(char maj[]) { major=new char[strlen(maj)+1]; Strcpy(major,maj); } void setlevel(int 1ev){level=lev;} int getscore(){return score;) char *getmajor(){return major;) int getlevel(){return level;} }; void main() { Teacher t; Student s; t.setno(129543); t.setname(”李明”); t.setprof(”副教授”); t.setadd(”12栋东l门302”); t.setsalary(1567); s.setno(9910112); s.setname(”孙华”); s.setadd(”10楼401); s.setscore(86); s.setmajor(”计算机科学”); s.setlevel(4); cout<<”输出结果:”< cout<<\ 教师:\.getname() <<\”< cout<<\ 学生:\.getname() <<\.getno() <<\ <<\,\.getlevel()<<\年级,住\.getadd() <<\,专业为\.getmajor()<<\,成绩\.getscore() <<\分\} 36. 定义高度基类High,其数据成员为高h,定义成员函数disp()为虚函数。然后再由High派生出长方体类Cuboid与圆柱体类cylinder。并在两个派生类中定义成员函数disp()为虚函数。在主函数中,用基类High定义指针变量P,然后用指针P动态调用基类与派生类中虚函数disp(),显示长方体与圆柱体的体积。 【知识点】:6.1 6.2 【参考分】:20分 【难易度】:B 【答案】: #include protected: float h; //高度 public: High(){} High(float h1){h=h1;} virtual void disp(){cout<<”高度=”< class Cuboid:public High //长方体类 { private: float len,wid; //长度和宽度 public: Cuboid(float l=0,float w=0,float h=0):High(h){ len=l; wid=w;} void disp() //虚函数disp() { cout<<\长方体:\ cout<<\ 长度=\; cout<<\,宽度=\ cout<<\,高度=\ cout<<\,体积=\}; class cylinder:public High //圆柱体类 { private: float r; //半径 public: Cylinder(float r1=0,float h1=O):High(h1) { r=rl; } void disp() //虚函数disp() { cout<<\圆柱体:\ cout<<\ 半径=\ cout<<\,高度=\ cout<<\,体积=\.1415*h< void main() { High *P; Cuboid cu(10,4,5); Cylinder cy(3,5); p=&cu; P->disp(); p=&cy; P->disp(); } 37. 编写一个程序,设计一个base基类,它有两个私有数据成员x和y以及一个虚函数add(),由它派生出two类和three类,后者添加一个私有数据成员z,在这些派生类中实现add()成员函数。并用数据进行测试。 【知识点】:6.1 6.2 【参考分】:20分 【难易度】:B 【答案】: #include base(int i,int j){x=i;y=j ;} virtual int add(){return x+y;} }; class two:public base { public: two(int i,int j):base(i,j){} int add(){return base::add();} }; class three:public base { int z; public: three(int i,int j,int k):base(i,j) { z=k; } int add() { return(base::add()+z); } }; void disp(base *obj) //动态绑定 { cout<<\ 参数相加:\void main() { two *p=new two(1 0,20); three *q=new three(10,2 0,30); cout<<\输出结果:\; disp(p); disp(q); } 38. 圆和三角形都需要输入三个数据,设计一个类object管理这三个数据,从此类派生出圆类circle和三角形类triangle,并求各自的面积。要求采用虚函数的方法进 行程序设计。 【知识点】:6.1 6.2 【参考分】:30分 【难易度】:B 【答案】: #include protected: int x,y,z; public: void getdata() { cout<<\ 输入x y z值:\; cin>>x>>y>>z; } }; class triangle:public object { public: void getdata() { cout<<”三角形三边长”< double area() { double d=(x+y+z)/2; double s=sqrt(d*(d-x)*(d-y)*(d-z)); return s; } void disp() { cout<<\ 三角形:三边长分别为\,\,\ } }; class circle:public object { public: void getdata() { cout<<\圆=圆心(x,y)半径z\ object::getdata(); } double area() { double s=z*z*3.1 41 5; return s; } void disp() { cout<<\ 圆:圆心(\,\半径为\; } }; void main() { triangle t; circle C; t.getdata(); c.getdata(); cout<<”输出结果”< t.disp(); cout<<\面积为\ < 39. 编写一个程序,能够一屏一屏简单地浏览指定的文本文件。 【知识点】:7.3 【参考分】:20分 【难易度】:C 【答案】: #include int r; char c; fstream file; char fn[10],buf[100]; cout<<\输入文件名:\cin>>fn; file.open(fn,ios::nocreate | ios::in); if(!file) { cout<<\指定的文件不存在\ abort(); } while (!file.eof()) { r=0;
正在阅读:
C++面向对象程序设计习题集04-23
江苏省堤坝白蚁防治办法11-28
我相信坚持作文600字06-21
一想起他我就感动作文600字06-20
假如我是一棵桃树作文500字06-15
家有萌宠美文11-03
我是一只小蚂蚁作文800字06-29
好一朵美丽的牡丹花作文300字06-22
课外文言文阅读-带答案05-09
- 教师招聘考试真题(中学数学科目)及答案 - 图文
- 读《光辉的旗帜》有感
- 学生会副部长竞选讲稿
- 江苏省石油化工码头企业安全生产标准化考评细则 - 图文
- 2016尔雅 民俗资源与旅游 期末考试答案 整理
- 九年级华师大《二次函数》全章教案
- 生化作业6
- 串口资料
- 2014北大附中初三数学二模复习策略
- 曼尼希反应
- 努肉孜节2012
- 卫生部关于印发《关于卫生监督体制改革实 施的若干意见》和《关
- 《生活中的线条》教学设计
- 广告学概论讲义 - 图文
- VS1真空断路器原理图及两种VS1真空断路器的介绍
- 晨读倡议书 - 致全国青年朋友
- 建筑物理复习(建筑热工学) - 图文
- 高级消防与精通急救题库 doc
- YJK软件的优化设计
- 小学生必背古诗100首(带拼音)
- C++
- 习题集
- 程序设计
- 面向
- 对象
- 西藏拉萨河某水电站闸坝混凝土浇筑施工组织设计
- 《财务管理学》课后答案
- 施工文件及竣工图整理及归档规定
- 南师大环境系主要教师简介
- 医学微生物学临床病案-2015
- 220kV电缆普通室外终端头制作作业指导书
- 2017-2018年电力行业混改分析报告 - 图文
- 二年级数学试卷2018年三年级数学下学期期末试题(北师大版)
- 五年级语文阅读与作文训练(附答案) 免费
- 第29届全国中学生物理竞赛复赛模拟试题第4套(共6套)答案及评分
- ARM初学入门
- 认知心理学复习题
- 汽车金融机构对经销商的物流融资业务模式
- 南京理工大学自动控制原理题库No14(含答案)
- 巴氏计量槽-选型
- 三方辅助,提升大班幼儿跳绳能力论文
- 唐山地产要闻05月21
- 1教师招聘重点考点(山香版教育理论高分题库精编·上)吐血整理
- 青春献林业 良种绿山川
- 大体积混凝土专项施工方案(详细) - 图文