C程序设计教程--面向对象分册(郑秋生)完整答案_第1页
C程序设计教程--面向对象分册(郑秋生)完整答案_第2页
C程序设计教程--面向对象分册(郑秋生)完整答案_第3页
C程序设计教程--面向对象分册(郑秋生)完整答案_第4页
C程序设计教程--面向对象分册(郑秋生)完整答案_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 类和对象一、 选择题1.C 2.B 3.C 4.A 5.C6.A 7.C 8 C 9A 10 C二、阅读题1x=2,y=32x=2,y=3x!=y3Cstatic:va1=0cs1.vaI=1cs2.val=2cs1.val=4cs2.vaI=4四、改错题#include <string.h>#include <iostream.h>class person public:person(int n,char* nam,char s num=n;strcpy(name,nam; sex=s;cout<<"Constructor called.

2、"<<endl; person( cout<<"Destructor called."<<endl; void display( cout<<"num: "< endl ; cout<<"name: "< endl ; cout<<"sex: "< endl << endl ; private:int num;char name10;char sex;int main( person s1(10010,&

3、quot;'Wang_li",'f' s1.display( ; person s2(10011,"Zhang_fun",'m' s2.display( ; return 0;五、编程题51#include <iostream>using namespace std;class CBoxpublic :CBox(double l=0,double w=0,double h=0;double area(;double volume (;private :double lengh;double width;doubl

