1、国家二级(C+)机试模拟试卷 157 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是( )(分数:2.00)A.12345ABCDEB.EDCBA54321C.ABCDE12345D.54321EDCBA2.下列叙述中正确的是( )。(分数:2.00)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动
2、态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定3.在长度为 n 的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。(分数:2.00)A.O(n)B.O(n 2 )C.O(log 2 n)D.O(nlog 2 n)4.下列叙述中正确的是( )。(分数:2.00)A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间5.数据流图中带有箭头的线段表示的是( )。(分数:2.00)A.控制流B.事件
3、驱动C.模块调用D.数据流6.在软件开发中,需求分析阶段可以使用的工具是( )。(分数:2.00)A.NS 图B.DFD 图C.PAD 图D.程序流程图7.在面向对象方法中,不属于“对象”基本特点的是( )。(分数:2.00)A.一致性B.分类性C.多态性D.标识唯一性8.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。(分数:2.00)A.一对一B.一对多C.多对一D.多对多9.在数据管理技术发展的三个阶段中,数据共享最好的是( )。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.三个阶段相同10.有三个关系 R、S 和 T 如下: (分数:2.00)A.笛
4、卡尔积B.交C.并D.自然连接11.下列语句中,错误的是( )。(分数:2.00)A.const int buffer=256;B.const double*point:C.int const buffer=256;D.double*eonst point:12.if 语句的语法格式可描述为: 格式 1:if(条件)语句 或 格式 2:if(条件)语句 1 else语句 2 关于上面的语法格式,下列表述中错误的是( )。(分数:2.00)A.条件部分可以是一个 if 语句,例如 if(if(a=0)B.语句部分可以是一个 if 语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交
5、换语句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循环语句,例如 if()while()13.有如下说明: int a10=1,2,3,4,5,6,7,8,9,10,*P=a; 则数值为 9 的表达式是( )。(分数:2.00)A.*P+9B.*(P+8)C.*P+=9D.P+814.有如下程序段: int i=0,j=1; int protected: int*a; unsigned int size,num;;class SortedArray:public Arraypublic:/*found* SortedArray(unsigned int S) :_ virtual
6、void add(int e) if(num=Size) return; int i=0,j; while(inum) if(eai) for(j=num;ji;j一)*found* _; *found* _; break; i+; if(i=num) ai=e; num+; ;void fun(Array for(i=0;i10;i+) coutaget(i)”,”; coutendl;int main() Array a(10); fun(a); SortedArray sa(10); fun(sa); return 0;(分数:2.00)_正确答案:(正确答案:(1)anum=e; (2
7、)Array(s) (3)aj=aj1 (4)ai=e)解析:解析:(1)考查的是虚函数 virtual void add(int e)的定义,即添加一个整型数 e 到 anum中。 (2)主要考查的是 Array 类的派生类 SortedArray 类的构造函数的定义,定义之前要对基础类初始化。 (3)因为 Sorted_Array 类是排序类,所以数组 a 中的元素要从小到大排序。在 if(e四、综合应用题(总题数:1,分数:2.00)43.请使用 VC6 或使用【答题】菜单打开考生目录 proj3 下的工程文件 proj3,此工程包含一个源程序文件 proj3cpp,其功能是从文本文件
8、indat 中读取全部整数,将整数序列存放到 intArray 类的对象myArray 中,然后对整数序列按非递减排序,最后由函数 writeToFile 选择序列中的部分数据输出到文件outdat 中。文件 indat 中的整数个数不大于 300 个。 要求: 补充编制的内容写在“*333*”与“*666*”两行之间。实现对整数序列按非递减排序,并将排序结果在屏幕上输出。不得修改程序的其他部分。 注意:程序最后已将结果输出到文件 outdat 中。输出函数 writeToFile 已经给出并且调用。/proj 3cpp#includeiostream#includefstream#inclu
9、decstringusing namespace std;class intArrayprivate: int*array;整数序列首地址 int length;序列中的整数个数 public: 构造函数,从文件中读取数据用于初始化新对象。参数是文件名 intArray(char*filename); void sort();对整数序列按非递减排序 一 intArray(); void writeTOFile(char*filename); ; intArray:intArray(char*filename) ifstream myFile(filename); int len=300; ar
10、ray=new int1en; length=0; while(myFilearraylength+); length-; myFileclose(); void intArray:sort() *333* *666* intArray:-intArray() deletearray;void intArray:writeToFile(char*filename) int step=0; ofstream outFile(filename); for(int i=0;ilength;i=i+step) outFilearrayiendl; step+; outFileclose(); void
11、 main() intArray myArray(”indat”); myArraysort(); myArraywriteTOFile(”outdat”); (分数:2.00)_正确答案:(正确答案:for(int i =0;i length; +i) 遍历整个数组 for(int j=i;jlength;+j) 从 i+遍历整数组 if(arrayiarrayj) 如果 arragiarrayj,把 arrayi与 arrayi进行对换 int temp; 定义一个临时变量 temp temp=arrayi; 把arrayi值放到变量 temp arrayi=arrayj; 把 arrayj值赋给 arrayi arrayj=temp; 把变量 temp 存放在值 arrayj中 for(int a=0;alength; +a) 遍历数组,把数组中的所有元素打印到控制台上 coutarraya”;)解析:解析:题目要求对整数序列按非递减排序,要排序就必须要有比较,因此定义两个下标 i 和 j,按题目非递减排序要求,当 arrayi比 arrayj大时就交换其值,利用中间变量 temp 来实现。