c++课后习题答案_第1页
c++课后习题答案_第2页
c++课后习题答案_第3页
c++课后习题答案_第4页
c++课后习题答案_第5页
已阅读5页,还剩13页未读, 继续免费阅读

下载本文档

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

文档简介

1、C++的特点:C++语言具有如下特点:(1)C++是C语言的超集。它既保持了C语言的简洁、高效和靠近汇编语言等特点,又克服了C语言的缺陷,其编译系统能检查更多的语法错误,因此,C++比C语言更安全。(2)C++保持了与C语言的兼容。绝大多数C语言程序可以不经修改直接在C++环境中运行,用C语言编写的众多库函数可以用于C++程序中。(3)支持面向对象程序设计的特性。C++既支持面向过程的程序设计,又支持面向对象的程序设计。(4)C++程序在可重用性、可扩充性、可维护性和可靠性等方面都较C语言得到了提高,使其更适合开发大中型的系统软件和应用程序。C++对C那些发展?C重要有如下局限性之处:

1.编译器查错能力弱

2.没有支持代码重用的机制,编程效率低下

3.构造上的局限性,导致难以开发大型、复杂的程序

4.因语法过于灵活,导致安全性下降

C++克服了C的局限性,C++支持面向对象的程序设计。C++中发展了类的概念,使面向对象的设计能以实现,适于开发大型、复杂的程序一种c++程序由哪几部分构成?每一部分的作用是什么?任何的可被执行的程序都必须要有一种被执行的入口点,当然C++也不会例外,有main函数作为整个程序的入口点,并且必不可少。

再有就是在main函数中所要用到的类,这个部分的内容由#include将类的内容在链接的过程中参与到整个程序的过程中,不过这个部分的内容并不参与编译。

为了管理的清晰和系统化,类措施的实现部分将会存在此外一种或者几种独立的文献中,当然假如不嫌弃有一种长长的文献的话,也可以将类的实现措施跟类放在同一种文献当中。

总体上就分为这三个部分。请阐明编辑、编译、连接的作用编辑是应用程序开发的第一步,工作内容就是输入、修改程序。通过程序编辑而得到的程序称为源程序,约定的扩展名是cpp。

编译是应用程序开发的第二步,工作内容就是分析程序文献中的源程序,生成目的程序,扩展名是obj。

连接是应用程序开发的第三步,工作内容就是将若干目的程序加以归并、整顿,为所有的函数、变量分派详细地址,生成可执行程序,扩展名是exe。编译后得到的目的文献为何不能直接运行?编辑的过程就是产生源代码的过程,这个部分的文献能很轻易被人们理解和阅读,不过却不会被机器所读懂。

编译的过程就是将被编辑的源文献生成机器所能读懂的语言的过程。

链接就是在各个被编译的文献之间形成一种可以互通消息的同道。

被编译过的源文献在没有链接之前是彼此孤立的,即不可以互相传达信息,因此被编译过后得到的目的文献仍然不能直接运行。

构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数?构造函数用来处理对象的初始化,它的功能是有顾客定义的,顾客根据初始化的规定设计函数体和函数参数;当一种类具有某些数据组员,你需要在实例化类的时候就初始化这些组员,就需要自己定义构造函数;析构函数作用是用来完毕对象被删除前的某些清理工作,就是专门的扫尾工作;当你的类数据组员中使用了动态分派的内存,就需要定义自己的析构函数来释放这部分内存,防止内存泄露.输入一种字符串,把其中的字符按逆序输出。如输入LIGHT,输出THGIL。规定用string措施。#include<iostream>#include<string>usingnamespacestd;intmain(){stringstr;inti,n;chartemp;cout<<"pleaseinputastring:";cin>>str;n=str.size();for(i=0;i<n/2;i++) {temp=str[i];str[i]=str[n-i-1];str[n-i-1]=temp;}cout<<str<<endl;return0;}.有5个字符串,规定将它们按由小到大的次序排列,用string措施。#include<iostream>#include<string>usingnamespacestd;intmain(){inti;stringstr[5]={"BASIC","C","FORTRAN","C++","PASCAL"};voidsort(string[]);sort(str);cout<<"thesortedstrings:"<<endl;for(i=0;i<5;i++)cout<<str[i]<<"";cout<<endl;return0;}voidsort(strings[]){inti,j;stringt;for(j=0;j<5;j++)for(i=0;i<5-j;i++)if(s[i]>s[i+1]) {t=s[i];s[i]=s[i+1];s[i+1]=t;}}二章1.#include<iostream>usingnamespacestd;classTime{public://组员改为公用的inthour;intminute;intsec;};Timet;voidset_time(void)//在main函数之前定义{cin>>t.hour;cin>>t.minute;cin>>t.sec;}voidshow_time(void)//在main函数之前定义{cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}intmain(){set_time();show_time();return0;}2.#include<iostream>usingnamespacestd;classTime{public:voidset_time(void){cin>>hour;cin>>minute;cin>>sec;}voidshow_time(void){cout<<hour<<":"<<minute<<":"<<sec<<endl;}private:inthour;intminute;intsec;};Timet;intmain(){t.set_time();t.show_time();return0;}3.#include<iostream>usingnamespacestd;classTime{public:voidset_time(void);voidshow_time(void);private:inthour;intminute;intsec;};voidTime::set_time(void){cin>>hour;cin>>minute;cin>>sec;}voidTime::show_time(void){cout<<hour<<":"<<minute<<":"<<sec<<endl;}Timet;intmain(){t.set_time();t.show_time();return0;}6.#include<iostream>usingnamespacestd;classBox{public:voidget_value();voidvolume();voiddisplay();public:floatlengh;floatwidth;floatheight;floatvol;};voidBox::get_value(){cout<<"pleaseinputlengh,width,height:";cin>>lengh;cin>>width;cin>>height;

