荟萃馆

位置:首页 > IT认证 > 计算机等级

2016年计算机二级《C++》模拟试题及答案

(1)以下都是C++语言标识符的是

2016年<a href=计算机二级《C++》模拟试题及答案" title="2016年计算机二级《C++》模拟试题及答案">

A)dsfa,df4,f$

B)huhj,a^,k2

C)3k,h,j_9

D)_ok,jk,k8

(2)C++语言中用于定义类的关键字是

A)class

B)struct

C)default

D)sizeof

(3)设以下变量均为int类型,则值不等于7的表达式是

A)(x=y=6,x+y,x+1)

B)(x=y=6,x+y,y+1)

C)(x=6,x+1,y=6,x+y)

D)(y=6,y+1,x=y,x+1)

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

#include

void main()

{ int a=21,b=11;

cout << --a+b;}

A)30

B)31

C)32

D)33

(5)while 和do-while循环的主要区别是

A)do-while的循环体至少无条件执行一次

B)while的循环控制条件比do-while的循环控制条件更严格

C)do-while允许从外部转到循环体内

D)do-while 的循环体不能是复合语句

(6)与 y=(x>0?1:x<0?-1:0);的功能相同的`if语句是

A)if (x>0)y=1;

else if(x<0)y=-1;

else y=0;

B)if(x)

if(x>0)y=1;

else if(x<0)y=-1;

C)y=-1;

if(x)

if(x>0)y=1;

else if(x==0)y=0;

else y=-1;

D)y=0;

if(x>=0)

if(x>0)y=1;

else y=-1;

(7)若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为 (假设a[0][0]位于数组的第一个位置上)

A)i*m+j

B)j*m+i

C)i*m+j-1

D)i*m+j+1

(8)下面程序段的运行结果是

#include

void main()

{ char *s="abcde";

s+=2;

cout << &s;}

A)cde

B)字符′c′

C)字符′c′的地址

D)无确定的输出结果

(9)下面叙述不正确的是

A)派生类一般都用公有派生

B)对基类成员的访问必须是无两义性的

C)赋值兼容规则也适用于多重继承的组合

D)基类的公有成员在派生类中仍然是公有的

(10)下面程序应能对两个整型变量的值进行交换。以下正确的说法是

#include

void swap(int p,int q)

{ int t;

t=p;

p=q;

q=t;}

void main()

{ int a=10,b=20;

cout << a << " " << b;

swap(&a,&b);

cout << a << " " << b;}

A)该程序完全正确

B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可

C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可

D)以上说法都不对

  答案与解析:

(1)D

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

(2)A

解析: C++中类定义的关键字是class。class不能大写。

(3)C

解析: C++语言中逗号","也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式1, 表达式2,其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。逗号表达式的一般形式可以扩展为:表达式1,表达式2,表达式3,…,表达式n,它的值为表达式n的值。

(4)B

解析: 自减运算符位于变量之前时,先使变量的值减1,再进行运算。

(5)A

解析: while是先判断条件再执行语句;do-while则是先执行一次语句再判断条件,从而决定是否继续再执行循环体中的语句,这正是二者主要区别。

(6)A

解析: 条件运算符要求有三个操作对象,它是C++语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3,先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。本题中用了两次三目运算符。

(7)A

解析: a[i][j]元素之前有i行元素(每行有m个元素),在a[i][j]的前面还有j个元素,因此a[i][j]之前共有i*m+j个元素。

(8)C

解析: 对于字符串指针,其保留的是整个串的首地址,即为第一个字符的起始地址,当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。

(9)D

解析: C++语言中如果基类的成员是公有的,它被继承后在子类中该成员可能是公有的,也可能不是,主要看继承的权限。

(10)D

解析: 本题应该把swap()函数改成这样:swap(int *p,int *q){int t; t=*p;*p=*q;*q=t;}执行程序时,先将a的地址传递给指针变量p,b的地址传递给指针变量q,然后将*p(a的值)的值传递给t,将*q(b的值)传递给*p,将t的值传递给*q,从而将a值和b值互换。