C++面向对象程序设计课后题答案Word文档格式.docx

上传人:b****6 文档编号:20199302 上传时间:2023-01-17 格式:DOCX 页数:57 大小:28.43KB
下载 相关 举报
C++面向对象程序设计课后题答案Word文档格式.docx_第1页
第1页 / 共57页
C++面向对象程序设计课后题答案Word文档格式.docx_第2页
第2页 / 共57页
C++面向对象程序设计课后题答案Word文档格式.docx_第3页
第3页 / 共57页
C++面向对象程序设计课后题答案Word文档格式.docx_第4页
第4页 / 共57页
C++面向对象程序设计课后题答案Word文档格式.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

C++面向对象程序设计课后题答案Word文档格式.docx

《C++面向对象程序设计课后题答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计课后题答案Word文档格式.docx(57页珍藏版)》请在冰豆网上搜索。

C++面向对象程序设计课后题答案Word文档格式.docx

intmain()intm,n;

coutmn;

if(mn)change(m,n);

cout这两个数从小到大依次为:

mnendl;

【2.26】编写一个C+风格的程序,用二分法求解f(x)=0的根。

假设方程为:

2*x*x*x-4*x*x+3*x-6=0#include#includeusingnamespacestd;

doublef(doublex)return2*x*x*x-4*x*x+3*x-6;

intmain()doubleleft,right,middle,ymid,yleft,yright;

coutleftright;

yleft=f(left);

yright=f(right);

if(yleft*yright0)cout您输入的两个数,用二分法无法求得方程的根endl;

exit(0);

domiddle=(left+right)/2;

ymid=f(middle);

if(yleft*ymid0)right=middle;

yright=ymid;

if(yright*ymid=1e-6);

cout方程的根为:

middleendl;

第三章类和对象【3.6】假设在程序中已经声明了类point,并建立了其对象p1和p4。

请回答以下几个语句有什么区别?

(1)pointp2,p3;

(2)pointp2=p1;

(3)pointp2(p1);

(4)p4=p1;

【解答】语句

(1)使用带默认参数的构造函数,或不带参数的构造函数,定义了point类的两个对象p2,p3;

语句

(2)在建立新对象p2时,用已经存在的对象p1去初始化新对象p2,在这个过程中用“赋值法”调用了拷贝构造函数;

语句(3)在建立新对象p2时,用已经存在的对象p1去初始化新对象p2,在这个过程中用“带入法”调用了拷贝构造函数;

【3.7】B【3.8】C【3.9】C【3.10】B【3.11】B【3.12】A【3.13】A【3.14】B【3.15】A【3.16】B【3.17】B【3.18】写出下面程序的运行结果。

10,2030,4850,6870,8090,1611,120【3.19】写出下面程序的运行结果。

Constructing10Destructing100Destructing【3.20】写出下面程序的运行结果。

3objectsinexistence4objectsinexistenceafterallocation3objectsinexistenceafterdelection【3.21】写出下面程序的运行结果。

Countingat0Countingat1Countingat2Countingat3Countingat4Countingat5Countingat6Countingat7Countingat8Countingat9【3.22】写出下面程序的运行结果。

Defaultconstructorcalled.Defaultconstructorcalled.Defaultconstructorcalled.Constructor:

a=1,b=2Constructor:

a=3,b=4Constructor:

a=5,b=6【3.23】写出下面程序的运行结果。

Con.Copycon.default.【3.24】写出下面程序的运行结果。

A=5B=14A=9B=14【3.25】写出下面程序的运行结果。

5,722,25【3.26】写出下面程序的运行结果。

ConstructingConstructingA=5B=15DestructingA=10B=15DestructingDestructingDestructing【3.27】指出下列程序中的错误,并说明为什么。

classStudentcharname10;

intage;

floataver;

voidprintStu();

voidmain()Studentp1,p2,p3;

p1.age=30;

/Error:

age为私有成员,不能在类外直接访问【3.28】指出下列程序中的错误,并说明为什么。

classStudentintage;

intsno;

public:

/*在成员函数定义前加public,不然默认为private,则在主函数中不能调用私有的成员函数*/voidprintStu();

voidsetSno(intd);

voidsetAge(inta);

/添加成员函数的声明;

voidprintStu()/类外定义成员函数需加类名:

