1、国家二级( C+)机试模拟试卷 117及答案与解析 一、选择题 1 有三个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( )。 ( A)自然连接 ( B)差 ( C)交 ( D)并 2 下列符号中能够作为 C+标识符的是 ( )。 ( A) const ( B) 2a ( C) _shape ( D) count 3 已知枚举类型声明语句为: enum COLOR WHITE, YELLOW, GREEN=5, RED, BLACK=10 ; 则下列说法中错误的是 ( )。 ( A)枚举常量 YELLOW的值为 1 ( B)枚举常量 RED的值为 6 ( C)枚举常量
2、BLACK的值为 10 ( D)枚举常量 WHITE的值为 1 4 下列叙述中正确的是 ( )。 ( A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 ( B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 ( C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 ( D)线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性 5 下列叙述中正确的是 ( )。 ( A)栈是 一种先进先出的线性表 ( B)队列是一种后进先出的线性表 ( C)栈与队列都是非线性结构 ( D)以上三种说法都不对 6 软件测试的目的是 ( )。 ( A)评估软件可靠性 (
3、B)发现并改正程序中的错误 ( C)改正程序中的错误 ( D)发现程序中的错误 7 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)软件集成测试计划 ( B)软件详细设计说明书 ( C)用户手册 ( D)软件需求规格说明书 8 软件生命周期是指 ( )。 ( A)软件产品从提出、实现、使用维护到 停止使用退役的过程 ( B)软件从需求分析、设计、实现到测试完成的过程 ( C)软件的开发过程 ( D)软件的运行维护过程 9 面向对象方法中,继承是指 ( )。 ( A)一组对象所具有的相似性质 ( B)一个对象具有另一个对象的性质 ( C)各对象之间的共同性质 ( D)类之间共享属性
4、和操作的机制 10 层次型、网状型和关系型数据库划分原则是 ( )。 ( A)记录长度 ( B)文件的大小 ( C)联系的复杂程度 ( D)数据之间的联系方式 11 一个工作人员可以使用多台计算机,而一台 计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对多 ( D)多对一 12 数据库设计中反映用户对数据要求的模式是 ( )。 ( A)内模式 ( B)概念模式 ( C)外模式 ( D)设计模式 13 有三个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( )。 ( A)自然连接 ( B)差 ( C)交 (
5、 D)并 14 T列符号中能够作为 C+标识符的是 ( )。 ( A) const ( B) 2a ( C) 一 shape ( D) -count 15 已知枚举类型声明语句为: enum COLORWHITE, YELLOW, GREEN=5, RED, BLACK=10; 则下列说法中错误的是 ( )。 ( A)枚举常量 YELLOW的值为: 1 ( B)枚举常量 RED的值为 6 ( C)枚举常量 BLACK的值为 10 ( D)枚举常量 WHITE的值为 1 16 执行下列语句段后,输出字符 “*”的个数是 ( )。 for(int i=50; il; i-=2) coutgetPI
6、();和 coutgetPI();和 coutgetPI(); ( D) cout using namespace std; class VAC public: int f()constreturn 3; int f()retum 5; ; int main() VAC vl; const VAC v2; cout using namespaee std; class NyClass public: lyClass(int i=0)eout using namespace std; class AA int k; protected: int n; void setK(int k)this-k
7、=k; public: void setN(int n)this-n=n; ; class BB: public从 *类体略 * ; int main() BB x; x n=1: 1 x setN(2); 2 x k=3; 3 x setK(4); 4 return 0; 在标注号码的四条语句中正确的是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 38 有如 下程序: #include using namespaee std; class Base int x; public: Base(int n=0): x(n)eout using narnespaee std;
8、class GA public: virtual int f()retunl 1; ; class GB: public GA public: virtual int f()return 2; ; void show(GA g)eoutdouble 由此可知 ( )。 ( A)这可能是一个函数模板的声明 ( B)这可能是一个类模板的声明 ( C)这既可能是一个函数模板的声明,也可能是一个类模板的声明 ( D)这肯定是一个错误的模板声明 42 C+系统预定义了 4个用于标准数据流的对象,下列选项中不属于此类对象的是 ( )。 ( A) cout ( B) cin ( C) CelT ( D) c
9、set 43 下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 ( )。 ( A) cout using namespace std; 狗的颜色:黑、白、黄、褐、花、其他 enum DOGCOLORBLACK, WHITE, YELLOW, BROWN, PIEBALD,OTHER; class Dog狗类 DOGCOLOR color; char naIne20; static int count; public: Dog(char nanle, DOGCOLOR color) strcpy(this-nanle, nanle); ERROR*fo
10、und* strcpy(this一 color, color); DOGCOLOR getColor()constretum color; ERROR *found* const char * getName()constreturn * name; const char * getColorString()const switch(color) case BLACK: return“black”: case WHITE: return”white“: case YELLOW: return“yellow”; case BROWN: retum“brown”; case PIEBALD: re
11、turn”piebald“; return“motley“; void show()const cout using namespace std; class Time private: int hour; int minute; int second; public: Time(int h, int m, int S) this-hour=h: this-minute=m: this-second=s; bool operator(Time&fight)const if(this-hourright hour | (this_hour=right hour&this_minuteright
12、minute)| (this-hour=right hour&this-minute=right minute&this-secondright second) *found* _; return false; ; class StreetLight private: int id: bool is_on; Time current_time; public: StreetLight(int id, int hour, int minute, int second) *found* : _ this-is_on=false: this-id=id: void turn-on() this-is
13、_on=true; coutidis_on) return false; if(current_timetime_threshold) return true; *found* retum_; int main() StreetLight* lightl=new StreetLight(1, 17, 34, 45); StreetLight*light2=new StreetLight(2, 18, 34, 45); Time time_threshold(18, 0, 0); if(1ightl-check(time_threshold) lightl-turn_on(); if(1ight
14、2-check(time_threshold) light2-turn_on(); return 0; 四、综合应用题 46 请使用 “答题 ”菜单或使用 VC6打开考生文件夹下的工程 proj3,其中声明了 List类,它是一个用于表示整数列表的类。 List的成员函数 insert的功能是将一个指定的整数插入到列表的指定位置处,原位置处的及其后的所有元素依次向后顺移一个位置。请补充完整成员函数 insert。在 main函数中给出了一组测试数据,此情况下程序的输出应该是: 5 3 7 9 13 2 6 8 1 0 5 3 7 13 2 6 8 1 0 5 -23 3 7 13 2 6 -1
15、9 8 1 0 注意:只需在 *333*和 *666*之间填入所编写的若干语句,不要改动程序中的其他内容。 #include”List h“ int main() int dat=5, 3, 7, 9, 13, 2, 6, 8, 1, 0; List list(dat, 10); list show(); list remove(3); list show(); list insert(-23, 1); list insert(-19, 7); list show(); writeToFile(“c: test “); return 0: proj3 list.cpp #include“Lis
16、t h“ List: List(int d, int size) int min=(MAX_SIZEsize?size: MAX_SIZE); for(int i=0; i=MAX_SIZE)return; 指定的插入位置在 最后元素之后,紧贴最后元素之后插入新元素。 if(pos=count)elemcount+=data; return; 指定的插入位置未超过最后元素处,须移动有关元素以便腾空指定的插入位置,然后插入新元素。 *333* *666* void List: remove(int pos) if(pos=count)return; for(int i=pos; i using
17、namespace std; #define MAX_SIZE 100 class List int elemMAX_SIZE; 存放列表元素的数组 int count; 列表中元素的个数 public: List(): count(0) List(int d, int size); int size()constreturn count; 将数据元素 data插入到位置 pos处。注意第一个元素的位置是 0。 void insert(int data, int pos); 删除位置 pos处的数据元素。 void remove(int pos); 输出列表内容 void show(ostre
18、am&os=cout)const; ; void writeToFile(const char*path); 国家二级( C+)机试模拟试卷 117答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 关系 T中的元组是 R关系中有而 S 关系中没有的元组的集合,所以进行的是差的运算。 2 【正确答案】 C 【试题解析】 本题考查 C+标识符的命名规则,其规则有如下几点: 所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头; 所有标识符不能使用 C+已有的关键字; 大、小写字母表示不同意义,即代表不同的标识符。选项 A是关键字,选项 B不能以数字开头,选项 D包含了字符 “
19、-“,且不能以此字符开头。故答案为 C。 3 【正确答案】 D 【试题解析】 C+语言规定枚举常量的默认值依次等于 0, 1, , n-l。也可以给枚举常量赋初值,方法是:在枚举常量的后面跟上 “=整型常量 “,在给枚举常量赋初值时,如果给其中任何一个枚举常量 赋初值,则其后的枚举常量将按自然数的规则依次赋初值。所以本题答案为 D。 4 【正确答案】 B 【试题解析】 线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。 5 【正确答案】 D 【试题解析】 栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。 6 【正确答
20、案】 D 【试题解析】 软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。 7 【正确答案】 D 【试题解析】 需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择 D。 8 【正确答案】 A 【试题解析】 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。 9 【正确答案】 D 【试题解析】 继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类
21、的定义技术。广义的说,继承是指 能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。 10 【正确答案】 D 【试题解析】 层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。 11 【正确答案】 C 【试题解析】 因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。 12 【正确答案】 C 【试题解析】 数据库系统的三级模式是概念模式、外 模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。
22、外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择 c。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。 13 【正确答案】 B 【试题解析】 关系 T中的元组是 R关系中有而 S 关系中没有的元组的集合,所以进行的是差的运算。 14 【正确答案】 C 【试题解析】 本题考查 C+标识符的命名规则,其规则有如下几点: 所有标识符必须由字母、数字或下画线组成,且必须由 字母或下画线开头; 所有标识符不能使用 C+已有的关键字; 大、小写字母表示不同意义,即代表不同的标识符。选项 A是关键字,选项 B不能以数字开头,选项 D包含了字符 ”一 ”,且
23、不能以此字符开头。故答案为 C。 15 【正确答案】 D 【试题解析】 C+语言规定枚举常量的默认值依次等于 0, 1, , n1。也可以给枚举常量赋初值,方法是:在枚举常量的后面跟上 “=整型常量 ”,在给枚举常量赋初值时,如果给其中任何一个枚举常量赋初值,则其后的枚举常量将按自然数的规则依次赋初值。所以本题答案为 D。 16 【正确 答案】 B 【试题解析】 本题考查 for循环语句,题目中每执行完循环体后, i都会减 2,那么只有 50到 2之间的偶数才能输出 “*”,所以总共输出 25次。 17 【正确答案】 B 【试题解析】 本题考查指向数组的指针,本题中指针变量 p 指向数组 a,
24、直接使用数组下标即可取值,数组下标是从 O 开始标号的,所以 a2能取到 5,而 a3取不到 5, C选项中使用指针后移方法能够取到 5, D选项中 *木 p为 1,所以 *p+4为 5。 18 【正确答案】 A 【试题解析】 const是一个 C+语言的关键字,它 限定一个变量不允许被改变。使用 const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化。 A选项没有初始化, B、 C、 D选项都正确。 19 【正确答案】 D 【试题解析】 如果使用用户自己定义的函数,而该函数与调用它的函数 (即主调用函数 )在同一程序单元中,且位置在主调用函数之后,则必须在调用
25、此函数之前对被调用的函数作声明。 20 【正确答案】 C 【试题解析】 运算符函数可以定义为类的友元函数。所以 c选项错误。 21 【正确答案】 A 【试题解析】 一 般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,一般只将规模很小而使用频繁的函数声明为内联函数,可以避免函数调用时间开销,从而提高运行速度。 22 【正确答案】 B 【试题解析】 根据重载加法运算符的格式,只有 B选项正确。 23 【正确答案】 D 【试题解析】 函数参数的 3种传递方式: 将变量名作为形参和实参,即传值方式; 传递变量指针; 引
26、用形参。本题中函数 f 的第一个形参为指针,那么调用f 函数时,第一个 参数必须是地址,所以必须是 &v1,第二个形参为引用,所以对应实参为 v2即可。故本题答案为 D。 24 【正确答案】 A 【试题解析】 本题考查运算符重载,其中重载运算符的函数不能有默认的参数,所以本题答案为 A。 25 【正确答案】 A 【试题解析】 运算符重载为成员函数时,会省略一个参数,如果无参数,表明是一元运算符。一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须有两个参数。 C+有 5个运算符不能重载,它们是: (成员访问运算符 )、 *(成员指针访问运算符
27、 )、: (域运算符 )、 sizeof(长度运算符 )和 ?: (条件运算符 )。故本题答案为 A。 26 【正确答案】 B 【试题解析】 友元函数是指某些虽然不是类成员却能访问类的所有成员的函数,故友元函数不是类的成员函数。类成员的默认访问权限是私有的,类的成员函数可以是 3种权限中的一种,静态数据成员可以为常成员。故本题答案为 B。 27 【正确答案】 C 【试题解析】 本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外进行初始化,其一般形式为:数据类型类名:静态数据成 员名 =初值。所以本题答案为 C。 28 【正确答案】 C 【试题解析】 只有类的非静态成员函数才隐含 th
28、is 指针,其作用域是类内部,当类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,而不必一定写上 this。所以本题答案为 C。 29 【正确答案】 D 【试题解析】 3种继承方式中,派生类继承了基类的私有成员,但不能被直接访问,可以通过派生类的友元函数去访问基类的私有成员。 30 【正确答案】 B 【试题解析】 3种继承方式: 公用继承、私有继承和保护继承分别使用 public、private和 protected3 个关键字来定义。 31 【正确答案】 C 【试题解析】 本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员
29、和保护成员在派生类中成了保护成员,所以基类的成员 x2、 x3变成了保护成员,派生类中的 y2也是保护成员,所以共有 3个保护成员。本题答案为 C。 32 【正确答案】 B 【试题解析】 本题考查类的默认构造函数和自定义的构造函数。本题中MyClass(int n): value(n)为自定义的构造函数,加上默认构造函数,一共有 2个构造函数。 33 【正确答案】 D 【试题解析】 本题考查静态成员函数。静态成员函数由于没有 this指针,所以不能访问本类中的非静态成员。引用静态成员函数有 2种方式,一种是直接使用类来引用,即 Constants: getPI();另一种是使用对象来引用,即c
30、onstants getPI( )。所以本题答案为 D。 34 【正确答案】 A 【试题解析】 本题考查常对象及常成员函数及构造函数,常对象只能调用常成员函数,所以本题中,对 象 vl为普通对象,执行 v1 f()后,会执行默认构造函数,输出 5,对象 v2为常对象,执行 v2 f()后,会执行常构造函数,输出 3。 35 【正确答案】 A 【试题解析】 本题考查构造函数和复制构造函数以及重载运算符。本题中先后定义了两个对象 obj1, obj2,依次输出 11,然后定义了对象 obj3,调用复制构造函数,输出 2,最后执行三次析构函数,输出 444。 36 【正确答案】 B 【试题解析】 本
31、题考查公有继承中派生类对象对基类的访问属性。在公有继承中,派生类对象只能访问基类的公有成员, 而不能访问基类的保护成员和私有成员。题中 x是派生类的对象,只能访问基类中公有的 Base()和 getAmount()成员,而不能访问保护类型的 amount成员,故选项 c、 D错误。而类对象对类成员的访问也存在类似的情况,即类对象只能访问类的公有成员,而 value是 Derived的保护成员,所以 A选项也错误。故答案为 B。 37 【正确答案】 B 【试题解析】 本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。所
32、以本题中 n、 k 和 setK变为了派生类的保护成员,不能直接使用,即 1、 3、 4错误,所以 B 选项正确。 38 【正确答案】 C 【试题解析】 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个对象 d1,先执行基类的构造函数输出 O,再执行派生类的构造函数输出 3,然后定义了一个对象d2(5, 7),其中需要调用基类的构造函数输出 7,最后输出 5,所以答案为 C。 39 【正确答案】 C 【试题解析】 本题主要考察虚函数。虚函数指在某基类中声明为
33、 virtual 并在一个或多个派生类中被重新定义的成员函数,本题中定义类 GA 的对象 a,执行show(a)、 display(a),输出 11,定义了类 GB 的对象 b,执行 show(b),仍然输出1, display(b)执行会调用派生类的 f函数,因为 f 函数为虚函数,输出 2,所以本题答案为 C。 40 【正确答案】 B 【试题解析】 本题考查函数模板和类模板的基础知识,所以本题答案为 B。 41 【正确答案】 A 【试题解析】 本 题考查函数模板和类模板的基础知识,从 templatedouble这里就可以看出这是一个函数模板的声明。 42 【正确答案】 D 【试题解析】 C+标准数据流的对象分别是 cout、 cin、 celt、 clog,所以本题答案为 D。 。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1