2022年面向对象程序设计C山师第六章习题答案 .pdf

上传人:H****o 文档编号:31942146 上传时间:2022-08-08 格式:PDF 页数:22 大小:73.52KB
返回 下载 相关 举报
2022年面向对象程序设计C山师第六章习题答案 .pdf_第1页
第1页 / 共22页
2022年面向对象程序设计C山师第六章习题答案 .pdf_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《2022年面向对象程序设计C山师第六章习题答案 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象程序设计C山师第六章习题答案 .pdf(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 / 22 第六章习题答案一、选择填空 1、A 2、C 3、D 4、 B 5、D 6 、A 7、C 8、A 9、D 10、A 11 、C 12、A 13、B 14、 C 15、C 16、D 17、 B 18、C 19、A 20、D 21、C 22、B 二、判断下列描述的正确性,对者划,错者划。 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、三、分析下列程序的输出结果。1、运行该程序输出结果如下所示。Default constructor called Constructor call

2、ed a=0,b=0 a=4,b=8 2、运行该程序输出结果如下所示。a=7,b=9 3、运行该程序输出结果如下所示。104 4、运行该程序输出结果如下所示。1035,789.504 5、运行该程序输出结果如下所示。1 0 ,1, 2,3,4,5,6,7,8 1 11,12,13,14,15, 16,17,18,19 19,18,17,16,15, 14,13,12, 11 6、运行该程序输出结果如下所示。Starting1: Default constructor called. Default constructor called. Default constructor called.E

3、ding1: Starting2: Constructor: a=5,b=6 Constructor: a=7,b=8 Constructor: a=9,b=10 Ending2: Destructor called.a=9,b=10 Destructor called.a=7,b=8 Destructor called.a=5,b=6 Destructor called.a=5,b=6 Destructor called.a=3,b=4 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 22 页2 / 22 Destructor cal

4、led.a=1,b=2 7、运行该程序输出结果如下所示。Default constructor called. Defaultconstructor called. Default constructor called. Default constructor called. Destructor called. Constructor1 called. Destructor called. Constructor2 called. Destructor called. x=0,y=0 x=5,y=0 x=2,y=3 Destructor called. Destructor called.

5、Destructor called. 8、运行该程序输出结果如下所示。Constructor called.0 Constructor called.5 Destructor called.5 5 Destructor called.5 9、运行该程序输出结果如下所示。Constructor called.5 5 Destructor called.5 10、运行该程序输出结果如下所示。Default Constructor called. Constructor:real=6.8,imag=0 Constructor:real=5.6,imag=7.9 0+0I 6.8+0I 5.6+7.9

6、I Constructor:real=1.2,imag=3.4 Constructor:real=5,imag=0 Default Constructor called. 1.2+3.4I 5+0I 0+0I 11、答:该程序中用string.h 中所包含的函数有3 种,它们是strcpy( )、strcat( )和 strlen( ). 该程序中使用了函数重载。它们是下述两个构造函数重载:String( )和 String(const char * str)。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 22 页3 / 22 类中成

7、员函数Setc( )的功能是用来设置字符数组中某位置的一个指定字符。类中成员函数Getc( )的功能是用来从某个字符数组中获取指定位置的字符。类中成员函数Append( )的功能是在一个字符数组中追加一个指定的字符串,即将指定的字符串添加到已知串的后边。不行。该程序中有两处使用了new 运算符。运行该程序输出结果如下所示。empty. a string. 9 a string. i this a string. 四、改正以下程序中的错误。1、该程序中point 类的构造函数定义不正确,在main()中队数据成员的访问不正确,修改如下:#include class point int x1,x2

8、 。public: point(int x,int y)point:x=x。point:y=y 。 void disp() coutx1endl 。 coutx2endl 。 /。void main() point data(5,5) 。data.disp()。 2、在 main()函数中的p.x+=5 和 p.y+=6 两个语句是错误的,因为保护数据仅能被类的成员函数访问。五、按下列要求编写程序。1、程序内容如下所示。#include class Test public: Test() Test(int i,int j=20) 精选学习资料 - - - - - - - - - 名师归纳总结

9、- - - - - - -第 3 页,共 22 页4 / 22 t1=i。t2=j。t+=j-i 。 static int fun(Test&T) 。friend int add(Test&T) 。private: int t1,t2。static int t。int Test:fun(Test&T) t+=T.t。return t。 int add(Test&T) int n=T.t1+T.t2 。return n。 int Test:t=5 。void main() Test a1,a2(10),a3(15,25)。coutadd(a2)endl 。coutTest:fun(a2)endl

10、 。 2、程序内容如下所示。#include #include class Product char *name。 int price。 int quantity 。public: Product(char *n,int p,int q) name =new charstrlen(n)+1 。 strcpy(name,n)。price=p。quantity=q 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 22 页5 / 22 Product() if(name) delete name。 name=0。 void buy(int

11、 money) int n,r 。 n=money/price。 if(nquantity) cout 数量不够 endl 。 else quantity-=n 。 r=money%price 。 cout 产品: name 单价: price 元 顾客 。 coutmoney 元,买了 n 台,剩余 r 元endl。 void get() const cout 产品: name 单价: price 元 剩余 quantity 台endl 。 。void main() Product p1(电视机 ,2000,15)。 p1.buy(7000)。 p1.get()。 p1.buy(4500)。

