2012年计算机二级C++第四套笔试模拟试题及答案分析
全国计算机等级考试 二级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 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< 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(n15);堆排序所需要的比较次数为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++辅导实例编程汇总 return s[*k];}
相关阅读