1、国家二级( C+)笔试模拟试卷 72及答案与解析 1 软件详细设计的主要任务是 ( )。 ( A)确定每个模块的算法和使用的数据结构 ( B)确定每个模块外部的接口 ( C)确定每个模块的功能 ( D)编程 2 某二叉树 T有 n个节点,设按某种顺序对 T中的每个节点进行编号,编号值为1, 2, n ,且有如下性质: T中任一节点 v,其编号等于左子树上的最小编号减1,而 v的右子树的节点中,其最小编号等于 v左子树上的节点的最大编号加 1。此二叉树是按 ( )顺序编号的。 ( A)前序遍历 ( B)中序遍历 ( C)后序遍历 ( D)按层次遍历 3 对一个已经排好序的序列进行排序,采用 (
2、)比较适宜。 ( A)冒泡法 ( B)直接选择法 ( C)直接插入法 ( D)归并法 4 软件是一种 ( )。 ( A)程序 ( B)数据 ( C)逻辑产品 ( D)物理产品 5 下列关于链式存储的叙述中,错误的是 ( )。 ( A)链式存储结构的空间可以是不连续的 ( B)数据节点的存储顺序与数据元素之间的逻辑关系可以不一致 ( C)链式存储方式只可用于线性结构 ( D)链式存储也可用于非线性结构 6 关系表中的每一横行成为一个 ( )。 ( A)元组 ( B)字段 ( C)属性 ( D)码 7 在数据库设计的 4个阶段中,为关系模式选择存取方法 (建立存取路径 )的阶段是( )。 ( A)
3、需求分析 ( B)概念设计 ( C)逻辑设计 ( D)物理设计 8 下列说法中,正确的是 ( )。 ( A)在线性表中插入一个元素后,线性表长度不变 ( B)在线性表中删除一个元素后,线性表长度不变 ( C)在线性表中插入一个元素后,线性表长度加 1 ( D)在线性表顺序存储的情况下插入一个元素的 效率较高 9 下列关于队列的叙述中,不正确的是 ( )。 ( A)在队列中能插入数据 ( B)在队列中能删除数据 ( C)队列是先进先出的线性表 ( D)队列是先进后出的线性表 10 在结构化程序设计使用 goto语句的原则是 ( )。 ( A)限制 ( B)鼓励 ( C)禁止 ( D)滥用 11
4、C+对 C语言作了很多改进,下列描述中, ( )使得 C+语言发生了质变,即从面向过程变成了面向对象。 ( A)增加了一些新的运算符 ( B)允许函数重载,并允许设置默认参数 ( C)规定 函数说明必须用原型 ( D)引进了类和对象的概念 12 下面不属于 C+语言的基本数据类型的是 ( )。 ( A)字符类型 ( B)整数类型 ( C)逻辑类型 ( D)枚举类型 13 若 a, b, c1, c2, x, y均是整型变量,正确的 switch语句是 ( )。 ( A) switch(a+b) ( B) switch(a*a+b*b) case: y=a+b; break; case 3: c
5、ase: y=a-b; break; case 1: y=a+b; break; case 3: y=b-a;break; ( C) switcha ( D) switch(a-b) casec1: y=a-b; break; default: y=a*b; break; casec2: x=a*b; break; case 3: case4: x=a+b; break; default:x=a+b; case 10: case 11: y=a-b; break; 14 C+语言的跳转语句中,对于 break和 continue说法正确的是 ( )。 ( A) break语句只使用于循环体中
6、( B) continue语句只应用于循环体中 ( C) break是无条件跳转语句, continue不是 ( D) break和 continue的跳转范围不够明确,容易产生问题 15 有以下程序: #include iostream #include string usxng namespace std; int main() char p = “abcdefgh“; cout strlen(strcpy(p,“12345“) end1; return 0; 执行后输出的结果是 ( )。 ( A) 8 ( B) 12 ( C) 5 ( D) 7 16 一个函数为 void f(int,
7、char ch=a),另一个函数为 void f(int),则它们 ( ) ( A)不能在同一程序中定义 ( B)可以在同一程序中定义并可重载 ( C)可以在同一程序中定义,但不可以重载 ( D)以上说法均不正确 17 在 C+语言中函数返回值的类型是由 ( )决定的。 ( A)调用该函数时系统临时 ( B) return语句中的表达式类型 ( C)定义该函数时所指定的函数类型 ( D)调用该函数时的主调函数类型 18 类 MyClass的定义如下: class MyClass public: MyClass() value=0; setVariable(int i) value=i; pri
8、vate: int value; ; 则以下各项对如下语句序列的描述中,正确的是 ( )。 MyClasS *p, my; p= class count static int n; public: count ( ) n+; static int test() for (int i = 0; i 4; i+ ) n+; return n; ; int count : n = 0; int main() cout count : test() “ “; count c1, c2; cout count : test() end1; return 0; 执行后的输出结果是 ( )。 ( A) 4
9、10 ( B) 1 2 ( C) 22 ( D) 24 25 有以下程序: #include iostream using namespace std; class myclass private: int a, b; public: void init( int i, int j ) a = i; b = j; friend int sum( myclass x ); ; int sum( myclass x ) return x.a + x.b; int main () myclass y; y.init( 15, 20 ); cout sum( y )end1; return 0; 执行
10、后的输出结果是 ( )。 ( A) 15 ( B) 20 ( C) 5 ( D) 35 26 有以下程序: #include iostream using namespace std; class CSample private: int i; public: CSample ( ); CSample( int val ); void Display(); CSample (); ; CSample: CSample () cout “C1“; i = 0; CSample: :CSample( int val ) cout “C2“; i = val; void CSample: :Disp
11、lay() cout i “: “; CSample: CSample ( ) cout “D“; int main ( ) CSample a, b( 10 ); return 0; 执行后的输出结果为 ( )。 ( A) ClC2DD ( B) DDC1C2 ( C) C2C1DD ( D) C1DC2D 27 下列类的定义中,有 ( )处语法错误。 class Base public: Base() Base(int i) data=i; private: int data; ; class Derive : public Base public: Derive() : Base(O)
12、Derive (int x) d=x; void setvalue(int i) data=i; private: int d; ; ( A) 1 ( B) 2 ( C) 3 ( D) 4 28 若有以下程序: #include iostream using namespace std; class A private: int a; public: A(int i) a=i; void disp() cout a “, “; ; class B private: int b; public: B(int j) b=j; void disp() cout b “, “; ; class C :
13、 public B,public A private: int c; public: C int k) :A(k-2),B(k+2) c=k; void disp() A: :disp (); B:disp(); cout c end1; ; int main () C ebj (10); obj .disp (); return 0; 程序执行后的输出结果是 ( )。 ( A) 10,10,10 ( B) 10,12,14 ( C) 8,10,12 ( D) 8,12,10 29 有以下程序: #include iostream using namespace std; template c
14、lass T class TAdd private: T x, y; public: TAdd( T a, T b ) x = a; y = b; T add() return x + y; ; int main () TAdd int A( 5, 6 ); TAdd double B( 2.4, 5.6 ); cout A, add () “, “ B. add () end1; return 0; 执 行后的输出结果是 ( )。 ( A) 11, 8 ( B) 5,6 ( C) 2.4,5.6 ( D) 8, 11 30 语句 “ofstream f(“DATA.DAT“,ios base
15、: applios base: binary); ”的功能是建立流对象 f,并试图打开文件 DATA DAT 与之连接,而且 ( )。 ( A)若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件 ( B)若文件存在,将其截为空文件;若文件不存在,打开失败 ( C)若文件存在,将文件指针定位于文件尾;若文件不存在, 建立一个新文件 ( D)若文件存在,打开失败;若文件不存在,建立一个新文件 31 在面向对象方法学中,直接反映了用户对目标系统的要求的模型是【 】。 32 软件测试的目的是尽可能发现软件中错误,通常【 】是在代码编写阶段可进行的测试,它是整个测试工作的基础。 33 一个
16、项目具有一个项目主管,一个项目主管可管理多个项目,则实体 “项目主管 ”与实体 “项目 ”的联系属于【 】的联系。 34 假定 w、 x、 y、 z、 m均为血型变量,有如下程序段: w=1; x=2; y=3; z=4; m=(W X)?w: X; m=(m y)?m: y; m=(m z)?m: z; 则该程序运行后, m的值是【 】。 35 函数 swap(arr,n)可完成对 arr数组从第 1个元素到第 n个元素两两交换。在运行调用函数中的语句后, a0和 a1的值分别为【 】。 a0=1; a1=2; swap(a, 2); 36 以下程序的输出结果是【 】。 #include i
17、ostream using namespace std; int main() char S =“abcdef“; s3= 0; cout s end1; return 0; 37 要想把类的一般成员函数说明为类的常成员函数,则应该使用关键词【 】说明成员函数。 38 表达式 operator+(x,int)还可以表示为【 】。 39 下列程序将 x、 y和 z按从小到大的顺序排列,请将下面的函数模板补充完整。 template class T void order(【 】 ) T a; if(x y) a=x; x=y; y=a; if (y z) a=y; y=z; z=a; if (x
18、y) a=x; x=y; y=a; 40 以下程序运行后的输出结果 是【 】。 #include iostream #include string using namespace std; class Y; class X int x; char *strx; public: X(int a, char *str) x=a; strx=new charstrlen(str)+l; strcpy(strx,str); void show(Y ; class Y private: int y; char *stry; public: Y(int b,char *str) y=b; stry=new
19、 charstrlen(str)+l; strcpy(stry, str); friend void X:show(Y ; void X:show(Y cout ob.stry end1; int main() X a(10,“stringX“); Y b(20,“stringY“); a. show (B) ; return 0; 41 若有以下程序: #include iostream using namespace std; #define PI 3.14 class Point private: int x,y; public: Point (int a,int b) x=a; y=b
20、; int getx () return x; int gety() return y; ; class Circle : public Point int r; public: Circle(int a, int b,int C) : Point (a, b) r=c; int getr() return r; double area() return PI*r*r; ; int main() Circle c1(5,7,10); cout c1.area() end1; return 0; 程序执行后的输出结果是【 】。 42 下面是 “二维向量 ”vector2D的定义,其中作为成员函数
21、重载的运算符 “+”的功能是将两向量的分量 x和 y对应相加,然后返回作为相加结果的新对象。请填空补充完整。 class vector2D double x; x分量 double y; y分量 public: vector2D(double x0=0,double y0=0) :x(x0),y(y0) void show(cout ( , y ) ; vector2D operator + (vector2D) ; ; 【 】 operator + (vector2D a) return vector2D(【 】 ); 国家二级( C+)笔试模拟试卷 72答案与解析 1 【正确答案】 A 【
22、试题解析】 本题考核结构化设计方法的详细设计。从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。详细设计的任务就是要决定各个模块的实现算法,并精确地表达这些算法。 2 【正确答案】 A 【试题解析】 根据节点 v的右子树的节点中,其最小编号等于 v左子树上的节点的最大编号加 1,可以断定是前序遍历。 3 【正确答案】 C 【试题解析】 若以排序所用的比较时间来看 ,直接插入法和归并法都比较少,对于 N个元素的序列,大约需要比较 N-1次:但归并法要占用较大的存储空间,所以用直接插入法比较好。 4 【正确答
23、案】 C 【试题解析】 计算机软件是计算机系统中与硬件互相依存的另一部分,是包括程序、数据及相关文档的完整集合。软件是一种逻辑实体,而不是物理实体,具有抽象性。 5 【正确答案】 C 【试题解析】 链式存储结构不同于顺序存储结构,它的存储空间可以是不连续的,并且数据节点的存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之间的逻辑关系是由指针域来确 定的。链式存储方式可用于线性结构链式存储也可用于非线性结构,在表示复杂的非线性结构时,指针域的个数要多一些。 6 【正确答案】 A 【试题解析】 本题考核关系表中的一些概念。元组是指一个实体的所有属性值的集合,关系表中的每一横行就是一个实体的所有
24、属性值的集合,选项 A是正确的。关系表中的每一列的列名为一个属性,列中的每一元素为一个字段。码是指能惟一表示元组的最小属性集。 7 【正确答案】 D 【试题解析】 本题考核数据库设计的 4个阶段的区分。题目不难,只需要分清楚四个阶段的任务是什么就可以 答对。显然不是需求分析阶段,因为需求分析是分析用户的要求。而概念设计是将需求分析得到的用户需求抽象为信息结构及概念模型的过程,涉及不到关系模式的存取。逻辑结构设计是在概念结构设计的基础上,将 ER图转换成以数据库管理系统的逻辑数据模型表示的逻辑模式,也不涉及到存取的问题。而物理设计是为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程。
25、所以为关系模式选择存取方法应该属于物理设计阶段。 8 【正确答案】 C 【试题解析】 在线性表中插入一个元素后,线性表长度加 1,选项 A是错误的。在线性表中删 除一个元素后,线性表长度减 1,选项 B 是错误的。在线性表顺序存储的情况下插入一个元素,在平均情况下需要移动的数据元素数目为 n 2,效率较低,选项 D是错误的。 9 【正确答案】 D 【试题解析】 队列是指允许在一端进行插入,而在另一端进行删除的线性表。允许插入的一端称为队尾,允许删除的一端称为队头,所以在队列中既可以插入数据也能删除数据,所以选项 A、 B是正确的。在这种数据结构中,最先插入的元素最先能够被删除。因此队列又称为先
26、进先出的线性表。答案是 D。 10 【正确答案】 A 【试题解析】 在块和进程的非正常出口处往往需要用 goto语句,使用 goto语句会使程序执行效率较高,但它造成程序的混乱,程序的质量与 goto语句的数量成反比。结构化程序设计的关键是提高程序的清晰性。因此在结构化程序设计使用goto语句的原则是限制。 11 【正确答案】 D 【试题解析】 C+语言起源于 C语言。 C+是 C语言的超集,即 C语言是 C+语言的一个子集,同时 C+语言与 C语言是兼容的。 C+对 C语言作了很多改进,引进了类和对象的概念。 12 【正确答案】 B 【试题解析】 本题考核 C+数据 类型范围。 C+中 un
27、signed char 类型的数据其取值范围为 0 127,所以题中 value加 1后,其值将变为 0。因此程序的最后输出为 100,即 B 选项。 13 【正确答案】 D 【试题解析】 本题考查 switch 语句的语法规则。使用 switch 语句应该注意的问题: 整型表达式包括字符型或枚举型表达式。 在同一 switch 语句中,各个常量表达式的值不能相同。 每个 case分支可以有多条语句,但不必用 。 每个 case语句只是一个入口标号,并不能确定执行的终点, 因此每个 case分支的最后应该加 break语句,用来结束这个 switch 结构,否则会从入口点开始一直执行到 swi
28、tch 结构的结束点。 当若干个分支需要执行相同操作时,可以使多个 case分支共用一组语句。 如果在 switch 语句中使用字符常数,则它们自动被转换成整型值。 根据以上注意点以及 switch 的语法规则,可知:对于选项 A, case后面少了整型常量表达式,故不正确。对于选项 B,出现两个 case后面的整型常量表达式的值相等,故也不正确。对于选项 C, switch 后面的整型表达 式应该用括号括起来,故也不正确 14 【正确答案】 B 【试题解析】 此类题比较典型,考生应该加以注意。 break 语句将使程序从当前的循环语句 (do、 while和 for)内跳转出来。 switc
29、h 语句中也可以用 break 语句终止当前 switch 语句的执行。所以选项 A是错误的。 break 和 continue都是五条件跳转语句,所以选项 C是错误的。 break 语句是中断循环,继续执行循环后面的语句。 continue类似于 break,但它不是结束循环,而是结束循环语句当前的一次循环,继续执行下一次循环。 所以选项 D是错误。 15 【正确答案】 C 【试题解析】 本题考查对字符串函数的熟悉程度。本题主要考查 strlen和 strcpy两个函数,先来了解这两个函数。 函数 strcpy()的函数原型为: char*strcpy(char*strDest, const
30、 char*strSrC) ;其功能是复制 strSrc所有字符到 strDest,并返回 strDest。 函数 strlen()的函数原型为: size_t strlen(const char *string);,其功能是返回string的长度,不包括结束字符 0。 在了解函数的原型和功能后,再分析本程序。程序首先定义了字符数组 p,并赋初值 “abcdefg“,然后将字符串 “12345“复制到数组 p 中,此时数组中元素变为字符串 “12345“,然后调用函数 strlen求出数组 p 中的字符数为 5(不包括结束标志符 0)。 16 【正确答案】 C 【试题解析】 只要满足参数列表不
31、同的条件,就可以在同一程序中对同名的函数进行定义。但是由于其中一个函数有默认值,因此当程序中出现语句 “x=f(10);”时,就会产生二义性,不能确 定调用函数 R10)还是调用函数 f(10, a, ),此时这两个函数不能重载。 17 【正确答案】 C 【试题解析】 本题考察对函数定义的掌握程度。函数类型决定了函数返回值的类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将 return 后面的表达式的类型强制转换为该函数定义时指定的返回值类型。 18 【正确答案】 D 【试题解析】 对于选项 A,由于表达式 “p=&my; ”只是把对象 my 的地址赋值给指针
32、变量 p,而不是对象 my 本身。所以选项 A的描述是错误的。 对于选项 B,语句 “MyClass*p, my; ”仅调用一次类 MyClass 的构造函数,因为指针 p 本身不定义类对象,而是定义了 p 可以指向一个 MyClass 的对象,所以在定义指针对象时系统不会调用类的构造函数。所以选项 B 的描述也是错误的。 对于选项 C,根据运算符的优先级,语句 “*p.SetVariable; ”等价于“*(p SetVariable)”,显然这与原来的语句不同,正确的调用方式是(*p) SetVariable。所以选项 C的描述也是错误。 对于选项 D,由于 p是对象指针,所以调用 p 的
33、成员要 用符号 “- ”。而 my 是一般的类对象,所以调用 my 的成员用 “.”符。所以选项 D是正确。 19 【正确答案】 C 【试题解析】 C+中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象。 20 【正确答案】 D 【试题解析】 本题考核派生类的访问权限。说明为保护成员,除了类本身的成员函数和说明为友元类的成员函数可以访问保护成员外,该类的派生类的成员也可以访问。 21 【正确答案】 D 【试题解析】 本题考核对函数调用方法的掌握程度。做此类题主要是弄清楚程序每一步的目的:在主函数前面声明了整型函数
34、f。在主函数中,调用了函数 f()。实参的值分别是 1和 2, 1传给函数 f的形参 a, 2传给函数 f的形参 b,函数返回的值赋给变量 x。即为输出的函数值。 具体分析一下函数 f()的功能:如果 a大于 b,则赋予 c的值为 1;并且跳出 if-else语句。如果 a不大于 b,则进入 else if分支中,如果 a等于 b,则赋予 c的值为 0, 并跳出以下的 if-else语句。如果 a不等于 b,则进入 else分支,执行 c=-2。因为实参 1, 2分别传给形参 a, b,所以此时 a b, f()函数应执行 c=-2。即最终输出应为 -2。 22 【正确答案】 A 【试题解析】
35、 函数中,首先让字符串指针指向字符串 x,然后通过 while循环使y指向字符串 x的尾部。再通过两指针之间的算术运算得出字符串 x的长度。 23 【正确答案】 A 【试题解析】 程序中 p 是指针数组,它等价于二维数组 p3。给 p 赋值二维数组 n 后。 p00等于 n00, *(p0+1)等于 nO1, (*p)2等于 nO2。即程序最后输 出 10,20,30。 24 【正确答案】 A 【试题解析】 程序首先定义了类 count,其内部含有 private类型数据成员 “static int n; ”,同时含有 public类型构造函数 count()和静态成员函数 static in
36、t test(),这两个函数的功能分别是为对象申请系统资源并将静态数据成员 n加 1和将静态数据成员 n加 4。主函数前,程序将静态数据成员 n初始化为 0,该数据成员为所有类 count的对象所共有的数据成员。主函数中,程序首先执行静态成员函数test()(由于 test声明为 static,因此其调用时无需通过具体对象 )。而其执行过程中,静态数据成员 n 应该加 4变成 n=4,因此此处输出为 4。此后程序创建对象 c1和 c2,由于在每次创建过程中都要调用构造函数 count(),而每次调用 count()函数后,静态数据成员 n 值都会加 1,因此,创建两个对象之后, n值变为 n=
37、6;再次执行 test()函数后, n的值再次加 4,此时变为 n=6+4=10。故程序全部执行后,变量 n 值变为 10,而中间程序输出为 “4 10”。 25 【正确答案】 A 【试题解析】 本题主要考察 C+中友元函数的使用 。程序中,首先定义一个myclass 类,其中包含 private类型数据成员 int a和 int b;并含有成员函数 void init(),其功能为初始化数据成员 a和 b,使其值分别为 a=i和 b=i;同时声明了一个友元函数 int sum(),其函数定义在类声明体外,功能为返回 myclass 类的对象中的两个数据成员之和。程序主函数中,首先创建一个 m
38、yclass 类的对象 y,并调用 y的初始化函数对其变量进行赋值操作,执行该语句后,应该有: y.a=15和y.b=20。程序最后调用函数 sum()计算对象 y中数据成员的和, 由于 sum()为类myclass 的友元函数,因此其可以自由访问对象 y中的数据成员,显然其返回值为: 15+20=35。 26 【正确答案】 A 【试题解析】 本题程序首先定义了类 CSample,其内部成员为 private类型数据成员 int i和 public类型成员函数,包括两个构造函数、一个析构函数和一个普通成员函数 void Display(),其成员函数的功能分别为: CSample: CSamp
39、le():构造函数,输出构造函数的执行消息 “C1”,并将数据成员 i赋值为 i=0: CSample: CSample(int val):重载构造函数,输出构造函数的执行消息“C2”,并将数据成员 i赋值为 i=val: void CSample: Display():成员函数,输出数据成员 i的值; CSample: CSample():析构函数,输出析构函数的执行消息,并输出数据成员值。在主函数中,程序分别采用两个构造函数,创建了类 CSample的两个对象,一个利用不带参数的构造函数创建对象 a,另一个利用带参数的构造函数创建对象 b。根据上面的分析,可以得到 a和 b中数据成员 i的
40、值 分别为 0(不带参数情况 )和 10(所带参数值 )。因此下面的两条输出语句分别输出 “0”和 “10”。 此外,由于系统在创建对象时会调用构造函数,在对象生命期结束时会调用析构函数,因此程序还会有相应的输出。由于构造函数的调用顺序与对象创建的先后顺序一致,因此程序应该首先输出两个构造函数的调用信息,即 “C1”和 “C2”。在主函数执行结束后,由于两个对象 a和 b的生命期已经结束,因此系统将调用析构函数收回系统资源。由于析构函数的调用顺序与构造函数完全相反,因此系统将首先调用对象 b的析构函数,程序输出析构函数执行信息 “D”;之后调用对象 a的析构函数,程序输出析构函数执行信息 “D
41、”。 27 【正确答案】 B 【试题解析】 本题考核派生类的定义和成员的访问权限。 第 处错误:在派生类的构造函数 Derive(int x)中没有调用基类的构造函数对基类对象初始化。 第 处错误:数据 data是基类 Base的私有成员,派生类 Derive 不能访问,所以在函数 setvalue中对 data的赋值是错误的。 28 【正确答案】 D 【试题解析】 本题考核派生类构造函数的使用。本题中,派生 C具有多重继承关系, 所以在派生类 C的构造函数中应该包含基类 A和 B的成员初始化列表。 29 【正确答案】 A 【试题解析】 本题主要考察 C+中模板类的定义和使用。程序首先定义了模
42、板类TAdd,类型标识符为 T,其内私有数据成员为 T 数据类型的 x和 y,公有成员函数为构造函数和返回值为 T 数据类型的 add(),其功能为返回 x和 y之和。在主函数中,程序通过模板类实例化了两个对象 A和 B,其中对象 A实例化过程中,将类型标识符 T具体化为血型,因此 A add()函数返回值为 int型,并返回其数据成员 x和 y的初始化值之和,为 5+6=11; 程序实例化的第 2个对象 B实例化过程中,将类型标识符 T 具体化为 double型,同上,其成员函数 B add()返回值也为double型,并返回其数据成员初始化值加和,即为 2.4+5.6=8。 30 【正确答
43、案】 C 【试题解析】 本题考核文件的打开。 C+中可以在定义文件流对象的同时打开文件,也可以在定义文件流对象以后用 open()函数打开文件。可以通过构造函数或open 函数的第 2个参数,确定文件的打开模式。打开模式用下列常量表示: ios base: app 为添加数据而打开 (总是在文件 尾部写 ); ios base: binary 作为二进制文件打开; ios base: in 为输入而打开; ios base: out 为输出而打开: ios base: trunc 若文件存在,截为空文件: ios base: ate 打开时定位于文件尾。 根据以上知识点可知,关于题中语句的描述
44、中,只有选项 C是正确的。 31 【正确答案】 功能模型 【试题解析】 本题属于记忆题,考生应掌握。 32 【正确答案】 单元测试 【试题解析】 单元测试集中对源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。 33 【正确答案】 一对多 (1: M或 1: N) 【试题解析】 两个实体集间的联系可以有下面几种: 一对一的联系:简记为 1: 1。这种函数关系是最常见的关系之一,如学校和校长之间的联系,一个学校与一个校长间相互一一对应。 一对
45、多或多对一,简记为 1: M(1: m)或 M: 1(m: 1)。这两个实体集间的关系实际上是一种函数关系,如学生与其宿舍房间的联系是多对一的联系 (反之,则为一对多联系 ),即多个学生对应一个房间。 多对多联系,简记为 M: N或 m: n。这是一种较为复杂的函数关系,如教师与学生这两个实体集间的联系是多对多的,因为一个教师可以教授多个学生,而一个学生又可以受教于多个教师。 本题中一个项目对应有一个项目主管,一个项目主管可对应多个项目,所以项目主管与项目之间的联系是一对多。 34 【正确答案】 1 【试题解析】 此题考核条件表达 式的运用。第 1条语句执行后,变量 m的值为1。第 2条语句执
46、行后,变量 m的值为 1。第 3条语句执行后,变量 m的值为 1。 35 【正确答案】 2,1 【试题解析】 数组名作为函数参数传递的是数组的首地址,即实参数组名把实参数组的首地址传给了形参数组名,形参数组名就指向了相应的实参数组,就是说形参数组和实参数其实就是同一个数组,对形参数组元素的修改也同样影响到对应的实参数组元素。 36 【正确答案】 abc 【试题解析】 字符串的结束标记是 0,当输出一个存放在字符数组中的字符串时,只需输出到 0为止,而不管其后还有什么数据。本题给字符数组 s 的元素 s3赋值 0,故只能输出 3个字符 “abc”。 37 【正确答案】 const 【试题解析】 常类型