当前位置:首页 > 全部子站 > IT > 等级考试

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

来源:长理培训发布时间:2018-08-14 20:37:54

  一、程序改错题

  使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请补充程序中的丢失部分,使得程序运行。可以在修改处增加或者删除一条语句。

  本程序完成以下功能:

  (1)获得输入的两个数字d1,d2(d1=6,d2=1)。

  (2)输出两个中较大的一个(输出6)。

  (3)计算d1/d2,如果d2等于0,返回-l(输出结果6)。

  (4)输出d1+d2的结果(输出结果7)。

  (5)输出d1+1的结果(输出结果7)。

  (6)输出d2-1的结果(输出结果0)。

  注意:错误的语句在/********error********/的下面。修改该语句即可。其他的语句不能修改。

  试题程序:

  #include(iostream.h>

  voidmain()

  {

  intd1;

  intd2;

  intd3;

  cout<<"pleaseinputtWOnumber:"<  cin>>d1>>d2;

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

  d3=(d1  cout<<"Maxdatais:"<  //计算d1/d2如果d2等于0,返回-l

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

  d3=(d2)?d1d2:-l;

  cout<<"d1/d2="<  /********error********/

  d3=(--dl)+(d2++);

  cout<<"d1+d2="<  cout<<"d1+1="<  cout<<"d2-1="<  return;

  }

  二、简单应用题

  使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成以下两个函数。

  (1)funl(intn)求出n的阶乘,必须使用递归调用。

  (2)fun2(intn)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。

  注意:不能修改函数的其他部分。

  试题程序:

  #include

  //必须使用递归

  intfunl(intn)

  {

  }

  //不能使用递归

  intfun2(intn)

  {

  }

  voidmain()

  {

  inti;

  cout<<"请输入一个整数:"<  cin>>i;

  cout<<"输入数字的阶乘是:"<  cout<<"输入数字的阶乘是:"<  return;

  }

 三、综合应用题

  使用VC++6.0打开源程序文件3.cpp。其中类TC用于把文件输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将in.txt文件中的内容输出到

  屏幕,并且将文件按照以上方式分割,存于文件out1.txt和out2.txt中。

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

  (1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。

  (2)把获得的输入文件的内容存储到bur中,并且用len记录下文件的长度。请在注释2后添加适当的语句。

  (3)将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。

  (4)使用文件流对象打开输入文件in.txt,请在注释4后添加适当的语句。

  注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。

  试题程序:

  #include

  #include

  #include  classTC

  {

  public:

  TC(char*fileName)

  {

  len=0;

  fstreaminfile;

  infile.open(fileName,ios::in);

  charch;

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

  while()

  {

  cout<  //********2********

  }

  infile.close();

  }

  voidsplit()

  {

  fstreamoutfilel;

  fstreamoutfile2;

  outfile1.open("out1.txt",ios::out);

  outfile2.open("out2.txt",ios::out);

  inti=0:

  for(i=0;i  {

  outfilel<  }

  do

  {

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

  }

  while(i!=len);

  outfilel.close();

  outfile2.close();

  }

  prwate:

  intlen;

  charbuf[1024];

  };

  voidmain()

  {

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

  TCobj();

  obj.split();

  return;

  }

 一、程序改错题

  (1)“d3=(d1  (2)“d3=(d2)?d1d2:-l;”应改为“d3=(d2)?d1/d2:-l;”。

  (3)“d3=(--dl)+(d2++);”应改为“d3=(d1++)+(d2--);或d3=(++d1)+(--d2);”。

  【解析】本题考查了考生对条件表达式和自增自减运算符了解的情况。d3应为d1和d2中较大者的值,所以“(d1(d2)”应改为“(d1>d2)”。若d2不为0,应返回d1/d2的值,而不是d1d2。第3处应该输d1+1d2-l,所以两者的+

  +、--应反过来。又因为d3应该是两者原值之和,所以++、--应同时为后缀式或前缀形式。

  二、简单应用题

  //必须使用递归

  jntfunl(intn)

  {

  if(n<=0)

  return0;

  if(n==1)

  return1;

  returnn*funl(n-1);

  };

  //不能使用递归

  intfun2(intn)

  {

  if(n<=0)

  retturn0;

  intres=1:

  for(inti=1;i<=n;i++)

  {

  res*=i;

  }

  returnres;

  }

  【解析】本题考查的是递归函数和阶乘算法。递归的阶乘算法可以通过判断传入参数,如果大于1,则返回n*funl(n-1),意思是返回n乘以n-1的阶乘;如果等于1,则返回1。这样递归下去就能最终得出n的阶乘。非递归算法可以先建立一个累乘变量,并初始化为1,然后循环遍历1~n,将遍历的数累乘到变量中即可。

  三、综合应用题

  (1)“while()”应改为“while(infile.get(ch))”。

  (2)应添加“bur[len++]=ch;bur[len]=ch;len++;”。

  (3)应添加“outfile2<  (4)“TCobj();”应改为“TCobi("in.txt");”。

  【解析】本题考查了文件流的使用。根据题意,第1处要获得一个字符,并判断是否到文件结尾,所以应使用get函数;第2处应将ch存入buf数组,同时让len增1;第3处将buf中的字节输出给outfile2,注意同时让i增1,否则while循环将进入死循环;第4处TC只确一个带char*参数的构造函数,所以创建对象时必须使用构造参数,根据题意这个参数应该是“"in.txt"”。

责编:曾珂

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部