12、 p1.get()。 3、程序内容如下所示。#include #include class CDate private: int m_nDay 。 int m_nMonth 。 int m_nYear。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 22 页6 / 22 public: CDate()。 CDate(int day,int month,int year) 。 void Display() 。 void AddDay() 。 void SetDate(int day,int month,int year) 。 CDate(

13、)。 private: bool IsLeapYear()。 /判断该年是否为闰年。CDate:CDate() CDate:CDate(int day,int month,int year) m_nDay=day。 m_nMonth=month 。 m_nYear=year。 void CDate:Display() char day5。 char month5 。 char year5。 _itoa(m_nDay,day,10)。 _itoa(m_nMonth,month,10) 。 _itoa(m_nYear,year,10)。 coutday/month/year31) if(m_nMo

14、nth=12) m_nYear+。 m_nMonth=1 。 m_nDay=1。 else m_nMonth+ 。 m_nDay=1。 void CDate:SetDate(int day,int month,int year) m_nDay=day。 m_nMonth=month 。 m_nYear=year。 CDate:CDate() bool CDate:IsLeapYear() bool bLeap。 if (m_nYear%4!=0) bLeap=false。 else if(m_nYear%100!=0) bLeap=true。else if(m_nYear%400!=0) bL

15、eap=false。 else bLeap=true。 return bLeap。 void main() 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 22 页8 / 22 CDate d。 d.SetDate(2001,2,28)。 cout:。 d.Display() 。 d.AddDay() 。 cout:。 d.Display() 。 4、程序内容如下所示。#include class Tc private: double unlead,lead,total。int unprice,price 。 public: Tc()u

16、nprice=17 。price=16。 void getdata() coutunlead。 coutlead。 total=unprice*unlead+price*lead 。 void disp() cout 总收入: totalendl 。 。void main() Tc A。 A.getdata()。 A.disp()。 5、程序内容如下所示。#include class CFactorial int value 。int fact。 public: 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 22 页9 / 22 CF

17、actorial(int val) 。void CalculateFactorial() 。void Display() 。CFactorial:CFactorial(int val) value=val。 fact=1。 void CFactorial:CalculateFactorial() int i=value 。 while(i1) fact*=i- 。 void CFactorial:Display() coutvalue!=factendl。 void main() CFactorial A(5) 。 A.CalculateFactorial() 。 A.Display() 。

18、6、程序内容如下所示。#include #include class rectangle private: float ledge,sedge。 public: rectangle() 。rectangle(float a,float b) ledge=a。sedge=b。float area() return ledge*sedge。void addarea(rectangle r1,rectangle r2) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 22 页10 / 22 cout 总面积: r1.ledge*r1.sedg

19、e+ r2.ledge*r2.sedgeendl 。 。void main() rectangle A(3.5,2.5),B(4.2,3.8),C 。 C.addarea(A,B)。 7、程序内容如下所示。#include #include class rectangle private: float ledge,sedge。 public: rectangle() 。rectangle(float a,float b) ledge=a。sedge=b。float area() return ledge*sedge。void showlength() cout 周长: (ledge+sedge

20、)*2endl 。 rectangle tlength(rectangle r2) rectangle temp。 temp.ledge=ledge+r2.ledge 。 temp.sedge=sedge+r2.sedge 。 return temp。 。void main() rectangle A(3.5,2.5),B(4.2,3.8) 。 coutA 。 A.showlength() 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 22 页11 / 22 coutB 。 B.showlength() 。 rectangle C

