文档介绍:计算机等级考试二级C++模拟题及解析12上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt17_1,,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
0149162536496481
:
#include<>
template<classT,intN=100>classVector
{ Tvec[N];
  public:
  voidset(intpos,Tval);
  Tget(intpos);
  /*****************found*****************/ }
template<classT,intN>voidVector<T,N>::set(intpos,Tval)
{ vec[pos]=val; }
/*****************found*****************/
template<classT,intN>Vector<T,N>::get(intpos)
{ returnvec[pos]; }
intmain()
{ Vector<double,10>v;
  inti=0;
  doubled=;
  for(i=0;i<10;i++)
  (i,double(i*i));
  for(i=0;i<10;i++)
  cout<<(i)<<"";
  cout<<endl;
  /*****************found*****************/ }
【参考答案】
(1)在“}”后添加分号。
(2)将template <class T, int N> Vector<T, N>::get(int pos)
     改为:template <class T, int N> T Vector<T, N>::get(int pos)
(3)将缺少返回值
     改为:加入return 0;
【试题解析】
(1)主要考查对于类定义的理解,即使使用了类模板,在类定义的结尾仍然需要使用分号,这是C++的规定;
(2)主要考查是模板类的定义,template是关键字,在<>中间是类型的定义,题目中Vector是一个类的名称,前面应该有该模板的名称,即T,这样才是完整的定义;
(3)主要考查对函数返回值的掌握,任何返回值类型不为int型的函数最后都必须使用returen语句返回对应类型的值,就算是main函数也不例外。
二、简单应用题
请编写函数fun(),其功能是计算并输出下列多项式值
Sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!
例如:从键盘输入15,则输出为s=。
注意:。
请勿改动主函数main和其他函数中的内容,仅在函数fun的花括号中填入所编写的若干语句。
:
#include<>
#include<>
doublefun(intn)
{
}
voidmain()
{ int n;
  doubles;
  cout<<"Inputn:"<<endl;
  cin>>n;
  s=fun(n);
  cout<<"s="<<s<<endl; }
【参考答案】
double fun(int n)
{ double t,sn=;
  int i,j;
  for(i=1;i<=n;i++)
  { t=;
    for(j=1;j<=i;j++)
    t*=j;
    sn+=; }
  return sn; }
【试题解析】
本题解法是通过观察所给的多项式,可以找出该多项式相应的数学规律。本题中,多项式是一个累加求和的多项式,并且每一项总是比前一项多乘一个整数,所乘整数恰好等于每一项的编号,这样利用循环语句进行阶乘、累加就可以实现功能。由于函数中出现了"/"的运算,所以最终的函数值要考虑到用double类型。
三、综合应用题
使用VC6打开考生文件夹下的工程kt17_3。,其中定义了类Letter和Number以及Grid,其中Grid类由Letter类和Number类public派生,但三个类的定义并不完整。请按要求完成下列操作,将程序补