2012年计算机二级C++第二套笔试模拟试题及答案分析
全国计算机等级考试二级C++ 笔试模拟试题(二)
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为
A)log2n
B)n2
C)O(n1.5)
D)n(n-1)/2
(2)算法分析的目的是
A)找出数据结构的合理性
B)找出算法中输入和输出之间的关系
C)分析算法的易懂性和可靠性
D)分析算法的效率以求改进
(3)线性表L=(a1,a2,a3,…ai,…an),下列说法正确的是
A)每个元素都有一个直接前件和直接后件
B)线性表中至少要有一个元素
C)表中诸元素的排列顺序必须是由小到大或由大到小
D)除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件
(4)在单链表中,增加头结点的目的是
A)方便运算的实现
B)使单链表至少有一个结点
C)标识表结点中首结点的位置
D)说明单链表是线性表的链式存储实现
(5)软件工程的出现是由于
A)程序设计方法学的影响
B)软件产业化的需要
C)软件危机的出现
D)计算机的发展
(6)软件开发离不开系统环境资源的支持,其中必要的测试数据属于
A)硬件资源
B)通信资源
C)支持软件
D)辅助资源
(7)在数据流图(DFD)中,带有名字的箭头表示
A)模块之间的调用关系
B)程序的组成成分
C)控制程序的执行顺序
D)数据的流向
(8)分布式数据库系统不具有的特点是
A)数据分布性和逻辑整体性
B)位置透明性和复制透明性
C)分布性
D)数据冗余
(9)关系表中的每一横行称为一个
A)元组
B)字段
C)属性
D)码
(10)下列数据模型中,具有坚实理论基础的是
A)层次模型
B)网状模型
C)关系模型
D)以上3个都是
编辑推荐:
2012年计算机二级C++考点归纳汇总
2011年全国计算机等级考试二级C++模拟试题及答案汇总
2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总
2011年计算机二级C++辅导实例编程汇总
(11)下列字符串中可以用作C++语言标识符的是
A)_1234
B)foo~~bar
C)virtual
D)34var
(12)关于C++语言与C语言关系描述中错误的是
A)C++语言是C语言的超集
B)C++语言对C语言进行了扩充
C)C++语言包含C语言的全部语法特征
D)C++语言与C语言都是面向对象的程序设计语言
(13)下列语句的输出结果
cout << strlen("\t\"\065\xff\n");
A)5
B)14
C)8
D)输出项不合法,无正常输出
(14)在C++语言中,不合法的实型数据的是
A)0.123
B)123e3
C)2.1e3.5
D)123.0
(15)若有如下语句
#include void main()
{
int x=3;
do{
x=x-2;
cout << x;
}while(!(--x));
}
则上面程序段
A)输出的是1
B)输出的是1和-2
C)输出的是3和0
D)是死循环
(16)下面有关for循环的正确描述是
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体语句,后判断表达式
C)在for循环中,不能用break语句跳出循环体
D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
(17)以下程序中调用cin函数给变量a输入数值的方法是错误的,其错误原因是
#include void main()
{ int *p,*q,a,b;
p=&a;
cout << "input a:";
cin >> p;
}
A)*p表示的是指针变量p的地址
B)p表示的是变量a的地址,而不是变量a的值
C)*p表示的是指针变量p的值
D)*p只能用来说明p是一个指针变量
(18)假定int类型变量占用两个字节,其有定义int x[10]={0,2,4};,则数组x在内存中所占字节数是
A)3
B)6
C)10
D)20
(19)有以下程序
#include void fun(int a,int b,int c)
{ a=456,b=567,c=678;}
void main()
{
int x=10,y=20,z=30;
fun(x,y,z);
cout << x << ′,′ << y << ′,′ << z << endl;
}
输出结果是
A)30,20,10
B)10,20,30
C)456,567,678
D)678,567,456
(20)以下叙述正确的是
A)函数可以嵌套定义但不能嵌套调用
B)函数既可以嵌套调用也可以嵌套定义
C)函数既不可以嵌套定义也不可以嵌套调用
D)函数可以嵌套调用但不可以嵌套定义 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 (21)下列定义中p指向的地址可更改,但*p不能够更改的是
A)const int *p;
B)int * const p;
C)const int *const p;
D)int *p;
(22)下面的语句中错误的是
A)int a = 5; int x[a];
B)const int a = 5; int x[a];
C)int n = 5; int *p = new int [a];
D)const int n = 5; int *p = new int [a];
(23)下面程序的结果是
#include class A
{
int a;
public:
A():a (1){}
void showa(){cout << a;}
};
class B
{
int a;
public:
B():a (2){}
void showa(){cout << a;}
};
class C : public A, public B
{
int a;
public:
C():a (3){}
void showa(){cout << a;}
};
void main()
{
C c;
c.showa();
}
A)1
B)2
C)3
D)程序有错误
(24)关于二义性的描述错误的是
A)一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可能出现二义性
B)解决二义性可以用对成员名的限定法
C)父类和子类中同时出现同名函数,也可能存在二义性
D)一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性
(25)如果表达式x*y+z中,"*"是作为友元函数重载的,"+"是作为友元函数重载的,则该表达式还可为
A)operator+( operator*(x, y),z)
B)x.operator+( operator*(x, y),z)
C)y.operator*( operator+(x, y),z)
D)x.operator+( operator*(x, y))
(26)函数模板:template T add(T x,T y){return x+y;}
下列对add函数的调用不正确的是
A)add<>(1,2)
B)add C)add(1.0,2)
D)add(1.0,2.0)
(27)对于语句cout << setfill(′*′)<< setw(10)<< 1 << setfill(′*′)<< setw (2)<< 2;的输出结果是
A)*********1*2
B)********12
C)*******1*2
D)12********
(28)this指针是C++语言实现什么的一种机制?
A)抽象
B)封装
C)继承
D)重载
(29)有如下程序
#include int func(int a,int b)
{ return(a+b);}
void main()
{ int x=2,y=5,z=8,r;
r=func(func(x,y),z);
cout << r;
}
该程序的输出的结果是
A)12
B)13
C)14
D)15
(30)下列程序的输出结果是
#include class Myclass{
public:Myclass(int i=0,int j=0)
{ x=i;
y=j;
}
void show(){cout<<"x="< 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 (31)下列描述中,抽象类的特性是
A)可以说明虚函数
B)可以定义友元函数
C)可以进行构造函数重载
D)不能说明其对象
(32)在C++语言中,打开一个文件就是将这个文件与一个什么建立关联?
A)流
B)类
C)结构
D)对象
(33)下列程序的运行结果是
#include void fun(int *a, int *b)
{ int *k;
k=a; a=b; b=k;
}
void main()
{ int a=3, b=6, *x=&a, *y=&b;
fun(x,y);
cout << a << " " << b;
}
A)6 3
B)3 6
C)编译出错
D)0 0
(34)执行语句 for(i=1;i++<4;);,后变量 i 的值是
A)3
B)4
C)5
D)不定
(35)判断char型变量c是否为小写字母的正确表达式是
A)′a′<=c<=′z′
B)(c>=A)&&(c<=z)
C)(′a′>=c)||(′z′<=c)
D)(c>=′a′)&&(c<=′z′) 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)在算法正确的前提下,评价一个算法的两个标准是 1 。
(2)将代数式Z= 转换成程序设计中的表达式为 2 。
(3)软件危机出现于60年代末,为了解决软件危机,人们提出了 3 的原理来设计软件,这就是软件工程诞生的基础。
(4) 4 是数据库设计的核心。
(5)在关系模型中,把数据看成一个二维表,每一个二维表称为一个 5 。
(6)一个C++语言程序的开发步骤通常包括编辑、 6 、链接、运行和调试。
(7)若已知a=10,b=20,则表达式!a (8)下面程序的运行结果是 8 和 9 。
#include #define N 10
#define s(x)x*x
#define f(x)(x*x)
void main()
{ int i1,i2;
i1=1000/s(N); i2=1000/f(N);
cout << i1 << " " << i2;
}
(9)友元类的所有成员函数都是另一个类的 10 。
(10) 11 是实现C++语言编译时多态性的机制, 12 是实现C++语言运行时多态性的机制。
(11)表达式x.operator++()还可写成 13 。
(12)以下程序的输出结果是 14 。
#include void main()
{ int a=0;
a+=(a=8);
cout << a;
}
(13)若要在C盘根目录下作为二进制文件打开文件test.dat,则应该用的语句是 15 。 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 参考答案及分析
一、选择题
(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的意义是以二进制文件打开。 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总相关阅读