版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上C+面向对象程序设计习题集编程题:用面向对象的程序设计方法编制如下程序。设计一个Bank类,实现银行某账号的资金往来账管理,包括建账号、存入、取出等。Bank类包括私有数据成员top(当前指针)、date(日期)、money(金额)、rest(余额)和sum(累计余额)。另有一个构造函数和3个成员函数bankinO(处理存入账)、bankout()(处理取出账)和disp( )(出明细账)。【知识点】:2.2 2.3【参考分】:25分【难易度】:B【答案】:#include <iostream.h>#include <iomanip.h>#in
2、clude <string.h>const int Max=100;class Bank int top; char dateMax10;/日期 int moneyMax;/金额 int restMax;/余额 static int sum;/累计余额public: Bank()top=0;void bankin(char d ,int m) strcpy(datetop,d); moneytop=m; sum=sum+m; resttop=sum; top+;void bankout(char d,int m) strcpy(datetop,d); moneytop=-m; /取
3、出数用负数表示 sum=sum-m; resttop=sum; top+;void disp() int i; cout<<"日期 存入 取出余额"<<endl; for(i=0;i<top;i+) cout<<setw(10)<<datei; if(moneyi<0) cout<<""<<setw(6)<<-moneyi; else cout<<setw(6)<<moneyi <<"" cout<
4、<setw(6)<<resti<<endl;int Bank:sum=0;void main() Bank obj; obj.bankin("2005.2.5".1000); obj.bankin("2006.3.2",2000); obj.bankout("2007.4.1",500); obj.bankout("2007.10.5",800); obj.disp();编写一个程序,已有若干个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。【知识点】:2.2 2.3
5、【参考分】:20分【难易度】:B【答案】: #include<iostream.h> #include<iomanip.h> #include<string.h> class Stud int no; char name10; 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() co
6、ut<<setw(5)<<nO<<setw(8)<<name<<setw(6)<<deg<<endl; ; int Stud:sum=0j int Stud:num=O; void main() Stud s1(1,"Li",89),s2(2,"Chert",78),s3(3,"zheng",94); cout:<<"学号 姓名 成绩"<<endl; s1.disp(); s2.disp(); s3.disp
7、();cout<<"平均分="<<Stud:avg()<<endl;有10个单词存放在一维指针数组words中,编写一个程序,根据用户的输入找出所有与之从前向后匹配的单词和个数。【知识点】:2.2【参考分】:25分【难易度】:B【答案】:设计一个Word类,包含一个私有数据成员words、一个构造函数和一个公有成员函数lookup(),构造函数用于给words赋初值,lookup()用于找出所有与之从前向后匹配的单词和个数。程序如下:#include<iostream.h>#include<string.h>C1a
8、ss Word char words1012;public: Word() /构造函数给words赋初值strcpy(words0,"elapse");strcpy(words1,"elucidate");strcpy(words2,"elude");strcpy(words3,"embody");strcpy(words4,"embrace");strcpy(words5,"embroider");strcpy(words6,"emrtge");strc
9、py(words7,"emphasize");strcpy(words8,"empower");strcpy(words9,"emulate"); void lookup(char s );void Word:lookup(char s ) char *w; int i,j,n=0; /n记录相匹配的单词个数 cout<<"匹配的单词:"<<endl; for(i=0;i<10;i+) /一个单词一个单词地匹配 for(w=wordsi,j=0;sj!='0'&
10、&*w!='0'&&*w=sj; j+,w+); if(sj='0') /匹配成功 n+; cout<<"t"<<wordsi <<endl; cout<<"相匹配的单词个数:"<<n<<endl;void main() Word obj; char str20; cout<<"输入单词:" cin>>str;obj.lookup(str); 创建一个Employee类,该类中有字符数
11、组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、changenameO、display()的函数原型放在类定义中,构造函数初始化每个成员,display()数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。【知识点】:2.2 2.3 3.1【参考分】:20分【难易度】:B【答案】:#include<iostream.h>#include<string.h>class Employeeprotected: char name10; /姓名 char street20; /街道地址 char city10; /市 char prov10; /省 c
12、har post7; /邮政编码 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(
13、char n) strcpy(name,n);void Employee:display() cout<<"输出记录"<<no<<endl; cout<<"姓名:"<<name<<endl; cout<<"街道地址:"<<street<<endl; cout<<"市:"<<city<<endlj tout<<"省:"<<prov&
14、lt;<endl; cout<<"邮政编码:"<<post<<endl;void main()Employee obj1("王华","中华路15号","武汉市","湖北省","",1);Employee obj2("杨丽","天津路30号","南京市","江苏省","",2);obj1.display();obj2.display();
15、编写一个程序,已有若干个学生数据,这些数据包括学号、姓名、语文成绩、数学成绩和英语成绩,求各门课程的平均分。要求设计不同的成员函数求各门课程的平均分,并使用成员函数指针调用它们。【知识点】:2.2 2.3 3.1【参考分】:20分【难易度】:C【答案】:设计一个学生类student,包括no(学号)、name(姓名)、degl(语文成绩)、deg2(数学成绩)、deg3(英语成绩)数据成员和3个静态数据成员suml(累计语文总分)、sum2(累计数学总分)、sum3(累计英语总分);另外有一个构造函数、3个求三门课程平均分的成员函数和一个disp( )成员函数。程序如下:#include<
16、;iostream.h>#include<iomanip.h>#include<string.h>const int N=4;class student int no;/学号 char name10;/姓名 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
17、); 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<<setw(4)<<no<<setw(10)<<name<<setw(6)<<degl<<setw(6) <<deg2<<setw(6)<
18、<deg3<<endl; ;int student:suml=0;int student:sum2=0;int student:sum3=0;void main()double (student:*fp)(); /定义成员函数指针student s1(1,"Li",67,89,90);student s2(2,"Na",67,89,90);student s3(3,"Zheng",67,89,90);student s4(4,"Chert",67,89,90);cout<<"
19、输出结果"<<endl;cout<<"学号 姓名 语文数学英语"<<endl;s1.disp();S2.disp();S3.disp();S4.disp();fp=student:avgl;cout<<"语文平均分:"<<(S1.*fP)()<<endl;fp=student:avg2;cout<<"数学平均分:"<<(S1.*fp)()<<endl;fp=student:avg3;cout<<"
20、英语平均分:"<<(S1.*fP)()<<endl; 编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求只输出成绩在8089分数段的学生数据。【知识点】:2.2 2.3【参考分】:20分【难易度】:B【答案】:设计一个学生类Stud,包括no(学号)、name(姓名)和deg(成绩)数据成员,另有两个普通成员函数setdata()和disp(),前者用于设置对象数据,后者用于只输出成绩在8089分数段的学生数据。在main()函数中定义了一个对象数组用于存储输入的学生数据。程序如下:#include<iostream.h>#include&
21、lt;iomanip.h>#include<stringh>const int N=3;class Stud int no; char name10; 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<<setw(5)<<no<<setw(8)<<name<<setw(5)<<deg<<
22、;endl; ;void main() Stud stN; int i,n,d; char na10; cout<<"输入学号姓名成绩"<<endl; for(i=0;i<N;i+) cout<<"第"<<i+l<<"个学生:" cin>>n>>na>>d; Sti.Setdata(n,na,d);cout<<"输出数据"<<endl;cout<<"学号 姓名 成绩&q
23、uot;<<endl;for(i=0;i<N;i+)sti.disp( );编写一个程序统计学生成绩,其功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前70的学生定为合格(PASS),而后30的学生定为不及格(FAIL)。【知识点】:2.2 2.3 3.1【参考分】:40分【难易度】:A【答案】:设计一个类student,包含学生的姓名和成绩等数据,以及setname()、setdeg()、getname()和 getdeg()等4个成员函数。设计一个类compute,包含两个私有数据成员,即学生人数ns和student类的对象数组na,另有3个公共成员函数ge
24、tdata( )、sort( )、disp( ),它们的功能分别用于数据获取、按成绩排序和输出数据。程序如下:#include<iOStream.h>#include<iomanip.h>#include<string.h>const int Max=10;class student char name10; int deg;public: void setname(char na)strcpy(name,na); char *getname()return name; void setdeg(int d)deg=d; int getdeg()return
25、deg;class compute int ns; student naMax;public: void getdata(); void sort(); void disp();void compute:getdata() int i,tdeg; char tname10; cout<<"输入学生人数:" cin>>ns; cout<<"输入学生姓名和成绩:"<<endl; for(i=O;i<ns;i+) cout<<"第"<<i+l<<&qu
26、ot;个学生:" cin>>tname>>tdeg; nai.setname(tname); mei.setdeg(tdeg); void compute:sort() int i,j,pick; student temp; for(i=0;i<ns-1;i+) pick=i; for(j=i+1;j<ns;J+) if(naJ.getdeg()>napick.getdeg() pick=j; temp=nai; nai=napick; napick=temp; void compute:disp() int cutoff,i; cout&l
27、t;<"输出结果"<<endl; cout<<" 姓名 成绩合格否"<<endl; cout<<” - - -”<<endl; cutoff=ns*7/10-1; for(i=0;i<ns;i+) cout<<setw(8)<<naigetname()<<setw(5)<<nai.getdeg(); if(i<=cutoff) cout<<"PASS"<<endl; else cout&
28、lt;<"FAIL"<<endl; void main() compute obj; obj.getdata(); obj.sort(); obj.disp()编写一个程序,输入用户的姓名和电话号码,按姓名的词典顺序排列后,输出用户的姓名和电话号码。【知识点】:2.2 2.3 3.1【参考分】:40分【难易度】:B【答案】:设计一个类person,包含学生的姓名和电话号码等数据,以及semame()、setnum()、gemame()和gemum()等4个成员函数。设计一个类compute,包含一个私有数据成员,即person类的对象数组pn,另有3个公共
29、成员函数getdata()、sort()、disp(),它们的功能分别用于数据获取、按姓名的词典顺序排序和输出数据。程序如下:#include<iostreamh>#include<iomanip.h>#include<string.h>const int N=5; class person char name10; char num10;public: void setname(char na)strcpy(name,na); void setnum(char nu)strcpy(num,nu);) char *getname()return name;
30、char *getnum()return num;);class compute person pnN;public: void getdata(); void getsort(); void outdata();void compute:getdata() int i; char na10,nu10; cout<<"输入姓名和电话号码"<<endl; for (i=0; i<N; i+) cout<<" 第"<<i+1<<"个人:" cin>>na>
31、>nu; pni.setname(na); pni.setnum(nu); void compute:getsort() int i,j,k; person temp; for(i=0;i<N-1;i+) k=i; for(j=i+1;j<N;j+) if(strcmp(pnk.getname(),pnj.getname()>0) k=j; temp=pnk; pnk=pni; pni=temp; void compute:outdata() int i; cout<<"输出结果:"<<endl; cout<<&q
32、uot; 姓名 电话号码"<<endl; cout << " - -" << endl; for(i=0;i<N;i+) cout<<setw(11) <<pni.getname() <<setw(8) <<pni.getnum()<<endl;void main() compute obj; obj.getdata(); obj.getsort(); obj.outdata();编写一个程序,输入n个学生的姓名和出生日期,并按年龄从大到小输出。【知识点】:2.2
33、 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 <iostream.h>#inc
34、lude <iomanip.h>const int N=4;int count day(int,int,int,int);int leap(int);struct person char name10; struct dates int year; int month; int day; date; int d; /从190011到出生日的天数;class compute struct person stN; int daynum(int,int,int,int,int,int); int count_day(int,int,int,int); bool leap(int);pub
35、lic: 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<e year) day=count_day(s_year,s_month,s_day,0); for(year=s_year+l;year<e_year;year+) if(leap(year) day+=366L; else day+=365L; da
36、y+=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_tab212=(31,28,31,30,31,30,3l,31,30,31,30,3l, 3
37、1,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<month;i+) s+=day tabpi一1; else s=day_tabpmonth-day; for(i=month+1;i<=12;i+) s+=day_tabPi一1; return(s);bool compute:leap(int year) if(year%4=O&&year%100!=
38、O|year%400=O) /是闰年 return true; else /不是闰年 return false;void compute:sort() int i,j; struct person temp; for(i=O;i<N一1;i+) for(j=0;j<N-i-1;j+) if(stj.d>stj+1.d) temp=stj; stj=stj+1; stj+1=temp; void compute:getdata() int i; for(i=0;i<N;i+) cout<<"输入第"<<i+l<<&q
39、uot;个学生姓名:" cin>>; cout<<" 出生日期:" cin>>sti.date.year>>sti.date.month>>sti.date.day; sti.d=daynum(1900,1,1,sti.date.year, sti.date.month,sti.date.day); void compute:disp() int i; cout<<"输出结果:"<<endl; cout<<" 姓名 出生日期
40、"<<endl; for(i=0;i<N;i+) cout<<setw(10)<<<<" "<<sti.date.year<< "." <<sti.date.month<<"."<<sti.date.day<<endl;void main() compute obj; obj.getdata(); obj.sort(); obj.disp();10设计一个集合类Set,包括将集合置空、
41、添加元素、判断元素是否在集合中、输出集合以及将集合中元素逆置,另外还有一个复制构造函数,并使用一些数据进行测试。【知识点】:2.2 2.3 3.1【参考分】:40分【难易度】:B【答案】:Set类包括私有数据data(存放集合元素)、Bum(集合中元素个数),一个缺省构造函数和复制构造函数Set(Set &s),另有成员函数setempty()(将集合置空)、issetempty()(判断集合是否为空)、ismemberof()(判断元素是否在集合中)、add()(添加元素)、disp()(输出集合)、reverse()(将集合中元素逆置)。其中,issetempty、ismember
42、of和disp函数设计为常成员函数。程序如下:#include<iostream.h>const int Max=10;C1ass Set int dataMax; 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;
43、 for(int i=0;i<num;i+) datai=s.datai;bool Set:issetempty() const return(num=0);bool Set:ismemberof(int n) const for(int i=0;i<num;i+) if(datai=n) return l; return 0;int Set:add(int n) if (ismemberof(n) return 1; else if(num>Max) return 0; else datanum+=n; return 1; void Set:disp() const cou
44、t<<"" for(int i=0;i<num-1; i+) cout<<datai<<"," if(num>0) cout<<datanum-1; cout<<"" <<endl;void Set:reverse() int n=num/2; for(int i=0;i<n;i+) int temp; temp=datai; datai=datanum-i-1; datanum-i-1=temp; void main() Set A; cout
45、<<"A是否为空:" cout<<(A.issetempty()?"空":"非空")<<endl; cout<<"A:"A.disp(); Set B; for(int i=1;i<=8;i+) B.add(i); cout<<"B:"B.disp(); cout<<"5是否在B中:"cout<<B.ismemberof(5)<<endl; B.setempty(); for
46、(int j=11; j<20;j+) B.add(j); Set C(B); cout<<"C:"C.disp(); C.reverse(); cout<<"C逆置"<<endl; cout<<"C:"C.disp();11设计一个职工类Person,一个系有若干个职工,按职务分为系主任、室主任和职工,给出他们之间的领导关系。【知识点】:2.2【参考分】:25分【难易度】:C【答案】:类Person有姓名、职务和指向领导的指针等私有数据,以及两个构造函数和以下成员函数:setle
47、ader()设置当前职工的领导;getname()获取职工姓名;getleader()获取领导者对象指针:disp()输出姓名和职务。程序如下:#include<iostream.h>#include<iomanip.h>#include<string.h>class Person char name10; char prof10; Person *1eader;public: Person()strcpy(name,"0"); Person(char n,char P) strcpy(name,n); strcpy(prof,P); l
48、eader=new Person; void setleader(Person &p)leader=&p; /对象引用作为参数 char *getname()return name;) Person *getleader() return leader; void disp() cout<<setw(10)<<name<<setw(10)<<prof; ;void main() Person P =Person("王华","室主任"),Person("李明","
49、职工"), Person("陈强","系主任"),Person("章城","职工"), Person("张伟","室主任"),Person("许源","职工");P0.setleader(P2);P1.setleader(P0);P3.setleader(P4);P4.setleader(P2);P5.setleader(P4);cout<<” 姓名 职务 领导姓名”<<endl;cout<<
50、;” - - -”<<endl; for(int i=0;i<6;i+) Pi.disp(); cout<<setw(10)<<(Pi.getleader()->getname()<<endl; 12需要求3个长方柱的体积,请编一个基于对象的程序。数据成员包括length(长)、width(宽)、height(高)。要求用成员函数实现以下功能: (1)由键盘分别输入3个长方柱的长、宽、高;(2)计算长方柱的体积;(3)输出3个长方柱的体积。【知识点】:2.2 2.3【参考分】:20分【难易度】:C【答案】:#include <i
51、ostream>using namespace std;class Boxpublic: void get_value(); float volume(); void display(); public: float lengh; float width; float height; ;void Box:get_value() cout<<"please input lengh, width,height:" cin>>lengh; cin>>width; cin>>height;float Box:volume() r
52、eturn(lengh*width*height);void Box:display() cout<<volume()<<endl;int main()Box box1,box2,box3; box1.get_value(); cout<<"volmue of bax1 is " box1.display(); box2.get_value(); cout<<"volmue of bax2 is " box2.display(); box3.get_value(); cout<<"vo
53、lmue of bax3 is " box3.display(); return 0;13 建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1、3、5个学生的数据。【知识点】:3.2【参考分】:20分【难易度】:C【答案】:#include <iostream>using namespace std;class Student public: Student(int n,float s):num(n),score(s) void display(); private: int num; float score; ;void Student:
54、display() cout<<num<<" "<<score<<endl; int main()Student stud5= 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; 14 建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数
55、max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。【知识点】:3.2【参考分】:20分【难易度】:C【答案】:#include <iostream>using namespace std;class Student public: Student(int n,float s):num(n),score(s) int num; float score; ;void main()Student stud5= Student(101,78.5),Student(102,85.5),Student(103,98.5), Student(104,100.0),Student(105,95.5); void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年山东省菏泽市定陶区八年级下册期末考试数学试题 含答案
- 2026年四川省简阳市高二生物下册期末考试模拟卷附参考答案(典型题)
- 2025年辽宁省凌源市高二生物下册期末考试模拟卷含完整答案(网校专用)
- 2026年江西省丰城市高二生物下册期末考试测试卷附参考答案【满分必刷】
- 2026年辽宁省北票市高二生物下册期末考试检测卷(达标题)附答案
- 2026年浙江省平湖市高二生物下册期末考试考试卷及参考答案【考试直接用】
- 2026年辽宁省大石桥市高二生物下册期末考试测试卷附参考答案(考试直接用)
- 2025年辽宁省开原市高二生物下册期末考试模拟卷【预热题】附答案
- 2026年辽宁省大石桥市高二生物下册期末考试考试卷含答案(能力提升)
- 2026年陕西省兴平市高二生物下册期末考试模拟卷附完整答案【名师系列】
- 2026年新汉语水平考试(HSK)五级模拟测试卷及参考答案
- 2026厦门国有资本运营有限责任公司招聘笔试备考试题及答案解析
- 徐州存量房交易合同
- 2026年湖南省衡阳市地理生物会考真题试卷(+答案)
- 2025年昆山市交通工程集团有限公司社会招聘笔试参考题库附带答案详解
- 消防排烟系统检测施工方案
- 山东潍坊市安丘市青云文旅发展集团有限公司招聘笔试题库2026
- 2025年职业技能鉴定考试(家政服务员二级)历年参考题库含答案
- 2025年度安徽省专业技术人员继续教育公需科目试卷及答案
- 2026年安徽高考地理题及参考答案
- 住院患者安全风险评估方案
评论
0/150
提交评论