电话:0731-83595998
导航

2018年9月计算机二级C++考试上机练习题及答案(4)

来源: 2018-08-14 20:35

   一、程序改错题

  使用VC++6.0打开考生文件夹下的源程序文件1.cpp,使其输出结果为:

  n=0

  注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

  试题程序:

  #include

  //********error*******。

  classTC()

  {

  public:

  //********error********

  void~TC(){}

  TC(intn)

  {

  cout<<’n’<<’=’<  };

  //********error********

  }

  voidmain()

  {

  TCtest(0);

  return;

  }

  二、简单应用题

  使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成函数fun(char*str,charch)的定义,本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回1。

  二分法查找的思想是初始查找区间的下界为0,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。

  注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

  试题程序:

  #include(iostream.h>

  intfun(char*str,charch)

  {

  }

  voidmain()

  {

  charstr[]={’a’,’b’,’C’,’d’,’e’,’f’,’9’,’h’,’i,’

  j’,’k’);

  charch;

  cout<<"请输入一个字符:"<  cin>>ch;

  cout<<"输入字符的位置是:"<  return;

  }

  三、综合应用题

  使用VC++6.0打开考生文件夹下的源程序文件3.cpp,阅读下列程序说明和代码,功能如下:

  从屏幕输入数字,然后由大到小插入到指定的链中。当输入0时,表示输出的数据已经输入完成,把数据打印到屏幕,并释放内存。

  其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。

  (1)在父结点的Next中保存新插入的结点的指针,请在注释1后添加适当的语句。

  (2)把pNext的子结点赋给pNext本身,请在注释2后添加适当的语句。

  (3)判定P的子结点不为空,如果不为空,则打印P中的数据到屏幕,请在注释3后添加适当的语句。

  (4)用t1保存动态申请内存结点的链表头,请在注释4

  后添加适当的语句。

  注意:仅在函数指定位置添加语句,请勿改动主函数

  main与其他函数中的任何内容。

  试题程序:

  #include

  classTC

  {

  public:

  TC(intdata=O)

  {

  this->data=data;

  this->next=NULL;

  }

  intdata;

  TC*next;

  };

  voidInsert(TC*P,intdata)

  {

  TC*temp=newTC(data);

  TC*pParent=P:

  TC*pNext=p-)next:

  while(pNext)

  {

  if(data>pNext->data)

  {

  //********1********

  temp->next=pNexti

  return;

  }

  else

  {

  pParent=pNext;

  //********2********

  }

  }

  if(pNext==NULL)

  {

  pParent->next=temp;

  return;

  }

  }

  voidprintf(TC*p)

  {

  //********3********

  while()

  {

  coutdata<<"";

  P=P->next;

  }

  cout<  }

  voidDelete(TC*p)

  {

  //********4********

  TC*t1=;

  TC*t2;

  while(t1!=NULL)

  {

  t2=t1->next:

  deletetl;

  t1=t2:

  }

  }

  voidmain()

  {

  inti=0;

  TChead:

  do

  {

  intdata;

  cout<<"请输入一个数字:"<  cin>>data;

  if(data==O)break;

  Insert(&head,data);

  }while(1);

  printf(&head);

  Delete(&head):

  return;

  }

  }

 

 答案与解析

  一、程序改错题

  (1)应改为“classTC”。

  (2)应改为“~TC(){}”。

  (3)应改为“};”。

  【解析】本题第1处的“classTC()”为类的定义,根据C++中类的定义格式,类名后面是没有括号的,所以第1处应为“classTC”。第2处的“void~TC(){}”是析构函数,C++中析构函数的格式中是没有函数类型说明的,所以修改为“~TC(){}”。根据C++中类的定义,第3个标识下类结束的“}”缺少分号,即修改为“};”。

  二、简单应用题

  intlow=0;//初始查找区间的下界

  inthigh;

  intk;

  for(high=0;str[high]!=0;high++)//求字符串长度

  while(10w  {

  k=(low+high)/2;

  if(str[k]==ch)

  returnk;

  elseif(str[k]>ch)

  high=k-l:

  elselow=k+1:

  }

  if(str[low]==ch)

  returnlow;

  return-1:

  【解析】本题首先初始查找区间的下界为0,然后求得字符串长度len,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功。若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。

  三、综合应用题

  (1)应添加“pParenl->next=telnp;”。

  (2)应添加“pNext=pNext->next;”。

  (3)将“while()”补充完整为“while(P->next!=NULL)”。

  (4)将“TC*t1=;”补充完整为“TC*t1=P->next;”。

  【解析】本题第1处要求“在父结点的Next中保存新插入的结点的指针”。对于指针的操作,pParent->next为pParent的子结点,在父结点的Next中保存新插入的结点的指针,即“pParent->next=temp;”。第2处要求“把pNext的子结点赋给pNext本身”。pNext->next为pNext的子结点,把pNext的子结点赋给pNext本身,即“pNext=pNext->next;”。注释3下是判定P的子结点不为空。P的子结点是p->next。程序中的“while()”缺乏P的子结点不为空的判断条件,所以修改为“while(P->next!=NULL)”。第4处要求“用t1保存动态申请内存结点的链表头”。P为链表,P->next为链表头。程序中的语句“TC*t1=;”中t1没有被赋值,所以修改为“TC*t1=P->next;”。

 

 

编辑推荐:

下载Word文档

温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)

网络课程 新人注册送三重礼

已有 22658 名学员学习以下课程通过考试

网友评论(共0条评论)

请自觉遵守互联网相关政策法规,评论内容只代表网友观点!

最新评论

点击加载更多评论>>

精品课程

更多
10781人学习

免费试听更多

相关推荐
图书更多+
  • 电网书籍
  • 财会书籍
  • 其它工学书籍
拼团课程更多+
  • 电气拼团课程
  • 财会拼团课程
  • 其它工学拼团
热门排行

长理培训客户端 资讯,试题,视频一手掌握

去 App Store 免费下载 iOS 客户端