C面向对象程序设计习题集.docx

上传人:b****1 文档编号:531131 上传时间:2023-04-29 格式:DOCX 页数:144 大小:50.03KB
下载 相关 举报
C面向对象程序设计习题集.docx_第1页
第1页 / 共144页
C面向对象程序设计习题集.docx_第2页
第2页 / 共144页
C面向对象程序设计习题集.docx_第3页
第3页 / 共144页
C面向对象程序设计习题集.docx_第4页
第4页 / 共144页
C面向对象程序设计习题集.docx_第5页
第5页 / 共144页
C面向对象程序设计习题集.docx_第6页
第6页 / 共144页
C面向对象程序设计习题集.docx_第7页
第7页 / 共144页
C面向对象程序设计习题集.docx_第8页
第8页 / 共144页
C面向对象程序设计习题集.docx_第9页
第9页 / 共144页
C面向对象程序设计习题集.docx_第10页
第10页 / 共144页
C面向对象程序设计习题集.docx_第11页
第11页 / 共144页
C面向对象程序设计习题集.docx_第12页
第12页 / 共144页
C面向对象程序设计习题集.docx_第13页
第13页 / 共144页
C面向对象程序设计习题集.docx_第14页
第14页 / 共144页
C面向对象程序设计习题集.docx_第15页
第15页 / 共144页
C面向对象程序设计习题集.docx_第16页
第16页 / 共144页
C面向对象程序设计习题集.docx_第17页
第17页 / 共144页
C面向对象程序设计习题集.docx_第18页
第18页 / 共144页
C面向对象程序设计习题集.docx_第19页
第19页 / 共144页
C面向对象程序设计习题集.docx_第20页
第20页 / 共144页
亲,该文档总共144页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C面向对象程序设计习题集.docx

《C面向对象程序设计习题集.docx》由会员分享,可在线阅读,更多相关《C面向对象程序设计习题集.docx(144页珍藏版)》请在冰点文库上搜索。

C面向对象程序设计习题集.docx

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();

};

intcompute:

:

daynum(ints_year,ints_month,int

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2