1、国家二级(C+)机试-试卷 1-1 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在软件开发中,需求分析阶段可以使用的工具是( )。(分数:2.00)A.NS 图B.DFD 图C.PAD 图D.程序流程图2.有如下函数定义:void func(int a, int b+; 若执行代码段:int x = 0, y = 1;func(x, y);则变量 x 和 y 的值分别是( )。(分数:2.00)A.0 和 1B.1 和 1C.0 和 2D.1 和 23.下列代码段中声明了 3 个类:class Person ;class Student
2、: public Person ;class Undergraduate : Student ;下列关于这些类之间关系的描述中,错误的是( )。(分数:2.00)A.类 Person 是类 Undergraduate 的基类B.类 Undergraduate 从类 Student 公有继承C.类 Student 是类 Person 的派生类D.类 Undergraduate 是类 Person 的派生类4.数据库系统的三级模式不包括( )。(分数:2.00)A.概念模式B.内模式C.外模式D.数据模式5.计算数列第 n 项的函数定义如下: int a(int n) if (n = 0) ret
3、urn 0; else if (n = 1) return 1; else if (n = 2) return 2; else return a(n-1)+a(n-3); 若执行函数调用表达式 a(4),函数 a 被调用的次数是(分数:2.00)A.3B.4C.5D.66.有如下程序: #include #include using namespace std; class Instrument public: Instrument(string t=“乐器“,string n=“无名“):type(t),name(n) virtual string GetType() const retur
4、n “乐器“; string GetName() const return “无名“; protected: string type,name; ; class Piano:public Instrument public: Piano(string n,string t=“钢琴“):Instrument(t,n) string GetType() const return “钢琴“; string GetName() const return name; ; int main() Instrument *pi=new Piano(“星空“); coutname,name); (2)PetTy
5、pe getType() const return type; (3)return “an unknown animal“;)解析:解析:(1)主要考查字符串复制函数 strcpy(),其格式为:strcpy(字符串 1,字符串 2)或 strcpy(指向字符串 1 的指针,指向字符串 2 的指针),功能是将字符串 2 拷贝到字符串 1 中,本题使用第二种格式。 (2)主要考查考生对成员函数的掌握,根据私有成员的定义类型 PetType type,可知要返回的是 type。 (3)主要考查考生对 switch 语句的掌握,当在 switch 语句体中找不到相应的字段时,跳出 switch 语句
6、,程序返回“an unkown animal“。三、简单应用题(总题数:1,分数:2.00)42.请使用 VC6 或使用【答题】菜单打开考生文件夹 proj2 下的工程 proj2,此工程中含有一个源程序文件 proj2cpp,其中定义了 MyString 类。MyString 是一个用于表示字符串的类,其构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中;成员函数 reverse 的功能是对字符串进行反转操作,例如,字符串“ABCDE”经过反转操作后,会变为“EDCBA”;成员函数 print 的作用是将字符串输出到屏幕上。请在横线处填写适当的代码并删除横线,以实现 MyS
7、tring 类的功能。此程序的正确输出结果应为:Beforereverse:abcdeAfterreverse:Chagfed 注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。proj2cpp#includeiostreamusingnamespacestd;classMyStringpublic:MyString(constchar*s)*found*mstr=newchar_;strcpy(m_str,s);MyString()*found*_;?voidreverse()intn:strlen(m_str);for(inti=0;in2;+i
8、)inttmp=m_stri;*found*mstri=_;*found*_; voidprint()coutmstrend1;其他成员private:char*mstr;intmain(intargc,char*argv)MyStringstr1(”abc”),str2(“defg“);cout“Beforereverse:n“;str1print();str2print();str1reverse();str2reverse();cout“Afterreverse:n“;str1print();str2print();return0;(分数:2.00)_正确答案:(正确答案:(1)strl
9、en(s) + 1 (2)delete m_str (3)m_strn-i-1 (4)m_strn-i-1 = tmp)解析:解析:(1)考查使用 new 语句动态分配内存空间,要分配空间大小应为字符串的长度加 1。 (2)主要考查考生对析构函数的掌握,析构函数使用 delete 语句释放指针。 (3)和(4)主要考查考生对成员函数的掌握,这里是一个变量交换操作,通过中间变量 tmp 交换。四、综合应用题(总题数:1,分数:2.00)43.请使用 VC6 或使用【答题】菜单打开考生文件夹 proj3 下的工程 proj3,其中声明的 DataList 类,是一个用于表示数据表的类。sort 成
10、员函数的功能是将当前数据表中的元素升序排列。请编写这个 sort 函数。程序的正确输出应为:排序前:7,1,3,11,6,9,12,10,8,4,5,2 排序后:1,2,3,4,5,6,7,8,9,10,11,12 要求:补充编制的内容写在“*333*”与“*666*”两行之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件 outdat 中。输出函数 writeToFfle 已经编译为 obj 文件,并且在本程序调用。DataLiSth#includeiostreamUSingnamespacestd;classDataList数据表类 intlen;double*d;public:
11、DataList(intlen,doubledata=NULL);DataList()deleted;intlength()constreturnfen;数据表长度(即数据元素的个数)doublegetElement(inti)constreturndi;,voidsort();数据表排序 voidshow()const;显示数据表;voidwriteToFile(char*,constDataList);maincpp#include“DataListh“DataList:DataList(intlen,doubledata):len(len)d:newdoublelen;for(inti=
12、0;ilen;i+)di=(data=NULL?00:datai);voidDataList:sort()数据表排序*333*666*voidDataList:show()const显示数据表 for(inti=0;ilen-1;i+)coutdi“,“;coutdlen-1end1;intmain()doubles=7,1,3,11,6,9,12,10,8,4,5,2;DataList1ist(12,s);cout“排序前:“;listshow();listsort();coutend1“排序后:“;listshow();writeToFile(“,list);return0;(分数:2.00)_正确答案:(正确答案:for(inti=0;ilen;+i) 从头遍历数组 d for(intj=i;jlen;+j) 从 i+1 处遍历数组 d if(didj) di和 dj比较人,如果大于,就 di和 dj值交换 inttemp=di; 把临时整型变量 temp 赋值为 di di=dj; 把 dj赋值给 di dj=temp; 把 temp 值赋给 dj )解析:解析:本题使用最简单的冒泡排序算法,首先明确要排序的动态数组 d,其长度为 len,在此可以使用两个下标 i 和 j 相比较,当 didj时,数组内的值利用中间变量 temp 进行交换。