首页 - 网校 - 万题库 - 美好明天 - 直播 - 导航
您现在的位置: 考试吧 > 计算机等级考试 > 计算机二级考试 > C加加 > 模拟试题 > 正文

2018年9月计算机二级C++考试冲刺提分题及答案(2)

来源:考试吧 2018-09-06 15:37:13 要考试,上考试吧! 万题库
“2018年9月计算机二级C++考试冲刺提分题及答案(2)”供考生参考。更多计算机等级考试模拟试题等信息请访问考试吧计算机等级考试网。

  点击查看:2018年9月计算机二级C++考试冲刺提分题及答案汇总

  1[简答题]定义内联函数实现求三个实数中的最大值。

  参考解析:

  解:内联函数只适用于功能简单,代码短小而又被重复使用的函数。函数体中包含复杂结构控制语句,如switch、复杂if嵌套、while语句等,以及无法内联展开的递归函数,都不能定义为内联函数,即使定义,系统也将作为一般函数处理。

  #include

  inline max(int a,int b,int c){

  if(a>b&&a>c) return a;

  if(b>a&&b>c) return b;

  if(c>a&&c>b) return c;

  }

  void main(){

  cout<

  }

  2[简答题]设计一个单向链表类模板,节点数据域中数据从小到大排列,并设计插入、删除节点的成员函数。

  参考解析:

  #include

  using namespace std;

  templateclass List;

  templateclass Node{

  T info; //数据域

  Node *link; //指针域

  public:

  Node(); //生成头结点的构造函数

  Node(const T & data);//生成一般结点的构造函数

  friend class List;

  };

  template Node::Node(){link=NULL;}

  template Node::Node(const T & data){

  info=data;

  link=NULL;

  }

  //定义链表类

  templateclass List{

  Node *head; //链表头指针和尾指针

  public:

  List(); //构造函数,生成头结点(空链表)

  ~List(); //析构函数

  void MakeEmpty(); //清空一个链表,只余表头结点

  Node* Find(T data); //搜索数据域与data相同的结点,返回该结点的地址

  void PrintList(); //打印链表的数据域

  void InsertOrder(Node *p); //按升序生成链表

  Node* CreatNode(T data); //创建一个结点(孤立结点)

  Node* DeleteNode(Node* p); //删除指定结点

  };

  templateList::List(){

  head=new Node(-9999);//头结点,最小的数据从小到大插入

  }

  templateList::~List(){

  MakeEmpty();

  delete head;

  }

  templatevoid List::MakeEmpty(){

  Node *tempP;

  while(head->link!=NULL){

  tempP=head->link;

  head->link=tempP->link; //把头结点后的第一个节点从链中脱离

  delete tempP; //删除(释放)脱离下来的结点

  }

  }

  template Node* List::Find(T data){

  Node *tempP=head->link;

  while(tempP!=NULL && tempP->info!=data) tempP=tempP->link;

  return tempP; //搜索成功返回该结点地址,不成功返回NULL

  }

  templatevoid List::PrintList(){

  Node* tempP=head->link;

  while(tempP!=NULL){

  cout

  tempP=tempP->link;

  }

  cout<

  }

  templatevoid List::InsertOrder(Node *p){

  Node *tempP=head,*tempQ=head; //tempQ指向tempP前面的一个节点

  while(tempP!=NULL){

  if(p->infoinfo)break; //找第一个比插入结点大的结点,由tempP指向

  tempQ=tempP;

  tempP=tempP->link;

  }

  p->link=tempP;

  tempQ->link=p;

  }

  templateNode* List::CreatNode(T data){//建立新节点

  Node*tempP=new Node(data);

  return tempP;

  }

  templateNode* List::DeleteNode(Node* p){

  Node* tempP=head->link,*tempQ=head,*tempC;

  while(tempP!=NULL && tempP!=p){

  tempQ=tempP;

  tempP=tempP->link;

  }

  tempC=tempP;

  tempQ->link=tempP->link;

  return tempC;

  }

  int main(){

  Node * P1;

  List list1;

  int a[10]={20,12,0,-5,9,-18,6,11,5,3},i,j;

  for(i=0;i<10;i++){

  P1=list1.CreatNode(a[i]);

  list1.InsertOrder(P1);

  }

  list1.PrintList();

  cout<<"请输入一个要求删除的整数"<

  cin>>j;

  P1=list1.Find(j);

  if(P1!=NULL){

  P1=list1.DeleteNode(P1);

  delete P1;

  list1.PrintList();

  }

  else cout<<"未找到"<

  cout<<"请输入一个要求插入的整数"<

  cin>>j;

  P1=list1.CreatNode(j);

  list1.InsertOrder(P1);

  list1.PrintList();

  list1.MakeEmpty();//清空list1

  list1.PrintList();

  return 0;

  }

  3[单选题] 下列关于虚函数与函数重载区别的叙述中不正确的是(  )。

  A.函数说明形式上不同

  B.函数允许非成员函数重载,虚函数只能是成员函数

  C.函数重载的调用依据参数和类型的差别,虚函数则依据对象

  D.函数重载的本体可以在类外定义,虚函数不可以

  参考答案:D

  参考解析:A项、B项、C项均为虚函数与函数重载的不同之处。但有一点它们是相同的:在类内外定义均可。故D项错误。

  4[单选题] 设有表示学生选课的3张表,学生S(学号、姓名、性别、年龄、身份证号)、课程C(课号、课名)、选课SC(学号、课号、成绩),则表SC的关键字(键或码)为(  )。

  A.课号、成绩B.学号、成绩C.学号、课号D.学号、姓名、成绩

  参考答案:C

  参考解析:关键字是指属性或属性的组合,其功能是唯一地标识一个元组或数据,而SC中学号和课号的组合可以对元组进行唯一的标识。

  5[简答题]请使用VC6或使用【答题】菜单打开考生文件夹pr092下的工程pros2。此工程中包含一个程序文件main.cpp,其中有“部门”类Department和“职工”类Staff的定义,还有主函数main的定义。在主函数中定义了两个“职工”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:

  改换办公室前:

  职工号:0789姓名:张三部门:人事处办公室:521

  职工号:0513姓名:李四部门:人事处办公室:521

  改换办公室后:

  职工号:0789姓名:张三部门:人事处办公室:311

  职工号:0513姓名:李四部门:人事处办公室:311

  注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。

  #include

  using namespace std;

  class Department{ //“部门”类

  public:

  Department(const char*name,const char*office){

  strcpy(this一>name,nanle);

  //**********found**********

  }

  const char*getName()const{return name;}//返回部门名称

  //**********found**********

  const char*getOffice()const{________} //返回办公室房号

  void changeOfficeTo(const char*office){ //改换为指定房号的另一个办公室

  strcpy(this一>office,office);

  }

  private:

  char name[20];//部门名称

  char office[20];//部门所在办公室房号

  };

  class staff{//“职工”类

  public:

  //**********found**********

  Staff(const char*my—id,const char木my_name,Department&my_dept):——{

  strcpy(this一>staff id,my_id);

  strcpy(this一>name,my_name);

  }

  const char*getlD()const{return staff_id;}

  const char*getName()consl{return name;}

  Department getDepartment()const{return dept;} char staff=id[10];//职工号

  char name[20];//姓名

  Department&dept;//所在部门

  }; void showStaff(Staff&staff){

  cout<<”职工号:”<

  cout<<”姓名:”<

  6[单选题]执行下列语句后,输出结果为(  )。

  cout.put('s');

  cout<<'c'<<'a';

  A.ca

  B.sca

  C.s

  D.a

  参考答案:B

  7[单选题]在一棵二叉树的前序遍历、中序遍历、后序遍历所产生的序列中,所有叶结点的先后顺( )。

  A.都不相同

  B.完全相同

  C.前序和中序相同,而与后序不同

  D.中序和后序相同,而与前序不同

  参考答案:B

  参考解析:对二叉树的访问有3种方式,其中任意的两种可惟一确定一颗二叉树,但无论是前序、后序还是中序遍历二叉树时,其区别在于访问根的先后次序不同,而访问叶结点的顺序完全相同。

  8[单选题] 下列语句都是程序运行时的第一条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是(  )。

  A.cout<

  参考答案:D

  参考解析:setw(6)将输出宽度设为6,如果位数不够则在最左边补齐,因此该项输出一定不会与其他三项一致。

  9[简答题]

  请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。

  Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack为抽象类,它只定义了栈的用户接口,如下所示:

  公有成员函数 功能

  push 入栈:在栈顶位置添加一个元素

  pop 退栈:取出并返回栈顶元素

  ArrayStack是Stack的派生类,它实现了Stack定义的接口。ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员maxSize表示的是栈的最大容量,top用于记录栈顶的位置。成员函数push和pop分别实现具体的入栈和退栈操作。

  请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为:

  a,b,C

  C,b,a

  注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****料found****”。

  //proj2.cpp

  #include

  using namespacc std;

  class Stack{

  public:

  virtual void push(char C)=0;

  virtual char pop()=0;

  };

  class ArrayStack:public Stack{

  char*P;

  int maxSizc;

  int top;

  public:

  ArravStack(int s)

  {

  top=0;

  maxSize=s:

  //*********found*********

  P=______;

  }

  ~ArrayStack()

  {

  //*********found*********

  _______;

  }

  void push(char c)

  }

  if(top==maxSize){

  cerr<<”Overflow! \n”:

  return;

  }

  //*********found*********

  _______;

  top++:

  }

  char pop()

  {

  if(top==0){

  cerr<<”Underflow!、n”;

  return‘\0’;

  }

  Top--;

  //*********found*********

  ______;

  }

  };

  void f(Stack&sRef)

  {

  char ch[]={‘a’,‘b’,‘c’};

  cout<

  sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]);

  cout<

  cout<

  cout<

  }

  int main()

  {

  ArrayStack as(10);

  f(as):

  return 0:

  }

  参考解析:

  (1)Ilew char[s]

  (2)delete[]P

  (3)P[top]=e

  (4)return P[top]

  【考点分析】

  本题主要考查的是表示栈的抽象类Stack类及它的派生类ArrayStaek类、纯虚函数和成员函数。栈的节点一般使用指针表示,定义构造函数时要给指针分配空间,使用New语句来完成。~ArrayStack()是析构函数,因为前面已经使用new来分配空间了,因此在这里要用delete语句来释放指针。

  【解题思路】

  (1)主要考查的是ArrayStack类的构造函数,在函数中要为P申请S个char型空间,应使用语句P=flew char[s];。

  (2)主要考查析构函数,使用delete语句释放指针,即delete[]P;。

  (3)主要考查push函数,top表示栈顶元素下标,添加的数据放到栈顶,因此使用语句P[top]=c;。

  (4)主要考查pop函数,输出栈顶数据,top表示栈顶元素下标,因此使用语句return P[top];。

  10[单选题]有以下函数

  fun(char *a,char *b)

  {

  while((*a!=’\0’) &&(*b!=’\0’)&&(*a==*b))

  { a++; b++;}

  return (*a-*b);

  }

  该函数的功能是( )

  A.计算a和b所指字符串的长度之差

  B.将b所指字符串复制到a所指字符串中

  C.将b所指字符串连接到a所指字符串后面

  D.比较a和b所指字符串的大小

  参考答案:D

  11[单选题]下列叙述中正确的是(  )。

  A.算法的效率只与问题的规模有关,而与数据的存储结构无关

  B.算法的时间复杂度是指执行算法所需要的计算工作量

  C.数据的逻辑结构与存储结构是一一对应的

  D.算法的时间复杂度与空间复杂度一定相关

  参考答案:B

  12[判断题]C++语言比C语言对数据类型要求更加严格了。

  参考答案:对

  13[单选题]下面选项中不属于面向对象程序设计特征的是(  )。

  A.继承性 B.多态性 C.类比性 D.封装性

  参考答案:C

扫描/长按二维码帮助考试通关
2018年等考报考资讯
2018等考各科通关技巧
2018各科最新预测试卷
2018等考各科备考资料

微信搜索"考试吧"了解更多考试资讯、下载备考资料

  相关推荐:

  2018年9月全国计算机等级考试试题汇总(各科目)

  2018年全国计算机等级考试必做试题汇总(各科目)

  2018年全国计算机等级考试复习知识点汇总(各科目)

  2018全国计算机等级考试备考经验及应试技巧汇总

  历年真题汇总|考试吧策划:2018年计算机等级考试报考指南

0
收藏该文章
0
收藏该文章
文章搜索
万题库小程序
万题库小程序
·章节视频 ·章节练习
·免费真题 ·模考试题
微信扫码,立即获取!
扫码免费使用
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。
在线模拟试题
考证通关杀器
考试最新资讯
一次通关技巧