21、=A.tlength(B) 。 coutC 。 C.showlength() 。 8、程序内容如下所示。#include #include class Line private: double x1,x2,y1,y2 。 public: Line() 。Line(double a,double b,double c,double d) x1=a。y1=b。x2=c。y2=d。 cout 线段端点 x1,y1)-(x2,y2)0&r0&t1) cout0&r=1) cout=1 | r0&t1) coutendl 。 else coutendl 。 。void main() Line A(2,2

22、,18,18),B(1,12,19,5) 。 twoline(A,B) 。 9、本题涉及两个类student 和 cdegree,前者为学生类,包含学生的学号(no),姓名(name)和成绩 (degree),而成绩degree是类 cdegree的对象。 cdegree类有 3 个数据成员,分别为数学 (math),英语 (english)和物理 (phy)分数。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 22 页12 / 22 程序内容如下所示。#include class student int no。 char name1

23、0。 class cdegree public: int math。 int english 。 int phy。degree。public: void getdata() coutno 。 coutname。 coutdegree.math。 coutdegree.english。 coutdegree.phy。 void disp() cout 学号: noendl 。 cout 姓名: nameendl 。 cout 数学分数: degree.mathendl 。 cout 英语分数: degree.englishendl 。 cout 物理分数: degree.phyendl 。 。v

24、oid main() student stud。 stud.getdata()。 stud.disp()。 10、程序内容如下所示。#include 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 22 页13 / 22 class Student int english,computer,total 。 public: void getscore()。void display() 。void sort(Student *) 。Student()。void Student:getscore() coutenglish 。 coutco

25、mputer 。 total=english+computer 。 void Student:sort(Student *p) int tmp,i,j 。 for(j=0 。j2。j+) for(i=0 。i2。i+) if (totaltotal) tmp=total 。 total=p-total 。 p-total=tmp 。 tmp=english 。 english=p-english 。 p-english=tmp 。 tmp=computer 。 computer=p-computer 。 p-computer=tmp 。 void Student:display() cout

