C++面向对象程序设计习题集 - 下载本文

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

编程题:用面向对象的程序设计方法编制如下程序。 1.

设计一个Bank类,实现银行某账号的资金往来账管理,包括建账号、存入、取出等。Bank类包括私有数据成员top(当前指针)、date(日期)、money(金额)、rest(余额)和sum(累计余额)。另有一个构造函数和3个成员函数bankinO(处理存入账)、bankout()(处理取出账)和disp( )(出明细账)。 【知识点】:2.2 2.3 【参考分】:25分 【难易度】:B 【答案】:

#include #include #include const int Max=100; class Bank {

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 #include #include class Stud {

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 #include C1ass Word {

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 #include class Employee {

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(累计语文总