C++面向对象程序设计习题集.docx
- 文档编号:23966503
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:144
- 大小:52.93KB
C++面向对象程序设计习题集.docx
《C++面向对象程序设计习题集.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计习题集.docx(144页珍藏版)》请在冰豆网上搜索。
C++面向对象程序设计习题集
C++面向对象程序设计习题集
编程题:
用面向对象的程序设计方法编制如下程序。
1.
设计一个Bank类,实现银行某账号的资金往来账管理,包括建账号、存入、取出等。
Bank类包括私有数据成员top(当前指针)、date(日期)、money(金额)、rest(余额)和sum(累计余额)。
另有一个构造函数和3个成员函数bankinO(处理存入账)、bankout()(处理取出账)和disp()(出明细账)。
【知识点】:
2.22.3
【参考分】:
25分
【难易度】:
B
【答案】:
#include
#include
#include
constintMax=100;
classBank
{
inttop;
chardate[Max][10];//日期
intmoney[Max];//金额
intrest[Max];//余额
staticintsum;//累计余额
public:
Bank(){top=0;}
voidbankin(chard[],intm)
{
strcpy(date[top],d);
money[top]=m;
sum=sum+m;
rest[top]=sum;
top++;
}
voidbankout(chard[],intm)
{
strcpy(date[top],d);
money[top]=-m;//取出数用负数表示
sum=sum-m;
rest[top]=sum;
top++;
}
voiddisp()
{
inti;
cout<<"日期存入取出余额"< for(i=0;i { cout< if(money[i]<0) cout<<""< else cout< cout< }; intBank: : sum=0; voidmain() { Bankobj; 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.22.3 【参考分】: 20分 【难易度】: B 【答案】: #include #include #include classStud { intno; charname[10]; intdeg; staticintsum; staticintnum; public: Stud(intn,charna[],intd) { no=n;deg=d; strcpy(name,na); sum+=d; num++; } staticdoubleavg() { returnsum/num; } voiddisp() { cout< } }; intStud: : sum=0j intStud: : num=O; voidmain() { Studs1(1,"Li",89),s2(2,"Chert",78),s3(3,"zheng",94); cout: <<"学号姓名成绩"< s1.disp(); s2.disp(); s3.disp(); cout<<"平均分="< : avg()< } 3. 有10个单词存放在一维指针数组words中,编写一个程序,根据用户的输入找出所有与之从前向后匹配的单词和个数。 【知识点】: 2.2 【参考分】: 25分 【难易度】: B 【答案】: 设计一个Word类,包含一个私有数据成员words、一个构造函数和一个公有成员函数lookup(),构造函数用于给words赋初值,lookup()用于找出所有与之从前向后匹配的单词和个数。 程序如下: #include #include C1assWord { charwords[10][12]; public: Word()//构造函数给words赋初值 { strcpy(words[0],"elapse"); strcpy(words[1],"elucidate"); strcpy(words[2],"elude"); strcpy(words[3],"embody"); strcpy(words[4],"embrace"); strcpy(words[5],"embroider"); strcpy(words[6],"emrtge"); strcpy(words[7],"emphasize"); strcpy(words[8],"empower"); strcpy(words[9],"emulate"); } voidlookup(chars[]); }; voidWord: : lookup(chars[]) { char*w; inti,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<<"\t"< } } cout<<"相匹配的单词个数: "< } voidmain() { Wordobj; charstr[20]; cout<<"输入单词: "; cin>>str; obj.lookup(str); } 4. 创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。 把表示构造函数、changenameO、display()的函数原型放在类定义中,构造函数初始化每个成员,display()~数把完整的对象数据打印出来。 其中的数据成员是保护的,函数是公共的。 【知识点】: 2.22.33.1 【参考分】: 20分 【难易度】: B 【答案】: #include #include classEmployee { protected: charname[10];//姓名 charstreet[20];//街道地址 charcity[10];//市 charprov[10];//省 charpost[7];//邮政编码 intno;//记录序号 public: Employee(char[],char[],char[],char[],char[],int); voidchangename(charstr[]); voiddisplay(); }; Employee: : Employee(charn[],chars[],charc[],charpl[],charp2[],intnum) { strcpy(name,n); strcpy(Street,s); strcpy(city,c); Strcpy(prov,p1); strcpy(post,p2); no=num; } voidEmployee: : changename(charn[]) { strcpy(name,n); } voidEmployee: : display() { cout<<"输出记录"< cout<<"姓名: "< cout<<"街道地址: "< cout<<"市: "< tout<<"省: "< cout<<"邮政编码: "< } voidmain() { Employeeobj1("王华","中华路15号","武汉市","湖北省","430070",1); Employeeobj2("杨丽","天津路30号","南京市","江苏省","210020",2); obj1.display(); obj2.display(); } 5. 编写一个程序,已有若干个学生数据,这些数据包括学号、姓名、语文成绩、数学成绩和英语成绩,求各门课程的平均分。 要求设计不同的成员函数求各门课程的平均分,并使用成员函数指针调用它们。 【知识点】: 2.22.33.1 【参考分】: 20分 【难易度】: C 【答案】: 设计一个学生类student,包括no(学号)、name(姓名)、degl(语文成绩)、deg2(数学成绩)、deg3(英语成绩)数据成员和3个静态数据成员suml(累计语文总分)、sum2(累计数学总分)、sum3(累计英语总分);另外有一个构造函数、3个求三门课程平均分的成员函数和一个disp()成员函数。 程序如下: #include #include #include constintN=4; classstudent { intno;//学号 charname[10];//姓名 intdegl;//语文成绩 intdeg2;//数学成绩 intdeg3;//英语成绩 staticintsuml;//语文总分 statacintsum2;//数学总分 staticintsum3;//英语总分 public: student(intn,charna[],intdl,intd2,intd3) { no=n; strcpy(name,na); degl=dl;deg2=d2;deg3=d3; suml+=degl;sum2+=deg2;sum3+=deg3; } doubleavgl(){return(suml*1.0)/N;} doubleavg2(){return(sum2*1.0)/N;} doubleavg3(){return(sum3*1.0)/N;}} voiddisp() { cout< < } }; intstudent: : suml=0; intstudent: : sum2=0; intstudent: : sum3=0; voidmain() { double(student: : *fp)();//定义成员函数指针 students1(1,"Li",67,89,90); students2(2,"Na",67,89,90); students3(3,"Zheng",67,89,90); students4(4,"Chert",67,89,90); cout<<"输出结果"< cout<<"学号姓名语文数学英语"< s1.disp(); S2.disp(); S3.disp(); S4.disp(); fp=student: : avgl; cout<<"语文平均分: "<<(S1.*fP)()< fp=student: : avg2; cout<<"数学平均分: "<<(S1.*fp)()< fp=student: : avg3; cout<<"英语平均分: "<<(S1.*fP)()< } 6. 编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求只输出成绩在80~89分数段的学生数据。 【知识点】: 2.22.3 【参考分】: 20分 【难易度】: B 【答案】: 设计一个学生类Stud,包括no(学号)、name(姓名)和deg(成绩)数据成员,另有两个普通成员函数setdata()和disp(),前者用于设置对象数据,后者用于只输出成绩在80~89分数段的学生数据。 在main()函数中定义了一个对象数组用于存储输入的学生数据。 程序如下: #include #include #include constintN=3; classStud { intno; charname[10]; intdeg; publiC: voidsetdata(intn,charna[],intd) { no=n;deg=d; strcpy(name,na); } voiddisp() { if(deg>=80&°<=89) cout< } }; voidmain() { Studst[N]; inti,n,d; charna[10]; cout<<"输入学号姓名成绩"< for(i=0;i { cout<<"第"< "; cin>>n>>na>>d; St[i].Setdata(n,na,d); cout<<"输出数据"< cout<<"学号姓名成绩"< for(i=0;i st[i].disp(); } 7. 编写一个程序统计学生成绩,其功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前70%的学生定为合格(PASS),而后30%的学生定为不及格(FAIL)。 【知识点】: 2.22.33.1 【参考分】: 40分 【难易度】: A 【答案】: 设计一个类student,包含学生的姓名和成绩等数据,以及setname()、setdeg()、getname()和getdeg()等4个成员函数。 设计一个类compute,包含两个私有数据成员,即学生人数ns和student类的对象数组na[],另有3个公共成员函数getdata()、sort()、disp(),它们的功能分别用于数据获取、按成绩排序和输出数据。 程序如下: #include #include #include constintMax=10; classstudent { charname[10]; intdeg; public: voidsetname(charna[]){strcpy(name,na);} char*getname(){returnname;} voidsetdeg(intd){deg=d;} intgetdeg(){returndeg;} }; classcompute { intns; studentna[Max]; public: voidgetdata(); voidsort(); voiddisp(); }; voidcompute: : getdata() { inti,tdeg; chartname[10]; cout<<"输入学生人数: "; cin>>ns; cout<<"输入学生姓名和成绩: "< for(i=O;i { cout<<"第"< "; cin>>tname>>tdeg; na[i].setname(tname); me[i].setdeg(tdeg); } } voidcompute: : sort() { inti,j,pick; studenttemp; 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; } } voidcompute: : disp() { intcutoff,i; cout<<"输出结果"< cout<<"姓名成绩合格否"< cout<<”-----------------”< cutoff=ns*7/10-1; for(i=0;i { cout< if(i<=cutoff) cout<<"PASS"< else cout<<"FAIL"< } } voidmain() { computeobj; obj.getdata(); obj.sort(); obj.disp() } 8. 编写一个程序,输入用户的姓名和电话号码,按姓名的词典顺序排列后,输出用户的姓名和电话号码。 【知识点】: 2.22.33.1 【参考分】: 40分 【难易度】: B 【答案】: 设计一个类person,包含学生的姓名和电话号码等数据,以及semame()、setnum()、gemame()和gemum()等4个成员函数。 设计一个类compute,包含一个私有数据成员,即person类的对象数组pn[],另有3个公共成员函数getdata()、sort()、disp(),它们的功能分别用于数据获取、按姓名的词典顺序排序和输出数据。 程序如下: #include #include #include constintN=5; classperson { charname[10]; charnum[10]; public: voidsetname(charna[]){strcpy(name,na);} voidsetnum(charnu[]){strcpy(num,nu);) char*getname(){returnname;} char*getnum(){returnnum;) }; classcompute { personpn[N]; public: voidgetdata(); voidgetsort(); voidoutdata(); }; voidcompute: : getdata() { inti; charna[10],nu[10]; cout<<"输入姓名和电话号码"< for(i=0;i { cout<<"第"< "; cin>>na>>nu; pn[i].setname(na); pn[i].setnum(nu); } voidcompute: : getsort() inti,j,k; persontemp; for(i=0;i { k=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; } } voidcompute: : outdata() { inti; cout<<"输出结果: "< cout<<"姓名电话号码"< cout<<"----------------"< for(i=0;i cout< < } voidmain() { computeobj; obj.getdata(); obj.getsort(); obj.outdata(); } 9. 编写一个程序,输入n个学生的姓名和出生日期,并按年龄从大到小输出。 【知识点】: 2.22.33.1 【参考分】: 40分 【难易度】: A 【答案】: 设计一个结构体person,包含学生的姓名和出生日期等数据: 设计一个类compute,包含私有数据成员,即person结构体数组st[],另有3个私有成员函数daynum()、countday()、leap()和3个公共成员函数getdam()、sort()、disp(),它们的功能分别用于数据获取、按出生日期排序和输出数据,在实现过程中调用前面的3个私有成员函数。 sort()成员函数按结构体数组元素的d成员排序,d存放的是该学生从1900年1月l日到出生日期的天数。 程序如下: #include #include constintN=4; intcountday(int,int,int,int); intleap(int); structperson { charname[10]; structdates intyear; intmonth; intday; }date; intd;//从1900.1.1到出生日的天数 }; classcompute { structpersonst[N]; intdaynum(int,int,int,int,int,int); intcount_day(int,int,int,int); boolleap(int); public: voidgetdata(); voidsort(); voiddisp(); }; intco
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 习题集
![提示](https://static.bdocx.com/images/bang_tan.gif)