计算机等级 百分网手机站

第49次计算机二级C++考试试题

时间:2017-06-23 11:22:23 计算机等级 我要投稿

2017年第49次计算机二级C++考试试题

  计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。下面是小编收集的关于计算机二级C++考试试题,希望大家认真阅读!

  单选题

  1). 结构化程序设计主要强调的是( )

  A.程序的规模

  B.程序的效率

  C.程序设计语言的先进性

  D.程序易读性

  正确答案:D

  2). 下面关于C++流的叙述中,正确的是( )。

  A.cin是一个输入流对象

  B.可以用ifstream定义一个输出流对象

  C.执行语句序列char* y=″PQMN″;cout<

  D.执行语句序列char x[80];cin.getline(x,80);时,若输入Happy new year,则x中的字符串是″Happy″

  正确答案:A

  答案解析:本题考查C++流的概念和I/()的格式化。cin是istream类的对象,即输入流对象。ifstream是输入文件流,类不能定义个输出流对象。getline函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止,在读取完成后,从读取的内容中删除该终止字符,所以D选项中的语句序列后x中字符串应该是Happy new year。

  3). 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。

  A.函数调用可以作为独立的语句存在

  B.函数调用可以无返回值

  C.函数调用可以出现在表达式中

  D.函数调用可以作为、一个函数的形参

  正确答案:D

  答案解析:本题考查函数的调用方式。函数的形参和实参具有以下特点:①形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放分配的内存单元,因此,形参只有在函数内部有效,函数调用结束返回主调函数后则不能再使用该形参变量;②实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参,因此应通过预先用赋值、输入等办法使实参获得确定值;③实参和形参在数量上、类型上、顺序上应严格一致,否则会发生″类型不匹配″的错误;④函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

  4). 设int a=10,b=11,c=12;,表达式(a+b)

  A.2

  B.0

  C.-2

  D.1

  正确答案:B

  答案解析:本题考察的是运算符的优先级,应该先计算a+b的值为21,然后与c比较大小的值为0,根据"&&"的运算规则,整个表达式的值为0。

  5). 若要对Date类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。

  A.Data+( Data);

  B.Data operator+( Data);

  C.Data+operator( Data);

  D.operator+( Data.Data);

  正确答案:B

  答案解析:重载运算符的函数一般格式如下:函数类型operator运算符名称(形参列表),因此选B。

  6). 下列叙述中正确的是( )

  A.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化

  B.循环队列中的元素个数随队头指针的变化而动态变化

  C.循环队列中的元素个数随队尾指针的变化而动态变化

  D.以上说法都不对

  正确答案:A

  答案解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。

  二、简单应用题

  请编写一个函数int CalcDigital(char*str),该函数可返回字符串str中数字字符(即“0”-“9”这10个数字)的`个数,如字符串"olympic2008"中数字字符的个数为4。请用if条件判断语句与for循环语句来实现该函数。

  注意:部分源程序已存在文件中。

  请勿修改主函数main和其他函数中的任何内容,仅在函数CalcDigital的花括号中填写若干语句。

  文件kt9_2.cpp的内容如下:

  #include

  #include

  using namespace std;

  int CalcDigital(char*str);

  void main()

  {

  char *str;

  str=new char[255];

  cout<<"输入字符串:";

  cin>>str;

  int num=CalcDigital(str);

  cout<

  }

  int CalcDigital(char*str)

  {

  }

  【参考答案】

  int CalcDigital(char *str)

  {

  if(str==NULL) return 0;

  int num_of_digital=0;

  int len=strlen(str);

  for(int i=0;i

  if(str[i]<='9' && str[i]>='0') num_of_digital++;

  return num_of_digital;

  }

  【试题解析】 本题考查对于if条件判断语句与for循环语句的熟练使用程度。注意判断条件(判断是否是数字是直接比较ASCII码)的使用。

  【该题的另一个参考答案】

  #include

  #include

  using namespace std;

  int CalcDigital(char*str);

  void main()

  {

  char *str;

  str=new char[255];

  cout<<"输入字符串:";

  cin>>str;

  int num=CalcDigital(str);

  cout<

  }

  int CalcDigital(char*str)

  {

  int sum;

  sum=0;

  for (int i=0;i<255;i++)

  {

  if((str[i]>='0')&&(str[i]<='9')) sum++;

  if(str[i]==NULL)break;//这里是两个=,如仅一个会使得str被赋值为空

  }

  return sum;

  }

  三.综合应用题

  使用VC6打开考生文件夹下的工程kt9_3,此工程包含一个源程序文件kt9_3.cpp,其中定义了Circle类与Money类,Circle类可对半径为r的圆进行周长与面积的计算,而Money类用于计算一圆形游泳池的造价。游泳池四周有圆形过道,过道外围上栅栏,过道宽度为3米,根据键入的游泳池半径,每米栅栏价格及每平方米过道价格,即可计算出游泳池的造价。请按要求完成下列操作,将程序补充完整。

  (1)定义符号常量PI(值为3.14159f)与WIDTH(值为3.00f),分别用于表示圆周率与过道的固定宽度。请在注释“//**1**”之后添加适当的语句。

  (2)定义Circle类默认构造函数,把私有成员radius初始化为参数r的值。请在注释“//**2**”之后添加适当的语句;

  (3)完成Money类默认构造函数的定义,把私有成员FencePrice(每米栅栏的价格)、ConcretePrice(每平方米过道的价格)初始化为参数f,c的值。请在注释“//**3**”之后添加适当的语句。

  (4)完成Money类成员函数floatMoney::TotalMoney(floatfencelen,floatconarea)的定义,根据参数fencelen(栅栏的长度)和conarea(过道的面积),返回栅栏与过道的总造价。请在注释“//**4**”之后添加适当的语句。

  注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

  源程序文件kt9_3.cpp清单如下:

  #include

  using namespace std;

  //**1**

  class Circle

  {

  private:

  float radius;

  public:

  //**2**

  float Circumference(){return 2*PI*radius;}

  float Area(){return PI*radius*radius;}

  };

  class Money

  {

  private:

  float FencePrice;

  float ConcretePrice;

  public:

  Money(float f,float c);

  float TotalMoney(float fencelen,float conarea);

  };

  Money::Money(float f,float c)

  {

  //**3**

  }

  float Money::TotalMoney(float fencelen,float conarea)

  {

  //**4**

  }

  void main()

  {

  float radius,fence,concrete;

  cout.setf(ios::fixed);

  cout.setf(ios::showpoint);

  cout.precision(2);

  cout<<"Enter the radius of the pool:";

  cin>>radius;

  cout<<"Enter the Fence Price:";

  cin>>fence;

  cout<<"Enter the Concrete Price:";

  cin>>concrete;

  Circle Pool(radius);

  Circle PoolRim(radius+WIDTH);

  Money mon(fence,concrete);

  float totalmoney=mon.TotalMoney(PoolRim.Circumference(),(PoolRim.Area()-Pool.Area()));

  cout<<"The total money is RMB"<

  }}

  【参考答案】

  (1)const float PI = 3.14159f;

  const float WIDTH =3.00f;

  (2)Circle(float r):radius(r){};

  (3)FencePrice=f;

  ConcretePrice=c;

  (4)return FencePrice*fencelen+ConcretePrice*conarea;