国家二级C++机试(操作题)模拟试卷333
(总分:10.00,做题时间:90分钟)
一、 基本操作题(总题数:1,分数:2.00)
1.请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程projl。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: value=63 number=1 注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>using namespace std;class MyClasS{ int*P; const int N;public://ERROR**********found********** MyClass(int val):N=1 { P=new int; *P=val; }//ERROR**********found********** 一MyClass(){delete*P;) friend void print(MyClass&obj);};//ERROR********** found**********void MyClass::print(MyClass&obj){ cout<<”value=”<<* (obj.P) <<end1; cout<<”number=” <<obj.N<<end1;}int main(){ MyClass obj(63); print(obj); return 0;}
(分数:2.00)
__________________________________________________________________________________________
正确答案:(正确答案:(1)MyClass(int Val):N(1) (2)~MyClass(){delete[]p;} (3)void print(MyClass&obj))
解析:解析:(1)主要考查考生对构造函数的掌握,在这里不能使用赋值语句。 (2)主要考查考生对析构函数的掌握,析构函数的delete语句要使用标识符“[]”,即delete[]p;。 (3)主要考查考生对友元函数的掌握,友元函数并不属于类,因此定义时前面不用加类名和作用域符号。
二、 简单应用题(总题数:2,分数:4.00)
2.请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2。该工程中包含一个程序文件main.cpp,其中有“书”类Book及其派生出的“教材”类TeachingMaterial的定义,还有主函数main的定义。请在程序中“//********found*******”下的横线处填写适当的代码,然后删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为: 教材名:C++语言程序设计 页 数:299 作 者:张三 相关课程:面向对象的程序设计 注意:只能在横线处填写
适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<iostream>using 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 title)+1]; strcpy(title,the_title); //**********found********** strcpy(writer,the_writer); } //**********found********** 一Book(){________} int numOfPages()const{return num—paqes;) //返回书的页数 const char*theTitle()const{re-turn title;) //返回书名 const char*theWriter()const{re-turn writer;} //返回作者名},class TeachingMaterial:public Book{//“教材”类 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{re-turn course;) //返回相关课程的名称};int main(){TeachingMaterial a book(”C++语言程序设计”,299,“张三”,”面向对象的程序设计”); cout<<"教材名:"<<a book.theTitle()<<end1 <<”页数:”<<a—book.numOfPages()<<endl <<”作 者:”<<a book.theWriter()<<end
1 //*********found*********<<”相关课程:”<<_________; cout<<end1; return 0;}
(分数:2.00)
__________________________________________________________________________________________
正确答案:(正确答案:(1)writer=new char[strlen(the_writer)+1]; (2)delete[]title,writer; (3)Book(the_title,pages,the_writer) (4)a_book.theCourse()<<endl)
解析:解析:(1)主要考查考生对动态分配空间的掌握,在填空前可以参考title的初始化,即先分配空间,再使用strcpy函数复制字符串,因此这里使用writer=new char[stflen(the_writer)+1]语句给writer分配空间,注意分配空间的大小应为字符串长度加1。 (2)主要考查考生对析构函数的掌握,要填写的内容是析构函数的函数体,因为有两个动态数组title和writer,所以要释放两个动态数组空间,使用语句~Book(){delete[]title,writer;}来完成。 (3)主要考查考生对派生类的构造函数的掌握,派生类必须使用成员初始化列表法来先给基类进行初始化。 (4)主要考查成员函数调用,题目要求输出“相关课程:面向对象的程序设计”。可以知道这里要显示的是course,但course是私有成员不能直接调用,要使用成员函数调用,即theCourse()。
3.请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中含有一个源程序文件proj2.cpp,请将堆栈类的定义补充完整。使程序的输出结果为: The element of stack are:4 3 2 1 注意:请勿修改主函数main和其他函数中的任何内容,只在横线处编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<iostream>us ing namespace std;const int Size=5;class Stack;class Itern{public://**********found**********Item(const int&val):_____________;)//构造函数 对item进行初始化private: int item; Item*next; friend class Stack; }; class Stack { public: Stack():top(NULL){} 一Stack(); int Pop(); void Push(const int&);private: Item*top; }; Stack::一Stack() { Item*P=top,*q; while(P!=NULL) { q=P一>next ;//********found******** __________; //释放P所指向的节点 p=q; }} int Stack::Pop() { Item*temp; int ret;//********found******** ___________; //使temp指向栈顶节点 ret=top一>item; top=top一>next; delete temp; return ret;}void Stack::Push(const int&val){ Item*temp=new Item(val);//********found********__________;//使新节点的next指针指向栈顶数据 top=temp;}int main(){ Stack s; for(int i=1;i<Size;i++) s.Push(i); cout<<”The element of stack are:”; for(i=1;i<Size;i++) cout<<s.Pop()<<’\t’; return 0 ;}
(分数:2.00)
__________________________________________________________________________________________
正确答案:(正确答案:(1)item(val) (2)delete[]p (3)temp=top (4)temp一>next=top)
解析:解析:(1)主要考查构造函数,对私有成员进行初始化,即item(val)。 (2)主要考查使用delete语句释放指针,一般格式为:delete[]+指针。 (3)指向栈顶节点的是top指针,要使temp指向栈顶节点,故使用语句temp=top;。 (4)指向栈顶节点的是top指针,要使新节点的next指针指向栈顶数据,故使用语句temp一>next=top;。
三、 综合应用题(总题数:2,分数:4.00)
4.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。sort成员函数的功能是将当前数据表中的元素升序排列。请编写这个sort函数。程序的正确输出应为: 排序前:7,1,3,11,6,9,12,10,8,4,5,2 排序后:1,2,3,4,5,6,7,8,9,10,11,12 要求: 补充编制的内容写在“//**********333**********”与“**********666**********”两行之间。不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序调用。//DataList.h#include<iostream>using namespace std;class DataList{//数据表类 int len; double*d;public: DataList(int len,double data[]=NULL); 一DataList(){delete[]d;) int length()const{return len;)//数据表长度(即数据元素的个数) double getElement(int i)const{re-turn d[i];} void sort();//数据表排序 void show()const;//显示数据表 }; void writeToFile (char *, const DataList&); //main.cpp #include”DataList.h’’ DataList::DataList(int len,double data[]):len(len){ d=new double[1en]; for(int i=0;i<len;i++) d[i]=(data==NULL?0.0:data [i]); } void DataList::sort(){//数据表排序 //********333******** //********666******** } void DataList::show()const{ //显示数据表 for(int i=0;i<len一1;i++)cout<<d[i]<<","; cout<<d[len一1]<<endl; } int main(){ double S[]={7,1,3,11,6,9,12,10,8,4,5,2}; DataList list(12,s); COUt<<"排序前:"; list.show(); list.sort(); cout<<endl<<"排序后:"; list.show(); writeToFile(””,list); return 0; }
(分数:2.00)
__________________________________________________________________________________________
正确答案:(正确答案:for(int 1 =0;1 <len; ++1) //从头遍历数组d for(int j =i;j <len; ++j) //从i+1处遍历数组d if(d[i] >d[j]) //d[i]和d[j]比较人,如果大于,就d[i]和d[j]值交换 { int temp=d[i]; //把临时整型变量temp赋值为d[i] d[i] =d[j]; //把d[j]赋值给d[i] d[j]=temp; //把temp值赋给d[j] })
解析:解析:本题使用最简单的冒泡排序算法,首先明确要排序的动态数组d,其长度为len,在此可以使用两个下标i和j相比较,当d[i]>d[j]时,数组内的值利用中间变量temp进行交换。
5.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intArray类的对象中,然后建立另一对象myArray,将对象内容赋值给myArray。类intArray重载了“=”运算符。程序中给出了一个测试数据文件input,不超过300个的整数。程序的输出是: 10 11 13 16 20 要求: 补充编制的内容写在“//**********333**********”与“//**********666**********”之间。实现重载赋值运算符函数,并将赋值结果在屏幕输出。格式不限。不得修改程序的其他部分。 注意:程序最后将结果输出到文件out.dat中。输出函数wri
teToFile已经编译为obj文件,并且在本程序中调用。//intArray,hclas S intArray{private: int*array; int length;public: intArray(char*filename); intArray(); intArray&operator=(cons t intArray&src); 一intArray(); void show();};void writeToFile(const char*path);//main.cpp#include<ioStream>#include<fstream>#include<cstring>#include”intArray.h”using namespace std;intArray::intArray(){ length=10; array=new int[length];}intArray::intArray(char*filename){ ifstream myFile(filename); array=new int[300]; length=0; while(myFile>>array[1ength++]) length一一; myFile.close();}intArray& intArray:: operator =(const intArray&src){if(array!=NULL)delete[]array;length=src.length;array=new int[length];//*************333***********//*************666*********** return*thiS;}intArray::一intArray(){ delete[]array;}void intArray::show(){ int step=0; for(int i=0;i<length;i=i+step) { cout<<array[i]<<endl; step++; } }void main(){ intArray*arrayP=new intArray(”input.dat”); intArray myArray; myArray=*arrayP; (*arrayP).show(); delete arrayP; writeToFile(””); }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。