1、国家二级( C+)机试模拟试卷 149及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 ( B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 ( C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 ( D)线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性 2 下列叙述中正确的是 ( )。 ( A)栈是一种先进先出的线性表 ( B)队列是一种后进先出的线性表 ( C)栈与队列都 是非线性结构 ( D)以上三种说法都不对 3 软件测试的目的是 ( )。 ( A)评估软件可靠性 (
2、B)发现并改正程序中的错误 ( C)改正程序中的错误 ( D)发现程序中的错误 4 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)软件集成测试计划 ( B)软件详细设计说明书 ( C)用户手册 ( D)软件需求规格说明书 5 软件生命周期是指 ( )。 ( A)软件产品从提出、实现、使用维护到停止使用退役的过程 ( B)软件从需求分析、设计、实现到测试完成的过程 ( C)软件的开发过程 ( D)软件的运行维护过程 6 面向对象方法中,继承是指 ( )。 ( A)一组对象所具有的相似性质 ( B)一个对象具有另一个对象的性质 ( C)各对象之间的共同性质 ( D)类之间共享属性和
3、操作的机制 7 层次型、网状型和关系型数据库划分原则是 ( )。 ( A)记录长度 ( B)文件的大小 ( C)联系的复杂程度 ( D)数据之间的联系方式 8 一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对多 ( D)多对一 9 数据库设计中反映用户对数据要求的模式是 ( )。 ( A)内模式 ( B)概念模式 ( C)外模式 ( D)设计模式 10 有三个关系 R、 S和 T如下:则由关系 R和 S得到关系 T的操作是 ( )。 ( A)自然连接 ( B)差 ( C)交 ( D)并 1
4、1 下列符号中能够作为 C+标识符的是 ( )。 ( A) const ( B) 2a ( C) _shape ( D) -count 12 已知枚举类型声明语句为: enum COLORWHITE, YELLOW, GREEN=5, RED, BLACK=10; 则下列说法中错误的是 ( )。 ( A)枚举常量 YELLOW的值为 1 ( B)枚举常量: RED的值为 6 ( C)枚举常量 BLACK的值为 10 ( D)枚举常量 WHITE的值为 1 13 执行下列语句段后,输出字符 “*”的个数是 ( )。 for(int i=50; i1; i-=2) coutgetPI();和 co
5、utgetPI();和 coutgetPI(); ( D) cout using namespace std; class VAC public: int f()constreturn 3; int f()return 5; ; int main() VAC vl; cont VAC v2; cout using namespace std; class MyClass public: MyClass(int i=0)cout using namespace std; class AA int k; protected: int n; void setK(int k)this-k=k; pub
6、lic: void setN(int n)this-n=n; ; class BB: public AA *类体略 * ; 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 35 有如下程序: #include using namespace std; class Base int x; public: Base(int n=0): x(n) cout using namespace std; class
7、GA public: virtual int f()return 1; ; class GB: public GA public: virtual int f()return 2; ; void show(GA g)coutdouble 由此可知 ( )。 ( A)这可能是一个函数模板的声明 ( B)这可能是一个类模板的声明 ( C)这既可能是一个函数模板的声明,也可能是一个类模板的声明 ( D)这肯定是一个错误的模板声明 39 C什系统预定义了 4个用于标准数据流的对象,下列选项中不属于此类对象的是 ( )。 ( A) cout ( B) cin ( C) celt ( D) cset 40
8、 下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 ( )。 ( A) cout using namespace std; class Book char*title; int num_pages;页数 int cur_page;当前打开页面的页码, 0表示书未打开 public: ERROR*found* Book(const char*theTitle, int pages)num_pages(pages) title=new charstrlen(theTitle)+1; strcpy(title, theTitle); coutnum_pag
9、es) cout #include #include using namespace std; #define MaxLength 100 class Element “元素 ”类 public: int n; Element(int i=0): n(i) ; class Queue “队列 ”类 Element*element;指向存储元素的数组的指针 int tail; 队尾元素的下标 public: Queue(): element(new Element100), tail(-1) Queue() dclcteelement; void push(Element ele);在队列尾端添
10、加一个元素 Element pop();在队列首端删除一个元素,返回被删元素 Element front()constreturn element0; 返回队首元素,但不从队列中删除该元素 *found* int size()constreturn(_); 返回元素个数 void show()const; 显示集合中所有元素 ; void Queue: push(Element ele) if(tail=MaxLength-1)return;空间满,不做任何处理 *found* _; Element Queue: pop() if(size()=0)exit(1);队列空,不做任何处理 Ele
11、ment tmp=element0; for(int i=0; i using namespace std; const int MAXELEMENTS: 100: 集合最多可拥有的元素个数 class IntegerSet int elemMAXELEMENTS; 用于存放集合元素的数组 int counter;用于记录集合中元素个数的计数器 public: IntegerSet(): counter(0) 创建一个空集合 IntegerSet(int data, int size); 利用数组提供的数据创建一个整数集合 void add(int element); 添加一个元素 到集合中
12、void remove(int element); 删除集合中指定的元素 int getCount()constreturn counter; 返回集合中元素的个数 int getElement(int i)constreturn elemi; 返回集合中指定的元素 void show()eonst: ; void WriteToFile(char*); #endif main cpp #include“IntegerSet h“ #include IntegerSet: IntegerSet(int data, int size): counter(0) for(int i: 0; i0;
13、j-) if(element=elemj-1)break; 如果找到的是等于 element的元素,说明要添加的元素已经存在,直接返回 if(j0) if(element=elemj-1)return; 如果找到的是小于 element的元素, j就是要添加的位置 该元素及其后面的元素依次后移,腾出插入位置 for(int k=counter; kJ; k-) elemk=elemk-1; elemj=element;将 element插入到该位置 counter+; 计数器加 1 void IntegerSet: remove(int element) *333* *666* void In
14、tegerSet: show()const for(int i=0; idouble这里就可以看出这是一个函数模板的声明。 39 【正确答案】 D 【试题解析】 C+标准数据流的对象分别是 cout、 cin、 cerr、 clog,所以本题答案为 D。 40 【正确答案】 D 【试题解析】 本题考查控制输出格式, A、 B、 C选项都会输出 “12345”,只有 D选项输出 “12345”,所以本题答案为 D。 二、基本操作题 41 【正确答案】 (1)Book(const char*theTitle, inl pages): num_pages(pages) (2)void openAtP
15、age(int page_no)把书翻到指定页 (3)cur-page=0; 【试题解析】 (1)主要考查考生对构造函数的掌握,构造函数的成员列表初始化法要注意它的格式,即成员列表前要有标识符 “: ”,因此语句改为: Book(const char*theTitle, int pages): num_pages(pages)。 (2)主要考查考生对 ccmst函数的掌握,在函数体中可以看到有语句cur_page=page_no,即 cur_page的值发生改变,因此该函数不是 const函数。 (3)主要考查考生对成员函数的掌握,题目要求输出的最后一条是 “当前页: 0”,可知主函数中调用
16、close函数后当前页为 0,因此应该是 cur_page=0;。 三、简单应用题 42 【正确答案】 (1)tail+1 (2)element+tail=ele (3)tail- (4)int i=0; i=tail; i+ 【试题解析】 题意定义了 Element类,表示队列中的元素,它包含一个成员 n,表示元素的值;定义了 Queue类,表示队列,它包含两个成员: element是动态分配的一个数组,每个元素都是 Element类型; tail表示队列尾部的下标值,指向element数组的最后一个元素,当数组为空时, tail的值为 -1,所以初始化为 -1;另外 Queue类还定义了若
17、干成员函数:构造函数为 element数组动态分配 100个元素空间,初始化 tail为 -1;析构函数释放 element; push()函数向队列中添加一个新元素 ele,即将形参 ele存放到数组尾部,并将 tail自增 1; pop()函数将 element数组的第一个元素 (下标为 0)从数组中删除 (采用移动后续所有元素的方式 ),并作为函数返回值返回; fmnt()甬数返回队列首元素; size()函数返回当前 element数组的元素个数; show()函数将 element数组中的元素的 n值输出,由上面的分析,补充代码如下: (1)size()函数返回 element数组的
18、元素个数, tail的值是 element数组的最后一个元素的下标,所以返回 tail+l即可。 (2)push()函数将参数 ele插入到队列的尾部,即将 ele保存到 element数组下标为 (tail+1)的位置: ele ment+tail =ele; (3)p叩 ()函数将 element数组的首元素保存到 tmp变量中,然后遍历 element数组,将下标从 1开始的元素逐个赋给前一个元素,再把 tail的值自减 1, tajl-; (4)show()函数需要遍历 element数组,然后将元素的 n值输出,遍历下标的变量需要 定义为 i, i初值从 0开始,直到 i等于最后一个元素的下标,即 tail。 int i=0; i=tail; i+ 四、综合应用题 43 【正确答案】 for(int i=0; icounter; i+) 遍历整个集合 (数组 elem) if(element=elemi)