无忧首页企业系统我的无忧
无忧服务:
兼职活动培训
娱乐交友:
交友社区资讯
全职实习:
实习暑假寒假
微信号:school51
扫一下,立即关注
加关注
在线支付,立省10元
下载新版APP
===大学生成长生活平台===

2012年计算机二级C++第四套笔试模拟试题及答案分析

2012-12-26来源/作者:卫凯点击次数:537

全国计算机等级考试 二级C++ 笔试模拟试题(四)

  一、选择题

  在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。

  (1)下列叙述中正确的是

  A)线性表是线性结构

  B)栈与队列是非线性结构

  C)线性链表是非线性结构

  D)二叉树是线性结构

  (2)非空的循环单链表head的尾结点(由p所指向),满足

  A)p->next==NULL

  B)p==NULL

  C)p->next=head

  D)p=head

  (3)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是

  A)堆排序

  B)直接插入排序

  C)快速排序

  D)直接选择排序

  (4)对建立良好的程序设计风格,下面描述正确的是

  A)程序应简单、清晰、可读性好

  B)符号名的命名只要符合语法

  C)充分考虑程序的执行效率

  D)程序的注释可有可无

  (5)下列不属于结构化分析的常用工具的是

  A)数据流图

  B)数据字典

  C)判定树

  D)PAD图

  (6)在软件生产过程中,需求信息的给出是

  A)程序员

  B)项目管理者

  C)软件分析设计人员

  D)软件用户

  (7)下列工具中为需求分析常用工具的是

  A)PAD

  B)PFD

  C)N-S

  D)DFD

  (8)NULL是指

  A)0

  B)空格

  C)未知的值或无任何值

  D)空字符串

  (9)数据库的故障恢复一般是由

  A)数据流图完成的

  B)数据字典完成的

  C)DBA完成的

  D)PAD图完成的

  (10)下列说法中,不属于数据模型所描述的内容的是

  A)数据结构

  B)数据操作

  C)数据查询

  D)数据约束

  编辑推荐:

  2012年计算机二级C++考点归纳汇总

  2011年全国计算机等级考试二级C++模拟试题及答案汇总

  2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总

  2011年计算机二级C++辅导实例编程汇总

  (11)面向对象程序设计思想的主要特征中不包括

  A)继承性

  B)功能分解,逐步求精

  C)封装性和信息隐藏

  D)多态性

  (12)C++语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言

  A)ASP

  B)C

  C)VB

  D)Java

  (13)设变量a是int型,f是double型,i是float型,则表达式10+′a′+ i * f值的数据类型

  A)int

  B)float

  C)double

  D)不确定

  (14)能正确表示逻辑关系:"a≥10或a≤0"的C++语言表达式是

  A)a>=10 or a<=0

  B)a>=0|a<=10

  C)a>=10 && a<=0

  D)a>=10‖a<=0

  (15)以下程序的输出结果是

  #include

  void main()

  { int i,j,x=0;

  for(i=0;i<2;i++)

  { x++;

  for(j=0;j<3;j++)

  { if(j%2)continue;

  x++;}

  x++;}

  cout << "x=" << x;}

  A)x=4

  B)x=8

  C)x=6

  D)x=12

  (16)若执行下面的程序时,从键盘上输入5和2,则输出结果是

  #include

  void main()

  { int a,b,k;

  cin >> a >> b;

  k=a;

  if(a  k=a%b;

  else

  k=b%a;

  cout << k << endl;}

  A)5

  B)3

  C)2

  D)0

  (17)有以下程序

  #include

  #include

  void main()

  { char *p="abcde\0fghjik\0 ";

  cout << strlen(p);}

  程序运行后的输出结果是

  A)12

  B)15

  C)6

  D)5

  (18)若有说明语句

  char a[]="It is mine";

  char *p="It is mine";

  则以下不正确的叙述是

  A)a+1表示的是字符t的地址

  B)p指向另外的字符串时,字符串的长度不受限制

  C)p变量中存放的地址值可以改变

  D)a中只能存放10个字符

  (19)以下程序的运行结果是

  #include

  void sub(int x,int y,int *z)

  { *z=y-x;}

  void main()

  { int a,b,c;

  sub(10,5,&a);

  sub(7,a,&b);

  sub(a,b,&c);

  cout << a <<","<< b<<"," << c << endl;}

  A)5,2,3

  B)-5,-12,-7

  C)-5,-12,-17

  D)5,-2,-7

  (20)下列程序是用来判断数组中特定元素的位置所在,则输出结果为

  #include

  #include

  int fun(int *s, int t, int *k)

  { int i;

  *k=0;

  for(i=0;i  if(s[*k]  return s[*k];}

  void main()

  { int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;

  fun(a, 10, &k);

  cout << k <<′,′ << a[k];}

  A)7,431

  B)6

  C)980

  D)6,980

  编辑推荐:

  2012年计算机二级C++考点归纳汇总

  2011年全国计算机等级考试二级C++模拟试题及答案汇总

  2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总

  2011年计算机二级C++辅导实例编程汇总

  (21)执行下列程序段,结果是

  #include

  void main()

  { int x=40;

  char y=′C′;

  int n;

  n=(x&0xff)&&(y>′B′);

  cout << n;}

  A)0

  B)1

  C)2

  D)3

  (22)关于this指针的说明不正确的是

  A)不能在程序中修改this指针

  B)this指针可以给其他指针赋值,但不能修改this指针

  C)静态成员函数中没有this指针

  D)this指针可以被赋值

  (23)下面程序的结果是

  #include

  class A

  { public:

  A(){cout << "construtA" << endl;}

  virtual ~A(){cout << "destructA" << endl;}};

  class B : public A

  { };

  class C : public A

  { };

  class D : public B,public C

  { };

  void main()

  {D d;}

  A)constructA

  destructA

  B)constructA

  constructA

  destructA

  destructA

  C)constructA

  constructA

  constructA

  destructA

  destructA

  destructA

  D)constructA

  constructA

  constructA

  constructA

  destructA

  destructA

  destructA

  destructA

  (24)关于虚函数下面说的正确的是

  A)若在重定义虚函数时使用了virtual,则该重定义函数还是虚函数

  B)虚函数不能声明为友元

  C)子类必须重定义父类的虚函数

  D)虚函数不能是static的

  (25)如果表达式++x/y中,++是作为友元函数重载的,/是作为成员函数重载的,则该表达式还可为

  A)(operator++(x)).operator/(y)

  B)(operator++(0)).operator/(y)

  C)operator/((operator++(x,0)),y)

  D)operator/((operator++(0)),y)

  (26)要想使23.78965421的输出为23.7887应用的语句是

  A)cout << 23.78965421;

  B)cout << fixed << 23.78965421;

  C)cout << 23.78965421 -0.001;

  D)cout << fixed << 23.78965421 - 0.001;

  (27)有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)

  int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;

  A)a[p-a]

  B)*(&a[i])

  C)p[i]

  D)*(*(a+i))

  (28)有以下程序

  #include

  float fun(int x,int y)

  { return(x+y); }

  void main()

  { int a=2,b=5,c=8;

  cout << fun((int)fun(a+c,b),a-c);}

  程序运行后的输出结果是

  A)编译出错

  B)9

  C)21

  D)9.0

  (29)下列程序的运行结果是

  #include

  class Location {

  private:

  int X, Y;

  public:

  void init(int=0, int=0);

  void valueX( int val ){X=val;}

  int valueX(){ return X;}

  void valueY(int val){Y=val;}

  int valueY( ){return Y;}};

  void Location::init(int initX, int initY)

  { X=initX;

  Y=initY;}

  void main( )

  { Location A,B;

  A.init( );

  A.valueX (5);

  cout <  B.init(6,2);

  B.valueY (4);

  cout<  A)5

  0

  6

  4

  B)0

  0

  6

  4

  C)5

  0

  6

  2

  D)0

  0

  6

  2

  (30)在C++语言中,封装是借助于什么达到的?

  A)结构

  B)类

  C)数组

  D)函数

  编辑推荐:

  2012年计算机二级C++考点归纳汇总

  2011年全国计算机等级考试二级C++模拟试题及答案汇总

  2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总

  2011年计算机二级C++辅导实例编程汇总

  (31)在位运算中,操作数每左移一位,其结果相当于

  A)操作数乘以2

  B)操作数除以2

  C)操作数除以4

  D)操作数乘以4

  (32)有如下程序

  #include

  #define N 2

  #define M N+1

  #define NUM 2*M+1

  void main()

  { int i;

  for(i=1;i<=NUM;i++)

  cout << i;}

  该程序中的for循环执行的次数是

  A)5

  B)6

  C)7

  D)8

  (33)下列程序的输出结果是

  #include

  int b=2;

  int func(int *a)

  { b += *a; return(b);}

  void main()

  { int a=2, res=2;

  res += func(&a);

  cout << res;}

  A)4

  B)6

  C)8

  D)10

  (34)所有在函数中定义的变量,连同形式参数,都属于

  A)全局变量

  B)局部变量

  C)静态变量

  D)寄存器变量

  (35)有如下程序:

  #include

  long fib(int n)

  { if(n>2)return(fib(n-1)+fib(n-2));

  else return (2);}

  void main()

  { cout << fib (3);}

  该程序的输出结果是

  A)2

  B)4

  C)6

  D)8

  编辑推荐:

  2012年计算机二级C++考点归纳汇总

  2011年全国计算机等级考试二级C++模拟试题及答案汇总

  2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总

  2011年计算机二级C++辅导实例编程汇总

  二、填空题

  请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。

  (1)冒泡排序算法在最好的情况下的元素交换次数为 1 。

  (2)在最坏情况下,堆排序需要比较的次数为 2 。

  (3)若串s="MathTypes",则其子串的数目是 3 。

  (4)软件开发环境是全面支持软件开发全过程的 4 集合。

  (5)关系数据库的关系演算语言是以 5 为基础的DML语言。

  (6)C++语言中关键字运算符有new,delete和 6 。

  (7)将以下程序写成三目运算表达式是 7 。

  if(a>b)max=a;

  else max=b;

  (8)以下程序的输出结果是 8 。

  #include

  void main()

  { char s[]="defghijk";s[4]=′\0′;

  cout << s << endl;}

  (9)下面程序的功能是将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变,请填空。

  #include

  #include

  void main()

  { char a[]="clanguage",t;

  int i, j, k;

  k=strlen(a);

  for(i=0; i<=k-2; i+=2)

  for(j=i+2; j<=k; 9 )

  if ( 10 )

  { t=a[i]; a[i]=a[j]; a[j]=t; }

  cout << a;

  cout << endl;}

  (10)静态成员函数可以直接访问类的 11 成员,不能直接访问类的 12 成员。

  (11)请定义一个函数名为A,返回值为int,没有参数的纯虚函数的定义是 13 。

  (12)表达式x.operator+(y.operator++(0))还可以写成 14 。

  (13)假设fin是一个文件流对象,则关闭文件的语句是 15 。

  编辑推荐:

  2012年计算机二级C++考点归纳汇总

  2011年全国计算机等级考试二级C++模拟试题及答案汇总

  2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总

  2011年计算机二级C++辅导实例编程汇总

