请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有“书”类Book及其派生出的“教材”类TeachingMaterial的定义,还有主函数main的定义。请在程序中“//********found********”下的横线处填写适当的代码,然后删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为: 教材名:C++语言程序设计 页 数:299 作 者:张三 相关课程:面向对象的程序设计 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//********found********”。#includeiostreamusing namespace std;class Book { //“书”类 char * title; //书名 int num pages; //页数 char*writer; //作者姓名public: Book(const char*the_title,int pages , const char*the_writer):num pages(pages){ title=new char[strlen(the titie)+1]; strcpy(title,the title); //********found******** strcpy(writer,the writer); } //********found******** ~Book(){__________} int numOfPages()const { return num pages;} //返回书的页数 const char*theTitle()const { return title;} //返回书名 const char * theWriter()const{return writer;} //返回作者名};class TeachingMaterial:publicBook{//“教材”类 char*course;public: TeachingMaterial(const char*the_title,int pages,const char*the writer,const char*the course)//********found******** :______________{ course=new char[strlen(the course)+1]; strcpy(course,the course); } ~TeachingMaterial(){delete[]course;) const char * theCourse ( )const{return course;} //返回相关课程的名称};int main(){ TeachingMaterial a book ("C++语言程序设计",299,"张三","面向对象的程序设计"); cout"教材名:"a book.theTitle()endl "页 数:"a book.Num of.Pages()endl "作 者:"a book.the.Writer()endl//********found********"相关课程:"_____________; coutendl; return 0 ;}
请打开考生文件夹下的解决方案文件proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有类Array的定义和主函数main的定义。请把主程序文件中的Array类的成员函数Contrary( )的定义补充完整,经补充后运行程序,得到的输出结果应该是:5 85,4,3,2,10,0,8.4,5.6,4.5,3.4,2.3,1.2注意:只允许在“//********333********”和“//********666********”之间填写内容,不允许修改其他任何地方的内容。//Array.h#includeusing namespace std;templateclass Array{//数组类public:Array(Typeb[ ],int mm){//构造函数for(int i=0;iif(ielsea[i]=0;}void Contrary( );//交换数组a中前后位置对称的元素的值int Length( )const{return m;}//返回数组长度Type operator[ ](int i)const{//下标运算符重载为成员函数if(i=m){coutreturn a[i];}private:Type a[m];};void writeToFile(const char*);//不用考虑此语句的作用//main.cpp#include"Array.h"//交换数组a中前后位置对称的元素的值templatevoid Array::Contrary( ){//补充函数体//********333********//********666********}int main( ){int s1[5]={1,2,3,4,5};double s2[6]={1.2,2.3,3.4,4.5,5.6,8.4};Arrayd1(s1,5);Arrayd2(s2,6);int i;d1.Contrary( );d2.Contrary( );coutfor(i=0;icoutcoutfor(i=0;icoutcoutwriteToFile(" ");//不用考虑此语句的作用return0;}
下面关于析构函数的叙述错误的是( )。
请打开考生文件夹下的解决方案文件proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList的重载运算符函数operator+,其功能是求当前数据表与另一个相同长度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数据表对应元素之和。请编写这个operator+函数。程序的正确输出应该是: 两个数据表: 1,2,3,4,5,6 3,4,5,6,7,8 两个数据表之和: 4,6,8,10,12,14 要求: 补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//DataList.h#includeiostreamusing namespace std;class DataList {//数据表类 int len; double*d;public:DataList(int len,double data[]=NULL); DataList(DataListdata); int length()const{returnlen;} double getElement (int i)const{return d[i];} DataList operator+(constDataListlist)const;//两个数据表求和 void show()const;//显示数据表};void writeToFile(char *, constDataList);//main.cpp#include “DataList.h”DataList::DataList(int len,double data[]):len(len){ d=new double[len]; for(int i=0;ilen;i++) d[i]=(data==NULL?0.0:data[i]);}DataList::DataList(DataListdata):len(data.fen){ d=new double[len]; for(int i=0;ilen;i++) d[i]=data.d[i];}DataList DataList::operator+(const DataListlist)const{//两个数据表求和 double *dd = new double[list.length()]; //**********333********** //**********666********** return DataList(list.length(),dd);}void DataList::show()const{//显示数据表 for(int i=0 ; ilen-1;i++) coutd[i]","; coutd[len-1]endl;}int main(){ double s1[]={1,2,3,4,5,6); double s2[]={3,4,5,6,7,8); DataList list1(6,S1),list2(6,s2);//定义两个数据表对象 cout"两个数据表:"endl; list1.show(); list2.Show(); coutendl"两个数据表之和:"endl; (list1+list2).show(); writeToFile(" ",list1+list2); return 0;}
使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数DecToBin(char*des,int n)的功能是将十进制数据n转换成二进制数据,并将转换结果存放在des中。 如:120的二进制数据为1111000 例: DecToBin(char*des,120); cout 输出为:1111000 注意:不能修改程序的其他部分,只能补充DecToBin(char*des,int n)函数。1 #include2 #define MAXLEN 10243 void DecToBin(char*des,int n)4 {56 }7 void main()8 {9 char des[MAXLEN];10 int n=120;11 DecToBin(des,n);12 cout13 return;14 }
请打开考生文件夹下的解决方案文件proj3,其中定义的Matrix是一个用于表示矩阵的类。成员函数max_value的功能是求出所有矩阵元素中的最大值。例如,若有3×3矩阵则调用max_value函数,返回值为3。请编写成员函数max_value。要求:补充编制的内容写在“//*******333*******”与“//*******666*******”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为Obj文件,并且在本程序中调用。//Matfix.h#include#includeusing namespace std;const int M=18;conSt int N=18;Class Matrix{int array[M][N];public:Matrix( ){}int getElement(int i,int j)const{return array[i][j];}VOid setElement(int i,int j,int value){array[i][j]=value;}int max value( )const;void show(const char*s)const{coutfor(int i=0;icoutfor(int j=0;jcout[j];}}};void readFromFile(const char*,Matrix);void writeToFile(char*,const Matrix);//main.cpp#include"Matrix.h"#includevoid readFromFile(const char*f,Matrixm){ifstream infile(f);if(infile.fail( )){cerrint k;for(int i=0;ifor(int j=0;jinfile>>k;m.setElement(i,j,k);}}int Matrix::max_value( )const{//*******333*******//*******666*******}int main( ){Matrix m;readFromFile(" ",m);m.show("Matrix:");coutwriteToFile(" ",m);return0;}
请打开考生文件夹下的解决方案文件proj3,其中定义了用于表示特定数制的数的模板类Number和表示一天中的时间的类TimeOfDay;程序应当显示: 01:02:03.004 06:04:06.021 但程序中有缺失部分,请按照以下的提示,把缺失部分补充完整: (1)在“//**1** ****found****”的下方是一个定义数据成员seconds的语句,seconds用来表示“秒”。 (2)在“//**2** ****found****”的下方是函数advanceSeconds中的一个语句,它使时间前进k秒。 (3)在“//**3** ****found****”的下方是函数advance中的一个语句,它确定增加k后n的当前值和进位,并返回进位。例如,若n的当前值是表示时间的55分,增加10分钟后当前值即变为5分,进位为1(即1小时)。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。填写的内容必须在一行中完成,否则评分将产生错误。//proj3.cpp#includeiostream#includeiomanipusing namespace std;templateint base //数制为base的数class Number{ int n; //存放数的当前值public:Number(int i):n(i){)//i必须小于base int advance(int k);//当前值增加k个单位 int value()const{return n;}//返回数的当前值};Class TimeOfDay{public: Number24hours ; //小时(0~23) Number60minutes;//分(0~59)//**1** *******found*******____________;//秒(0~59)Number1000milliseconds;//毫秒(0~999) TimeOfDay(int h=0,int m=0,int s=0,int milli=0) :hourS(h),minuteS(m),Seconds(S),milliseconds(milli){} void advanceMillis(int k){advanceSeconds (milliseconds.advance(k));} //前进k毫秒 void advanceSeconds(int k) //前进k秒 {//**2** *******found*******___________;}void advanceMinuteS(int k){advanceH0ur(minutes.advance(k));}//前进k分钟 void advanceH0ur (int k) {hours.advance(k);) //前进k小时 void show()const{//按“小时:分:秒.毫秒”的格式显示时间 int C=cout.fiii('0');//将填充字符设置为'0' coutsetw(2)hours.value()':' //显示小时 Setw(2)minuteS.value()':' //显示分 setw(2)Seconds.value()'.' //显示秒 setw(3)milliseconds.value(); //显示毫秒 cout.fill(c); //恢复原来的填充字符 }};templateint baseint NumberbaSe::advance(int k){ n+=k; /增加k个单位 int s=0 ; //s用来累计进位//**3** *******found*******while(n=base)_____________//n到达或超过base即进位 return s; //返回进位}int main(){ TimeOfDay time(1,2,3,4);//初始时间:1小时2分3秒4毫秒 time.show(); //显示时间 time.advanceHour (5); //前进5小时 time.advanceSeconds(122);//前进122秒(2分零2秒) time.advanceMillis(1017);//前进1017毫秒(1秒零17毫秒) coutendl; time.show(); //显示时间 coutendl: return 0;}