,改为:

voidStudent:

printStu()coutnStudentNo.issno,;

coutageisage.endl;

voidsetSno(ints)/类外定义成员函数需加类名:

setSno(ints)sno=s;

voidsetAge(inta)/类外定义成员函数需加类名:

setAge(inta)age=a;

voidmain()Studentlin;

lin.setSno(20021);

lin.setAge(20);

lin.printStu();

【3.29】指出下列程序中的错误,并说明为什么。

classPointpublic:

intx,y;

private:

Point()/构造函数不能说明为private的x=1;

y=2;

voidmain()Pointcpoint;

cpoint.x=2;

构造函数Point是私有的,语句“Pointcopint;

”执行时出现错误。

错误的原因是:

类Point的构造函数是私有函数,创建对象cpoint时不能调用它。

【3.30】下面是一个计算器类的定义,请完成该类成员函数的实现。

#includeusingnamespacestd;

classCounterpublic:

Counter(intnumber);

voidincrement();

/给原值加1voiddecrement();

/给原值减1intgetValue();

/取得计数器值intprint();

/显示计数private:

intvalue;

counter:

counter(intnumber)value=number;

voidcounter:

increment()value+;

decrement()value-;

intcounter:

getvalue()returnvalue;

print()coutnvalueis:

valueendl;

voidmain()counterop(10);

op.print();

op.decrement();

op.increment();

【3.31】根据注释语句的提示,实现类Date的成员函数。

classDatepublic:

voidprintDate();

/显示日期voidsetDay(intd);

/设置日的值voidsetMonth(intm);

/设置月的值voidsetYear(inty);

/设置年的值private:

intday,month,year;

voidDate:

printDate()coutyear/month/dayendl;

setDay(intd)day=d;

setMonth(intm)month=m;

setYear(inty)year=y;

intmain()DatetestDay;

testDay.setDay(5);

testDay.setMonth(10);

testDay.setYear(2003);

testDay.printDate();

【3.32】建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。

用类cylinder计算圆柱体的体积,并存储在一个double变量中。

在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。

constdoublePI=3.1415926;

classCylinderdoubleradius,height,volume;

Cylinder(doubler,doubleh)radius=r;

height=h;

volume=PI*radius*radius*height;

voidvol()coutthevolumeisvolumeendl;

intmain()Cylinderc(2,5);

c.vol();

【3.33】构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为15,将price初始化为qu的10倍。

显示每个对象的qu*price值。

【3.34】修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price值。

classBookprivate:

intqu,price;

Book(inti);

voidprint();

voidprintqandp();

Book:

Book(inti)qu=i;

price=qu*10;

voidBook:

print()couttheBooksquis:

quendl;

couttheBookspriceis:

priceendl;

printqandp()couttheBooksqu*priceis:

qu*priceendl;

voidmain()Booka5=1,2,3,4,5;

inti;

i5;

i+)ai.print();

Book*b=&

a4;

