1、计算机二级(C+)55 及答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:60,分数:4200.00)1.下列程序的执行结果为( )。 # include iostreamh void main ( ) int a=3,b=0; int * p=a; b= +a+; cout * p “,“ b endl; (分数:70.00)A.3,4B.4,3C.3,4D.4,42.有以下程序: main() int m,n,p; scanf(“m=%dn=%dp=%d“, printf(“%d%d%d/n“,m,n,p); 若想从键盘上输
2、入数据,使变量 m 中的值为 123,n 中的值为 456,p 中的值为 789, 则正确的输入是_。(分数:70.00)A.m=123n=456p=789B.m=123 n=456 p=789C.m=123,n=456,p=789D.123 456 7893.已知下列语句中的 x 和 y 都是 int 型变量,其中错误的语句是【 】(分数:70.00)A.xy:B.xy;C.(xy)D.xy;4.以下 for 语句中不是死循环的是( )。(分数:70.00)A.for(int i=0;i1;+i;B.for(int i=0;+i;C.for(int i=1;i0;+i;D.for(;);5.
3、有以下程序: main() int m=12,n=34; printf(“%d%d“,m+,+n); printf(“%d%d/n“,n+,+m); 程序运行后的输出结果是_。(分数:70.00)A.12353514B.12353513C.12343514D.123435136.在结构化方法中,用数据流程图(DFD) 作为描述工具的软件开发阶段是【 】(分数:70.00)A.可行性分析B.需求分析C.详细设计D.程序编码7.以下不合法的用户标识符是_。 (分数:70.00)A.j2_KEYB.DoubleC.4dD._8_8.函数模板:template T add(T x,T y) retur
4、n x+y; 下列对 add 函数的调用不正确的是( )。 (分数:70.00)A.add(1,2)B.add(1,2)C.add(10,2)D.add(10,20)9.若有说明 int a34;,则 a 数组元素的非法引用是( )。(分数:70.00)A.a02*1B.a13C.a4-20D.a0410.下面程序的运行结果是( )。 #include“ iostreamh“ #define sum(a,b)a * b void main( ) int x; x=sam(1+2,3); cout x; (分数:70.00)A.电脑 2004B.* * * * *C.* * * * * * *
5、*D.错误设置,无法输入11.C+语言中关于构造函数的说法正确的是( )。(分数:70.00)A.构造函数的函数名不必和类名相同B.构造函数只能每一个C.每个类必定有构造函数D.构造函数必有返回值12.以下函数调用语句中含有参数的个数是( )。 excc(v1,v2),(v2,v3,v4),v6); (分数:70.00)A.3B.4C.5D.613.关于关键字 class 和 typename,下列表述中正确的是_。(分数:70.00)A.程序中的 typename 都可以替换为 classB.程序中的 class 都可以替换为 typenameC.在模板形参表中只能用 typename 来声
6、明参数的类型D.在模板形参表中只能用 class 或 typename 来声明参数的类型14.下列关于函数模板实参不能省略的情况说明不正确的是( )。(分数:70.00)A.等号=B.集合运算符C.加号+D.减号-15.设有定义 int n1=0,n2,*p=,以下赋值语句中与 n2=n1;语句等价的是_。 (分数:70.00)A.*p=*q;B.p=q;C.*p=D.p=*q;16.数据库技术的根本目标是要解决数据的_。(分数:70.00)A.存储问题B.共享问题C.安全问题D.保护问题17.所有在函数中定义的变量,连同形式参数,都属于( )。(分数:70.00)A.局部变量不能被本层模块程
7、序调用B.私有变量只能被本层模块程序调用C.局部变量能被本层模块和下层模块程序调用D.私有变量能被本层模块和下层模块程序调用18.下面程序的运行结果是( )。 #includeiostreamh class base protected: int a; public: base( )cout“0“; ; class basel:virtual base public: basel( )cout“1“; ; class base2:virtual base public: base2( )cout“2“; ; class derived:public basel,public base2 pub
8、lic: derived( )cout“3“; ; void main( ) derived obj; coutendl; (分数:70.00)A.5B.3C.2D.019.关于 continue 语句叙述不正确的是( )。(分数:70.00)A.某对象名B.某对象成员名C.某对象的引用名D.指向对象的指针名20.能正确表示逻辑关系:“a10 或 a0”的 C+语言表达式是( )。(分数:70.00)A.一对多联系B.多对多联系C.一对一联系D.多对一联系21.下列程序是用来判断数组中特定元素的位置所在,则输出结果为( )。 #includeconioh #includeiostreamh i
9、nt fun(in *s,int t,int *k) int i; * k=0; for(i=0;i t;i+) if(s *k si) *k=i; return S *k; void main( ) int a10= 876,675,896,101,301,401,980,431,451,777 ,k; fun(a,10, for(i=0;iD.933.有以下程序: void sum(int a) a0=a-1+a1; main() int a10= 1,2,3,4,5,6,7,8,9,10; sum( printf(“%d/n“,a2); 程序运行后的输出结果是_。 (分数:70.00)A
10、.6B.7C.5D.834.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )。(分数:70.00)A.公有类型B.私有类型C.保护类型D.友元类型35.对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是_。 (分数:70.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/236.关于二义性的描述错误的是( )。(分数:70.00)A.array2 = array1B.array2 = array3C.array2 = array4D.array3 = array437.若整型变量
11、a、b、c、d 中的值依次为 1、4、3、2。则条件表达式 a(1,2)B.add(1,2)C.add(10,2)D.add(10,20)50.不能重载的运算符是( )。(分数:70.00)A.newB.sizeofC.*D.+51.以下关于 C+语言类的说法中正确的是( )。(分数:70.00)A.C+语言的默认访问权限是 privateB.C+语言中的类定义,用户一定要自己定义一个构造函数用于实例化类C.C+语言中的成员函数的实现部分一定要写在类定义外D.C+语言中的类不能够嵌套定义52.派生类对象对其基类中的什么成员是可访问的?(分数:70.00)A.公有继承的私有成员B.私有继承的公有
12、成员C.私有继承的保护成员D.保护继承的保护成员53.下列程序段的输出结果是( )。 #includeiostreamh void fun(int * X,int * y) cout * X * y; * X=3; * y=4; void main( ) int x=1,y=2; fun( a=73; b=4 printf(“%d %d/n“,a,b); 程序运行后的输出结果是_。 (分数:70.00)A.4 3B.7 3C.7 0D.4 060.以下都是 C+语言标识符的是( )。(分数:70.00)A.若在重定义虚函数时使用了 virtual,则该重定义函数还是虚函数B.虚函数不能声明为友
13、元C.子类必须重定义父类的虚函数D.虚函数不能是 static 的二、填空题(每空 2 分,共 30 分)(总题数:20,分数:30.00)61.在 C+语言中每个类都有一个 1 指针,该指针指向正在调用成员函数的对象。(分数:1.50)填空项 1:_62.以下程序的输出结果是 1。 #includeiostreamh unsignedfun(unsignednum) unsignedk=1; do k * =num%10;num/=10;while(num); returnk; voidmain( ) unsignedn=26; coutfun(n)endl; (分数:1.50)填空项 1:
14、_63.类模板不同于函数模板,类模板只可用 1 型参数。(分数:1.50)填空项 1:_64.程序 #include“ iostreamh“ void main1 int i=10; jnt j=5; cout j+i+ end1; 的结果为 2 (分数:1.50)填空项 1:_65.语句 cout /n还可表示为 1。(分数:1.50)填空项 1:_66.已知程序的结果为 123,请填空。 #includeiostream.h templateclassT classA public: Tx,y,z; voiddisplay( )coutx“y“z; ; voidmain( ) Aintal
15、; 1 2 3 al.display( ); (分数:1.50)填空项 1:_67.如果不使用多态机制,那么通过基数的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。下列程序没有使用多态机制,其输出结果是 1。 #include using namespace std; class Base public: void print2coutprint6; pd-print7; delete pd; retum 0: (分数:1.50)填空项 1:_68.以下程序的输出结果是 1。 #includeiostreamh voidfun( ) staticinta=0; a+=2; cout
16、a“; voidmain( ) intcc; for(cc=1;cc4;cc+) fun( ); coutendl; (分数:1.50)填空项 1:_69.按“行进后出”原则组织数据的数据结构是 1 。(分数:1.50)70.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 1 方式。(分数:1.50)填空项 1:_71.通过使用 new 和 delete 两个运算符进行的分配为 1 存储分配。(分数:1.50)填空项 1:_72. 1 的任务是诊断和改正程序中的错误。(分数:1.50)填空项 1:_73.将以下程序写成三目运算表达式是 1。 i
17、f(a B) max=a; else max=b; (分数:1.50)填空项 1:_74.如果类中的一个成员函数的定义实现在类内,则该函数系统自动默认为该类的 1 函数。(分数:1.50)填空项 1:_75.将以下程序写成三目运算表达式是 1。 if(a B) max=a; else max=b; (分数:1.50)填空项 1:_76.以下程序中,fun 函数的功能是求 3 行 4 列二维数组每行元素中的最大值。请填空。 void fun(int,int,int(*)4,int *); main1 int a34=12,41,36,28,19,33,15,27,3,27,19,1,b3,i;
18、fun(3,4,a,b); for(i=0;i2=x; (分数:1.50)填空项 1:_77.关系数据库管理系统能实现的专门关系运算包括选择、连接和 1。(分数:1.50)填空项 1:_78.将一个函数声明为一个类的友元函数必须使用关键字 1。(分数:1.50)填空项 1:_79.表达式 operator + (x,y)还可以表示为 1。(分数:1.50)填空项 1:_80.开发一个 C+语言程序的步骤通常包括编辑、 1、链接、运行和调试。(分数:1.50)填空项 1:_计算机二级(C+)55 答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2 分,共 70 分) 下
19、列各(总题数:60,分数:4200.00)1.下列程序的执行结果为( )。 # include iostreamh void main ( ) int a=3,b=0; int * p=a; b= +a+; cout * p “,“ b endl; (分数:70.00)A.3,4B.4,3 C.3,4D.4,4解析:* p 为所指对象 a 的值,语句“b=+a+;”等价于“b=b+a;a=a+1;”。 2.有以下程序: main() int m,n,p; scanf(“m=%dn=%dp=%d“, printf(“%d%d%d/n“,m,n,p); 若想从键盘上输入数据,使变量 m 中的值为
20、123,n 中的值为 456,p 中的值为 789, 则正确的输入是_。(分数:70.00)A.m=123n=456p=789 B.m=123 n=456 p=789C.m=123,n=456,p=789D.123 456 789解析:根据本题的数据输入形式“scanf(“m=%dn=%dp=%d“,”说明在输入数据时,必须输入“m=”、“n=”、“p=”字符,且中间不能含有空格。3.已知下列语句中的 x 和 y 都是 int 型变量,其中错误的语句是【 】(分数:70.00)A.xy:B.xy;C.(xy) D.xy;解析:本题考核 C表达式类型及求值规则。自加运算符是单目运算符,运算对象必
21、须为变量,不能是常量和表达式,C 选项中的对象是表达式,故错误。4.以下 for 语句中不是死循环的是( )。(分数:70.00)A.for(int i=0;i1;+i; B.for(int i=0;+i;C.for(int i=1;i0;+i;D.for(;);解析:本题考查循环语句 for 的使用。for 循环的一般格式为 for(初始化部分;终止条件判断部分;迭代部分) 循环体;。 说明如下:for 循环开始时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。注意:在for 语句中,如果省略了终止条件判断部
22、分,并且在语句中没有 break,或者是终止条件判断部分始终没有终止,都将出现死循环。5.有以下程序: main() int m=12,n=34; printf(“%d%d“,m+,+n); printf(“%d%d/n“,n+,+m); 程序运行后的输出结果是_。(分数:70.00)A.12353514 B.12353513C.12343514D.12343513解析: 执行 “ printf(“%d%d“,m+,+n); ”后, 输出 的是 m 和 n+1 的值 1235 ,接 着执 行 “printf(“%d%d/n“,n+,+m);”输出 n 和 m+1 的值 3514。6.在结构化方
23、法中,用数据流程图(DFD) 作为描述工具的软件开发阶段是【 】(分数:70.00)A.可行性分析B.需求分析 C.详细设计D.程序编码解析:结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。而结构化分析就是使用数据流图(DFD) 、数据字典(DD) 、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。所以数据流程图是在需求分析阶段使用的。7.以下不合法的用户标识符是_。 (分数:70.00)A.j2_KEYB.DoubleC.4d D._8_解析:C 语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。大写字母和小写字
24、母被认为是两个不同的字符,用户在定义标识符时应做到“见名知意”,且不允许使用 关键字作标识符。8.函数模板:template T add(T x,T y) return x+y; 下列对 add 函数的调用不正确的是( )。 (分数:70.00)A.add(1,2)B.add(1,2)C.add(10,2) D.add(10,20)解析:对于 template Tadd(T x,T y) return x + y; 调用时町以省略模板实参的声明,但是要求x 和 y 的数据类型必须是一样的。 9.若有说明 int a34;,则 a 数组元素的非法引用是( )。(分数:70.00)A.a02*1B
25、.a13C.a4-20D.a04 解析:本题考查数组的定义范围。本题定义 a 为 3 行4 列的数组,它可用的行下标最大为 2,列下标最大为 3。注意:a04超过了数组的范围。10.下面程序的运行结果是( )。 #include“ iostreamh“ #define sum(a,b)a * b void main( ) int x; x=sam(1+2,3); cout x; (分数:70.00)A.电脑 2004B.* * * * *C.* * * * * * * * D.错误设置,无法输入解析:B)选项指所有字符转换为小写,C)选项指必须输入数字 09,D)选项指必须输入字母或数字。11
26、.C+语言中关于构造函数的说法正确的是( )。(分数:70.00)A.构造函数的函数名不必和类名相同B.构造函数只能每一个C.每个类必定有构造函数 D.构造函数必有返回值解析:本题考查构造函数的概念。构造函数的函数名必须和类名相同;构造函数可以有一个,也可以有多个;构造函数没有返回值。12.以下函数调用语句中含有参数的个数是( )。 excc(v1,v2),(v2,v3,v4),v6); (分数:70.00)A.3 B.4C.5D.6解析:本题考查函数的参数设置问题。函数的参数个数是以第一层的逗号为区分的,本题中调用语句中有3 个参数。 13.关于关键字 class 和 typename,下列
27、表述中正确的是_。(分数:70.00)A.程序中的 typename 都可以替换为 classB.程序中的 class 都可以替换为 typenameC.在模板形参表中只能用 typename 来声明参数的类型D.在模板形参表中只能用 class 或 typename 来声明参数的类型解析:14.下列关于函数模板实参不能省略的情况说明不正确的是( )。(分数:70.00)A.等号=B.集合运算符 C.加号+D.减号-解析:在捕获一个异常之前,必须先有异常抛出,才能生成一个异常对象,这就是用抛出异常来实现的。抛出异常、生成异常对象都通过 throW 语句实现,如: IOExcepftion e=
28、new IOException; throw e; 利用 throw 语句还可以自定义异常类抛出。 15.设有定义 int n1=0,n2,*p=,以下赋值语句中与 n2=n1;语句等价的是_。 (分数:70.00)A.*p=*q; B.p=q;C.*p=D.p=*q;解析:题面中各变量定义后,指针变量 p 指向了变量 n2 所在的存储单元,指针变量 q 指向了变量 n1 所在 的存储单元,要使得 n1 的值赋给 n2,可用指针变量 q 所指向的存储单元的值赋给指针变量 p 所指向的存 储单元,即*p=*q。16.数据库技术的根本目标是要解决数据的_。(分数:70.00)A.存储问题B.共享问
29、题C.安全问题D.保护问题解析:17.所有在函数中定义的变量,连同形式参数,都属于( )。(分数:70.00)A.局部变量不能被本层模块程序调用B.私有变量只能被本层模块程序调用C.局部变量能被本层模块和下层模块程序调用D.私有变量能被本层模块和下层模块程序调用 解析:本题考查模板概念。类模板可以有虚拟类型参数。18.下面程序的运行结果是( )。 #includeiostreamh class base protected: int a; public: base( )cout“0“; ; class basel:virtual base public: basel( )cout“1“; ;
30、class base2:virtual base public: base2( )cout“2“; ; class derived:public basel,public base2 public: derived( )cout“3“; ; void main( ) derived obj; coutendl; (分数:70.00)A.5B.3C.2 D.0解析:本题考查三目运算符“?:”。三目运算符的表达式为(表达式 1)?(表达式 2):(表达式 3),运算过程是当(表达式 1)的值为真时,求(表达式 2)的值为整个表达式的值;如果(表达式 1)的值为假,则求(表达式 3)的值为整个表达式
31、的值。题中,表达式 x12 的结果为假,所以执行的语句是 x-12,最终结果应该是 0。19.关于 continue 语句叙述不正确的是( )。(分数:70.00)A.某对象名B.某对象成员名C.某对象的引用名 D.指向对象的指针名解析:C+语言中,在定义该函数时所指定的数据类型决定函数的返回值类型。20.能正确表示逻辑关系:“a10 或 a0”的 C+语言表达式是( )。(分数:70.00)A.一对多联系 B.多对多联系C.一对一联系D.多对一联系解析:关系模型中的“关系”是指那种具有相关性,但非从属性的平行的数据之间按照某种序列排序的集合 关系。21.下列程序是用来判断数组中特定元素的位置
32、所在,则输出结果为( )。 #includeconioh #includeiostreamh int fun(in *s,int t,int *k) int i; * k=0; for(i=0;i t;i+) if(s *k si) *k=i; return S *k; void main( ) int a10= 876,675,896,101,301,401,980,431,451,777 ,k; fun(a,10, for(i=0;iD.9 解析:结构复合索引文件是 Visual FoxPro 数据库中最普通的,也是最重要的一种索引文件,它会随着表的打开而自动打开。33.有以下程序: vo
33、id sum(int a) a0=a-1+a1; main() int a10= 1,2,3,4,5,6,7,8,9,10; sum( printf(“%d/n“,a2); 程序运行后的输出结果是_。 (分数:70.00)A.6 B.7C.5D.8解析:本题将主函数中 a2的地址传递给了 sum 函数中的形参 a,使得 sum 函数中的(a+0)为主函数中 a2的地址,所以 a-1即*(a-1)的值为主函数中 a1的值;a1即*(a+1)的值为主函数中 a3的值,故函数 sum 中 a0=2+4,由于此函数中的 a 是指向主函数中的 a2,所以主函数中的 a2的值即为 6。34.对类成员访问权
34、限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )。(分数:70.00)A.公有类型B.私有类型C.保护类型D.友元类型 解析:所谓的访问控制只包含公有类型、私有类型和保护类型 3 种,友元可以是一个函数,也可以是一个类。35.对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是_。 (分数:70.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/2 解析:假设线性表的长度为 n,则在最坏情况下,冒泡排序需要经过 n/2 遍的从前往后扫描和 n/2 遍的从后 往前扫描,需要比较次数为 n(n-1)/
35、2。快速排序法的最坏情况比较次数也是 n(n-1)/2。36.关于二义性的描述错误的是( )。(分数:70.00)A.array2 = array1 B.array2 = array3C.array2 = array4D.array3 = array4解析:在静态方法中不能直接访问非静态的成员,如果要在 fun( )中直 接访问变量 m,应将变量 m 用static 修饰。 37.若整型变量 a、b、c、d 中的值依次为 1、4、3、2。则条件表达式 a(1,2)B.add(1,2)C.add(10,2) D.add(10,20)解析:UPPER()函数的功能是将指定表达式中的小写字母全部转换
36、为大写字母,其他字符则保持不变;LOWER()函数的功能刚好与 UPPER() 函数相反,是将大写字母转换为小写字母。50.不能重载的运算符是( )。(分数:70.00)A.newB.sizeofC.* D.+解析:C+语言规定* 运算符是不能被重载的。51.以下关于 C+语言类的说法中正确的是( )。(分数:70.00)A.C+语言的默认访问权限是 private B.C+语言中的类定义,用户一定要自己定义一个构造函数用于实例化类C.C+语言中的成员函数的实现部分一定要写在类定义外D.C+语言中的类不能够嵌套定义解析:本题考查 C+语言中类定义和它的概念。C+语言的默认访问权限修饰符是 pr
37、ivate。注意:C+语言中的构造函数是系统默认就有的,用户可以自己定义也可以不定义,故选项 B)错误;C+语言的类是可以嵌套定义的,故选项 D)错误;C+语言中成员函数的实现部分也可以写在类定义内,故选项 C)错误。52.派生类对象对其基类中的什么成员是可访问的?(分数:70.00)A.公有继承的私有成员B.私有继承的公有成员C.私有继承的保护成员D.保护继承的保护成员 解析:本题考查关于 c+语言继承问题中派生类对基类的访问能力 C+浯言中通常有三种继承修饰符public,protected,Privale,限制依次严格,另外对类中的数据和函数也有这三种修饰符进行限制,有3 种是不能继承的
38、:公有继承基类的私有成员,私有继承基类的私有成员,保护继承基类的私有成员。 53.下列程序段的输出结果是( )。 #includeiostreamh void fun(int * X,int * y) cout * X * y; * X=3; * y=4; void main( ) int x=1,y=2; fun( a=73; b=4 printf(“%d %d/n“,a,b); 程序运行后的输出结果是_。 (分数:70.00)A.4 3 B.7 3C.7 0D.4 0解析:C 语言提供六种位运算符,按优先级由高到低的顺序分别为:取反()左移()按位与( main1 int a34=12,4
39、1,36,28,19,33,15,27,3,27,19,1,b3,i; fun(3,4,a,b); for(i=0;i2=x; (分数:1.50)填空项 1:_ (正确答案:bri 或 *(br+i))解析:二维数组 a 存放 3 行 4 列的数组元素,一维数组 b 用于存放每行的最大数。在函数 fun 中,外层 for 循环用于控制行数,内层 for 循环用于控制列数。77.关系数据库管理系统能实现的专门关系运算包括选择、连接和 1。(分数:1.50)填空项 1:_ (正确答案:投影)解析:关系数据库管理系统的专门关系运算包括选择、连接和投影。选择运算是在指定的关系中选取所有满足给定条件的元
40、组,构成一个新的关系,而这个新的关系是原关系的一个子集:投影运算是在给定关系的某些域上进行的运算。通过投影运算可以从一个关系中选择出所需要的属性成分,并且按要求排列成一个新的关系,而新关系的各个属性值来自原关系中相应的属性值:连接运算是对两个关系进行的运算,其意义是从两个关系的笛卡尔积中选出满足给定属性间一定条件的那些元组。78.将一个函数声明为一个类的友元函数必须使用关键字 1。(分数:1.50)填空项 1:_ (正确答案:friend)解析:本题考核友元函数。定义友元函数的方式是在类定义中用关键字 friend 说明该函数,其格式为:friend类型友元函数名(参数表);79.表达式 operator + (x,y)还可以表示为 1。(分数:1.50)填空项 1:_ (正确答案:x+y)解析:本题考查的是运算符函数的调用,可以像一般函数那样用函数名进行调用,也可通过运算符构成表达式的形式进行调用。80.开发一个 C+语言程序的步骤通常包括编辑、 1、链接、运行和调试。(分数:1.50)填空项 1:_ (正确答案:编译)解析:c+语言是以编译方式实现的高级语言,C+语言程序的实现,必须要使用 某种 C+语言的编译器对程序进行编译。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1