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

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

本文导航
  • 第1页:选择题(1)—(10)
  • 第2页:选择题(11)—(20)
  • 第3页:选择题(21)—(30)
  • 第4页:选择题(31)—(35)
  • 第5页:填空题(1)—(13)
  • 第6页:参考答案及分析

参考答案及分析

  一、选择题

  (1)D

  解析: 假设线性表的长度为n,则在最坏情况下,冒泡排序要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。

  (2)D

  解析: 算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。

  (3)D

  解析: 线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。

  (4)A

  解析: 头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。

  (5)C

  解析: 软件工程概念的出现源自于软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念。

  (6)D

  解析: 软件测试过程中,辅助资源包括测试用例(测试数据)、测试计划、出错统计和最终分析报告等。

  (7)D

  解析: 数据流相当于一条管道,并有一级数据(信息)流经它。在数据流图中,用标有名字的箭头表示数据流。数据流可以从加工流向加工,也可以从加工流向文件或从文件流向加工,并且可以从外部实体流向系统或从系统流向外部实体。

  (8)D

  解析: 分布式数据库系统具有数据分布性、逻辑整体性、位置透明性和复制透明性的特点,其数据也是分布的;但分布式数据库系统中数据经常重复存储,数据也并非必须重复存储,主要视数据的分配模式而定。若分配模式是一对多,即一个片段分配到多个场地存放,则是冗余的数据库,否则是非冗余的数据库。

  (9)A

  解析: 关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为表中的一个属性,对应表中的一个字段;在二维表中凡能惟一标识元组的最小属性集称为该表的键或码。

  (10)C

  解析: 关系模型较之格式化模型(网状模型和层次模型)有以下方面的优点,即数据结构比较简单、具有很高的数据独立性、可以直接处理多对多的联系,以及有坚实的理论基础。

  (11)A

  解析: C++语言标识符只能由数字,字母和下划线组成,并且只能以字母和下划线为开头。

  (12)D

  解析: C语言是一种面向过程的程序设计语言,而C++语言是一种面向对象的设计语言,C++语言是C语言的超集,它包含了C语言的所有语言特性,并进行了扩充。

  (13)A

  解析: 该字符串中包含的字符是′\t′(跳格符)、′\"′(双引号)、′\065′(ASCII值为八进制065,也即十进制为51的字符)、′\xff′(ASCII值为十六进制ff,也即十进制为255的字符)、′\n′(换行符)。

  (14)C

  解析: 在C++语言中,实数有两种形式表示,即十进制数形式和指数形式,在指数形式中,e3,2.1e3.5,.e3,e等都是不合法的指数形式。再如123e3或123E3都代表123乘以10的3次方。注意,字母e的前面必须有数字,且e的后面必须是整数。

  (15)B

  解析: do-while 语句的一般格式为do 循环体语句 while(表达式);,先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行x=x-2,即为1。判断表达式的值,!(--x)为真,x=0,继续循环。再次执行循环体语句后,x=-2,此时表达式的值为0,结束循环。

  (16)D

  解析: 选项A)for循环可以用于循环次数不确定的情况;选项B)for循环是先判断表达式,后执行循环体语句;选项C)在for循环中,可以用break语句跳出循环体,从而接着执行循环体后面的语句。

  (17)B

  解析: p表示的是变量a的地址,定义后*p表示的是变量a的值。

  (18)D

  解析: x数组共有10个元素,在花括弧内只提供3个初值,这表示只给前面的3个成员赋值,后7个元素的值为0,所以,一共有20个字节。

  (19)B

  解析: 本题考查函数中变量的作用范围,在主函数中给变量x,y,z赋值,然后将其作为实参传递给了函数fun(),虽然在函数fun()中改变了这3个变量的值,但只是同名的局部变量,不影响函数中变量的值,所以在调用函数fun()结束后,主函数3个变量的值未改变。

  (20)D

  解析: 在C++语言中,所有的函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,但可以互相调用。但是不能调用main()函数。

  (21)A

  解析: const int *p;是只能改变指针地址,int * const p;是只能改变*p的内容,const int *const p;是指针的地址和*p的内容都不能改变,int *p;是两者都能改变。

  (22)A

  解析: 在C++中定义数组时,数组的范围参数在静态定义时必须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值得参数。故选项A)是错误的定义方法。

  (23)C

  解析: 类A,类B,中都有showa()函数,类C继承后再次重写showa()函数就解决了继承的二义性,这时c.showa()函数显示的就是类C中的showa()的值。

  (24)C

  解析: 基类和其继承类同时出现同名函数,则在继承类中实现对象中调用该函数是使用继承类中的定义,这种情况下是不会产生二义性的。

  (25)A

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

  (26)C

  解析: 对于template

  T add(T x,T y){return x+y;}

  调用时可以省略模板实参的声明,但是要求x和y的数据类型必须是一样的。

  (27)A

  解析: C++语言中setfill的意思是在空格的地方填上setfill函数中的参数字符,setw的意思是设置整个输出字符串的字符个数,本题中用*来代替空格。

  (28)B

  解析: this指针是C++语言实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来,每一个对象都拥有自己的函数成员。

  (29)D

  解析: 语句r=func(func(x,y),z);中,fun(x,y)是一次调用函数,它的值作为func另一次调用的实参。注意本题调用两次函数。

  (30)A

  解析: 在Myclass类中定义了两个同名函数show,其中一个是常成员函数。在main函数中定义了两个对象my1,my2,其中对象my2是常对象。这两个对象调用成员函数show时,通过对象my1调用的是没有用const修饰的一般成员函数,而通过对象my2调用的是const修饰的常成员函数。

  (31)D

  解析: 带有纯虚函数的类称为抽象类,抽象类中的纯虚函数没有具体的定义,所以不能说明抽象类的对象。

  (32)A

  解析: C++的I/O系统是通过一种称为流的机制来实现文件和控制台的I/O操作。简单地说,在C++中,输入输出操作是通过流来完成的。而文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。每个文件流都应当与一个打开的文件相联系;关闭一个文件就是取消这种联系。

  (33)B

  解析: 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚!

  大家可以考虑一下利用下面这函数可不可以实现a和b的互换。

  swap(int x,int y)

  { int t;

  t=x;

  x=y;

  y=t;

  }

  如果在main函数中用swap(a,b),会有甚么结果呢?在函数调用开始时,a的值传送给x,b的值传递给y 。执行完swap()函数后,x和y的值是互换了,但main()函数中的a和b并未互换。也就是说由于"单向传递"的"值传递"方式,形参值的改变无法传递给实参。

  为了使在函数中改变了的变量值能被main()函数所用,不能采取上述办法,而应该用指针变量做函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变了的值的目的。

  swap(int *p1,int *p2)

  { int p;

  p=*p1;

  *p1=*p2;

  *p2=p;

  }

  注意交换*p1和*p2的值是如何实现的,如果写成下面这样就有问题了!

  swap(int *p1,int *p2)

  { int *p;

  *p=*p1; /*此语句有问题*/

  *p1=*p2;

  *p2=*p;

  }

  *p1就是a,是整型变量。而*p是指针变量p所指向的变量,但p中并无确切地址,用*p可能会造成破坏系统的正常工作状态。应该将*p1的值赋给一个整型变量,用整型变量作为过渡变量实现*p1和*p2的交换。

  (34)C

  解析: for语句中的表达式可以部分或全部省略,但两个";"不能省略,若三个表达式均省略,会因为缺少条件判断,导致循环无限执行,而形成死循环。本题中当i的值为5的时候,循环终止。

  (35)D

  解析: 字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母A~Z是从65~90,小写字母a~z是从97~122。所以只要变量c大于等于a并且等于小于z就能保证其为小写字母。

  二、填空题

  (1)时间复杂度和空间复杂度

  (2)SQR(x^2+y^2)/(a+b)

  (3)软件工程学

  (4)数据模型

  解析: 数据模型是对客观事物及联系的数据描述,它反映了实体内部及实体与实体之间的联系。因此,数据模型是数据库设计的核心。

  (5)关系

  解析: 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。

  (6)编译

  解析: C++语言程序开发的基本步骤是编辑、编译、链接、运行和调试。

  (7)1

  解析: 计算表达式!a  (8)1000~10

  解析: 对于define宏定义语句,系统会在编译前进行替换。本题替换过程如下:

  i1=1000/s(N)

  i1=1000/s(10)

  i1=1000/10*10

  i1=1000

  i2=1000/f(N)

  i2=1000/f(10)

  i2=1000/(10*10)

  i2=10

  (9)友元函数

  解析: C++语言中友元类中的函数都是另一个类的友元函数。

  (10)静态联编`静态绑定~动态联编`动态绑定

  解析: C++语言编译时多态性的机制是静态绑定,实现C++语言运行时多态性的机制是动态绑定。

  (11)++x

  解析: C++语言中用成员函数重载++x为x. operator++()用友元函数重载++x为:operator++(x)

  (12)16

  解析: 解答本题的关键是要分析清楚表达式a+=(a=8)中,a的值已经被赋为8,而不是0。

  (13)ifstream fin("C:\test.dat" ,ios_binary);`ifstream

  解析: C++中打开文件有两种方式① ifstream fin("test.dat");② ifstream fin;fin.open("test.dat");,ios_binary的意义是以二进制文件打开。

上一页456下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答