1、计算机二级(C+)54 及答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:60,分数:4200.00)1.关于模板下列说法不正确的是( )。(分数:70.00)A.TB.PC.1D.-12.在 C中用来实现运行时多态性的是【 】(分数:70.00)A.重载函数B.析构函数C.构造函数D.虚函数3.下列选项中不属于结构化程序设计方法的是_。 (分数:70.00)A.自顶向下B.逐步求精C.模块化D.可复用4.已知程序中已经定义了函数 test,其原型是 int test(int,int,int);,则下列重载形式中正确的是【 】(
2、分数:70.00)A.char test (int,int,int);B.double test(int,int,double);C.int test(int,int,int=0);D.float test(int,int,float=3.5F);5.下面叙述不正确的是( )。(分数:70.00)A.12 1B.20 2C.18 5D.24 126.C+语言中,表示一条语句结束的标号是( )。(分数:70.00)A.Caption 属性B.BackColor 属性C.ForeColor 属性D.Color 属性7.下列关于构造函数说法不正确的是( )。(分数:70.00)A.构造函数必须与类同
3、名B.构造函数可以省略不写C.构造函数必须有返回值D.在构造函数中可以对类中的成员进行初始化8.数据库系统的核心是_。 (分数:70.00)A.数据模型B.数据库管理系统C.数据库D.数据库管理员9.下列关于运算符重载不正确的是( )。(分数:70.00)A.throwsB.throwC.ThrowableD.Exception10.不合法的 main 函数命令行参数表示形式是( )。(分数:70.00)A.for(表达式 1;0;表达式 3)B.for(表达式 1;1;表达式 3)C.for(表达式 1;表达式 3;)D.for(;表达式 3)11.下列程序的输出结果为( )。 # incl
4、ude iostreamh int func(int n) if (n1)return 1; else return n + func (n-1); return 0; void main( ) cout func (5) endl; (分数:70.00)A.VariantB.ByteC.BooleanD.Integer12.有以下程序: #define f(x) (x*x) main() int i1,i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(“%d,%d/n“,i1,i2); 程序运行后的输出结果是_。 (分数:70.00)A.64,28B.4,
5、4C.4,3D.64,6413.面向对象程序设计思想的主要特征中不包括( )。(分数:70.00)A.public int MAX = 100;B.final int MAX = 100;C.final public int MAX = 100;D.public final int(MAX = 100;14.有以下程序段: int k=0,a=1,b=2,c=3; k=ac?c:k; 执行该程序段后,k 的值是_。 (分数:70.00)A.3B.2C.1D.015.有以下程序: float f1(float n) return n*n; float f2(float n) return 2*n
6、; main() float (*p1)(float),(*p2)(float),(*t)(float),y1,y2; p1=f1; p2=f2; y1=p2(p1(2.0); t=p1; p1=p2; p2=t; y2=p2(p1(2.0); printf(“%3.0f,%3.0f/n“,y1,y2); 程序运行后的输出结果是_。(分数:70.00)A.8, 16B.8, 8C.16, 16D.4, 816.下面的哪个选项不能作为函数的返回类型?(分数:70.00)A.NameB.CaptionC.PasswordCharD.Text17.以下不合法的字符常量是_。 (分数:70.00)A.
7、/018B./“C./D./xcc18.程序中若有如下说明和定义语句 char fun(char *); main() char *s=“one“,a5=0,(*f1)()=fun,ch; 以下选项中对函数 fun 的正确调用语句是_。(分数:70.00)A.(*f1)(;B.*f1(*s);C.fun(D.ch=*f1(s);19.下列语句中不是死循环的是( )。(分数:70.00)A.报表页眉B.页面页眉C.组页眉D.以上说法都不对20.派生类继承基类的方式有( )。(分数:70.00)A.SEEKNB.SEEK FOR 基本工资=NC.FIND 1000D.LOCATE FOR 基本工资
8、=N21.有以下程序 #include“iostream.h“ void main( ) int i=1,j=1,k=2; if( (j+|k+) else y=O;B.if(x) if(x0)y=1; else if(x0)y=-1;C.y=-1; if(x) if(x0)y=1; else if(x=0)y=0; else y=-1;D.y=0; if(x=0) if(x0)y=1; else y=-1;27.若有如下语句 #includeiostreamh void main( ) int x=3; do x=x-2; cout x; while(!(-X); 则上面程序段( )。 (分
9、数:70.00)A.产生的临时表文件的后缀名仍为dbfB.执行查询后,该临时表文件是当前文件C.可以像一般的 dbf 文件一样使用,可查询和修改表中记录D.当关闭文件时,临时表文件将自动被删除28.下列程序的运行结果为( )。 # include iostreamh int i=0; classA public: A( ) i + + ; ; void main( ) A a,b3,* c; C=b; cout i endl; (分数:70.00)A.2B.3C.4D.529.下面程序段的运行结果是( )。 voidmain( ) ihtt,a,b,C; a=1;b=2;C=2; while(
10、abc) t=a;a=b;b=t;c-; couta“,“b“,“C; (分数:70.00)A.1,2,0B.2,1,0C.1,2,1D.2,1,130.下列关于 C+语言类的描述中错误的是( )。(分数:70.00)A.intB.floatC.doubleD.不确定31.类的析构函数是在什么时候调用的?(分数:70.00)A.类创建时B.创建对象时C.删除对象时D.不自动调用32.下列关于多态性的描述,错误的是( )。(分数:70.00)A.INDEXON 籍贯,学号 TO JGXHB.INDEXON 籍贯+学号 TO JGXHC.INDEXON 籍贯,STR(学号,4)TO JGXHD.I
11、NDEXON 籍贯+STR(学号,4)TO JGXH33.有以下类定义 class MyClass private: int id; char gender; char*phone; public: MyClass():id(0),gender(#),phone(NULL) MyClass(int no,char ge=#,char*ph=NULL) idno;gender=ge;phone=ph; ; 下列类对象定义语句中错误的是【 】 (分数:70.00)A.MyClass myObj;B.MyClass myObj(11,“13301111155“);C.MyClass myObj(12
12、,m);D.MyClass myObj(12);34.在一个派生类对象结束其生命周期时(分数:70.00)A.先调用派生类的析构函数后调用基类的析构函数B.先调用基类的析构函数后调用派生类的析构函数C.如果基数没有定义析构函数,则只调用派生类的析构函数D.如果派生类没有定义析构函数,则只调用基类的析构函数35.下面关于数组的描述错误的是( )。(分数:70.00)A.在 C+语言中数组的名字就是指向该数组第一个元素的指针B.长度为 n 的数组,下标的范围是 0n-1C.数组的大小必须在编译时确定D.数组只能通过值参数和引用参数两种方式传递给函数36.有以下程序 main() union cha
13、r ch2; int d; s; s.d=0x4321; printf(“%x,%x/n“,s.ch0,s.ch1); 在 16 位编译系统上,程序执行后的输出结果是_。 (分数:70.00)A.21,43B.43,21C.43,00D.21,0037.以下程序中,错误的行为是( )。 (1) # include iostream.h (2) class A (3) (4) public: (5) int n=2; (6) A(int val) cout val endl; (7) A( ) ; (8) ; (9) void main( ) (10) (11) A a(0); (12) (分数
14、:70.00)A.(5)B.(6)C.(7)D.(11)38.在数据库系统中,用户所见的数据模式为_。(分数:70.00)A.概念模式B.外模式C.内模式D.物理模式39.执行语句序列 intn: cinn: switch(n) casel: case2:cout1: case 3: case4:cout2: break: delhult:cout3: 时,若键盘输入 1,则屏幕显示【 】(分数:70.00)A.1B.2C.3D.1240.拷贝构造函数的参数一般是( )。(分数:70.00)A.某对象名B.某对象成员名C.某对象的引用名D.指向对象的指针名41.下面关于 C+语言变量的叙述错误
15、的是( )。(分数:70.00)A.字段变量的值B.内存变量的值C.随机显示D.错误信息42.有以下程序 #includestringh #includeiostreamh void main( ) char *p=“abcde/0fghjik/0“; cout strlen(p); 程序运行后的输出结果是( )。 (分数:70.00)A.C+语言是 C 语言的超集B.C+语言对 C 语言进行了扩充C.C+语言包含 C 语言的全部语法特征D.C+语言与 C 语言都是面向对象的程序设计语言43.设有定义 int a=1;float f=12;charc=a;,则下列表示错误的是( )。(分数:7
16、0.00)A.File StreamB.Pipe StreamC.Random StreamD.Filter Stream44.下面的语句中错误的是( )。(分数:70.00)A.ItemListenerB.ActionListenerC.ContainerListenerD.WindowsListener45.以下关键字不能用来声明类的访问权限的是【 】(分数:70.00)A.publicB.staticC.protectedD.private46.下面关于运算符重载的描述错误的是( )。(分数:70.00)A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构
17、B.不是所有的运算符都可以进行重载C.运算符函数的调用必须使用关键字 operatorD.在 C+语言中不可通过运算符重载创造出新的运算符47.有以下程序: #define P 3 void F(int x)return(P*x*x); main() printf(“%d/n“,F(3+5); 程序运行后的输出结果是_。 (分数:70.00)A.192B.29C.25D.编译出错48.下列语句中,错误的是【 】(分数:70.00)A.const int buffer=256;B.const double*point;C.int const buffer=256;D.double*const p
18、oint;49.下列程序的输出结果为( )。 # include iostreamh int func(int n) if (n1)return 1; else return n + func (n-1); return 0; void main( ) cout func (5) endl; (分数:70.00)A.0B.10C.15D.1650.有以下程序 #includeiostreamh void ss(char*s,char t) while(*s) if(*S=t)*s=t-a+A; s+; void main( ) char strl100=“abcddfefdbd“,c=d: s
19、s(strl,c) ;coutstrl; 程序运行后的输出结果是( )。 (分数:70.00)A.ABCDDEfEBDB.abcDDfefDbDC.abcAAfefALbAD.Abcddfefdbd51.下列程序的运行结果为( )。 #includeiostreamh class Location protected: int X,Y; publiC: void SeX(int myx)X=myx; void SetY(int myy)Y=myy; void showxy( ) cout“X=“ X“ “ “Y“= Y endl; ; Class Rectangle :public Locat
20、ion private: int H,W; public: void SetH(int myh)H=myh; void SetW(int myw) W=myw; void show( ) cout “X=“X“ “Y=“ Y“ “H=“ H“ “ “W=“ W endl; ; void main( ) Rectangle r1; r1SetX(3); r1SetY(5); r1SetH(4); r1SetW(6); r1showxy( ); r1. show( ); (分数:70.00)A.X=3 Y=5 X=3 Y=5 H=4 W=6B.X=3 Y=5 X=3 Y=5 H=3 W=6C.X=
21、3 Y=5 X=3 Y=4 H=4 W=6D.X=3 Y=5 X=3 Y=3 H=4 W=652.有如下程序 #include #include using namespace std; int main() countwho6; p= i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(“%d,%d/n“,i1,i2); 程序运行后的输出结果是_。 (分数:70.00)A.64,28B.4,4C.4,3 D.64,64解析:对带参数的宏的展开只是将语句中宏名后面括号内的实参字符串代替#define 命令行中的形参。本题 中“i1=f(8)/f(4)”用“#defin
22、e f(x) (x*x)”代替得 i1=(8*8)/(4*4),结果为 4;“i2=f(4+4)/f(2+2)”用“#define f(x) (x*x)”代替得 i2= (4+4*4+4)/(2+2*2+2),求得结果为 3。故本题输出的值为 4,3。13.面向对象程序设计思想的主要特征中不包括( )。(分数:70.00)A.public int MAX = 100;B.final int MAX = 100;C.final public int MAX = 100;D.public final int(MAX = 100; 解析:变量的作用域指变量的作用范围,根据变量的定义位置和使用的变量定
23、义语句的不同,变量可以分为 3 类,即局部变量、模 块变量和全局变量。局部变量是在过程(事件过程或通用过程)内定义的变量,其作用域是它所在的过程,通常用来存放中间结果或用作临时变 量;模块变量包括窗体变量和标准模块变量,窗体变量可用于该窗体内的所有过程,使用前必须先声明,也就是说,窗体层变量不能默认声明 ;全局变量也称全程变量,其作用域最大,可在工程的每个模块、每个过程中使用,和模块级变量类似,全局变量也在标准模块的声明部分声 明,所不同的是全局变量必须用 Public 或 Global 语句声明,不能用 Dim 语句声明,更不能用 Private 声明;全局变量只能在标准模块中声明,不 能在
24、过程或窗体模块中声明。14.有以下程序段: int k=0,a=1,b=2,c=3; k=ac?c:k; 执行该程序段后,k 的值是_。 (分数:70.00)A.3B.2 C.1D.0解析:三目运算符的一般形式为(表达式 1)?(表达式 2):(表达式 3),当(表达式 1)值为真时,(表达式 2)的值 为整个表达式的值;当(表达式 1)的值为假时,(表达式 3)的值为整个表达式的值。题中执行表达式“k=ac?c:k”,由于“kc”值为假,故 k 的值还等于原来 k 的值,即 2。15.有以下程序: float f1(float n) return n*n; float f2(float n)
25、 return 2*n; main() float (*p1)(float),(*p2)(float),(*t)(float),y1,y2; p1=f1; p2=f2; y1=p2(p1(2.0); t=p1; p1=p2; p2=t; y2=p2(p1(2.0); printf(“%3.0f,%3.0f/n“,y1,y2); 程序运行后的输出结果是_。(分数:70.00)A.8, 16 B.8, 8C.16, 16D.4, 8解析:题中“(*p1)(float)”定义了一个指向函数的指针变量 p1,此函数的返回值是 float 类型。在 main 函 数中,使得 p1 指向了函数 f1,p2
26、 指向了函数 f2。语句“y1=p2(p1(2.0);”先调用了 p1 函数,将其返回值 4.000000 传递给了 f2 的形参 n,并使其函数返回值 8.000000 赋值给 y1。然后在 main 函数中交换了 p1、p2 指针变量的指向,使 p1 指向了函数 f2,p2 指向了函数 f1,并先调用函数 f2,得到返回值 4.000000,使其 传递给 f1 函数的形参 n,并带回返回值 16.000000 赋值给 y2。在输出 y1、y2 时,各浮点数占 3 列,小数位 数为 0,即输出了 8, 16。16.下面的哪个选项不能作为函数的返回类型?(分数:70.00)A.NameB.Ca
27、ptionC.PasswordChar D.Text解析:在 Visual Basic 中,控制控件有效性的属性是 Enabled,设置为 True,则处于有效状态,如果设置成 False,则处于无效状态,所以 D)是正确的;Visible 属性是控制 空间可见性的,有两种值:True和 False,默认情况下是 True;如果将对象的 Visible 值设为 False,窗体和控件在设计阶段仍可见,只有运行时才隐藏,所以 B)不正确;Default 是决定窗体的缺省命令的命令按钮的属性,另外,一个窗体只能有一个缺省命令按钮,所以选 项 C)也不正确;Value 属性在不同的控件中有不同的作用
28、,也不是本题的答案。 17.以下不合法的字符常量是_。 (分数:70.00)A./018 B./“C./D./xcc解析:C 语言的字符常量是用单引号(即撇号)括起来的一个字符。如a,A,?,$等都是字符常量。注意:a和A是不同的字符常量。除了以上形式的字符常量外,C 还允许用一个“/“开头的字符序列。如/ddd表示 1 到 3 位八进制数所代表的字符,而八进制是由 0 到 7 这几个数字组成的,所以选项 A 是不合法的字符常 量。18.程序中若有如下说明和定义语句 char fun(char *); main() char *s=“one“,a5=0,(*f1)()=fun,ch; 以下选项
29、中对函数 fun 的正确调用语句是_。(分数:70.00)A.(*f1)(; B.*f1(*s);C.fun(D.ch=*f1(s);解析:题中将函数 fun 的入口地址赋给了指针变量 f1,这时 f1 和 fun 都指向函数的开头,调用*f1 就是调 用函数 fun。19.下列语句中不是死循环的是( )。(分数:70.00)A.报表页眉B.页面页眉 C.组页眉D.以上说法都不对解析:SelStart 返回用户在文本框中所选文本的起始点或插入位置,属性的有效值在 0 和文本框中总字符数之间。20.派生类继承基类的方式有( )。(分数:70.00)A.SEEKNB.SEEK FOR 基本工资=N
30、 C.FIND 1000D.LOCATE FOR 基本工资=N解析:利用 GOTO 命令将记录指针定位到记录号为 6 的记录上,NEXT5 是表示从当前记录起到其后的总共5 条记录的范围,因此本题所显示的 记录范围是从第 6 条记录开始到第 10 记录。21.有以下程序 #include“iostream.h“ void main( ) int i=1,j=1,k=2; if( (j+|k+) else y=O; B.if(x) if(x0)y=1; else if(x0)y=-1;C.y=-1; if(x) if(x0)y=1; else if(x=0)y=0; else y=-1;D.y=
31、0; if(x=0) if(x0)y=1; else y=-1;解析:条件运算符要求有三个操作对象,它是 c+语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式 1?表达式 2:表达式 3,先求解表达式 1,若为非 0(真)则求解表达式 2,此时表达式 2 的值就作为整个条件表达式的值。若表达式 1 的值为 0(假),则求解表达式 3,表达式 3 的值就是整个条件表达式的值。本题中用了两次三目运算符。27.若有如下语句 #includeiostreamh void main( ) int x=3; do x=x-2; cout x; while(!(-X); 则上面程序段( )。 (分
32、数:70.00)A.产生的临时表文件的后缀名仍为dbfB.执行查询后,该临时表文件是当前文件C.可以像一般的 dbf 文件一样使用,可查询和修改表中记录 D.当关闭文件时,临时表文件将自动被删除解析:在表单及控件的属性中,Caption 属性是一个标题文本,它只能用来接收字符型数据。28.下列程序的运行结果为( )。 # include iostreamh int i=0; classA public: A( ) i + + ; ; void main( ) A a,b3,* c; C=b; cout i endl; (分数:70.00)A.2B.3C.4 D.5解析:外部变量 i 实际上记录
33、的是调用构造函数的次数。29.下面程序段的运行结果是( )。 voidmain( ) ihtt,a,b,C; a=1;b=2;C=2; while(abc) t=a;a=b;b=t;c-; couta“,“b“,“C; (分数:70.00)A.1,2,0 B.2,1,0C.1,2,1D.2,1,1解析:本题中(abc)的运算次序是先算 ab,返回 1,再运算 1c,返回 1,所以表达式 abc 的值为 1。 30.下列关于 C+语言类的描述中错误的是( )。(分数:70.00)A.intB.floatC.double D.不确定解析:选项 C) 中 Xwho7; p=&obj3; p-who8
34、; (分数:1.50)填空项 1:_ (正确答案:base class derivel class derive2 class)解析:本题考查虚函数的用法。类 base 含有虚函数 who-|_|-,该类派生出 derivel 类和 derive2 类,两个派生类中都有虚函数 who-|_|-的定义。在 main-|_|-函数中定义了一个指向 base 类的指针,它也被允许指向其派生类。在执行过程中,不断改变它所指的对象,当 p-who-|_|-时就能调用不同的版本。这是因为使用了虚函数,因而进行动态联编。71.语句 cout /n还可表示为 1。(分数:1.50)填空项 1:_ (正确答案:
35、cout end1;)解析:“/n”表示换行,end1 也可表示换行。end1 和“/n”可以通用。72.按“行进后出”原则组织数据的数据结构是 1 。(分数:1.50)解析:73.在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承 private。 已知有如下类定义: class Base protected: void fun1 public: Foo2:value(0) ; class Derived:Base; 则 Base 类中的成员函数 fun3,在 Derived 类中的访问权限是 4 (注意:要求填写private、protected 或 public 中的一
36、项)。 (分数:1.50)填空项 1:_ (正确答案:private)解析:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员。74.C+语言中表示双精度浮点数的关键字是 1。(分数:1.50)填空项 1:_ (正确答案:double)解析:C+语言中基本的数据类型关键字,有 int,float,double。 75.下列程序的输出结果是 1。 #inCludeiostream using namespace std; class Test public: Test2 cnt; Test3cnt; static int Count4 return cnt; privat
37、e: static int cnt; ; int Test:cnt0; int main5 coutTest:Count6“; Test t1,t2; Test*pT3new Test; Test*pT4new Test; coutTest:Count7; delete pT4; delete pT3; coutTest:Count8endl; return 0; (分数:1.50)填空项 1:_ (正确答案:042)解析:本题考核静态数据成员与静态成员函数的定义与使用方式。C中,提出静态成员的目的是为了解决数据共享的问题。一个给定类的每个对象都有类中定义的所有数据的自己的拷贝,如果在类中将数
38、据成员用 static 说明为静态的,则这个类成员只有一个拷贝并被这个类的所有对象所共享。类 Test 的静态成员 cnt,初始值为 0,所以执行语句“coutTest:Count-|_|-“;“后输出 0。然后程序创建了两个对象 t1 和 t2,以及两个对象指针并调用 new 来初始化指针,所以 cnt 的值变成了4(即此时输出为 4)。然后程序将对象指针 pT4、pT3 delete 了,此时将分别调用析构函数将 cnt 的减 1,所以最后输出 cnt 的值为 2。76.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,
39、称为 1。(分数:1.50)填空项 1:_ (正确答案:物理独立性)解析:数据独立性包括数据的物理独立性和逻辑独立性。物理独立性是指用户的应用程序与存储在磁盘上 的数据库中数据是相互独立的。数据在磁盘上的数据库中怎样存储是由 DBMS 管理的,用户程序不需要了 解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变时,应用程序不用改变。逻辑独 立性是指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,用户程 序也可以不变。77.用以下语句调用库函数 malloc,使字符指针 st 指向具有 11 个字节的动态存储空间,请填空。 st=(char*) 1;
40、(分数:1.50)填空项 1:_ (正确答案:malloc(11)或 malloc(sizeof(char) * 11 ))解析:malloc 函数的参数可以是一个具体的常数,也可以是一个表达式。在本题中, 可以是 malloc(11),也可以借助于 sizeof 运算符来表示。 78.以下程序的输出结果是 1。 #includeiostreamh voidfun( ) staticinta=0; a+=2; couta“; voidmain( ) intcc; for(cc=1;cc4;cc+) fun( ); coutendl; (分数:1.50)填空项 1:_ (正确答案:2 4 6)解
41、析:本题考查静态局部变量的使用。用关键字 static 声明的局部变量为“静态局部变量”,其值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。 79.C+语言的基本控制结构为顺序结构、选择结构和 1。(分数:1.50)填空项 1:_ (正确答案:循环结构)解析:C+语言 3 种基本结构就是顺序结构,选择结构,循环结构。 80.请按下面注释的提示,将类 B 的构造函数定义补充完整。 C1assA int a; public: A(int aaO)aaa; ; class B:public A int b; A c; public: /用 aa 初始化基类 A,用 aa1 初始化类对象成员 c B(int aa: 1baa2 ; (分数:1.50)填空项 1:_ (正确答案:A(Aa),c(aa+1)或 c(aa+1),A(aA))解析:本题考核派生类构造函数的定义。题中要求用明初始化基类 A,用 aa+1 初始化类对象成员 c,用的初始化列表的形式,即 A(aA),c(aa+1)或 c(aa+1),A(aA) 。