/逆序显示数组元素for(i=0;

iprintqandp();

b-;

Book*c=a;

/顺序显示数组元素for(i=0;

c+;

/或者classBookprivate:

Book(intq,intp);

Book(intq,intp)qu=q;

price=p;

voidmain()Booka5=Book(1,10),Book(2,20),Book(3,30),Book(4,40),Book(5,50);

【3.35】构建一个类Stock,含字符数组stockcode及整型数据成员quan、双精度型数据成员price。

构造函数含3个参数:

字符数组na及q、p。

当定义Stock的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。

未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。

成员函数print()没有形参,需使用this指针,显示对象数据成员的内容。

假设类Stock第1个对象的三个参数为:

“600001”、3000和5.67,第2个对象的第1个数据成员的值是“600001”,第2和第3个数据成员的值取默认值。

要求编写程序分别显示这两个对象数据成员的值。

#include#includeusingnamespacestd;

classStockpublic:

Stock(charna,intq=1000,doublep=8.98);

print();

charstockcode16;

intquan;

floatprice;

Stock:

Stock(charna,intq,doublep)strcpy(stockcode,na);

quan=q;

print()coutstocknode:

stockcodequan:

quan;

coutprice:

voidmain()Stocka(600001,3000,5.67);

Stockb(600001);

a.print();

b.print();

【3.36】编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。

classStudentstringname;

stringsno;

doublescore;

staticintnum;

staticdoublesum;

Student(stringn,stringno,doubles);

staticdoublegetAverage();

staticdoublegettotal();

staticintgetnum();

intStudent:

num=0;

doubleStudent:

sum=0;

Student:

Student(stringn,stringno,doubles)name=n;

sno=no;

score=s;

num+;

sum+=s;

print()cout学生的学号为:

sno,姓名为:

name,成绩为:

scoreendl;

getnum()returnnum;

getAverage()if(num=0)return0;

elsereturnsum/num;

gettotal()returnsum;

intmain()cout当前学生人数为:

getnum()学生的总成绩为:

gettotal()学生的平均成绩为:

getAverage()endl;

Students1(12012,张明,80);

s1.print();

cout当前学生人数为:

s1.getnum()学生的总成绩为:

s1.gettotal()学生的平均成绩为:

s1.getAverage()endl;

Students2(09615,李涛,50);

s2.print();

s2.getnum()学生的总成绩为:

s2.gettotal()学生的平均成绩为:

s2.getAverage()endl;

Students3(12016,王晓,90);

s3.print();

s3.getnum()学生的总成绩为:

s3.gettotal()学生的平均成绩为:

s3.getAverage()endl;

第四章派生类与继承【4.8】A【4.9】C【4.10】C【4.11】B【4.12】程序运行结果:

ConstructorB2ConstructorB1ConstructorA321【4.13】程序运行结果:

主食=bread副食=steak【4.14】程序运行结果:

0,0,00,1,03,6,9【4.15】程序运行结果:

ConstructorB2.2ConstructorB1.1ConstructorB3.3ConstructorA.4124,3【4.16】程序运行结果:

4【4.17】程序运行结果:

(1,2)5,6(6,9)

【4.18】程序运行结果:

classbase1classbase2classlevel2classbase2classlevel1classtoplevel【4.19】下面的程序可以输出ASCII字符与所对应的数字的对照表。

修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。

#includeclasstablepublic:

table(intp,intq)i=p;

j=q;

voidascii(void);

protected:

inti,j;

voidtable:

ascii(void)intk=1;

intm;

for(m=i;

m=j;

m+)coutsetw(4)m(char)m;

if(k%12=0)coutn;

k+;

coutendl;

classder_table:

publictablepublic:

der_table(intp,intq,char*m):

table(p,q)c=m;

voidprint(void);

char*c;

voidder_table:

print(void)coutcendl;

table:

ascii();

voidmain()der_tableob(a,z,ASCIIvalue-char);

ob.print();

【4.20】#includeusingnamespacestd;

classarea_clprotected:

doubleheight;

doublewidth;

area_cl(doubler,doubles)height=r;

width=s;

virtualdoublearea()=0;

classrectangle:

publicarea_clpublic:

rectangle(inth,intw):

area_cl(h,w)doublearea()returnheight*width;

classisosceles:

isosceles(inth,intw):

area_cl(h,w)doublearea()return0.5*height*width;

intmain()rectangler(10,5);

isoscelesi(4,6);

area_cl*p;

p=&

r;

cout矩形的面积为:

area()endl;

i;

cout三角形的面积为:

【4.21】已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。

classTimepublic:

Time(inth,intm,ints)hours=h;

minutes=m;

seconds=s;

voiddisplay()cout出生时间:

hours时minutes分seconds秒endl;

inthours,minutes,seconds;

Date(intm,intd,inty)month=m;

day=d;

year=y;

virtualvoiddisplay()cout出生年月year年month月day日endl;

intmonth,day,year;

classBirthtime:

publicTime,publicDateprivate:

stringChildname;

Birthtime(stringname,inty,intmon,intd,inth,intm,ints):

Date(mon,d,y),Time(h,m,s)Childname=name;

voiddisplay()cout小孩的姓名为:

Childnamen;

Date:

display();

Time:

intmain()Birthtimemary(Mary,2013,1,1,13,25,40);

mary.display();

Birthtimejack(Jackson,2000,11,11,23,55,10);

jack.display();

【4.22】编写一个学生和教师的数据输入和显示程序。

学生数据有编号、姓名、系别和成绩,教师数据有编号、姓名、职称和部门。

要求将编号、姓名、输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。

classPersonstrin

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1