1、二级 C+笔试-177 及答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有以下程序:#includestring.h#includeiostream.hvoid main( ) char * p“abcde/0fghjik/0“;cout strlen(p) ;程序运行后的输出结果是(分数:2.00)A.12B.15C.6D.52.若有说明语句:char a “It is mine“;char * p“It is mine“;则以下不正确的叙述是(分数:2.00)A.a1 表示的是字符 t 的地址B.p 指向另外的字符串时,字符串的长度不受限
2、制C.p 变量中存放的地址值可以改变D.a 中只能存放 10 个字符3.下列程序的运行结果是#inClUdeiostream.hclass Locationprivate:int X,Y;pubhc:void init(int0,int0) ;void valueX(int val) Xval;int valueX( ) retum X;void valueY(int val) Yval;int valueY( ) retum Y;void Location: :init(int initX,int initY) XinitX;YinitY;Void main( ) Location A,B;
3、A. init( ) ;A. valueX(5) ;cout A. valueX( ) endl A. valueY( ) endl;B. init(6,2) ;B. valueY(4) ;cout B. valueX( ) endl B. valueY( ) endl;(分数:2.00)A.5B.0C.5D.00 0 0 06 6 6 64 4 2 24.下列不属于结构化分析的常用工具的是(分数:2.00)A.数据流图B.数据字典C.判定树D.PAD 图5.面向对象程序设计思想的主要特征中不包括(分数:2.00)A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态性6.能正确表示逻辑
4、关系:“a10 或 a0”的 C语言表达式是(分数:2.00)A.a10 or a0B.a0 | a10C.a10 for(i1;iNUM;i) cout i;该程序中的 fof 循环执行的次数是(分数:2.00)A.5B.6C.7D.811.执行下列程序段,结果是#includeiostream.hvoid main( ) int x40;char yC;int n; n(xcout n;(分数:2.00)A.0B.1C.2D.312.数据库的故障恢复一般是由(分数:2.00)A.数据流图完成的B.数据字典完成的C.DBA 完成的D.PAD 图完成的13.如果在表达式x/y 中,是作为友元函
5、数重载的,/是作为成员函数重载的,则该表达式还可为(分数:2.00)A.(operator(x) ) .operator/(y)B.(operator(0) ) .operator/(y)C.operator/(operator(x,0) ) ,y)D.operator/(operator(0) ) ,y)14.下面程序的输出结果是#includeiostream.hclass Apublic:A( ) cout “construtA“ endl;VirtualA( ) cout “destructA“ endl;class B: public A;class C:public A;class
6、 D:public B,public C;void main( ) D d;(分数:2.00)A.constructAB.constructAC.constructAD.constructAdestructA constructA constructA constructAdestructA constructA constrnctAdestructA destructA constructAdestructA destructA destructAdestrctA destructAdestructA15.要想使 23.78965421 的输出为 23.7887,应用的语句是(分数:2.00
7、)A.cout 23.78965421;B.cout fixed 23.78965421;C.cout 23.789654210.001;D.cout fixed 23.789654210.001;16.若执行下面的程序时,从键盘上输入 5 和 2,则输出结果是#includeiostream.hvoid main( ) int a,b,k;cin a b;ka;if(ab) ka%b;elsekb%a;cout k endl;(分数:2.00)A.5B.3C.2D.017.已知数据表 A 中每个元素距其最终位置不远,为节省时间,应采用的算法是(分数:2.00)A.堆排序B.直接插入排序C.快
8、速排序D.直接选择排序18.下列程序是用来判断数组中特定元素的位置所在,则输出结果为#includeconio.h#includeiostream.hint fun(int * s,int t,int * k) int i;*k0;for(i0;it;i) if(s * k si ) *ki;retum s * k ;void main( ) int a10 876,675,896,101,301,401,980,431,451,777,k;fun(a,10,cout k , ak ;(分数:2.00)A.7,431B.6C.980D.6,98019.下列程序的输出结果是#includeios
9、tream.hint b2;int func(int *(分数:2.00)A.b * a; return(B.;void main( ) int a,b,c;sub(10,5,sub(7,a,sub(a,b,cout a “,“22.C语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言?(分数:2.00)A.ASPB.CC.VBD.Java23.在 C语言中,封装是借助于什么达到的?(分数:2.00)A.结构B.类C.数组D.函数24.有以下程序:#includeiostream.hFloat fun(int x, int y) return(xy) ;void main( ) int
10、a2,b5,c8;cout fun(int) fun(ac, b) ,ac) ;程序运行后的输出结果是(分数:2.00)A.编译出错B.9C.21D.9.025.设变量 a 是 int 型,f 是 double 型,i 是 float 型,则表达式 10ai * f 值的数据类型是(分数:2.00)A.intB.floatC.doubleD.不确定26.对建立良好的程序设计风格,下面描述正确的是(分数:2.00)A.程序应简单、清晰、可读性好B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无27.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10
11、 0,1,2,3,4,5,6,7,8,9, * pa;(分数:2.00)A.apaB.* (for(i0;i2;i) x;for(j0;j3;j) if(j%2) continue;x;x;cout “X“ x;(分数:2.00)A.x4B.x8C.x6D.x1234.关于 this 指针的说明不正确的是(分数:2.00)A.不能在程序中修改 this 指针B.this 指针可以给其他指针赋值,但不能修改 this 指针C.静态成员函数中没有 this 指针D.this 指针可以被赋值35.有如下程序:#includeiostream.hlong fib(int n) if(n2) retur
12、n(fib(n1) fib(n2) ) ;else return(2) ;void main( ) cout nb(3) ;该程序的输出结果是(分数:2.00)A.2B.4C.6D.8二、填空题(总题数:13,分数:26.00)36.冒泡排序算法在最好的情况下的元素交换次数为 。(分数:2.00)填空项 1:_37.在最坏情况下,堆排序需要比较的次数为 。(分数:2.00)填空项 1:_38.若串 s“MathTypes“,则其子串的数目是 。(分数:2.00)填空项 1:_39.软件开发环境是全面支持软件开发全过程的 集合。(分数:2.00)填空项 1:_40.关系数据库的关系演算语言是以
13、为基础的 DML 语言。(分数:2.00)填空项 1:_41.C语言中关键字运算符有 new、delete 和 。(分数:2.00)填空项 1:_42.将以下程序写成三日运算表达式是 。if(ab) maxa;else maxb;(分数:2.00)填空项 1:_43.以下程序的输出结果是 。#includeiostream.hclass objectprivate:int val;public:object( ) ;object(int i) ;object( ) ;object: :object( ) val0;cout “Default constructor for object“ en
14、dl;object: :object(int i) vali;cout “Constructor for object“ val endl;object: :object( ) cout “Destructor for object“ val endl;class container private:object one;object two;int data;public:container( ) ;container(int i,int j,int k) ;container( ) ;container: :container( ) data0;cout “Default construc
15、tor for container“ endl;container: :container(int i,int j,int k) :two(i) ,one(j) datak;cout “Constructor for container“ endl;container: :container( ) cout “Destructor for container“ endl;void main( ) container anObj(5,6,10) ;(分数:2.00)填空项 1:_44.下面程序的功能是将字符数组 a 中下标值为偶数的元素从小到大排列,其他元素不变,请填空。#includeiost
16、ream.h#includestring.hvoid main( ) char a “clanguage“, t;int I ,j, k;kstrlen(a) ;for(i0;ik2;i2) for(ji2;jk; 9 ) if( 10 ) tai ;ai aj ;aj t; cout a;cout endl;(分数:2.00)填空项 1:_45.静态成员函数可以直接访问类的 11 成员,不能直接访问类的 12 成员。(分数:2.00)填空项 1:_46.请定义一个函数名为 A,返回值为 int,没有参数的纯虚函数的定义是 。(分数:2.00)填空项 1:_47.表达式 x. operator
17、(y. operator(0) ) 还可以写成 。(分数:2.00)填空项 1:_48.假设 fin 是一个文件流对象,则关闭文件的语句是 。(分数:2.00)填空项 1:_二级 C+笔试-177 答案解析(总分:96.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有以下程序:#includestring.h#includeiostream.hvoid main( ) char * p“abcde/0fghjik/0“;cout strlen(p) ;程序运行后的输出结果是(分数:2.00)A.12B.15C.6D.5 解析:解析 C语言规定了一个字符串结束标志,
18、以字符/0代表,在遇到/0时,表示字符串结束,由它前面的字符组成字符串。2.若有说明语句:char a “It is mine“;char * p“It is mine“;则以下不正确的叙述是(分数:2.00)A.a1 表示的是字符 t 的地址B.p 指向另外的字符串时,字符串的长度不受限制C.p 变量中存放的地址值可以改变D.a 中只能存放 10 个字符 解析:解析 本题考查字符串数组和指针的引用方式。在 C语言中,系统在每个字符串或数组的最后自动加入一个字符/0,作为字符的结束标志,在本题中,char a “It is mine”;所表示的 a字符串实际含有 11 个字符。3.下列程序的运
19、行结果是#inClUdeiostream.hclass Locationprivate:int X,Y;pubhc:void init(int0,int0) ;void valueX(int val) Xval;int valueX( ) retum X;void valueY(int val) Yval;int valueY( ) retum Y;void Location: :init(int initX,int initY) XinitX;YinitY;Void main( ) Location A,B;A. init( ) ;A. valueX(5) ;cout A. valueX(
20、) endl A. valueY( ) endl;B. init(6,2) ;B. valueY(4) ;cout B. valueX( ) endl B. valueY( ) endl;(分数:2.00)A.5 B.0C.5D.00 0 0 06 6 6 64 4 2 2解析:解析 本题中有成员函数和它的重载函数,要注意它们的不同,在本题中先调用了 init 函数,初始化了 X、Y,都为 0,valueX(5) ;又将 X 变为 5,所以输出 5 和 0,然后初始化 init(6,2) ,接着又valueY(4) ;将 X、Y 设为 6 和 4,所以输出 6 和 4。4.下列不属于结构化分析
21、的常用工具的是(分数:2.00)A.数据流图B.数据字典C.判定树D.PAD 图 解析:解析 结构化分析的常用工具有数据流图、数据字典、判定树和判定表。而 PAD 图是常见的过程设计工具中的图形设计工具。5.面向对象程序设计思想的主要特征中不包括(分数:2.00)A.继承性B.功能分解,逐步求精 C.封装性和信息隐藏D.多态性解析:解析 面向对象程序设计的主要特征是继承性、封装性和信息隐藏、多态性。6.能正确表示逻辑关系:“a10 或 a0”的 C语言表达式是(分数:2.00)A.a10 or a0B.a0 | a10C.a10 for(i1;iNUM;i) cout i;该程序中的 fof
22、循环执行的次数是(分数:2.00)A.5B.6 C.7D.8解析:解析 这是一种简单的情况:不带参数的宏。关键要注意在对 2 * M1 进行宏替换时,要将宏名M 原样替换,得到 NUM 的形式为 2 * N11(千万不要随意给 N1 加上小括号,使 NUM 变为 2 * (N 1) 1,这就是宏名和变量名之间的区别) 。11.执行下列程序段,结果是#includeiostream.hvoid main( ) int x40;char yC;int n; n(xcout n;(分数:2.00)A.0B.1 C.2D.3解析:解析 按位与运算符“VirtualA( ) cout “destruct
23、A“ endl;class B: public A;class C:public A;class D:public B,public C;void main( ) D d;(分数:2.00)A.constructAB.constructA C.constructAD.constructAdestructA constructA constructA constructAdestructA constructA constrnctAdestructA destructA constructAdestructA destructA destructAdestrctA destructAdestru
24、ctA解析:解析 类 D 继承了类 C 和类 B,所以在构造的时候分别构造类 B 和类 C。15.要想使 23.78965421 的输出为 23.7887,应用的语句是(分数:2.00)A.cout 23.78965421;B.cout fixed 23.78965421;C.cout 23.789654210.001; D.cout fixed 23.789654210.001;解析:解析 C语言中默认小数的输出位一共是 6 位,fixed 的意义是在小数点后保留 6 位。16.若执行下面的程序时,从键盘上输入 5 和 2,则输出结果是#includeiostream.hvoid main(
25、 ) int a,b,k;cin a b;ka;if(ab) ka%b;elsekb%a;cout k endl;(分数:2.00)A.5B.3C.2 D.0解析:解析 本题考查简单的 ifelse 语句。先执行条件 if(ab) ,显然不成立,则执行 else 语句。17.已知数据表 A 中每个元素距其最终位置不远,为节省时间,应采用的算法是(分数:2.00)A.堆排序B.直接插入排序 C.快速排序D.直接选择排序解析:解析 当数据表 A 中每个元素距其最终位置不远,说明数据表 A 按关键字值基本有序,在待排序序列基本有序的情况下,采用插入排序所用时间最少,故答案为选项 B) 。18.下列程
26、序是用来判断数组中特定元素的位置所在,则输出结果为#includeconio.h#includeiostream.hint fun(int * s,int t,int * k) int i;*k0;for(i0;it;i) if(s * k si ) *ki;retum s * k ;void main( ) int a10 876,675,896,101,301,401,980,431,451,777,k;fun(a,10,cout k , ak ;(分数:2.00)A.7,431B.6C.980D.6,980 解析:解析 本题中直接使用指针变量 k,但在使用时要注意对 k 的指针运算,此外
27、,一开始应认为* k 的值为数组中的某一下标值,即 * k0。19.下列程序的输出结果是#includeiostream.hint b2;int func(int *(分数:2.00)A.b * a; return(B.;中的*是指针运算符(也称间接访问运算符) , * a 就是 main 函数中 a 的值。20.下列叙述中正确的是(分数:2.00)A.线性表是线性结构 B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构解析:解析 线性表是一种线性结构,数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性的;栈、队列、线性链表实际上也是线性表,故也是
28、线性结构;树是一种简单的非线性结构。21.以下程序的运行结果是#includeiostream.hvoid sub(int x, int y, int * z) * zyx;void main( ) int a,b,c;sub(10,5,sub(7,a,sub(a,b,cout a “,“解析:解析 在 C语言中,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。了解了实参指针变量的改变情况,本题只剩下简单的“加减法”了。22.C语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言?(分数:2.00)A.ASPB.C C.VBD.Java解析:解析 C语言是对 C 语
29、言进行了扩充,继承了它的语法,并增加了面向对象的设计方法。23.在 C语言中,封装是借助于什么达到的?(分数:2.00)A.结构B.类 C.数组D.函数解析:解析 C基本的性质就是它的封装性,而封装性主要是靠类来实现的。24.有以下程序:#includeiostream.hFloat fun(int x, int y) return(xy) ;void main( ) int a2,b5,c8;cout fun(int) fun(ac, b) ,ac) ;程序运行后的输出结果是(分数:2.00)A.编译出错B.9 C.21D.9.0解析:解析 本题的运算过程是 fun(int) fun (ac
30、, b) ,ac) ,fun(int) fun(10,5) ,28) ,fun (int) 15.000000,6) ,fun(15,6) 9。25.设变量 a 是 int 型,f 是 double 型,i 是 float 型,则表达式 10ai * f 值的数据类型是(分数:2.00)A.intB.floatC.double D.不确定解析:解析 根据混合运算规则,如果有一个数据是 double 型,则其他数据类型先转化为 double 型,运算的结果最终也是 double 型。为保证精度的不丢失,表达式的数据类型是变量和常量中精确度最高的变量类型。26.对建立良好的程序设计风格,下面描述正
31、确的是(分数:2.00)A.程序应简单、清晰、可读性好 B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无解析:解析 程序设计应该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句复杂化。27.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10 0,1,2,3,4,5,6,7,8,9, * pa;(分数:2.00)A.apaB.* (数据操作主要是描述在相应数据结构上的操作类型与操作方式。32.所有在函数中定义的变量,连同形式参数,都属于(分数:2.00)A.全局变量B.局部变量 C.静态变量D.寄存器变量解析:解析 C语言函数中定义的变量
32、都是属于这个函数的局部变量。33.以下程序的输出结果是#includeiostream.hvoid main( ) int i, j, x0;for(i0;i2;i) x;for(j0;j3;j) if(j%2) continue;x;x;cout “X“ x;(分数:2.00)A.x4B.x8 C.x6D.x12解析:解析 该题是一个 for 循环嵌套语句。第一层 for 循环循环 2 次,第二层循环 3 次,但当 j 等于 0 和 1 时,将执行 continue 语句,不执行 x运算,所以每次执行完内循环后,x 的增量为 1。最后一个 x运算将每次累加起来就是 x 的值。34.关于 th
33、is 指针的说明不正确的是(分数:2.00)A.不能在程序中修改 this 指针B.this 指针可以给其他指针赋值,但不能修改 this 指针C.静态成员函数中没有 this 指针D.this 指针可以被赋值 解析:解析 C的 this 指针是系统默认产生的一个指针,它是 const 的,所以是不能够被改变,不能够被赋值的。35.有如下程序:#includeiostream.hlong fib(int n) if(n2) return(fib(n1) fib(n2) ) ;else return(2) ;void main( ) cout nb(3) ;该程序的输出结果是(分数:2.00)A
34、.2B.4 C.6D.8解析:解析 fib(3) fib(2) fib(1) ,而 fib (2) 的返回值为 2,fib(1) 的返回值也为 2,故输出的 fib (3) 的值为 4。二、填空题(总题数:13,分数:26.00)36.冒泡排序算法在最好的情况下的元素交换次数为 。(分数:2.00)填空项 1:_ (正确答案:0)解析:解析 根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行 n1 次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为 0。37.在最坏情况下,堆排序需要比较
35、的次数为 。(分数:2.00)填空项 1:_ (正确答案:O(nlog 2n))解析:解析 在最坏情况下,冒泡排序所需要的比较次数为 n(n1) /2;简单插入排序所需要的比较次数为 n(n1) /2;希尔排序所需要的比较次数为 O(n1.5) ;堆排序所需要的比较次数为 O(nlog2n) 。38.若串 s“MathTypes“,则其子串的数目是 。(分数:2.00)填空项 1:_ (正确答案:46)解析:解析 串 s 中共有 9 个字符,由于串中字符各不相同,则其子串中有 0 个字符的 1 个(空串) ,1个字符的 9 个,2 个字符的 8 个,3 个字符的 7 个,4 个字符的 6 个,
36、5 个字符的 5 个,6 个字符的 4 个,7 个字符的 3 个,8 个字符的 2 个,9 个字符的 1 个,共有 1234567 89146。39.软件开发环境是全面支持软件开发全过程的 集合。(分数:2.00)填空项 1:_ (正确答案:软件工具)解析:40.关系数据库的关系演算语言是以 为基础的 DML 语言。(分数:2.00)填空项 1:_ (正确答案:谓词演算)解析:解析 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。41.C语言中关键字运算符有 new、delete 和 。(分数:2.00)填空项
37、 1:_ (正确答案:sizeof)解析:解析 C语言中关键字运算符有 3 个,分别为 new、delete 和 sizeof。new 是申请内存,delete 是释放内存,sizeof 是求字节数。42.将以下程序写成三日运算表达式是 。if(ab) maxa;else maxb;(分数:2.00)填空项 1:_ (正确答案:max(ab) ?a: b;)解析:解析 条件运算符要求有 3 个操作对象;称三目 (元) 运算符,它是 C语言中唯一的一个三日运算符。条件表达式的一般形式为:表达式 1?表达式 2:表达式 3。所以我们可以写成(ab) ?a: b,它是一个“条件表达式”。执行顺序是如
38、果(ab) 条件为真,则条件表达式取值 a 作为整个表达式的值,否则取值 b 作为整个表达式的值。43.以下程序的输出结果是 。#includeiostream.hclass objectprivate:int val;public:object( ) ;object(int i) ;object( ) ;object: :object( ) val0;cout “Default constructor for object“ endl;object: :object(int i) vali;cout “Constructor for object“ val endl;object: :obj
39、ect( ) cout “Destructor for object“ val endl;class container private:object one;object two;int data;public:container( ) ;container(int i,int j,int k) ;container( ) ;container: :container( ) data0;cout “Default constructor for container“ endl;container: :container(int i,int j,int k) :two(i) ,one(j) d
40、atak;cout “Constructor for container“ endl;container: :container( ) cout “Destructor for container“ endl;void main( ) container anObj(5,6,10) ;(分数:2.00)填空项 1:_ (正确答案:Constructor for object6Constructor for object5Constructor for containerDestructor for containerDestructor for object5Destructor for ob
41、ject6)解析:解析 C语言中的构造函数和析构函数分别是在声明对象时和对象调用完毕后调用,本题中的调用就是这样成对出现的。44.下面程序的功能是将字符数组 a 中下标值为偶数的元素从小到大排列,其他元素不变,请填空。#includeiostream.h#includestring.hvoid main( ) char a “clanguage“, t;int I ,j, k;kstrlen(a) ;for(i0;ik2;i2) for(ji2;jk; 9 ) if( 10 ) tai ;ai aj ;aj t; cout a;cout endl;(分数:2.00)填空项 1:_ (正确答案:
42、9 j210 ai aj 或 ai aj)解析:解析 strlen 函数是测试字符串长度的函数,函数的值为字符串中的实际长度,不包括/0在内。45.静态成员函数可以直接访问类的 11 成员,不能直接访问类的 12 成员。(分数:2.00)填空项 1:_ (正确答案:11 静态12 非静态)解析:解析 静态成员函数可以直接访问该类中的静态数据成员,而不能访问该类中的非静态数据成员。46.请定义一个函数名为 A,返回值为 int,没有参数的纯虚函数的定义是 。(分数:2.00)填空项 1:_ (正确答案:virtual int A( ) 0;)解析:解析 C语言中的纯虚函数是一种特殊的函数,它没有
43、自己的定义,只有声明,纯虚函数与虚函数声明的不同就在于在函数后面加上了“0”。47.表达式 x. operator(y. operator(0) ) 还可以写成 。(分数:2.00)填空项 1:_ (正确答案:xy或 x(y))解析:解析 因为卜 operator(0) 是对成员 y 重载运算符,所以是成员重载,在参数表中又有一个参数,是重载后缀,即 x(y) 。48.假设 fin 是一个文件流对象,则关闭文件的语句是 。(分数:2.00)填空项 1:_ (正确答案:fin)解析:解析 如果程序没有用 close( ) 主动关闭文件,则在文件流对象退出作用域时,被调用的析构函数会关闭对象所联系的文件。但应及时关闭,以便尽早释放占用的系统资源并将文件置于更安全的状态。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1