2012年计算机二级C++第十套笔试模拟试题及答案分析
全国计算机等级考试二级C++笔试模拟试题(十)
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及
A)数据的存储结构
B)计算方法
C)数据映象
D)逻辑存储
(2)串的长度是
A)串中不同字符的个数
B)串中不同字母的个数
C)串中所含字符的个数且字符个数大于零
D)串中所含字符的个数
(3)在计算机中,算法是指
A)加工方法
B)解题方案的准确而完整的描述
C)排序方法
D)查询方法
(4)以下不属于对象的基本特点的是
A)分类性
B)多态性
C)继承性
D)封装性
(5)开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做
A)软件投机
B)软件危机
C)软件工程
D)软件产生
(6)下面不属于软件设计原则的是
A)抽象
B)模块化
C)自底向上
D)信息隐蔽
(7)开发大型软件时,产生困难的根本原因是
A)大系统的复杂性
B)人员知识不足
C)客观世界千变万化
D)时间紧、任务重
(8)下列SQL语句中,用于修改表结构的是
A)ALTER
B)CREATE
C)UPDATE
D)INSERT
(9)数据库、数据库系统和数据库管理系统之间的关系是
A)数据库包括数据库系统和数据库管理系统
B)数据库系统包括数据库和数据库管理系统
C)数据库管理系统包括数据库和数据库系统
D)3者没有明显的包含关系
(10)关系模型允许定义3类数据约束,下列不属于数据约束的是
A)实体完整性约束
B)参照完整性约束
C)域完整性约束
D)用户自定义的完整性约束
编辑推荐:
2012年计算机二级C++考点归纳汇总
2011年全国计算机等级考试二级C++模拟试题及答案汇总
2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总
2011年计算机二级C++辅导实例编程汇总
(11)C++语言中标点符号中表示一条预处理命令开始的是
A)#
B);
C)*
D){
(12)每个C++程序中都必须有且仅有一个
A)类
B)预处理命令
C)主函数
D)语句
(13)sizeof(float)是
A)一个双精度型表达式
B)一个整型表达式
C)一种函数调用
D)一个不合法的表达式
(14)设有int x=11;,则表达式(x++*2/3)的值是
A)7
B)8
C)11
D)12
(15)设有程序段
int k=10;
while(k=0)k=k-1;
则下面描述中正确的是
A)循环执行10次
B)无限循环
C)循环体语句一次也不执行
D)循环体语句执行一次
(16)对表达式for(表达式1; ;表达式3)可理解为
A)for(表达式1;0;表达式3)
B)for(表达式1;1;表达式3)
C)for(表达式1;表达式3;)
D)for(;;表达式3)
(17)以下不正确的定义语句是
A)double x[5]={2.0,4.0,6.0,8.0,10.0};
B)int y[5]={0,1,3,5,7,9};
C)char c1[]={′1′,′2′,′3′,′4′,′5′};
D)char c2[]={′\x10′,′\xa′,′\x8′};
(18)有如下说明
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是
A)*p+9
B)*(p+8)
C)*p+=9
D)p+8
(19)下列函数的运行结果是
#include int f(int a,int b)
{ int c;
if(a>b)c=1;
else if(a==b)c=0;
else c=-1;
return(c);}
void main()
{ int i=2,j=3;
int p=f(i,j);
cout << p;}
A)-1
B)1
C)2
D)编译出错,无法运行
(20)以下对C++语言函数的有关描述中,正确的是
A)在C++语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参
B)C++语言函数既可以嵌套定义又可以递归调用
C)函数必须无返回值,否则不能使用函数
D)函数必须有返回值,返回值类型不定 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 (21)关于静态数据成员的描述中正确的是
A)类的静态数据成员不是类的所有对象共享的数据
B)类的静态数据成员不能被类的成员函数调用
C)类的静态数据成员不能被类的构造函数调用
D)类的静态数据成员必须进行初始化
(22)拷贝构造函数的参数一般是
A)某对象名
B)某对象成员名
C)某对象的引用名
D)指向对象的指针名
(23)下表正确的是 在父类中的访问属性 访问修饰符 在子类中的访问属性 A) public private 不能直接访问 B) protect public public C) private public 不能直接访问 D) protect private protect (24)下面这个程序的结果是 #include class A
{
private:
int a;
public:
void seta(); int geta();};
void A::seta()
{ a = 1;}
int A::geta()
{ return a;}
class B
{ private:
int a;
public:
void seta(); int geta();};
void B::seta()
{a = 2;}
int B::geta()
{return a;}
class C : public A, public B
{ private:
int b;
public:
void display();};
void C::display()
{ int b = geta();
cout << b;}
void main()
{ C c;
c.seta();
c.display();}
A)1
B)2
C)随机输出1或2
D)程序有错
(25)下列运算符中全都可以被友元函数重载的是
A)= , + , - , \
B)[] , +, (), new
C)-> , + , * , >>
D)<< , >> , + , *
(26)对于模板定义关键字class和typename说法不正确的是
A)程序中的class并不能都替换为typename
B)class和typename都可互相替换
C)程序中的typename都能替换为class
D)程序中的部分class可以替换为typename
(27)对于下面的程序
ifstream fin(c:\test.txt);
if(fin)
cout << "ok";
else
cout << "wrong";
对于if语句中的内容可以换为
A)fin.fail();
B)fin.bad();
C)fin.good();
D)fin.eof();
(28)以下程序的输出结果是
#include long fun( int n)
{ long s;
if(n==1||n==2)s=2;
else s=n-fun(n-1);
return s;
}
void main(){ cout << fun (3); }
A)1
B)2
C)3
D)4
(29)不合法的main函数命令行参数表示形式是
A)main(int a,char *c[])
B)main(int arc,char **arv)
C)main(int argc,char *argv)
D)main(int argv,char *argc[])
(30)有如下程序
#include void main()
{ char ch[2][5]={"6937","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>′\0′;j+=2)
s=10*s+p[i][j]-′0′;
cout << s;}
该程序的输出结果是
A)69825
B)63825
C)6385
D)693825 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 (31)下面叙述不正确的是
A)基类的保护成员在派生类中仍然是保护的成员
B)基类的保护成员在公有派生类中仍然是保护的
C)基类的保护成员在私有派生类中仍然是私有的
D)对基类成员的访问必须是无二义性
(32)以下程序的输出结果是
#include void main()
{ char x=040;
cout << (x<<1);}
A)100
B)80
C)64
D)32
(33)下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,在划线处应填入的选项是
#include void main()
{ int a,b,t;
cin >> a >> b;
while()
{ if(a>b)
{ t=a;a=b;b=t;}
cout << a << " " << b << endl;
cin >> a >> b;
} }
A)!a=b
B)a!=b
C)a==b
D)a=b
(34)对以下说明语句的正确理解是
int a[10]={6,7,8,9,10};
A)将5个初值依次赋给a[1]至a[5]
B)将5个初值依次赋给a[0]至a[4]
C)将5个初值依次赋给a[6]至a[10]
D)因为数组长度与初值的个数不相同,所以此语句不正确
(35)类A是类B的友元,类B是类C的友元,则下列说法正确的是
A)类B是类A的友元
B)类C是类A的友元
C)类A是类C的友元
D)以上都不对 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)长度为n的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为 1 。
(2)用树型结构表示实体类型及实体间联系的数据模型称为 2 。
(3)类是一个支持集成的抽象数据类型,而对象是类的 3 。
(4)数据流图的类型有 4 和事务型。
(5)当数据的物理结构(存储结构、存取方式等)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是指数据的 5 。
(6)在C++语言的面向对象程序设计框架中, 6 是程序的基本组成单元。
(7)C++语言程序的注释可以出现在程序中的任何地方,一个注释以 7 作为开始和结束的标记。
(8)以下程序的输出结果是 8 。
#include void fun()
{ static int a=0;
a+=2;
cout << a << " ";}
void main()
{ int cc;
for(cc=1;cc<4;cc++)
fun();
cout << endl;}
(9)用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。
st=(char*) 9 ;
(10)以下程序的输出结果是 10 。
#include unsigned fun(unsigned num)
{ unsigned k=1;
do{ k *=num;num/=10;} while (num);
return k;
}
void main()
{ unsigned n=26;
cout << fun(n)<< endl;
}
(11)下列程序在构造函数和析构函数中申请和释放类的数据成员int *a,申请时使用形参b初始化a,请填空。
class A
{
public:
A(int b);
~A();
private:
int *a;
};
A::A(int b)
{
11 ;
}
A::~A()
{
12 ;
}
(12)C++语言中的多态性是在编译时通过 13 和模板体现的,在运行时是通过 14 体现的。
(13)将x+y*z中的"+"用成员函数重载,"*"用友元函数重载应写为 15 。 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总 参考答案及分析 一、选择题
(1)A
解析: 数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。
(2)D
解析: 串的长度指的是串中的字符的个数,且其字符个数可以为零。
(3)B
解析: 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性和拥有足够的情报。
(4)C
解析: 对象有如下一些基本特点,即标识惟一性、分类性、多态性、封装性和模块独立性。
(5)B
解析: 软件工程概念的出现源自软件危机。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。总之,可以将软件危机归结为成本、质量、生产率等问题。
(6)C
解析: 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念,它们是抽象、模块化、信息隐蔽和数据独立性。自底向上是集成测试中增量测试的一种。
(7)A
解析: 软件的显著特点是规模庞大,复杂度超线性增长,在开发大型软件时,要保证高质量,极端复杂困难,不仅涉及技术问题,更重要的是必须要有严格而科学的管理。
(8)A
解析: SQL语句中凡创建都用CREATE,删除都用DROP,改变用ALTER,再跟类型和名字,附加子句。
(9)B
解析: 数据库系统(Database System,简称DBS)包括数据库(Database,简称DB)和数据库管理系统(Database Management System,简称DBMS)。
(10)C
解析: 关系模型允许定义3类数据约束,它们是实体完整性约束、参照完整性约束及用户自定义的完整性约束。其中前两种完整性约束由关系数据库系统支持,对于用户自定义的完整性约束,则由关系数据库系统提供完整性约束语言,用户利用该语言给出约束条件,运行时由系统自动检查。
(11)A
解析: C++语言中预处理语句的开始符号是#。
(12)C
解析: 每个C++程序中都要有且仅有一个主函数,该函数是程序的入口,而语句、预处理命令和函数及类在程序中都可以有多个。
(13)B
解析: 该函数用于数据类型和变量。注意:sizeof操作符不能用于函数,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、void类型等。
(14)A
解析: 当自加运算符做后缀表达式的时候,表达式的值不变,只有变量的值增1,所以表达式(x++*2/3)相当于(11*2/3)取整后为7。
(15)C
解析: 本题中,首先将0赋给k,表达式变为0,跳出循环,没有执行循环体语句。解答本题的关键是掌握while语句。
(16)B
解析: 本题中,若要保证for表达式能正常进行,首先要保证第2个表达式的条件判断值应该为真,从而保证循环进行。
(17)B
解析: 在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于0,并且小于自身,本题中选项B)的下标表达式的值超过了自身。
(18)B
解析: 在C++语言的数组元素的引用方法,如数组元素a[0],可以用表达式*(p+0),即*p来引用,对于数组元素a[1],可以用表达式*(p+1)来引用,在这里,p+1的值就是数组元素a[1]的地址,对此地址使用"间接访问运算符":*(p+1)就代表存储单元a[1],注意:一对圆括号不可少。同样,对于数组元素a[2],则可以用表达式*(p+2)来引用…,对于数组元素a[9],可以用表达式*(p+9)来引用。因此,当指针变量p指向a数组的起始地址时,若0≤i<10,则数组元素a [i]可以用*(p+i)。
(19)A
解析: 本题的函数是根据a和b的值来给c赋值。
(20)A
解析: 形参的值的改变,不能影响实参的值。选项B)函数只能嵌套调用,不能嵌套定义;函数要是有返回值其类型必须确定;函数也可无返回值,用void 表示。
(21)D
解析: C++类中的静态成员变量是该类中所有对象所共有的,它能够被类中的任何函数调用,所以选项A),B),C)是错误的。而类的静态数据成员是必须要进行初始化才能使用的。
(22)C
解析: C++语言中拷贝构造函数的参数一般是某个对象的引用名。
(23)C
解析: 基类的私有成员在派生类中是隐藏的,只能在基类内部访问,派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有和受保护的成员。
(24)D
解析: 在类A中有geta()函数,在类B中也有geta()函数,类C继承了类A和类B,这样就产生了二义性,所以程序会出错。
(25)D
解析: C++中只能用成员函数重载的运算符是=,[],(),->,只能用友元函数重载的是<<,>>。
(26)B
解析: 在C++程序中的typename是都可以替换为class 的,但class不能都替换为typename。
(27)C
解析: C++语言中判断文件操作成功主要有两个函数good()和fail(),其中if(文件流名.good())和if(!文件流名.fail()),还有if(文件流名)都可以表示判断文件操作是否成功。
(28)A
解析: 题中fun函数进行了递归调用,第1次调用:fun(3)n=3 s=3-fun(2),第二次调用时:fun(2)n=2 s=2,返回第一次调用后,s=3-2=1。
(29)C
解析: 在C++语言里,main函数也可以有参数,例如:main(int arvc,char *argv),argc是指向字符串的指针数组,而选项C)是第二个形参是指向字符变量的指针,是错误的。
(30)C
解析: 该题主要要搞清楚以下几点:
①定义了一个指针数组char *p[2]后,程序中第一个循环for(i=0;i<2;i++)p[i]=ch[i];的作用是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向了二维数组ch的第二行字符串,这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。② 对二维数组ch的初始化,使其第一行ch[0]中存入了字符串"6937",第二行ch[1]中的内容为字符串"8254"。③ 程序中第二个循环中的循环体s=s*10+p[i][j]-′0′;的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④ 注意到内层循环的循环条件p[i][j]>′\0′是指p[i][j]中的字符只要不是字符串结束标志′\0′就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串"6937"中一个隔一个地取出字符,分别是"6"和"3",然后从p[1]所指向的字符串"8254"中一个隔一个地取出字符,分别是"8"和"5",同时经过转换和相加运算后,结果s中的值应该是6385。
(31)A
解析: C++语言中如果基类的成员是保护的,它被继承后在子类中该成员可能是保护的,也可能不是,主要看继承的权限是public还是protected或private的。
(32)C
解析: 左移1位,相当于乘以2,题中的x的值是一个八进制数,转换为十进制数是32,再乘以2,x的值为64。
(33)B
解析: 根据本题提出的条件可知,控制循环的表达式应该是所输入的两数互不相等,也即只有满足这一条件时,两数才能进行排序输出的操作,由此得出循环的控制表达式应该为a!=b。
(34)B
解析: 本题中,表达式将5个初值赋给a[0]至a[4],后面的部分,将自动会被依次补零处理。
(35)D
解析: 选项A)、B)和C)都不正确,因为友元关系是单项的,并且没有交换性、传递性。
二、填空题
(1)n/2
解析: 在线性表的任何位置插入一个元素的概率相等,即概率为p=1/(n+1),则插入一个元素时所需移动元素的平均次数为E=1/(n+1)n+1n=1(n-i+1)=n/2。
(2)层次模型
解析: 用树型结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。
(3)实例
解析: 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,对象则是其对应类的一个实例。
(4)变换型
解析: 典型的数据流类型有两种:变换型和事务型。变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统;在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。
(5)物理独立性
解析: 数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。也就是说,数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。数据独立性一般分为物理独立性与逻辑独立性两级。
(6)类
解析: C++语言面向对象程序设计的基本组成单元是class,面向过程的程序设计的基本组成单元是函数。
(7)/* */
解析: C++语言程序的注释可以出现在程序中的任何地方,一个注释以"/*"开始,以"*/"为结束。
(8)2 4 6
解析: 本题考查静态局部变量的使用。用关键字static声明的局部变量为"静态局部变量",其值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。
(9)malloc(11)`malloc(sizeof(char)*11)
解析: malloc函数的参数可以是一个具体的常数,也可以是一个表达式。在本题中,可以是malloc(11),也可以借助于sizeof运算符来表示。
(10)12
解析: 函数有一个形参num,循环前变量k置1,循环中,表达式num是取num的个位,将num的个位值累乘于k中,然后num除以10。循环直至num为0结束,这是逐一求出num十进制表示的各位数字,并累乘于变量k的循环。函数最后返回k。函数fun的功能是求整数的各位十进数字积。
(11)a=new int(b)~delete a
解析: C++中new和delete的使用有如下几种:① a = new int; delete a;② a = new int(10); delete a;③ a = new int[10]; delete[] a;。
(12)函数重载~虚函数
解析: C++中的多态性是在编译时通过函数重载和模板体现的,在运行时是通过虚函数体现的。
(13)x.operator+(operator*(y,z))
解析: C++中用成员函数重载x*y为:x. operator*(y),用友元函数重载x*y为:operator*(x,y),用成员函数重载x+y为:x. operator+(y),用友元函数重载x+y为:operator+(x,y)。 编辑推荐: 2012年计算机二级C++考点归纳汇总 2011年全国计算机等级考试二级C++模拟试题及答案汇总 2011年计算机等级考试二级C++冲刺全真模拟试题及答案汇总 2011年计算机二级C++辅导实例编程汇总
相关阅读