参考答案及分析

  一、选择题

  (1)A

  解析: 线性表是一种线性结构,数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性的;栈、队列、线性链表实际上也是线性表,故也是线性结构;树是一种简单的非线性结构。

  (2)C

  解析: 循环链表就是将链表的最后一个结点指向链表头结点(或第一个结点),即p->next=head。

  (3)B

  解析: 当数据表A中每个元素距其最终位置不远,说明数据表A按关键字值基本有序,在待排序序列基本有序的情况下,采用插入排序所用时间最少,故答案为选项B)。

  (4)A

  解析: 程序设计应该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句复杂化。

  (5)A

  解析: 结构化分析的常用工具有数据流图、数据字典、判定树和判定表。而PAD图是常见的过程设计工具中的图形设计。

  (6)D

  解析: 软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。

  (7)D

  解析: 需求分析中的常用工具有PAD、PFD及N-S等,而DFD(数据流图)为结构化分析工具。

  (8)C

  解析: 此题属于记忆性的题目,NULL是指未知的值或无任何值。

  (9)C

  解析: 一旦数据库中的数据遭受破坏,需要及时进行恢复,RDBMS一般都提供此种功能,并由DBA负责执行故障恢复功能。

  (10)C

  解析: 数据模型所描述的内容有3个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构上的操作类型与操作方式。

  (11)B

  解析: 面向对象程序设计的主要特征是继承性,封装性和信息隐藏,多态性。

  (12)B

  解析: C++语言是对C语言进行了扩充,继承了它的语法,并增加了面向对象的设计方法。

  (13)C

  解析: 根据混合运算规则,如果有一个数据是double型,则其他数据类型先转化为double型,运算的结果最终也是double型。为保证精度的不丢失,表达式的数据类型是变量和常量中精确度最高的变量类型。

  (14)D

  解析: 逻辑运算符"||"表示或的意思。

  (15)B

  解析: 该题是一个for循环嵌套语句。第一层for循环循环2次,第二层循环3次,但当j等于0和1时,将执行continue语句,不执行x++运算,所以每次执行完内循环后,x的增量为1。最后一个x++运算将每次累加起来就是x的值。

  (16)C

  解析: 本题考查简单的if…else语句。先执行条件if(a  (17)D

  解析: C++语言规定了一个字符串结束标志,以字符′\0′代表,在遇到′\0′时,表示字符串结束,由它前面的字符组成字符串。

  (18)D

  解析: 本题考查字符串数组和指针的引用方式。在C++语言中,系统在每个字符串或数组的最后自动加入一个字符′\0′,作为字符的结束标志,在本题中,char a[]="It is mine";所表示的a字符串实际含有11个字符。

  (19)B

  解析: 在C++语言中,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。了解了实参指针变量的改变情况,本题只剩下简单的"加减法"了。

  (20)D

  解析: 本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应认为*k的值为数组中的某一下标值,即*k=0。

  (21)B

  解析: 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。逻辑与运算符"&&"需要两边的结果都为1时,其结果才为1。

  (22)D

  解析: C++的this指针是系统默认产生的一个指针,它是const的,所以是不能够被改变,不能够被赋值的。

  (23)B

  解析: 类D继承了类C和类B,所以在构造的时候分别构造类B和类C。

  (24)D

  解析: 虚函数一定不能定义为静态的。虚函数可以声明为友元,子类也不是必须重定义父类的虚函数,若在重定义虚函数时使用了virtual,则该重定义函数不一定还是虚函数。

  (25)A

  解析: C++中用成员函数重载++x为:x. operator++(),用友元函数重载++x为:operator++(x),用成员函数重载x/y为:x. operator/(y),用友元函数重载x/y为:operator/(x,y)。

  (26)C

  解析: C++语言中默认小数的输出位一共是6位,fixed的意义是在小数点后保留6位。

  (27)D

  解析: 选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。

  (28)B

  解析: 本题的运算过程是fun((int)fun(a+c,b),a-c),fun((int)fun(10,5),2-8),fun((int)15.000000,-6),fun(15,-6)=9。

  (29)A

  解析: 本题中有成员函数和它的重载函数,要注意它们的不同,在本题中先调用了init函数,初始化了X,Y,都为0,valueX(5);又将X变为5,所以输出5和0,然后初始化init(6,2),接着又valueY(4);将X,Y设为6和4,所以输出6和4。

  (30)B

  解析: C++基本的性质就是它的封装性,而封装性主要是靠类来实现的。

  (31)A

  解析: 左移运算符"<<"是双目运算符。其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。左移1位,相当于该数乘以2。

  (32)B

  解析: 这是一种简单的情况:不带参数的宏。关键要注意在对2*M+1进行宏替换时,要将宏名M原样替换,得到NUM的形式为2*N+1+1(千万不要随意把给N+1加上小括号,使NUM变为2*(N+1)+1,这就是宏名和变量名之间的区别)。

  (33)B

  解析: 在函数体语句中的b+=*a;的*是指针运算符(也称间接访问运算符),*a就是main函数中a的值。

  (34)B

  解析: C++语言函数中定义的变量都是属于这个函数的局部变量。

  (35)B

  解析: fib(3)=fib(2)+ fib(1),而fib(2)的返回值为2,fib(1)的返回值也为2,故输出的fib(3)的值为4。

  二、填空题

  (1)0

  解析: 根据冒泡排序算法思想可知,若待排序的初始序列为"正序"序列,则只需进行一趟排序,在排序过程中进行n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为0。

  (2)O(nlog2n)

  解析: 在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2;简单插入排序所需要的比较次数为n(n-1)/2;希尔排序所需要的比较次数为O(n15);堆排序所需要的比较次数为O(nlog2n)。

  (3)46

  解析: 串s中共有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3+4+5+6+7+8+9+1=46。

  (4)软件工具

  (5)谓词演算

  解析: 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。

  (6)sizeof

  解析: C++语言中关键字运算符有3个分别new,delete和sizeof。new 是申请内存,delete是释放内存,sizeof是求字节数。

  (7)max=(a>b)?a:b;

  解析: 条件运算符要求有三个操作对象,称三目(元)运算符,它是C++语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3。所以我们可以写成(a>b)?a:b,它是一个"条件表达式"。执行顺序是如果(a>b)条件为真,则条件表达式取值a作为整个表达式的值,否则取值b作为整个表达式的值。

  (8)defg

  解析: 本题中,给数组s中的第5个元素s[4]赋以′\0′,则s数组中只有前4个元素有效,输出结果为defg。

  (9)j+=2~a[i]>=a[j]`a[i]>a[j]

  解析: strlen函数是测试字符串长度的函数,函数的值为字符串中的实际长度,不包括′\0′在内。

  (10)静态~非静态

  解析: 静态成员函数可以直接访问该类中的静态数据成员,而不能访问该类中的非静态数据成员。

  (11)virtual int A()= 0;

  解析: C++语言中的纯虚函数是一种特殊的函数,它没有自己的定义,只有声明,纯虚函数与虚函数声明的不同就在于在函数后面加上了"=0"。

  (12)x+y++`x+(y++)

  解析: 因为y.operator++(0)是对成员y重载运算符,所以是成员重载,在参数表中又有一个参数,是重载后缀++,即是x+(y++)。

  (13)fin

  解析: 如果程序没有用close()主动关闭文件,则在文件流对象退出作用域时,被调用的析构函数会关闭对象所联系的文件。但应及时关闭,以便尽早释放占用的系统资源并将文件置于更安全的状态。

  编辑推荐:

  2012年计算机二级C++考点归纳汇总

  2011年全国计算机等级考试二级C++模拟试题及答案汇总

  2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总

  2011年计算机二级C++辅导实例编程汇总





相关阅读



关于我们 | 联系我们 | 用户指南 | 网站地图 | 意见建议 | 会员注册 | 用户协议 | 隐私政策