26、英语 =english 计算机 =computer 总分 =totalendl 。 void main() Student *A3 。 for (int j=0 。j3。j+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 22 页14 / 22 Aj=new Student 。 cout 学生 j+1getscore() 。 int i。for (j=0 。j2。j+) for(i=0 。isort(Ai+1)。coutendl 排序结果如下:endl 。for (i=0 。idisplay() 。 11、程序内容如下所示。#in

27、clude struct list / 定义栈 int data。 list *next 。class Stack /定义一个栈操作类 list *ptr 。 public: Stack()ptr=NULL 。 void push(int i) 。int pop()。void Stack:push(int x) / 入栈成员函数 list *newnode=new list 。 newnode-data=x。 newnode-next=ptr 。 ptr=newnode。 int Stack:pop() / 出栈成员函数 list *top 。 int value。 value=ptr-dat

28、a。 top=ptr。 ptr=ptr-next 。 delete top。 return value。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 22 页15 / 22 void main() Stack A。 int arr=5,2,8,1,4,3,9,7,6。 cout 入栈顺序: 。 for (int i=0 。i9。i+) coutarri 。A.push(arri) 。 coutendl 出栈顺序: 。for (i=0 。i9。i+) coutA.pop() 。coutendl 。 12、程序内容如下所示。#incl

29、ude struct list int data。 list *next 。class Queue list *ptrf,*ptrb 。 /队首和队尾指针 public: Queue() ptrf=ptrb=NULL。 void enqueue(int) 。int dequeue()。void Queue:enqueue(int x) / 入队成员函数 list *newnode=new list 。 newnode-data=x。 newnode-next=NULL 。 if (ptrb=NULL) ptrf=ptrb=newnode 。 else ptrb-next=newnode 。 p

30、trb=newnode 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 22 页16 / 22 。int Queue:dequeue() / 出队成员函数 list *tmp 。 int value。 value=ptrf-data 。 tmp=ptrf 。 ptrf=ptrf-next 。 delete tmp。 return value。 void main() Queue A。 int arr=3,12,8,9,11。 cout 入队顺序; 。 for (int i=0 。i5。i+) coutarri 。 A.enqueue

31、(arri) 。 coutendl 出队顺序: 。 for(i=0 。i5。i+) coutA.dequeue() 。 coutendl。 13、程序内容如下所示。#include #include typedef struct tree int data。 tree *left,*right,*father。*bstree 。class Btree static int n。 static int m 。public: tree *root。 Btree() root=NULL 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 22

32、 页17 / 22 void create_Btree(int) 。 void inorder(bstree) 。 /中序遍历 void display() coutendl中序遍历序列 : endl 。inorder(root) 。coutdata!=k) print(p-left,k) 。 print(p-right,k) 。 else coutk 的双亲结点的内容为:father-datadata=x。 newnode-right=newnode-left=NULL。 if(root=NULL) root=newnode 。 else bstree back。 bstree curren

33、t=root。 while(current!=NULL) back=current。 if(current-datax) current=current-left 。 else current=current-right 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 22 页18 / 22 if(back-datax) back-left=newnode 。newnode-father=back 。 else back-right=newnode 。newnode-father=back 。 int Btree:count(bst

34、ree p) if(p=NULL) return 0。 else return count(p-left)+count(p-right)+1。 /这是运用了函数嵌套即递归的方法。 void Btree:inorder(bstree temp) / 这是中序遍历二叉树,采用了递归的方法。 if(temp!=NULL) inorder(temp-left) 。 coutdataright) 。 void main() Btree A。 int array=7,4,1,5,12,8,13,11。 int k。 k=sizeof(array)/sizeof(array0) 。 cout 建立排序二叉树

35、顺序: endl 。 for(int i=0 。 ik。i+) coutarrayi 。 A.create_Btree(arrayi) 。 coutendl 。 cout 二叉树节点个数: A.count(A.root)endl。 A.display() 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 22 页19 / 22 14、程序内容如下所示。#include #include struct list int data。 list *next 。class Stack list *ptr 。 public: Stack()p

36、tr=NULL 。 void push(int i) 。int pop()。int empty() if (ptr=NULL) return 1。 else return 0。 。void Stack:push(int x) list *newnode=new list 。 newnode-data=x。 newnode-next=ptr 。 ptr=newnode。 int Stack:pop() list *top 。 int value。 value=ptr-data。 top=ptr。 ptr=ptr-next 。 delete top。 return value。 class Que

37、ue list *ptrf,*ptrb 。 public: Queue() 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 22 页20 / 22 ptrf=ptrb=NULL。 void enqueue(int) 。int dequeue()。void Queue:enqueue(int x) list *newnode=new list 。 newnode-data=x。 newnode-next=NULL 。 if (ptrb=NULL) ptrf=ptrb=newnode 。 else ptrb-next=newnode 。

38、ptrb=newnode 。 。int Queue:dequeue() list *tmp 。 int value。 value=ptrf-data 。 tmp=ptrf 。 ptrf=ptrf-next 。 delete tmp。 return value。 void main() Stack S。 Queue Q。 char ch。 cout 输入数据: 。 while(ch=getchar()!=.) S.push(ch)。 Q.enqueue(ch)。 while(!S.empty() & S.pop()=Q.dequeue()。if (S.empty() cout 输入的是回文数据。

39、endl 。else cout 输入的不是回文数据。endl 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 22 页21 / 22 15、程序内容如下所示。#include #include class magic int m44 。 int step。 int first 。 int sum。 public: void getdata()。 void setfirstmagic() 。 void generatemagic() 。 void printmagic() 。void magic:getdata() coutfirst

40、 。 coutstep。 void magic:setfirstmagic() int i,j 。 int tmp。 tmp=first 。 for(i=0 。i4。i+) for(j=0 。 j4。j+) mij=tmp 。 tmp+=step。 void magic:generatemagic() sum=m00+m33。 for (int i=0,j=0 。i4。 i+,j+) mij=sum-mij。 for (i=0,j=3 。i4。i+,j-) mij=sum-mij。 void magic:printmagic() 精选学习资料 - - - - - - - - - 名师归纳总结

41、- - - - - - -第 21 页,共 22 页22 / 22 int i,j 。 for(i=0 。i4。i+) for(j=0 。j4。j+) coutsetw(5)mij。 coutendl。 void main() magic A。 A.getdata()。 A.setfirstmagic() 。 cout 原来的魔方如下:endl 。 A.printmagic() 。 A.generatemagic()。 cout 最终的魔方如下:endl 。 A.printmagic() 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 22 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