1、二级 C+笔试-369 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.有如下数组声明:int value30;下标值引用错误的是( )。(分数:2.00)A.value30B.value0C.value10D.value202.若有以下程序:#include iost reamusing namespace std;class Aprivate:int a;public:A(int i)a=i;void disp ()couta“, “;class Bprivate:int b;public:B(int j)b=j;void disp (
2、)coutb “,“;class C : public B,public Aprivate:int c;public:C(int k) :A(k-2),B(k+2)c=k;void disp()A: :disp ();B:disp();coutcend1;int main ()C obj (10);obj.disp();return 0;程序执行后的输出结果是(分数:2.00)A.10,10,10B.10,12,14C.8,10,12D.8,12,103.有以下程序段,其输出的结果是( )。int x, y, z;x = y = z = O;+x | | +y coutx“,“y“,“zend
3、1;(分数:2.00)A.1,1,1B.1,1,0C.1,0,0D.0,0,04.有如下类的定义。应在空格处填入的语句是 ( )。class MyClass_ int x, y;public:MyClass(int a=0,int b=0)x=a;y=b;static void change)x-=10;y-=10;(分数:2.00)A.staticB.constC.mutableD.不需要填入内容5.若有以下程序:#include iostreamusing namespace std;class Baseprivate:int x;protected:int y;public:int z;
4、void setx(int i)x=i;int getx ()return x;class Inherit : private Baseprivate:int m;public:int p;void setvalue(int a, int b, intc, int d) setx ((分数:2.00)A.;y=b;z=c;m=d;void display()coutgetx () “,“y“,“z“,“mend1;int main ( )Inherit A;A.setvalue(1,2,3,4);A.display ();return 0;A) 1,2,3,4B.产生语法错误C.4,3,2,1
5、D.2,3,4,56.有下列程序段:#include iostreamusing namespace std;int main() char b = “Hello,you“;b5 = 0;coutbend1;return 0;执行此程序后,得到的输出结果是( )。(分数:2.00)A.Hello,youB.Hello0youC.HelloD.07.二叉树是节点的有限集合,它有( )根节点。(分数:2.00)A.有 0 个或 1 个B.有 0 个或多个C.有且只有 1 个D.有 1 个或 1 个以上8.继承具有( ),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。(
6、分数:2.00)A.规律性B.传递性C.重复性D.多样性9.下列叙述中,错误的是( )。(分数:2.00)A.一个函数中可以有多条 return 语句B.调用函数必须在一条独立的语句中完成C.函数可通过 return 语句返回其函数值D.主函数名 main()也可以带形参10.ER 模型可以转换成关系模型。当两个实体间联系是 M:N 联系时,它通常可转换成关系模式的个数是( )。(分数:2.00)A.2B.3C.M+ND.M*N11.面向对象程序设计将数据和( )放在一起,作为一个相互依存、不可分割的整体来处理。(分数:2.00)A.对数据的操作B.信息C.数据隐藏D.数据抽象12.以下各运算
7、中,不属于算术运算的是( )。(分数:2.00)A.大于B.加C.乘D.除13.有如下程序:#include iostreamusing namespace std;class xprotected:int a;public:x() a=1; ;class x1 : virtual public xpublic:x1()a+=1;couta;class x2 : virtual public xpublic:x2 ()a+=2;couta;class y : public xl,public x2public:y() coutaend1; ;int main ()y obj;return O;
8、该程序运行后的输出结果是( )。(分数:2.00)A.1B.123C.242D.24414.下列关于成员访问权限的描述中,不正确的是( )。(分数:2.00)A.公有数据成员和公有成员函数都可以被类对象直接处理B.类的私有数据成员只能被公有成员函数以及该类的任何友元类或友元函数访问C.只有类或派生类的成员函数和友元函数可以访问保护成员D.保护成员在派生类中可以被访问,而私有成员不可以15.阅读下面程序:#include iomanip. hint main ()coutsetfill( * )setw( 8 );coutsetprecision( 5 )3.1415926end1;return
9、 0;则该程序的输出结果是 ( )。(分数:2.00)A.3.1415*B.*3.1416C.3.141593D.*3.1415916.在数据库管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是( )。(分数:2.00)A.数据库系统B.文件系统C.人工管理D.数据项管理17.下面不属于软件工程的 3 个要素的是( )。(分数:2.00)A.工具B.过程C.方法D.环境18.以下选项中,( )是合法的字符常量。(分数:2.00)A.“N“B./010C.68D.D19.所谓关系是指( )。(分数:2.00)A.各条记录中的数据彼此有一定的关系B.
10、一个数据库文件与另一个数据库文件之间有一定的关系C.数据模型符合一定条件的二维表格式D.数据库中各个字段之间彼此有一定关系20.若有以下程序:#include iostreamusing namespace std;class pointprivate:int x, y;public:point ( )x=0;y=0;void setpoint(int x1,int y1)x=x1;y=y1;void dispoint ()cout “x= “x“, “ y= “ yend1;int main ( )point *p=new point;p-setpoint (5, 12);p-dispoin
11、t ();return 0;程序运行后的输出结果是( )。(分数:2.00)A.12,12B.5,5C.12,5D.5,1221.结构化方法的核心和基础是( )。(分数:3.00)A.结构化分析方法B.结构化设计方法C.结构化编程方法D.结构化程序设计理论22.关于在调用模板函数时实参的使用,下列表述中正确的是( )。(分数:3.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模
12、板实参,任何情况下都不能省略23.编制一个好的程序,首先要确保它的正确性和可靠性,还应强调良好的编程风格。在选择标识符的名字时应考虑( )。(分数:3.00)A.名字长度越短越好,以减少源程序的输入量B.多个变量共用一个名字,以减少变量名的数目C.选择含义明确的名字,以正确提示所代表的实体D.尽量用关键词作名字,以使名字标准化24.下列有关类的说法中,不正确的是( )。(分数:3.00)A.类是一种用户自定义的数据类型B.只有类中的成员函数才能存取类中的私有数据C.在类中,如果不作特别声明,所有数据成员均为私有类型D.在类中,如果不作特别声明,所有成员函数均为私有类型25.一个栈的进栈顺序是
13、1,2,3,4,则出栈顺序为( )。(分数:3.00)A.4,3,2,1B.2,4,3,1C.1,2,3,4D.3,2,1,426.若有以下程序:#include iostreamusing namespace std;int f()static int i = 0;int s = 1;s+=i;i+;return s;int main ( )int i,a = 0;for(i = 0;i5;i+)a+=f ( );coutaend1;return 0;程序运行后,输出的结果是( )。(分数:3.00)A.20B.24C.25D.1527.以下程序的执行结果是 ( )。#include ios
14、treamusing namespace std;class sampleprivate:int x;public:sample (int(分数:3.00)A.x=a;friend double square(sample s);double square(sample s)return s.x*s.x;int main ( )sample s1(20) ,s2(30);coutsquare (s2) end1;return 0;A) 20B.30C.900D.40028.下面关于虚函数的描述中,正确的是( )。(分数:3.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数
15、既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型29.下列叙述中,正确的是( )。(分数:3.00)A.一个数据结构中的元素在计算机存储空间中的位置关系与逻辑关系可能不同B.一个数据结构中的元素在计算机存储空间中的位置关系与逻辑关系一定不同C.一个数据结构中的元素在计算机存储空间中的位置关系与逻辑关系一定相同D.数据的存储结构与数据的逻辑结构是相同的30.为了避免在嵌套的条件语句 if-else 中产生二义性,C+语言中规定的 if-else 匹配原则是( )。(分数:3.00)A.else 字句与所排位置相同的 if 配对B.els
16、e 子句与其之前最近的 if 配对C.else 子句与其之后最近的 if 配对D.else 子句与同一行上的 if 配对二、填空题(总题数:13,分数:30.00)31.在长度为 n 的有序线性表中进行二分查找,需要的比较次数为 【1】 。(分数:2.00)填空项 1:_32.需求分析阶段的工作,可以分成以下 4 个方面: 【2】 、分析与综合、编写需求规格说明书和评审。(分数:2.00)填空项 1:_33.选择运算的结果关系同原关系具有 【3】 的结构框架,投影运算的结果关系同原关系通常具有 【4】 的结构框架。(分数:4.00)填空项 1:_34.联接运算是将两个或两个以上的关系根据联接条
17、件生成一个 【5】 。(分数:2.00)填空项 1:_35.若 a 是 float 型变量,且 a=6,则表达式“a/2+(int)(a+1)%2”的值为 【6】 。(分数:2.00)填空项 1:_36.若有如下图所示 5 个连续的 int 类型的存储单元并赋值,a0的地址小于 a4的地址。 p 和 s 为 int型的指针变量。请对以下问题填空。(分数:4.00)填空项 1:_37.有以下程序:#include iostreamusing namespace std;void t(int x,int y, int cp,int dp)cp=x*x+y+y;dp=x*x-y*y;int main
18、()int a=4,b=3,c=5,d=6;t(a,b,c,D) ;coutc“,“dend1;return 0;运行后的输出结果为 【9】 。(分数:2.00)填空项 1:_38.在用 class 定义一个类时,数据成员和成员函数默认的访问权限是 【10】 :(分数:2.00)填空项 1:_39.多态性分为两类:编译时的多态性和 【11】 。(分数:2.00)填空项 1:_40. 【12】 允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。(分数:2.00)填空项 1:_41.有以下程序:#include iostreamusing namespace st
19、d;class Sampleprivate:int n;public:Sample(int i)n=i;void print()cout“1:n=“n“,“;void print() constcout“2:n=“nend1;int main()Sample a(10);const Sample b(20);aprint();bprint();上述程序运行后的输出结果是 【13】 。(分数:2.00)填空项 1:_42.在下面横线上填上适当的语句,完成程序。#include iostreamusing namespace std;class Baseint x;public:Base(int
20、i) x=i;Base();class Derived : public Basepublic:_ /完成类 Derive 构造函数的定义;int main()Derived obj;return 0;在横线处应填入的语句是 【14】 。(分数:2.00)填空项 1:_43.以下程序的执行结果是 【15】 。#include iostream.h#include fstream.h#include stdlib.hint main()fstream outfile, infile;outfile.open(“D:/text.dat“,ios:out);if(!outfile)cout“text
21、.dat cant open“end1;abort();outfile“1234567890“end1;outfile“abcdefghij“end1;outfile.close();infile.open(“D:/text.dat“,ios:in);if(!infile)cout“text.dat cant open“end1;abort ( );char textline40;int i=0;while(!infile.eof()i+;infile.getline(textline,sizeof(textline);couti“:“textlineend1;infile.close();r
22、eturn 0;(分数:2.00)填空项 1:_二级 C+笔试-369 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.有如下数组声明:int value30;下标值引用错误的是( )。(分数:2.00)A.value30 B.value0C.value10D.value20解析:解析 本题考核对数组的引用。在 C+语言中,数组的下标是从 0 开始的,最大的下标值比所定义的数组长度的值小 1。同时需要注意的是,C+语言中,编译和执行时并不检查数组下标是否越界。因此 value30在编译阶段是正确的,但是在运行时会出现错误。2.若有以下程序:#
23、include iost reamusing namespace std;class Aprivate:int a;public:A(int i)a=i;void disp ()couta“, “;class Bprivate:int b;public:B(int j)b=j;void disp ()coutb “,“;class C : public B,public Aprivate:int c;public:C(int k) :A(k-2),B(k+2)c=k;void disp()A: :disp ();B:disp();coutcend1;int main ()C obj (10);
24、obj.disp();return 0;程序执行后的输出结果是(分数:2.00)A.10,10,10B.10,12,14C.8,10,12D.8,12,10 解析:解析 本题考核派生类构造函数的使用。本题中,派生 C 具有多重继承关系,所以在派生类 C 的构造函数中应该包含基类 A 和 B 的成员初始化列表。而且派生类 C 中的成员函数 disp 分别调用了基类A、B 的公有成员函数 disp()用于输出基类中私有数据变量初始化后的值。所以由类 C 构造函数的初始化形式可知,程序最后输出为 8,12,10,即 D 选项。3.有以下程序段,其输出的结果是( )。int x, y, z;x = y
25、 = z = O;+x | | +y coutx“,“y“,“zend1;(分数:2.00)A.1,1,1B.1,1,0C.1,0,0 D.0,0,0解析:解析 本题考查自增运算符和逻辑运算符两个知识点。错误解答:x,y,z 都参与逻辑运算+x|+ypublic:MyClass(int a=0,int b=0)x=a;y=b;static void change)x-=10;y-=10;(分数:2.00)A.static B.constC.mutableD.不需要填入内容解析:解析 本题考核静态成员函数的使用。由题可知,函数 change()为类 MyClass 的静态成员函数。先来了解静态成
26、员函数:静态成员函数与静态数据成员相似,也从属于类,只要类存在,静态成员函数就可以使用,静态成员函数的定义是在一般函数的定义前加上关键词 static。调用静态成员函数的格式如下:类名:静态成员函数名(参数表);静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员(因为非静态数据成员只有对象存在时才有意义)。但静态数据成员和静态成员函数可由任意访问权限许可的函数访问。和一般成员函数类似,静态成员函数也有访问限制,私有静态成员函数不能由外界访问。由静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员可知,变量
27、 x 和 y 只能是类 MyClass 的静态数据成员,所以 x 和 y 的定义为“static int x,y;”。5.若有以下程序:#include iostreamusing namespace std;class Baseprivate:int x;protected:int y;public:int z;void setx(int i)x=i;int getx ()return x;class Inherit : private Baseprivate:int m;public:int p;void setvalue(int a, int b, intc, int d) setx (
28、(分数:2.00)A.;y=b;z=c;m=d;void display()coutgetx () “,“y“,“z“,“mend1;int main ( )Inherit A;A.setvalue(1,2,3,4);A.display ();return 0;A) 1,2,3,4 B.产生语法错误C.4,3,2,1D.2,3,4,5解析:解析 本题考核私有继承中类成员的访问权限。当类的继承方式为私有继承时,基类公有成员和保护成员都以私有成员属性出现在派生类中。私有派生类的成员对其基类成员的访问权和公共派生的方式相同,但是,由私有派生的类声明的对象,不能访问任何基类的成员。本题中,基类 Bas
29、e 中的保护成员 y 和公有成员 setx 和 getx,经过私有继承以后,称为派生类 Inherit的私有成员,所以可以在派生类 Inherit 的函数成员中对它们进行访问。类 Inherit 中的函数成员 setvalue 和 display 都是公有成员,所以可以通过 Inherit 的对象对它们进行访问。本程序的功能是对类中各数据成员进行赋值,然后查看赋值是否正确。6.有下列程序段:#include iostreamusing namespace std;int main() char b = “Hello,you“;b5 = 0;coutbend1;return 0;执行此程序后,得
30、到的输出结果是( )。(分数:2.00)A.Hello,youB.Hello0youC.Hello D.0解析:解析 本题考核字符数组的特性。本题表面上看起来很简单,其实不然,出题者在题中隐藏了一个陷阱。常见的错误答案是:字符数组 b 初始化后,得 b5=,执行“b5=0;”后,把 0 代替 b5中的,即可。最后输出整个字符串“Hello0you”。下面是正确解答:在 C+语言中规定:以字符0作为字符串结束标志。语句“b5=0;”就相当于语句 b5=/0,即在数组 b 的 b5加上了字符串结束标志,故执行该语句后,数组中存放的内容变为 Hello。7.二叉树是节点的有限集合,它有( )根节点。
31、(分数:2.00)A.有 0 个或 1 个 B.有 0 个或多个C.有且只有 1 个D.有 1 个或 1 个以上解析:解析 二叉树是一种特殊的树,它要求非空二叉树只有一个根节点,所以它可以是空树。答案为A。8.继承具有( ),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。(分数:2.00)A.规律性B.传递性 C.重复性D.多样性解析:解析 在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员。当基类本身也是一个派生类时,它必然包含了它的直接基类成员,这些成员相应地也存在于该基类的派生类中。因此,继承是具有传递性的。9.下列叙述
32、中,错误的是( )。(分数:2.00)A.一个函数中可以有多条 return 语句B.调用函数必须在一条独立的语句中完成 C.函数可通过 return 语句返回其函数值D.主函数名 main()也可以带形参解析:解析 本题考核函数的基本知识点。当函数有返回值时,调用函数可以作为一个表达式的子表达式,而不是作为一条独立的语句存在。故选项 B 的说法是错误的。10.ER 模型可以转换成关系模型。当两个实体间联系是 M:N 联系时,它通常可转换成关系模式的个数是( )。(分数:2.00)A.2B.3 C.M+ND.M*N解析:解析 将 ER 图转换为关系模型的转换方法有:一个实体型转换为一个关系模式
33、:一个 m:n 联系转换为一个关系模式;三个或三个以上实体间的一个多元联系转换为一个关系模式。因此,本题答案为B。11.面向对象程序设计将数据和( )放在一起,作为一个相互依存、不可分割的整体来处理。(分数:2.00)A.对数据的操作 B.信息C.数据隐藏D.数据抽象解析:解析 面向对象语言包含 3 个要素,即对象、类和继承。这 3 个要素反映了面向对象的传统观念。面向对象程序设计的本质是把数据和对数据的操作当成一个整体即对象。12.以下各运算中,不属于算术运算的是( )。(分数:2.00)A.大于 B.加C.乘D.除解析:解析 在一般的计算机系统中,基本的运算和操作有以下 4 类:算术运算、
34、逻辑运算、关系运算、数据传输。“大于”属于逻辑运算中的一种。选项中的加、乘、除都属于算术运算。13.有如下程序:#include iostreamusing namespace std;class xprotected:int a;public:x() a=1; ;class x1 : virtual public xpublic:x1()a+=1;couta;class x2 : virtual public xpublic:x2 ()a+=2;couta;class y : public xl,public x2public:y() coutaend1; ;int main ()y obj
35、;return O;该程序运行后的输出结果是( )。(分数:2.00)A.1B.123C.242D.244 解析:解析 本题程序中引入了虚基类。在主函数中,执行语句“y obj;”时,先执行虚基类 x 的构造函数,使 a=1,然后执行类 x1 的构造函数,使 a=2,并输出值 2。再执行类 x2 的构造函数,使 a=4,并输出值 4。最后执行类 y 的构造函数,输出值 4。14.下列关于成员访问权限的描述中,不正确的是( )。(分数:2.00)A.公有数据成员和公有成员函数都可以被类对象直接处理B.类的私有数据成员只能被公有成员函数以及该类的任何友元类或友元函数访问 C.只有类或派生类的成员函
36、数和友元函数可以访问保护成员D.保护成员在派生类中可以被访问,而私有成员不可以解析:解析 类的私有数据成员也可以被类成员函数访问,不管是公有、私有或是保护成员,所以选项B 是错误的,其他选项是正确的。15.阅读下面程序:#include iomanip. hint main ()coutsetfill( * )setw( 8 );coutsetprecision( 5 )3.1415926end1;return 0;则该程序的输出结果是 ( )。(分数:2.00)A.3.1415*B.*3.1416 C.3.141593D.*3.14159解析:解析 本题主要考察 C+中输入输出流的格式控制操
37、作。C+允许使用 setprecision 操纵符来控制输出对象的输出精度,若程序中没有指定输出精度,则其默认值为 6。C+同时允许使用 setfill()操纵符设置填充符,默认填充字符为空格符“”。本题程序中,首先通过 setfill()操纵符设置填充字符为星号“*”,并设置输出宽度为 8 位;输出对象前,设置对象的输出精度为 5,因此对象 3.1415926 的实际输出数值为 3.1416(自动进行四舍五入);再把宽度设置考虑进去,由于默认对齐方式为右对齐,因此数值左边需要加填充符,即应该填充三个“*”符号以满足输出宽度为 8 位的要求。故程序的最终输出应该是“*3.1416”。16.在数
38、据库管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是( )。(分数:2.00)A.数据库系统 B.文件系统C.人工管理D.数据项管理解析:解析 文件系统是数据库系统的初级阶段,提供了简单的数据共享与数据管理能力,其功能简单,附属于操作系统而不成为独立的软件,只能看作是数据库系统的雏形。人工管理主要用于科学计算,硬件无磁盘,直接存取,软件没有操作系统。数据库管理系统是从这两个阶段发展而来的,其数据独立性必然更高。因此答案为 A。17.下面不属于软件工程的 3 个要素的是( )。(分数:2.00)A.工具B.过程C.方法D.环境 解析:解析 软件工
39、程包括 3 个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段:工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。18.以下选项中,( )是合法的字符常量。(分数:2.00)A.“N“B./010 C.68D.D解析:解析 本题考核字符型常量的表示。选项 A 中是字符串的表示方法。选项 B 所表示的是一个转义字符,是特殊的字符常量。选项 C 中所表示的是整型常量。选项 D 中不是常量的表示。19.所谓关系是指( )。(分数:2.00)A.各条记录中的数据彼此有一定的关系B.一个数据库文件与另一个数据库文件之间有一定的关系C.数据模型符合一定条件的二维表格式
40、D.数据库中各个字段之间彼此有一定关系解析:解析 每个关系都类似一张表,或者在某种程度上类似一个“平面”记录文件。20.若有以下程序:#include iostreamusing namespace std;class pointprivate:int x, y;public:point ( )x=0;y=0;void setpoint(int x1,int y1)x=x1;y=y1;void dispoint ()cout “x= “x“, “ y= “ yend1;int main ( )point *p=new point;p-setpoint (5, 12);p-dispoint ()
41、;return 0;程序运行后的输出结果是( )。(分数:2.00)A.12,12B.5,5C.12,5D.5,12 解析:解析 本题考核对象指针的定义与使用。分析程序:程序首先定义一个类 point。类 point 中有两个私有成员,整型变量 x 和 y,还有两个公有成员函数 setpoint(int x1,int y1)和 dispoint()。函数setpoint()用来设置私有成员 x 和 y 的值,而函数 dispoint()用来显示私有成员 x 和 y 的值。主函数中,首先定义了类 point 的指针对象 p,并申请了内存空间,然后调用对象 p 中公有成员 setpoint给对象
42、p 中的私有成员 x 和 y 赋值,然后调用成员函数 dispoint 显示 x 和 y 的值。由此可知,最后输出的值应该是 5,12。21.结构化方法的核心和基础是( )。(分数:3.00)A.结构化分析方法B.结构化设计方法C.结构化编程方法D.结构化程序设计理论 解析:解析 结构化方法是软件开发方法之一。它包括结构化分析方法、结构化设计方法、结构化编程方法,而它的核心和基础是结构化程序设计理论。22.关于在调用模板函数时实参的使用,下列表述中正确的是( )。(分数:3.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对
43、应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略 解析:解析 模板函数的实参可以省略,但模板实参的省略并不是必然的,而是有条件的。在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用和括起来的参数表)或从模板函数实参表(用()括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若
44、干个参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表也可以不要。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。由此可知,只有选项 D 的说法是正确的。23.编制一个好的程序,首先要确保它的正确性和可靠性,还应强调良好的编程风格。在选择标识符的名字时应考虑( )。(分数:3.00)A.名字长度越短越好,以减少源程序的输入量B.多个变量共用一个名字,以减少变量名的数目C.选择含义明确的名字,以正确提示所代表的实体 D.尽量用关键词作名字,以使名字
45、标准化解析:解析 本题涉及程序的编程风格,考生应该掌握一些基本的良好编程风格。标识符的名字应能反映它所代表的实际东西,应有一定实际意义。名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个变量只应用于一种用途。24.下列有关类的说法中,不正确的是( )。(分数:3.00)A.类是一种用户自定义的数据类型B.只有类中的成员函数才能存取类中的私有数据 C.在类中,如果不作特别声明,所有数据成员均为私有类型D.在类中,如果不作特别声明,所有成员函数均为私有类型解析:解析 对于类中的私有成员,除了类的成员函
46、数外,类的友元函数和友元类的成员函数也可以访问。25.一个栈的进栈顺序是 1,2,3,4,则出栈顺序为( )。(分数:3.00)A.4,3,2,1 B.2,4,3,1C.1,2,3,4D.3,2,1,4解析:解析 栈是一种特殊的线性表,栈的插入和删除运算都只在一端进行,即它的一端是封闭的,不允许进行插入与删除元素。一端是开口的,允许进行插入与删除元素,栈中的数据是先进后出的,答案是A。26.若有以下程序:#include iostreamusing namespace std;int f()static int i = 0;int s = 1;s+=i;i+;return s;int main
47、 ( )int i,a = 0;for(i = 0;i5;i+)a+=f ( );coutaend1;return 0;程序运行后,输出的结果是( )。(分数:3.00)A.20B.24C.25D.15 解析:解析 本题考核静态局部变量在函数中的使用。静态局部变量就是将局部变量说明为静态的。静态局部变量既有在局部域作用的特性(即变量只能在变量的作用范围内被访问),又可以永久存在(变量的值得以保留,并可继续使用)。静态局部变量只在第 1 次执行时初始化一次。在函数 f()中定义了一个静态局部变量 i,它的初始值为 0,还定义了一个局部变量 s(它的初始值为 1),用来返回计算所得值。函数f()中所进行的数据加工是 s+=i 和 i+。即每调用一次函数 f(),返回(i+1)的值后,i 的值增 1。再看主函数,在主函数中,通过一个 for 语句连续调用 f 函数 5 次,并把每次调用 f 函数的返回值相加并存入a,最后输出 a 的值。在了解各函数功能以及调用关系后就可计算出 a 的值为 15。27.以下程序的执行结果是 ( )。#include iost