1、二级 C+笔试 84 及答案解析(总分:96.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.以下程序的运行结果是 #includeiostreamh void sub(int x,int y,int*z) *z=y-x; void main() int a,b,c; sub(10,5, void main() Dd;(分数:2.00)A.constructAB.constructAC.constmctAD.constmctA destructA constructA constmctA constructA destructA constructA cons
2、tructA destructA destructA constructA destructA destmctA destmctA destructA destmctA destructA4.有如下程序: #includeiostreamh long fib(int n) if(n2)return(fib(n-1)+fib(n-2); else return(2); void main() coutfib(3); 该程序的输出结果是(分数:2.00)A.2B.4C.6D.85.若有说明语句 char a=“It is mine“; char*p=“It is mine“; 则以下不正确的叙述是
3、(分数:2.00)A.a+1 表示的是字符 t 的地址B.p 指向另外的字符串时,字符串的长度不受限制C.p 变量中存放的地址值可以改变D.a 中只能存放 10 个字符6.下列不属于结构化分析的常用工具的是(分数:2.00)A.数据流图B.数据字典C.判定树D.PAD 图7.下列说法中,不属于数据模型所描述的内容的是(分数:2.00)A.数据结构B.数据操作C.数据查询D.数据约束8.以下程序的输出结果是 #includeiostreamh void main() int i,j,x=0; for(i=0;i2;i+) X+; for(j=0;j3;j+) if(j%2)continue; x
4、+; X+; cout “X=“ x;(分数:2.00)A.x=4B.x=8C.x=6D.x=129.能正确表示逻辑关系:“a10 或 a0”的 C+语言表达式是(分数:2.00)A.a=10 or a=0B.a=0|a=10C.a+10 *k=0; for(i=0;t;i+) if(s*ksi) *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=1;i=NUM;i+) couti; 该程序中的 for 循环执行的次数是(分数:2.00)A.5B.6C
5、.7D.825.关于 this 指针的说明不正确的是(分数:2.00)A.不能在程序中修改 this 指针B.this 指针可以给其他指针赋值,但不能修改 this 指针C.静态成员函数中没有 this 指针D.this 指针可以被赋值26.已知数据表 A 中每个元素距其最终位置不远,为节省时间,应采用的算法是(分数:2.00)A.堆排序B.直接插入排序C.快速排序D.直接选择排序27.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10=0,1,2,3,4,5,6,7,8,9,*p=a;(分数:2.00)A.ap=B.*( Binit(6,2); BvalueY(4) ;
6、 coutB.valueX() endlBvalueY() endl;(分数:2.00)A.5 0 6 4B.0 0 6 4C.5 0 6 2D.0 0 6 231.要想使 23.78965421 的输出为 23.7887 应用的语句是(分数:2.00)A.cout23.78965421;B.coutfixed23.78965421;C.cout23.78965421-0.001;D.coutfixed23.78965421-0.001;32.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言(分数:2.00)A.ASPB.CC.VBD.Java33.关于虚函数下面说法正确的是(分数
7、:2.00)A.若在重定义虚函数时使用了 virtual,则该重定义函数还是虚函数B.虚函数不能声明为友元C.子类必须重定义父类的虚函数D.虚函数不能是 static 的34.设变量 a 是 int 型,f 是 double 型,i 是 float 型,则表达式 10+a+i* f 值的数据类型(分数:2.00)A.intB.floatC.doubleD.不确定35.若执行下面的程序时,从键盘上输入 5 和 2,则输出结果是 #includeiostreamh void main() inta,b,k; cinab; k=a; if(ab) k=a%b; else k=b%a; coutken
8、dl;(分数:2.00)A.5B.3C.2D.0二、B填空题/B(总题数:13,分数:26.00)36.冒泡排序算法在最好的情况下的元素交换次数为U 【1】 /U。(分数:2.00)填空项 1:_37.在最坏情况下,堆排序需要比较的次数为U 【2】 /U。(分数:2.00)填空项 1:_38.若串 s=“MathTypes“,则其子串的数目是U 【3】 /U。(分数:2.00)填空项 1:_39.软件开发环境是全面支持软件开发全过程的U 【4】 /U集合。(分数:2.00)填空项 1:_40.关系数据库的关系演算语言是以U 【5】 /U为基础的 DML 语言。(分数:2.00)填空项 1:_4
9、1.C+语言中关键字运算符有 new,delete 和U 【6】 /U。(分数:2.00)填空项 1:_42.将以下程序写成三日运算表达式是U 【7】 /U。 if(ab)max=a; else max=b;(分数:2.00)填空项 1:_43.以下程序的输出结果是U 【8】 /U。 #includeiostreamh class object private: int val; public: object(); object(int i); object(); objectobject() val=0; cout“Default constructor for object“endl; o
10、bjectobject(int i) val=i; cout“Constmctor for object“valendl; objectobject() cout“Destructor for object“ val endl; class containet private: object one; object two; int data: public: containet(); container(int i,int j,int k); container(); containercontalner() dara=0; cout“Default constructor for cont
11、ainer“ endl; containercontainer(int i,int j,int k):two(i),one(j) data=k; cout“Constmctor for container“endl; containetcontainer() cout“Destmctor for container“ endl; void main() container anObj(5,6,10);(分数:2.00)填空项 1:_44.下面程序的功能是将字符数组 a 中下标值为偶数的元素从小到大排列,其他元素不变,请填空。 #includeiostreamh #include stringh
12、 void main() char a=“clanguage“,t; inti,j,k; k=strlen(a); for(i:0;i=k-2;i+=2) for(j=i+2;j=k;U 【9】 /U) if(U 【10】 /U) t=ai; ai =aj; aj =t; couta; coutendl;(分数:2.00)填空项 1:_45.静态成员函数可以直接访问类的U 【11】 /U成员,不能直接访问类的U 【12】 /U成员。(分数:2.00)填空项 1:_46.请定义一个函数名为 A,返回值为 int,没有参数的纯虚函数的定义是U 【13】 /U。(分数:2.00)填空项 1:_47.
13、表达式 x.operator+(yoperator+(0)还可以写成U 【14】 /U。(分数:2.00)填空项 1:_48.假设 fin 是一个文件流对象,则关闭文件的语句是U 【15】 /U。(分数:2.00)填空项 1:_二级 C+笔试 84 答案解析(总分:96.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.以下程序的运行结果是 #includeiostreamh void sub(int x,int y,int*z) *z=y-x; void main() int a,b,c; sub(10,5, void main() Dd;(分数:2.00)A
14、.constructAB.constructA C.constmctAD.constmctA destructA constructA constmctA constructA destructA constructA constructA destructA destructA constructA destructA destmctA destmctA destructA destmctA destructA解析:解析 类 D 继承了类 C 和类 B,所以在构造的时候分别构造类 B 和类 C。4.有如下程序: #includeiostreamh long fib(int n) if(n2)
15、return(fib(n-1)+fib(n-2); else return(2); void main() coutfib(3); 该程序的输出结果是(分数:2.00)A.2B.4 C.6D.8解析:解析 fib(3)=fib(2)+fib(1),而 fib (1)的返回值为 2,fib(1)的返回值也为 2,故输出的 fib (3)的值为 4。5.若有说明语句 char a=“It is mine“; char*p=“It is mine“; 则以下不正确的叙述是(分数:2.00)A.a+1 表示的是字符 t 的地址B.p 指向另外的字符串时,字符串的长度不受限制C.p 变量中存放的地址值可
16、以改变D.a 中只能存放 10 个字符 解析:解析 本题考查字符申数组和指针的引用方式。在 C+语言中,系统在每个字符中或数组的最后自动加入一个字符/0,作为字符的结束标志,在本题中,cbar a=“It is mine”;所表示的 a 字符串实际含有 11 个字符。6.下列不属于结构化分析的常用工具的是(分数:2.00)A.数据流图B.数据字典C.判定树D.PAD 图 解析:解析 结构化分析的常用工具有数据流图、数据字典、判定树和判定表。而 PAD 图是常见的过程设计工具中的图形设计工具。7.下列说法中,不属于数据模型所描述的内容的是(分数:2.00)A.数据结构B.数据操作C.数据查询 D
17、.数据约束解析:解析 数据模型所描述的内容有 3 个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构上的操作类型与操作方式。8.以下程序的输出结果是 #includeiostreamh void main() int i,j,x=0; for(i=0;i2;i+) X+; for(j=0;j3;j+) if(j%2)continue; x+; X+; cout “X=“ x;(分数:2.00)A.x=4B.x=8 C.x=6D.x=12解析:解析 该题是一个 for 循环嵌套语句。第一层 f
18、or 循环循环 2 次,第二层循环 3 次,但当 j 等于 0 和 1 时,将执行 continue 语句,不执行 x+运算,所以每次执行完内循环后,x 的增量为 1。最后一个x+运算将每次累加起来就是 x 的值。9.能正确表示逻辑关系:“a10 或 a0”的 C+语言表达式是(分数:2.00)A.a=10 or a=0B.a=0|a=10C.a+10 *k=0; for(i=0;t;i+) if(s*ksi) *k=i; return s*k; void main() int a10=876,675,896,101,301,401,980,431,451,777,k; fun(a,10, f
19、or(i=1;i=NUM;i+) couti; 该程序中的 for 循环执行的次数是(分数:2.00)A.5B.6 C.7D.8解析:解析 这是一种简单的情况:不带参数的宏。关键要注意在对 2*M+1 进行宏替换时,要将宏名 M原样替换,得到 NUM 的形式为 2*N+1+1(千万不要随意把给 N+1 加上小括号,使 NUM 变为 2* (N+1)+1,这就是宏名和变量名之间的区别)。25.关于 this 指针的说明不正确的是(分数:2.00)A.不能在程序中修改 this 指针B.this 指针可以给其他指针赋值,但不能修改 this 指针C.静态成员函数中没有 this 指针D.this
20、指针可以被赋值 解析:解析 C+的 this 指针是系统默认产生的一个指针,它足 const 的,所以是不能够被改变,不能够被赋值的。26.已知数据表 A 中每个元素距其最终位置不远,为节省时间,应采用的算法是(分数:2.00)A.堆排序B.直接插入排序 C.快速排序D.直接选择排序解析:解析 当数据表 A 中每个元素距其最终位置不远,说明数据表 A 按关键字值基本有序,在待排序序列基本有序的情况下,采用插入排序所用时间最少,故答案为选项 B)。27.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10=0,1,2,3,4,5,6,7,8,9,*p=a;(分数:2.00)A
21、.ap=B.*( Binit(6,2); BvalueY(4) ; coutB.valueX() endlBvalueY() endl;(分数:2.00)A.5 0 6 4 B.0 0 6 4C.5 0 6 2D.0 0 6 2解析:解析 本题中有成员函数和它的重载函数,要注意它们的不同,在本题中先调用了 init 函数,初始化了 X,Y,都为 0,valueX(5);义将 X 变为 5,所以输出 5 和 0,然后初始化 init(6,2) ,接着义valueY(4);将 X,Y 设为 6 和 4,所以输出 6 和 4。31.要想使 23.78965421 的输出为 23.7887 应用的语句
22、是(分数:2.00)A.cout23.78965421;B.coutfixed23.78965421;C.cout23.78965421-0.001; D.coutfixed23.78965421-0.001;解析:解析 C+语言中默认小数的输出位一共是 6 位,fixed 的意义是在小数点后保留 6 位。32.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言(分数:2.00)A.ASPB.C C.VBD.Java解析:解析 C+语言是对 C 语言进行了扩充,继承了它的语法,开增加了面向对象的设计方法。33.关于虚函数下面说法正确的是(分数:2.00)A.若在重定义虚函数时使用了
23、virtual,则该重定义函数还是虚函数B.虚函数不能声明为友元C.子类必须重定义父类的虚函数D.虚函数不能是 static 的 解析:解析 虚函数一定不能定义为静态的。虚函数可以声明为友元,子类也不是必须重定义父类的虚函数,若在重定义虚函数时使用了 virtual,则该重定义函数不一定还是虚函数。34.设变量 a 是 int 型,f 是 double 型,i 是 float 型,则表达式 10+a+i* f 值的数据类型(分数:2.00)A.intB.floatC.double D.不确定解析:解析 根据混合运算规则,如果有一个数据是 double 型,则其他数据类型先转化为 double
24、型,运算的结果最终也是 double 型。为保证精度的不丢失,表达式的数据类型是变量和常量中精确度最高的变量类型。35.若执行下面的程序时,从键盘上输入 5 和 2,则输出结果是 #includeiostreamh void main() inta,b,k; cinab; k=a; if(ab) k=a%b; else k=b%a; coutkendl;(分数:2.00)A.5B.3C.2 D.0解析:解析 本题考查简单的 ifelse 语句,先执行条件;if(ab)显然不成立,则执行 else 语句。二、B填空题/B(总题数:13,分数:26.00)36.冒泡排序算法在最好的情况下的元素交换
25、次数为U 【1】 /U。(分数:2.00)填空项 1:_ (正确答案:0)解析:解析 根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行 n-1 次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为 0。37.在最坏情况下,堆排序需要比较的次数为U 【2】 /U。(分数:2.00)填空项 1:_ (正确答案:O(nlog 2n))解析:解析 在最坏情况下,冒泡排序所需要的比较次数为 n(n-1)/2;简单插入排序所需要的比较次数为 n(n -1)/2;希尔排序所需要的比较次数为 O(n1.
26、5);堆排序所需要的比较次数为 O(nlog2n)。38.若串 s=“MathTypes“,则其子串的数目是U 【3】 /U。(分数:2.00)填空项 1:_ (正确答案:46)解析:解析 串 s 中共有 9 个字符,由于串中字符各不相同,则其子串中有 0 个字符的 1 个(空串),1个字符的 9 个,2 个字符的 8 个,3 个字符的 7 个,4 个字符的 6 个,5 个字符的 5 个,6 个字符的 4 个,7 个字符的 3 个,8 个字符的 2 个,9 个字符的 1 个,共有 1+2+3+4+5+6+7 +8+9+1=46。39.软件开发环境是全面支持软件开发全过程的U 【4】 /U集合。
27、(分数:2.00)填空项 1:_ (正确答案:软件工具)解析:40.关系数据库的关系演算语言是以U 【5】 /U为基础的 DML 语言。(分数:2.00)填空项 1:_ (正确答案:谓词演算)解析:解析 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。41.C+语言中关键字运算符有 new,delete 和U 【6】 /U。(分数:2.00)填空项 1:_ (正确答案:sizeof)解析:解析 C+语言中关键字运算符有 3 个分别 new, delete 和 sizeof。new 是申请内存,delete 是释
28、放内存,si zeof 是求字节数。42.将以下程序写成三日运算表达式是U 【7】 /U。 if(ab)max=a; else max=b;(分数:2.00)填空项 1:_ (正确答案:max=(ab)?a:b;)解析:解析 条件运算符要求有三个操作对象,称三目 (元)运算符,它是 C+语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式 1?表达式 2:表达式 3。所以我们可以写成(ab)?a:b,它是一个“条件表达式”。执行顺序是如果(ab)条件为真,则条件表达式取值 a 作为整个表达式的值,否则取值 b 作为整个表达式的值。43.以下程序的输出结果是U 【8】 /U。 #inclu
29、deiostreamh class object private: int val; public: object(); object(int i); object(); objectobject() val=0; cout“Default constructor for object“endl; objectobject(int i) val=i; cout“Constmctor for object“valendl; objectobject() cout“Destructor for object“ val endl; class containet private: object on
30、e; object two; int data: public: containet(); container(int i,int j,int k); container(); containercontalner() dara=0; cout“Default constructor for container“ endl; containercontainer(int i,int j,int k):two(i),one(j) data=k; cout“Constmctor for container“endl; containetcontainer() cout“Destmctor for
31、container“ endl; void main() container anObj(5,6,10);(分数:2.00)填空项 1:_ (正确答案:Constructor for object6)解析:Constructor for object5 Constructor for container Destructor for container Destructor for object5 Destructor for objcet6 解析 C+语言中的构造函数和析构函数分别是在声明对象时和对象调用完毕后凋用,本题中的调用就是这样成对出现的。44.下面程序的功能是将字符数组 a 中下标
32、值为偶数的元素从小到大排列,其他元素不变,请填空。 #includeiostreamh #include stringh void main() char a=“clanguage“,t; inti,j,k; k=strlen(a); for(i:0;i=k-2;i+=2) for(j=i+2;j=k;U 【9】 /U) if(U 【10】 /U) t=ai; ai =aj; aj =t; couta; coutendl;(分数:2.00)填空项 1:_ (正确答案:9j+=2)解析:10ai=aj或 aiaj 解析 stden 函数是测试字符串长度的函数,函数的值为字符串中的实际长度,不包括
33、/0在内。45.静态成员函数可以直接访问类的U 【11】 /U成员,不能直接访问类的U 【12】 /U成员。(分数:2.00)填空项 1:_ (正确答案:11静态)解析:12非静态 解析 静态成员函数可以直接访问该类中的静态数据成员,而不能访问该类中的非静态数据成员。46.请定义一个函数名为 A,返回值为 int,没有参数的纯虚函数的定义是U 【13】 /U。(分数:2.00)填空项 1:_ (正确答案:virtual int A()=0;)解析:解析 C+语言中的纯虚函数是一种特殊的函数,它没有自己的定义,只有声明,纯虚函数与虚函数声明的不同就在于在函数后面加上了“=0”。47.表达式 x.
34、operator+(yoperator+(0)还可以写成U 【14】 /U。(分数:2.00)填空项 1:_ (正确答案:x+y+或 x+(y+))解析:解析 因为 yoperator+(0)是对成员 y 重载运算符,所以是成员重载,在参数表中又有一个参数,是重载后缀+,即是 x+(y +)。48.假设 fin 是一个文件流对象,则关闭文件的语句是U 【15】 /U。(分数:2.00)填空项 1:_ (正确答案:fin)解析:解析 如果程序没有用 close()主动关闭文件,则在文件流对象退出作用域时,被调用的析构函数会关闭对象所联系的文件。但应及时关闭,以便尽早释放占用的系统资源并将文件置于更安全的状态。