voidBox::volume(){vol=lengh*width*height;}voidBox::display(){cout<<vol<<endl;}intmain(){Boxbox1,box2,box3;box1.get_value();box1.volume();cout<<"volmueofbax1is";box1.display();box2.get_value();box2.volume();cout<<"volmueofbax2is";box2.display();box3.get_value();box3.volume();cout<<"volmueofbax3is";box3.display();return0;}三章2.分析下面的程序,写出其运行时的输出成果。#include<iostream>usingnamespacestd;classDate{public:Date(int,int,int);Date(int,int);Date(int);Date();voiddisplay();private:intmonth;intday;intyear;};Date::Date(intm,intd,inty):month(m),day(d),year(y){}Date::Date(intm,intd):month(m),day(d){year=;}Date::Date(intm):month(m){day=1;year=;}Date::Date(){month=1;day=1;year=;}voidDate::display(){cout<<month<<"/"<<day<<"/"<<year<<endl;}intmain(){Dated1(10,13,);Dated2(12,30);Dated3(10);Dated4;d1.display();d2.display();d3.display();d4.display();return0;}输出成果:10/13/12/30/10/1/1/1/3..假如将“第二题”中的程序的第5行改为用默认参数,即Date(int=1,int=1,int=);分析程序有无问题。上机编译,分析出错信息,修改程序使之能通过编译。规定保留上面一行给出的构造函数,同步能输出相似的输出成果。#include<iostream>usingnamespacestd;classDate{public:Date(int=1,int=1,int=);voiddisplay();private:intmonth;intday;intyear;};Date::Date(intm,intd,inty):month(m),day(d),year(y){}voidDate::display(){cout<<month<<"/"<<day<<"/"<<year<<endl;}intmain(){Dated1(10,13,);Dated2(12,30);Dated3(10);Dated4;d1.display();d2.display();d3.display();d4.display();return0;}四题建立一种对象数组,内放5个学生的数据(学号,成绩),用指针指向数组首元素,输出第1,3,5个学生的数据#include<iostream.h>classstudent{public:student(inta=0,intb=0);~student();student(student&m);voiddisplay(void);//显示学号和成绩voidsetnum(intn);voidsetmark(intm);private:intnum;intmark;};student::student(inta,intb){num=a;mark=b;}voidstudent::setnum(intn){num=n;}voidstudent::setmark(intm){mark=m;}voidstudent::display(void){cout<<"学号:"<<num<<endl;cout<<"成绩:"<<mark<<endl;}student::student(student&m){num=m.num;mark=m.mark;}student::~student(){}intmain(){inti,m,n;student*p;p=newstudent[5];for(i=0;i<5;i++){cout<<"请输入学号:";cin>>n;(p+i)->setnum(n);cout<<"请输入成绩:";cin>>m;(p+i)->setmark(m);}for(i=0;i<5;i++){if(i==0||i==2||i==4)(p+i)->display();}delete[]p;return0;}5题建立一种对象数组,内放5个学生的数据(学号,成绩),设置一种函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出学号#include<iostream>usingnamespacestd;classstudent{public:voidinput();intnum;intscore;};voidstudent::input(){cout<<"请输入学号:";cin>>num;cout<<endl;cout<<"请输入成绩:";cin>>score;cout<<endl;cout<<endl;}voidmain(){studenta[5];for(inti=0;i<5;i++){cout<<i+1<<":";a[i].input();}student*max(student&,student&);student*p;p=&a[0];for(i=0;i<4;i++)p=max(*p,a[i+1]);cout<<"max="<<p->num<<""<<p->score<<endl;}student*max(student&c1,student&c2){if((c1.score)>(c2.score))return&c1;elsereturn&c2;}10..将例3.13程序中的display函数不放在Time类中,而作为类外的一般函数,然后分别在Time和Date类中将display申明为友元函数。在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。#include<iostream>usingnamespacestd;classDate;classTime{public:Time(int,int,int);friendvoiddisplay(constDate&,constTime&);private:inthour;intminute;intsec;};Time::Time(inth,intm,ints){hour=h;minute=m;sec=s;}classDate{public:Date(int,int,int);friendvoiddisplay(constDate&,constTime&);private:intmonth;intday;intyear;};Date::Date(intm,intd,inty){month=m;day=d;year=y;}voiddisplay(constDate&d,constTime&t){cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}intmain(){Timet1(10,13,56);Dated1(12,25,);display(d1,t1);return0;}11..将例3.13中的Time类申明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年、月、日和时、分、秒。#include<iostream>usingnamespacestd;classTime;classDate{public:Date(int,int,int);friendTime;private:intmonth;intday;intyear;};Date::Date(intm,intd,inty):month(m),day(d),year(y){}classTime{public:Time(int,int,int);voiddisplay(constDate&);private:inthour;intminute;intsec;};Time::Time(inth,intm,ints):hour(h),minute(m),sec(s){}voidTime::display(constDate&d){cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;cout<<hour<<":"<<minute<<":"<<sec<<endl;}intmain(){Timet1(10,13,56);Dated1(12,25,);t1.display(d1);return0;}四章1.定义一种复数类complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非组员、非友元的一般函数。求两个复数之和。#include<iostream>usingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}doubleget_real();doubleget_imag();voiddisplay();private:doublereal;doubleimag;};doubleComplex::get_real(){returnreal;}doubleComplex::get_imag(){returnimag;}voidComplex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}Complexoperator+(Complex&c1,Complex&c2){returnComplex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());}intmain(){Complexc1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c3=";c3.display();return0;}有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运载符“+”,使之能用于矩阵相加。如:c=a+b#include<iostream.h>ClassMatrix//定义Matrix类{public:Matrix();//默认构造函数friendMatrixoperator+(Matrix&,Matrix&);//重载运算符“+”voidinput();//输入数据函数voiddisplay();//输出数据函数private:intmat[2][3];};Matrix::Matrix()//定义构造函数{for(inti=0;i<2;i++)for(intj=0;j<3;j++)mat[i][j]=0;}Matrixoperator+(Matrix&a,Matrix&b)//定义重载运算符“+”函数{Matrixc;for(inti=0;i<2;i++)for(intj=0;j<3;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}returnc;}voidMatrix::input()//定义输入数据函数{cout<<"inputvalueofmatrix:"<<endl;for(inti=0;i<2;i++)for(intj=0;j<3;j++)cin>>mat[i][j];}voidMatrix::display()//定义输出数据函数{for(inti=0;i<2;i++){for(intj=0;j<3;j++){cout<<mat[i][j]<<"";}cout<<endl;}}intmain(){Matrixa,b,c;a.input();b.input();cout<<endl<<"Matrixa:"<<endl;a.display();cout<<endl<<"Matrixb:"<<endl;b.display();c=a+b;//用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrixc=Matrixa+Matrixb:"<<endl;c.display();return0;}九题分别申明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类(教师兼干部)。规定:

在两个基类中都包括姓名,年龄,性别,地址,电话等数据组员。

在Teacher类中还包括数据组员title(职称),在Cadre类中还包括数据组员post(职务)。在Teacher_Cadre类中还包括数据组员wages(工资)。

对两个基类中的姓名,年龄,性别,住址,电话等数据组员使用相似的名字,在引用这些数据组员时,指定作用域。

在类体中申明组员函数。在类定义外定义组员函数。

在派生类Teacher_Cadre的组员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话、然后再用cout语句输出职务与工资#include<string>#include<iostream>usingnamespacestd;classTeacher{public:Teacher(stringnam,inta,chars,stringtit,stringad,stringt);voiddisplay();protected:stringname;intage;charsex;stringtitle;stringaddr;stringtel;};Teacher::Teacher(stringnam,inta,chars,stringtit,stringad,stringt):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){}voidTeacher::display(){cout<<"name:"<<name<<endl;cout<<"age"<<age<<endl;cout<<"sex:"<<sex<<endl;cout<<"title:"<<title<<endl;cout<<"address:"<<addr<<endl;cout<<"tel:"<<tel<

温馨提示

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

最新文档

评论

0/150

提交评论