4、e high;CBox:CBox(double l,double w,double hlengh=l;width=w;high=h;double CBox:area(return 2*(lengh*width+lengh*high+width*high;double CBox:volume (return lengh*width*high;void main(CBox box1(4,5,6;cout< endl ; cout< endl ; 5.2#include <iostream>using namespace std;class CPointpublic :CPo

5、int(double a=0,double b=0x=a;y=b;CPoint(CPoint & px=p.x;y=p.y;void print(cout<<"("< private :double x,y;class CLinepublic:CLine(double x1=0,double y1=0,double x2=0,double y2=0:p1(x1,y1,p2(x2,y2CLine(CPoint x,CPoint y:p1(x,p2(yCLine(CLine &linp1=lin.p1;p2=lin.p2;void DrawLi

6、ne(cout<<"Line form"p1.print(;cout<<"to"p2.print(;cout<<endl;void Linedel(cout<<"delete line"<<endl;void move(CPoint &x,CPoint &ycout<<"move line"<<endl;p1=x;p2=y;private :CPoint p1,p2;void main(CPoint point1(1

7、,5,point2(5,8,point3(20,30,point4(40,50;CLine line1(point1,point2;CLine line2(2,3,8,12;line1.DrawLine (;line2.DrawLine (;line2.move(point3,point4;line2.DrawLine (;line2=line1;line2.DrawLine (;line1.Linedel (;5.3#include <iostream>using namespace std;class CComplex public:CComplex(double, doubl

8、e;CComplex(CComplex &c; /复数类的拷贝构造函数声明double GetReal(;double GetImag(;void Print(;private:double real;double imag; CComplex:CComplex (double r=0.0, double i=0.0 real = r;imag = i;cout<<"调用两个参数的构造函数"<<endl;CComplex:CComplex (CComplex &c /复数类的拷贝构造函数定义real = c.real;imag = c

9、.imag;cout<<"调用拷贝构造函数"<<endl;double CComplex:GetReal(return real;double CComplex:GetImag(return imag;void CComplex:Print( / 显示复数值cout << "(" << real << "," << imag << "" << endl;CComplex add(CComplex &x,CComp

10、lex &y /普通函数完成两个数的加法,对象作为函数参数,return CComplex(x.GetReal( +y.GetReal( ,x.GetImag (+y.GetImag (;void main(voidCComplex a(3.0,4.0, b(5.6,7.9;CComplex c(a; /调用复数类的拷贝构造函数cout << "a = "a.Print(;cout << "b = "b.Print(;cout << "c = "c.Print(;cout<<&q

11、uot;c=a+b"<<endl;c=add(a,b; cout << "c = " c.Print (;5.4#include <iostream>#include using namespace std;class CStudent /类声明 public:CStudent(char *,float,float,float;CStudent(CStudent &s;CStudent(;void display(; friend float avg(CStudent &s;private:char *name;

12、float grad3; ;CStudent:CStudent(char *na,float a,float b,float cname=new charstrlen(na+1;strcpy(name,na;grad0=a;grad1=b;grad2=c;CStudent:CStudent(CStudent &sname=new charstrlen(+1;strcpy(name,;grad0=s.grad0;grad1=s.grad 1;grad2=s.grad 2;CStudent:CStudent(delete name;void CStudent:dis

13、play( int i; cout<<"name:"< endl ; for(i=0;i<3;i+cout<<"grad"<<i<<":"< i << endl ; float avg(CStudent &s /普通函数,需要引用私有成员,声明为学生类的友元函数return (s.grad0+s.grad1 +s.grad2/3;int main( CStudent stud1("张三",79,98,82; /定义对象stud1.

14、display(;cout <<"平均成绩:"<<avg(stud1<<endl;return 0;5.5#include <iostream>using namespace std;class CStringpublic :CString(; /缺省构造函数,初始化为空串 CString(char ch,int nRepeat;/用一个字符重复n次,初始化字符串CString(const char*psz; /用一个字符串初始化CString(CString &stringser; /拷贝构造函数CString(;

15、int GetLength( const;bool IsEmpty( const;char GetAt(int nindex const;void Setat(int nindex,char ch;void Print(;int compare(CString& string;int compare(const char* pszconst;void Vacate(;private :char *s;CString:CString(s=NULL;CString:CString(CString& stringser s=new charstrlen(stringser.s+1;i

16、f(s!=0strcpy(s,stringser.s;CString:CString(char ch,int nRepeats=new charnRepeat+1;for(int i=0;i<nRepeat;i+si=ch;snRepeat='0'CString:CString(const char*pszs=new charstrlen(psz+1;if(s!=0strcpy(s,psz;int CString:GetLength( const int i=0;while (si!='0'i+;return i;bool CString:IsEmpty(

17、 constif(s=NULLreturn 1;elsereturn 0;void CString:Vacate(s0='0'cout<<"Now have vacated string."<<endl;char CString:GetAt(int nindex constif(nindex>1&&nindex<=GetLength(+1return s nindex-1;elsereturn '0'void CString:Setat(int nindex,char chif(nindex

18、>1&&nindex<=GetLength(+1s nindex-1=ch; void CString:Print(cout< endl ; int CString:compare(CString& string if(strcmp(s,string.s>0return 1;else if(strcmp(s,string.s<0return -1;elsereturn 0;int CString:compare(const char* pszconst if(strcmp(s,psz>0return 1;else if(strcmp(

19、s,psz<0return -1;else return 0;CString:CString(/cout<<endl<<"析构:"< endl ; if(s!=NULLdeletes;void main( char a4="y"char b4;CString c1("Hellow",c2(c1;cout<<"Stringc1 is:"<<" " c1.Print(;cout<<endl;cout<<"S

20、tringc2 is:"<<" " c2.Print(;cout<<endl;CString c3('b',3;cout<<"Stringc3 is:"<<" " c3.Print(;cout<<endl;cout<<"*以下是对串的基本操作*"<<endl;int num=c1.GetLength(;char ch;cout<<"c1的长度是:"<<"

21、 "< endl ; ch=c1.GetAt(5;cout<<"获得字符串c1中第"<<5<<"个字符是:"<<ch<<endl;cout<<"下面是插入字符串c1中一个特殊字符'd'"<<endl;c1.Setat(5,'d'cout<<"插入后字符串c1变为:"<<" "c1.Print(;/cout<<endl;if(c1.

22、IsEmpty(=1cout<<"String is empty."<<endl;elsecout<<"String isn't empty."<<endl;cout<<"下面是判断字符串c1清空"<<endl;c1.Vacate(;cout<<"清空后输出字符串c1:"<<" n"c1.Print(;cout<<"字符串已被清空"<<endl;co

23、ut<<"请按任意键继续"<<endl;cin>>b;/cout<<"*以下是对串的赋值*"<<endl;CString c5=c2;cout<<"String c5=c2 is:"<<" "c5.Print(;cout<<endl;cout<<"*以下是对串的比较*"<<endl;int temp=pare(c3;cout<<"以下比较c2与c3&quo

24、t;<<endl;if(temp>0cout<<"Stringc2>Stringc3"<<endl;else if(temp<0cout<<"Stringc2 endl ; elsecout<<"Stringc9=Stringc4"<<endl;cout<<endl;cout<<"以下比较c2与任意字符串Goodboy!"<<endl;if(pare("Goodboy!">0

25、cout<<"Stringc2>'Goodboy!'"<<endl;else if(pare("Goodboy!"<0cout<<"Stringc2<'Goodboy!"<<endl;elsecout<<"Stringc2 ='Goodboy!'"<<endl;第二章 继承和派生一、 选择题1D 2.B 3. D一、 阅读程序题四、编程题4.1 #include <iostream

26、.h>#include<string.h>#define PAI 3.14class Circle public:Circle(r=0;Circle (double dr=d;double area(return(PAI*r*r;void display1(cout<<"桌子的面积:"< endl ; private:double r;class Tablepublic:Table(heig=0;Table (double h heig=h;void display2(cout<<"桌子的高度:"<&

27、lt;heig<<endl;private:double heig;class Roundtable : public Circle,public Tablepublic:Roundtable(strcpy(color,"白色"Roundtable(double a,double b,char* c:Circle(a,Table(bstrcpy(color,c;void display ( display1(;display2(;cout<<"桌子的颜色:"< endl ; private:char color20;void

28、 main(Roundtable s(2.0,3.0,"黑色"s.display(;4.2如果Age在基类中被定义为私有的,SetAge(int n不能直接给Age赋值,如果Age是基类的公有成员变量,则可以直接赋值。class Animalpublic:Animal(;int Age;class Dog:public Animalpublic:Dog(;Void SetAge(int nAge=n;4.3#include <iostream.h>class Rectanglepublic:Rectangle (double l,double wlength=l

29、,width=wdouble area(return length*width;霸州市第二届中小学试题库优秀试题征集评比活动一年级(上册)语文学科试题上报单位:王庄子乡靳家堡村学校设计人姓名:刘婧题号一二三四五六七八九十十一得分得分评卷人一、 按顺序填空(10分)a o u b p m n l g hyi ye yue 得分评卷人二、 填补下列不全的音节。(8分)( z jiàn ) (dà ù (zhú ái ( l àn 再 见 大 树 竹 排 两 岸(d qíu ) ( l s ( diàn sh ( w b

30、a打 球 绿 色 电 视 尾 巴得分评卷人三、 把下列拼读的部分补充完整。(5分)g ( ( ) guo b ( ) bal ( ) liú q ( ) qu 得分评卷人四、 看拼音写词语。(16分)sh f shn t máo jn ch zi( ( ( ( xio níu fi j zhng ch diàn ch( ( ( ( 得分评卷人五、写反义词。(12分)近 早 大黑 有 出得分评卷人六、 连线。(8分)z zh c ch子 足 真 座 纸 春 唱 草 穿得分评卷人七、照样子,填写合适的量词。(5分)一( 朵 )花 一( )小河 一( )小鸭一

31、( )雨伞 一( )红旗 两( )兔子 得分评卷人八、写出下列字的笔顺。(6分)左: 今: 火: 得分评卷人九、按古诗填空。(10分)( )看 ( ) 有 ( ,近 听 ( ) ( )声。春 去 ( ) ( )在,( )( )( )不 惊。得分评卷人十、按课文填空,回答问题。(7分)谁的尾巴长?谁的尾巴短?谁的尾巴好像一把伞?猴子的尾巴( ),兔子的尾巴( ),松鼠的尾巴好像( )。1. 把课文内容补充完整。2. 短文告诉了我们 种动物的尾巴的特点。3. 你喜欢谁的尾巴?为什么?得分评卷人十一、写话。(13分)小朋友,你喜欢吃水果吗?你最喜欢吃什么水果?请你说出它的颜色,外形特点,为什么喜欢吃

32、?不少于20字,不会写的字可以用拼音代替。答案一、按顺序填空(10分)a o e i u ü b p m f d t n l g k hyi wu yu ye yue yuan (每空1分二、填补下列不全的音节。(8分)( zài jiàn ) (dà shù (zhú pái ( ling àn 再 见 大 树 竹 排 两 岸(d qíu ) ( l sè ( diàn shì ( wi ba打 球 绿 色 电 视 尾 巴<<"长:"<

33、 endl每空; cout<<"三、;class Cuboid:public Rectangle( o ) guo b ( a ),double w,double h:Rectangle(L,whigh=h,volume=L*w*high ;double vol(return area(*high;void show (;private:double high;看拼音写词语。( 16 分)(每字 0.5 分) display1(;cout<<"高:"< endl ; cout<<"体积:"<<

34、;vol(<<endl;void main(Cuboid cub (10,20,30;cub.show(;4.4#include <iostream.h>class Vehiclepublic:Vehicle(:maxspeed(0,weight(0Vehicle( 出void run ( cout<<" 可以奔跑"<<endl; void stop ( cout<<" 可以停止奔跑"<<endl;private:double maxspeed;double weight;class

35、 Bicycle:virtual public Vehiclepublic:Bicycle (double m,double w,double h:Vehicle(m,w,height(h private:double height;class Motorcar : virtual public Vehiclepublic:Motorcar (double m,double w,double s:Vehicle(m,w,setnum(sprivate:double setnum;class Motorcycle:public Bicycle,public Motorcarpublic:Moto

36、rcycle(double m,double w,double h,double s:Bicycle(m,w,h,Motorcar(m,w,s, Vehicle(m,w;void main(Motorcycle s1(300,10,6,30; s1.run(;s1.stop(;如果不把Vehicle设置为虚基类近 听第3水 ) (无3.1 简答题春 去 ):(还 )在,3.1.2 运算符重载后,优先级和结合性如何?( 人 )( 来 )( 鸟 在每一种编译系统中,运算符实际上都对应一个函数,只是这种运算对用户具有透明性,使用者并不知道函数的存在。运算符重载实际上是运算符函数的重载,所以运算符的重

37、载实际上是函数的重载。编译程序对运算符重载的选择,遵循着函数重载的选择原则。当遇到不很明显的运算符时,编译程序将去寻找参数相匹配的运算符函数。3.1.4十、按课文填空,回答问题。(7(1) 不可臆造新的运算符(2) 坚持四个不能改变。),兔子的尾巴( 短 ),松鼠的尾巴好像( 一把伞 运算符的返回类型(3)C+规定,运算符中,参数类型都是内部类型时,不允许重载。 “:、3种 (3.1.5 运算符重载必须遵循哪些原则?3. (答案略(2(2)十一、写话。(13分)说出它的颜色,外形特点,为什么喜欢吃,语句通顺,不少于203.2.1 C+中多态性包括两种多态性: (1) 和 (2) 。前者是通过

38、(3) 实现的,而后者是通过 (4) 和 (5) 来实现的。答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数3.2.2 纯虚函数定义时在函数参数表后加 (1) ,它表明程序员对函数 (2) ,其本质是将指向函数体的指针定为 (3) 。答案:(1)=0(2)不定义(3)NULL3.2.3在基类中将一个成员函数说明成虚函数后,在其派生类中只要 (1) 、 (2) 和 (3) 完全一样就认为是虚函数,而不必再加关键字 (4) 。如有任何不同,则认为是 (5) 而不是虚函数。除了非成员函数不能作为虚函数外, (6) 、 (7) 和 (8) 也不能作为虚函数。答案:

39、(1)同虚函数名(2)同参数表(3)同返回类型。如基类中返回基类指针,而派生类中返回派生类指针是允许的(4)virtual(5)重载(6)静态成员函数(7)内联函数(8)构造函数第三大题答案:31答案:#include<iostream.h>#include<string.h>class CStudentchar name20;char nativeplace20;char code30;int age;float score;public :CStudent(char *, char*,char*,int ,float;CStudent(CStudent &s

40、;void display(;float operator+(CStudent s1;CStudent:CStudent(char *name, char*native,char*code,int age,float scorestrcpy(this->name,name;strcpy(this->nativeplace,native;strcpy(this->code,code;this->age=age;this->score=score;CStudent:CStudent(CStudent &sstrcpy(this->name,;

41、strcpy(this->nativeplace,s.nativeplace;strcpy(this->code,s.code;this->age=s.age;this->score=s.score;void CStudent:display(cout< nativeplace <<" "< endl ; float CStudent:operator +(CStudent s1return this->score+s1.score;void main(CStudent w("whl","z

42、hengzhou","quot;,30,90;w.display(;CStudent c("ctm","zhengzhou","quot;,30,90;c.display(;cout<<w+c<<endl;32答案:#include<iostream.h>#include<string.h>#include<math.h>class CTrianglefloat a,b,c;public:CTriangle(float

43、 a,float b,float cthis->a=a;this->b=b;this->c=c;float GetArea(float t=(a+b+c/2;return sqrt(t*(t-a*(t-b*(t-c;float operator +(CTriangle treturn this->GetArea(+t.GetArea(;void main(CTriangle tr1(3,4,5,tr2(6,8,10;cout< endl ; 33答案:#include<iostream.h>class BaseClasspublic:virtual v

44、oid f1(cout<<"BaseClass:f1("<<endl;void f2(cout<<"BaseClass:f2("<<endl;class DerivedClass: public BaseClasspublic:void f1(cout<<"DerivedClass:f1("<<endl;void f2(cout<<"DerivedClass:f2("<<endl;void main(DerivedCla

45、ss d1;BaseClass* Bptr;DerivedClass* Dptr;Bptr=&d1;Bptr->f1(;Bptr->f2(;Dptr=&d1;Dptr->f1(;Dptr->f2(;习题四一、选择题1D 2A 3B 4C 5. C 6C 7 A 二、简答题1什么叫做流?流的提取和插入是指什么?I/O流在C+中起着怎样的作用?答:流是一种抽象,它负责在数据的生产者(程序/文件)和数据的消费者(文件/程序)之间建立联系,并管理数据的流动。一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。完成数据从动态(内存)到

46、静态(外存)的转换,或着是从静态(外存)到动态(内存)的转换。2什么是字节流、字符流和二进制流?答:根据对字节内容的解释方式,字节流分为字符流(也称文本流)和二进制流。字符流将字节流的每个字节按ASC字符解释,它在数据传输时需作转换,效率较低。例如源程序文件和文本文件都是字符流。由于ASC字符是标准的,所以字符流可以直接编辑,显示或打印,字符流产生的文件通行于各类计算机。二进制流将字节流的每个字节以二进制方式解释,它在数据传输时不作任何转换,故效率高。但各类计算机对数据的二进制存放格式各有差异,且无法人工阅读,故二进制流产生的文件可移植性较差。3cerr和clog作用是什么?有何区别?答:对于

47、输入提示信息或输出结果而言, cerr和clog的用法相同,但作用不同。cerr的作用是向标准错误设备(standard error device输出有关出错信息。cerr流中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用cerr,cerr流中的信息是用户根据需要指定的。clog流对象也是标准错误流,它是console log的缩写。它的作用和cerr相同,都是在终端显示器上显示出错信息。不同的是cerr不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。4用

48、什么方法来控制输入输出流中出现的错误?答:为提高程序的可靠性,应在程序中检测I/O流的操作是否正常。当检测到流操作出现错误时,可以通过异常处理来解决问题。5比较读写文本文件与二进制文件的异同。答:从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASC码: 00110101 00110110 00110111 00111000 十进制码: 5678 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS

49、命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示, 但其内容无法读懂。C+系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符的控制。 因此也把这种文件称作“流式文件”。6随机读写是什么意思,常用于哪种类型的文件?答:在C+中可以由程序移动文件指针,从而实现文件的随机访问,即可读写流中任意一段内容。一般文本文件很难准确定位,所以随机访问多

50、用于二进制文件。7文件流和字符串流有什么区别? 答:文件在C+看来是字符流或二进制流,文件流是以外存文件为输入输出对象的数据,所以文件流是与设备相关的。可以把流的概念应用到字符串(String)上。这样字符串就可以看作字符串流。字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组为输入输出的对象。字符串流是与内存相关,所以也称内存流。可以用输入输出操作来完成字符串流的操作。三、编程题1 x= 468y= -3.42565x=468 y=-3.42565x=+468*y=-3.43*2 生成一个名称为data.txt文件,内容:This is test data 3源程序。#in

51、clude <iostream>#include <iomanip>using namespace std;int main(for(int n=8;n>0;n-cout<<setw(20-n<<"*"<<setfill('*'<<setw(2*n-1<<" "<<setfill(' '<<setw(20-n<<endl;return 0; 4源程序。#include<fstream.h>void main(void char f2256;cout<<"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论