1、计算机二级(C+)65 及答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:60,分数:4200.00)1.下面程序段的运行结果是( )。 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,0B.2,1,0C.1,2,1D.2,1,12.下面程序的运行结果是( )。 #include“ iostreamh“ #define sum(a,b)a * b void main( ) int x; x=s
2、am(1+2,3); cout x; (分数:70.00)A.0B.9C.7D.53.下列语句不能够用于打开 C根目录下文件 testtxt 的语句是( )。(分数:70.00)A.3B.6C.10D.204.下面程序的运行结果是( )。 #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“; ; cla
3、ss derived:public basel,public base2 public: derived( )cout“3“; ; void main( ) derived obj; coutendl; (分数:70.00)A.123B.3120C.312D.30125.执行语句 for(i=1;i+ 4;);,后变量 i的值是(分数:70.00)A.SELECT姓名 FROM车间; WHERE 工资3000 AND 车间=“W1“OR 车间=“W2“B.SELECT姓名 FROM车间; WHERE 工资3000 AND(车间=“W1“OR 车间=“W2“)C.SELECT姓名 FROM车间;
4、 WHERE 工资3000 OR 车间=“W1“OR 车间=“W2“D.SELECT姓名 FROM车间; WHERE 工资3000 AND(车间=“W1“OR 车间=“W2“)6.以下叙述中错误的是_。 (分数:70.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参7.有以下程序: #define N 20 fun(int a,int n,int m) int i,j; for(i=m;i=n;i-)ai+1=ai; main() int i,aN=1,2,3,4,5
5、,6,7,8,9,10; fun(a,2,9); for(i=0;iA.10234B.12344C.12334D.122348.下列描述中哪个是正确的?(分数:70.00)A.私有派生的子类无法访问父类的成员B.类 A的私有派生子类的派生类 C无法初始化其祖先类 A对象的属性,因为类 A的成员对类 C是不可访问的C.私有派生类不能作为基类派生子类D.私有派生类的所有子孙类将无法继续继承该类的成员9.下面对于友元函数描述正确的是( )。(分数:70.00)A.多线程就是同时执行几个事件B.多线程是将程序分为几个并行的子任务,由它们并发交叉执行C.一个进程可产生多线程,形成执行流D.Java语言支
6、持多线程10.有以下程序 main() int a32=0,(*ptr)2,i,j; for(i=0;i,则输出结果是_。(分数:70.00)A.产生错误信息B.1 0 2 0 0 0C.1 2 2 0 0 0D.1 0 2 0 3 011.下列说法正确的是( )。(分数:70.00)A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字 inline定义12.关于 continue语句叙述不正确的是( )。(分数:70.00)A.continue语
7、句用于循环体中,结束循环B.continue语句用于循环体中,它使执行流跳出循环体中尚未执行的语句,并进行下一循环判断C.continue可以用于 if语句中D.continue语句不能代替 break语句13.下列对于线性链表的描述中正确的是_。 (分数:70.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的14.if 语句的语法格式可描述为 格式 1:if() 或 格式 2:if()else 关于上面的语法格式,下列表
8、述中错误的是(分数:70.00)A.部分可以是一个 if 语句,例如 if(if(a =0)?)B.部分可以是一个 if 语句,例如 if(?)if(?)C.如果在前加上逻辑非运算符!并交换和的位置,语句功能不变D.部分可以是一个循环语句,例如 if(?)while(?)?15.下面程序错误的语句是( )。 # include iostreamh void main( ) int * p=new int1; p=9; cout * p endl; delete p; (分数:70.00)A.ValueB.VisibleC.DefaultD.Enabled16.在公有派生的情况下,派生类中定义的
9、成员函数只能访问原基类的【 】(分数:70.00)A.公有成员和私有成员B.私有成员和保护成员C.公有成员和保护成员D.私有成员、保护成员和公有成员17.在 C+语言程序中,对象之间的相互通信通过( )。(分数:70.00)A.a=1;B.+i;C.a=a+1=5D.! (+a! =b-)18.下列数据结构中,能用二分法进行查找的是_。 (分数:70.00)A.顺序存储的有序线性表B.线性链表C.二叉链表D.有序线性链表19.有以下程序 #includeiostream int i0; void fun( ) static int i1; Std:couti,; Std:couti,; int
10、 main( ) fun();fun(); return 0; 程序执行后的输出结果是【 】 (分数:70.00)A.1,2,1,2,B.1,2,2,3,C.2,0,3,0,D.1,0,2,0,20.多态性指的是( )。(分数:70.00)A.以任何方式调用一个虚函数B.以任何方式调用一个纯虚函数C.借助于指向对象的基类指针或引用调用一个虚函数D.借助于指向对象的基类指针或引用调用一个纯虚函数21.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言( )。(分数:70.00)A.满足一定规范化要求的二维表B.二维表中的一行C.二维表中的一列D.二维表中的一个数字项22.以下叙述中正确
11、的是( )。(分数:70.00)A.构成 C+语言程序的基本单位是类B.可以在一个函数中定义另一个函数C.main()函数必须放在其他函数之前D.所有被调用的函数一定要在调用之前进行定义23.以下程序的输出结果是( )。 #includeiostream.h voidreverse(inta,intn) inti,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; voidmain( ) int b10:=1,2,3,4,5,6,7,8,9,10;inti,s=0; reverse(b,8); for(i=6;i10;i+)s+=bi; coutS; (分
12、数:70.00)A.22B.10C.34D.3024.判断 char型变量 c是否为小写字母的正确表达式是( )。(分数:70.00)A.a =c =zB.(c =A) void main( ) int a=10,b=20; couta“ “b; swap( char *s1=“Fortran“,*s2=“Basic“; if(fp=fopen(“test.txt“,“wb“)=NULL) printf(“Cant open test.txt file/n“); exit(1); fwrite(s1,7,1,fp); /*把从地址 s1开始的 7个字符写到 fp所指文件中*/ f seek(f
13、p, 0L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); (分数:70.00)A.BasicanB.BasicFortranC.BasicD.FortranBasic36.以下都是 C+语言标识符的是( )。(分数:70.00)A.dsfa,df4,f$B.huhj,a,k2C.3k,h,j_9D._ok,jk,k837.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是_。 (分数:70.00)A.(!E=0)B.(E0|E=0) printf(“%c“,sn-); 当编译连接通过后,运行程序 T18
14、时,输入 Thank!则输出结果是: 5。 (分数:1.50)填空项 1:_72.对于下面定义的类 MyClass,请在函数 f1中添加对象成员把 n的值修改为 50。 class MyClass public: MyClass(int x)n=x; void SetNum (int nl) n=nl; private: int n; ; int f( ) MyClass * ptr=new MyClass(45);2 (分数:1.50)填空项 1:_73.在 C+语言中每个类都有一个 1 指针,该指针指向正在调用成员函数的对象。(分数:1.50)填空项 1:_74.重载的运算符保持其原有的
15、1、优先级和结合性不变。(分数:1.50)填空项 1:_75.设置虚基类的目的是 1,通过 2 表示虚基类。(分数:1.50)填空项 1:_76.以下程序的输出结果是 1。 #includeiostreamh unsignedfun(unsignednum) unsignedk=1; do k * =num%10;num/=10;while(num); returnk; voidmain( ) unsignedn=26; coutfun(n)endl; (分数:1.50)填空项 1:_77.在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承 private。 已知有如下类定义
16、: class Base protected: void fun1 public: Foo2:value(0) ; class Derived:Base; 则 Base类中的成员函数 fun3,在 Derived类中的访问权限是 4 (注意:要求填写private、protected 或 public中的一项)。 (分数:1.50)填空项 1:_78.C+语言提供的基本控制结构可以分为 3种类型:顺序结构、 1 和循环结构。(分数:1.50)填空项 1:_79.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 1 方式。(分数:1.50)填空项
17、1:_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:_计算机二级(C+)65 答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:60,分数:4200.00)1.下面程序段的运行结果是( )。 voidmain( ) ihtt,a,b,C; a=1;
18、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。 2.下面程序的运行结果是( )。 #include“ iostreamh“ #define sum(a,b)a * b void main( ) int x; x=sam(1+2,3); cout x; (分数:70.00)A.0B.9C.7 D.5解析:本题考查宏定义的简单运用。理解宏定义,sum(a,
19、b)o * b 中 a为 1+2,b 为 3,故 sum(1+2,3):1+2 * 3,即宏定义的替换过程是原样替换。注意:选项 B)的计算方法是(1+2) * 3=9 是错误的,注意,不要随意的加括号。3.下列语句不能够用于打开 C根目录下文件 testtxt 的语句是( )。(分数:70.00)A.3B.6C.10D.20 解析:由于大多数监听器接口都包含了我们可能不需要的方法。使用适配器类作为父类,可避免为实现接口而必须实现一些空方法的麻烦。4.下面程序的运行结果是( )。 #includeiostreamh class base protected: int a; public: ba
20、se( )cout“0“; ; class basel:virtual base public: basel( )cout“1“; ; 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.123 B.3120C.312D.3012解析:本题考查的是含有虚基类的继承中构造函数的调用顺序,应该先 调用基类的构造函数,
21、接着是按照派生类继承列表的顺序依次调用虚基类的构造函数, 最后调用派生类自己的构造函数。5.执行语句 for(i=1;i+ 4;);,后变量 i的值是(分数:70.00)A.SELECT姓名 FROM车间; WHERE 工资3000 AND 车间=“W1“OR 车间=“W2“B.SELECT姓名 FROM车间; WHERE 工资3000 AND(车间=“W1“OR 车间=“W2“)C.SELECT姓名 FROM车间; WHERE 工资3000 OR 车间=“W1“OR 车间=“W2“D.SELECT姓名 FROM车间; WHERE 工资3000 AND(车间=“W1“OR 车间=“W2“) 解
22、析:List 组件的该构造方法的第一个参数的意思是它的初始显式行 数,如果该值为 0则显示 4行,第二个参数是指定该组件是否可以多选,如果值为 true则 是可以多选,false 是不可多选,如果不指定则缺省是不能多选。6.以下叙述中错误的是_。 (分数:70.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参 解析:在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释 放,实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的
23、值如果发生改变,并不会改变 主调函数的实参的值,也就是说形参的值是不传回给对应的实参的。7.有以下程序: #define N 20 fun(int a,int n,int m) int i,j; for(i=m;i=n;i-)ai+1=ai; main() int i,aN=1,2,3,4,5,6,7,8,9,10; fun(a,2,9); for(i=0;iA.10234B.12344C.12334 D.12234解析:本题函数 fun 的作用是将指定的数组元素(从下标 n 到下标 m)向后移一位。由函数调用“fun(a,2,9);”可知,函数 fun 用于将 a2 到 a9的各元素依次向后
24、移一位,移完后,a 数组中各元素的值分别为 1,2,3,3,4,5,6,7,8,9,10,故输出的前 5 个数组元素为 12334。8.下列描述中哪个是正确的?(分数:70.00)A.私有派生的子类无法访问父类的成员B.类 A的私有派生子类的派生类 C无法初始化其祖先类 A对象的属性,因为类 A的成员对类 C是不可访问的 C.私有派生类不能作为基类派生子类D.私有派生类的所有子孙类将无法继续继承该类的成员解析:C+语言中一个派生类能不能继承基类的所有数据成员受继承方式的限制。9.下面对于友元函数描述正确的是( )。(分数:70.00)A.多线程就是同时执行几个事件 B.多线程是将程序分为几个并
25、行的子任务,由它们并发交叉执行C.一个进程可产生多线程,形成执行流D.Java语言支持多线程解析:C+语言中的抽象类就是类中至少有一个纯虚函数的类,抽象类不能被实例化,继承抽象类的类必须实现抽象类中的纯虚函数。10.有以下程序 main() int a32=0,(*ptr)2,i,j; for(i=0;i,则输出结果是_。(分数:70.00)A.产生错误信息B.1 0 2 0 0 0 C.1 2 2 0 0 0D.1 0 2 0 3 0解析:二维数组 a,通过 a32=0将数组中的各个元素初始化为 0,指针变量 ptr,指向包含 2 个元素的 一维数组。a00=1,a10=2,故本题的输出选
26、B。11.下列说法正确的是( )。(分数:70.00)A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字 inline定义解析:本题考查的是内联函数的定义,引入内联函数是为了解决程序中函数调用的效率问题,是以目标代码的增加为代价换取时间的节省;一般函数在运行时被调用,而调用的内联函数在编译时就被替代了,如果不加 inline关键字,则编译器会将在类说明部分定义的任何函数都被认定为内联函数。12.关于 continue语句叙述不正确的是( )。(
27、分数:70.00)A.continue语句用于循环体中,结束循环 B.continue语句用于循环体中,它使执行流跳出循环体中尚未执行的语句,并进行下一循环判断C.continue可以用于 if语句中D.continue语句不能代替 break语句解析:本题考查 continue语句的运用。continue 是跳出了本次循环中尚未执行的语句,重新执行循环,但没有终止循环。13.下列对于线性链表的描述中正确的是_。 (分数:70.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的 B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元
28、素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间 的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。14.if 语句的语法格式可描述为 格式 1:if() 或 格式 2:if()else 关于上面的语法格式,下列表述中错误的是(分数:70.00)A.部分可以是一个 if 语句,例如 if(if(a =0)?)B.部分可以是一个 if 语句,例如 if(?)if(?)C.如果在前加上逻辑非运算符!并交换和的位置,语句功能不变D.部分可以是一个循环语句,例如 if(?)while(?
29、)?解析:15.下面程序错误的语句是( )。 # include iostreamh void main( ) int * p=new int1; p=9; cout * p endl; delete p; (分数:70.00)A.ValueB.VisibleC.DefaultD.Enabled 解析:将标题移动到页面页眉中,则标题在每一页上都显示;如果将标题移动到报表页眉中,则打印时只在第一页的开始位置出现。16.在公有派生的情况下,派生类中定义的成员函数只能访问原基类的【 】(分数:70.00)A.公有成员和私有成员B.私有成员和保护成员C.公有成员和保护成员 D.私有成员、保护成员和公有
30、成员解析:本题考核派生类的定义和访问权限。当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类私有成员不可访问。即基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。17.在 C+语言程序中,对象之间的相互通信通过( )。(分数:70.00)A.a=1;B.+i; C.a=a+1=5D.! (+a! =b-)解析:赋值表达式的组成是:在赋值运算符的左边是一变量,右边是一表达式。选项 B) =8+b+c=9中,前半句 a=8+b+c正确,但的是 a+b+c=9左边其实是一个表达式,而不是一个变量。选项 C) i=l23*4
31、 中,连用两个双目运算符,双目运算符的用法是左右两端必须都是表达式或变量才行。选项 D) a=a+7=c+b,a+7=c+b 的左边也是个表达式,而非变量。 18.下列数据结构中,能用二分法进行查找的是_。 (分数:70.00)A.顺序存储的有序线性表 B.线性链表C.二叉链表D.有序线性链表解析:二分法查找只适用于顺序存储的有序表。在此所说的有序表是指线性表中的元素按值非递减排列(即 从小到大,但允许相邻元素值相等)。19.有以下程序 #includeiostream int i0; void fun( ) static int i1; Std:couti,; Std:couti,; int
32、 main( ) fun();fun(); return 0; 程序执行后的输出结果是【 】 (分数:70.00)A.1,2,1,2,B.1,2,2,3,C.2,0,3,0,D.1,0,2,0, 解析:本题考核变量的作用域、生存周期和存储类别(自动、静态、存储器、外部)。题中即定义全局变量i又在函数 fun内部定义了局部静态变量 i,当进入函数 fun里面的大括号时,局部静态变量 i有效,所以输出 1,然后局部静态变量 i加 1,出了里面的大括号后,全局变量 i有效,所以输出 0。同理,第二次调用 fun后,输出 2和 0。20.多态性指的是( )。(分数:70.00)A.以任何方式调用一个虚
33、函数B.以任何方式调用一个纯虚函数C.借助于指向对象的基类指针或引用调用一个虚函数 D.借助于指向对象的基类指针或引用调用一个纯虚函数解析:本题考查多态性的基本概念。多态性主要是指借助于指向对象的基类指针或引用调用一个虚函数。21.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言( )。(分数:70.00)A.满足一定规范化要求的二维表 B.二维表中的一行C.二维表中的一列D.二维表中的一个数字项解析:Java 中公有变量使用 public定义,定义常量变量使用 final,另外注 意的是修饰符的顺序,一个最完整的修饰是 public static final int varial
34、_a=100;这个顺序 不能变,而选项 C)错在修饰符的顺序上。22.以下叙述中正确的是( )。(分数:70.00)A.构成 C+语言程序的基本单位是类 B.可以在一个函数中定义另一个函数C.main()函数必须放在其他函数之前D.所有被调用的函数一定要在调用之前进行定义解析:关于 C+语言,我们应该了解以下必须要掌握的基础知识: c+程序是由类构成的。一个函数由两部分组成:函数的首部和函数体。 一个类由两部分组成:类成员变量和类成员函数。一个 C+程序总是从 main函数开始执行的,而不论 main函数在整个程序中的位置如何(main 函数可以放在程序最前头,也可以放在程序最后,或写在一些函
35、数之前,在另一些函数之后)。C+程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写在几行上。每个语句和数据定义的最后必须有一个分号。可以用/*/和/对 C+语言的程序的任何部分作注释。 23.以下程序的输出结果是( )。 #includeiostream.h voidreverse(inta,intn) inti,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; voidmain( ) int b10:=1,2,3,4,5,6,7,8,9,10;inti,s=0; reverse(b,8); for(i=6;i10;i+)s+=bi;
36、 coutS; (分数:70.00)A.22 B.10C.34D.30解析:在 main函数中,调用 reverse函数将 b数组中的前 8个成员进行互置,执行完毕后,b 数组中的成员为 18,7,6,5,4,3,2,1,9,10,在执行 for循环结构后,将 b6,b7b9的值相加,结果为 1+2+9+10:22。注意:在计算累加和时,应将累加变量赋值为零。 24.判断 char型变量 c是否为小写字母的正确表达式是( )。(分数:70.00)A.a =c =zB.(c =A) void main( ) int a=10,b=20; couta“ “b; swap( t= * p; * p=
37、*q;*q=t;执行程序时,先将 a的地址传递给指针变量 p,b 的地址传递给指针变量 q,然后将*p(a 的值)的值传递给t,将*q(b 的值)传递给 * p,将 t的值传递给 * q,从而将 a值和 b值互换。26.通常拷贝构造函数的参数是( )。(分数:70.00)A.某个对象名B.某个对象的成员名C.某个对象的引用名 D.某个对象的指针名解析:拷贝初始化构造函数的作用是用一个已知的对象来初始化一个被 创建的同类的对象,该函数只有一个参数,并且是对同类的某个对象的引用。27.下列描述中正确的是_。 (分数:70.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,
38、又是物理实体D.软件是程序、数据与相关文档的集合 解析:计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。28.sizeof(float)是( )。(分数:70.00)A.一个双精度型表达式B.一个整型表达式 C.一种函数调用D.一个不合法的表达式解析:该函数用于数据类型和变量。注意:size of 操作符不能用于函数,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、void 类型等。29.执行语句 for(i=1;i+ 4;);,后变量 i的值是(分数:70.00)A.3B.4C.5 D.不定解析:for 语句中的表
39、达式可以部分或全部省略,但两个“;”不能省略,若 3 个表达式均省略,会因为缺少条件判断,导致循环无限执行,而形成死循环。本题中当 i的值为 5的时候,循环终止。30.有如下说明 int a10: 1,2,3,4,5,6,7,8,9,10 ,* p=a; 则数值为 9的表达式是( )。 (分数:70.00)A.*p+9B.*(p+8) C.*p+=9D.p+8解析:在 C+语言的数组元素的引用方法,如数组元素 a0,可以用表达式*(p+0),即*p 来引用,对于数组元素 a1,可以用表达式*(P+1)来引用,在这里,p+1 的值就是数组元素 a1的地址,对此地址使用“间接访问运算符”:*(p+
40、1)就代表存储单元 a1,注意:一对圆括号不可少。同样,对于数组元素a2,则可以用表达式*(p+2)来引用,对于数组元素 a9,可以用表达式*(P+9)来引用。因此,当指针变量 p指向 a数组的起始地址时,若 0i0|E=0) printf(“%c“,sn-); 当编译连接通过后,运行程序 T18 时,输入 Thank!则输出结果是: 5。 (分数:1.50)填空项 1:_ (正确答案:!knahT)解析:本题考核的知识点是“文件包含”处理功能,“文件包含”处理是指一个源文件可以将另外一个源 文件的全部内容包含进来,供源文件使用。此题中“myfun.c“就是被包含在 T18.c 下进行编译。m
41、yfun.c 文件 是用来实现字符串反序的功能,用 getchar-|_|-函数输入字符并赋给数组 s,每输入一个字符,数组下标 n 自行加 1,直到遇到回车键时输入结束。while(n=0)下的条件语句就是来实现字符串反续功能的。72.对于下面定义的类 MyClass,请在函数 f1中添加对象成员把 n的值修改为 50。 class MyClass public: MyClass(int x)n=x; void SetNum (int nl) n=nl; private: int n; ; int f( ) MyClass * ptr=new MyClass(45);2 (分数:1.50)填
42、空项 1:_ (正确答案:ptr-SetNum(50);)解析:本题考查的是考生使用对象指针调用成员函数的能力,指针调用成员函数应该使用符号“-”。73.在 C+语言中每个类都有一个 1 指针,该指针指向正在调用成员函数的对象。(分数:1.50)填空项 1:_ (正确答案:this)解析:C+语言中 this指针是类自带的一个指针,它指向正在调用成员函数的对象。74.重载的运算符保持其原有的 1、优先级和结合性不变。(分数:1.50)填空项 1:_ (正确答案:操作符个数)解析:本题考查的是运算符重载的概念,用户重新定义的运算符不改变原运算符的优 先性和结合性,也不改变运算符的语法结构,也就是
43、说重载运算符不会产生新的运算符。 75.设置虚基类的目的是 1,通过 2 表示虚基类。(分数:1.50)填空项 1:_ (正确答案:解决二义性问题)解析:解决二义性的两个基本方法一是用域名进行限制,二是用虚基类的方法。76.以下程序的输出结果是 1。 #includeiostreamh unsignedfun(unsignednum) unsignedk=1; do k * =num%10;num/=10;while(num); returnk; voidmain( ) unsignedn=26; coutfun(n)endl; (分数:1.50)填空项 1:_ (正确答案:12)解析:函数有
44、一个形参 num,循环前变量 k置 1,循环中,表达式 num%10是取 num 的个位,将 num的个位值累乘于 k中,然后 num除以 10。循环直至 num为。结束,这是 逐一求出 num十进制表示的各位数字,并累乘于变量 k的循环。函数最后返回 k。函数 fun 的功能是求整数的各位十进数字积。 77.在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承 private。 已知有如下类定义: class Base protected: void fun1 public: Foo2:value(0) ; class Derived:Base; 则 Base类中的成员函数
45、fun3,在 Derived类中的访问权限是 4 (注意:要求填写private、protected 或 public中的一项)。 (分数:1.50)填空项 1:_ (正确答案:private)解析:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员。78.C+语言提供的基本控制结构可以分为 3种类型:顺序结构、 1 和循环结构。(分数:1.50)填空项 1:_ (正确答案:选择结构)解析:顺序结构(也叫连续结构)和循环结构是经常被使用的,不过选择结构(if 和 switch)也是一种重要的流程控制结构。79.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 1 方式。(分数:1.50)填空项 1:_ (正确答案:传地址)解析:本题考查的是传值调用和传址调用的区别-传值调用只是进行值的简单复制,返回之后不会改变原来的值;而传址调用是把参数的地址传入,会改变原来的值。 80.请按下面注释的提示,将类 B的构造函数定义补充完整。 C1assA int a; public: A(int aaO)a