全国计算机二级c++考试级解析3_第1页
全国计算机二级c++考试级解析3_第2页
全国计算机二级c++考试级解析3_第3页
全国计算机二级c++考试级解析3_第4页
全国计算机二级c++考试级解析3_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第七套 1、 数据库管理系统是_。 A、操作系统的一部分 B、在操作系统支持下的系统软件 C、一种编译系统 D、一种操作系统      数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。 故本题答案为B。 2、 对于循环队列,下列叙述中正确的是_。 A、队头指针是固定不变的 B、队头指针一定大于队尾指针 C、队头指针一定小于队尾指针 D、队头指针可以

2、大于队尾指针,也可以小于队尾指针      所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。     在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。     循环队列主要有两种基本运算:入队运算与退队运算。每进行一次入队运算,队尾指针就进一。每进行一次退队运算,排头指针就进一。当rear或front的值等于队列的长度+1时,就将rear或fr

3、ont的值置为1。一般情况下,rear大于front,因为入队的元素肯定比出队的元素多。特殊的情况是rear到达数组的上限之后又从数组的低端开始,此时,rear是小于front的。 故本题答案为D。 3、 算法的空间复杂度是指_。 A、算法在执行过程中所需要的计算机存储空间 B、算法所处理的数据量 C、算法程序中的语句或指令条数 D、算法在执行过程中所需要的临时工作单元数      一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。 故本题答案为A。

4、60;4、 下列数据结构中,能够按照"先进后出"原则存取数据的是_。 A、循环队列 B、栈 C、队列 D、二叉树      在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照"先进后出"或"后进先出"的原则组织数据的。 故本题答案为B。 5、 在E-R图中,

5、用来表示实体联系的图形是_。 A、椭圆形 B、矩形 C、菱形 D、三角形  在E-R图中用矩形表示实体集,用椭圆形表示属性,用菱形表示联系。故本题答案为C。 6、有三个关系R,S和T如下:   其中关系T由关系R和S通过某种操作得到,该操作为_。 A、选择 B、投影 C、交 D、并      并:设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的

6、元组组成。本题中,关系T是关系R和关系S进行并运算得到的。 故本题答案为D。 7、 软件设计中划分模块的一个准则是_。 A、低内聚低耦合 B、高内聚低耦合 C、低内聚高耦合 D、高内聚高耦合      耦合性与内聚性是模块独立性的两个定性标准。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。 故本题答案为B。 8、 下列数据结构中,

7、属于非线性结构的是_。 A、循环队列 B、带链队列 C、二叉树 D、带链栈      如果一个非空的数据结构满足下列两个条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。本题中循环队列、带链队列和带链栈都是线性结构,二叉树是非线性结构。 故本题答案为C。 9、 下列选项中不属于结构化程序设计原则的是_。 A、可封装 B、自顶向下 C、模块化 D、逐步求精  &

8、#160;   结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。 故本题答案为A。 10、软件详细设计产生的图如下: 该图是_。 A、N-S图 B、PAD图 C、程序流程图 D、E-R图 程序流程图是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,箭头表示控制流,矩形表示加工步骤,菱形表示逻辑条件。 故本题答案为C。 11、有如下程序: #include<iostream> #include<iomanip> using namespace std; int main() i

9、nt s=123,234; cout<<right<<setfill('*')<<setw(6);for(int i=0;i<2;i+) cout<<si<<endl; return 0; 运行时的输出结果是_。 A、123 234 B、*123 234 C、*123 *234 D、*123 234* 本题主要考查了输出格式控制。 right设置在设定的宽度内右对齐输出(默认对齐方式),用填充字符填充左边。setfill('*')设置填充字符为*。setw(6)指定输出宽度为6,在一个数据输出完后

10、,宽度自动恢复为默认值0(表示按数据实际宽度输入输出)。因此第一行输出结果为*123,第2行输出结果为234。 故本题答案为B。12、 有如下程序: #include <iostream> using namespace std; class C1 public: C1() cout<<1; ; class C2:public C1 public: C2()cout<<2; ; int main()C2 cb2; C1 *cb1;return 0; 运行时的输出结果是_。 A、121 B、21 C、211 D、12 本题主要考查了派生类析构函数的执行顺序。

11、析构函数用来完成对象被删除前的一些清理工作,在对象的生存期即将结束的时候由系统自动调用。删除派生类对象时,析构函数的执行顺序如下:(1)执行派生类的析构函数;(2)执行派生类成员对象所在类的析构函数;(3)执行基类析构函数。在main()函数中,第一条语句定义了派生类C2的对象cb2,第二条语句声明对象指针cb1,声明指针,只是得到了用于存储地址的指针变量,不会创建对象,故本程序只创建了一个对象cb2。当main()函数结束时,派生类对象cb2被删除前,系统先执行派生类C2的析构函数,输出2,然后调用基类C1的析构函数,输出1。故本程序运行时的输出结果是21。 故本题答案为B。 13、在下列枚

12、举符号中,用来表示"相对于当前位置"文件定位方式的是_。 A、ios_base:cur B、ios_base:beg C、ios_base:out D、ios_base:end 本题主要考查了文件流的定位。 C+流的定位方式(也就是指针移动方式)有三种: ios_base:beg:相对于文件首。 ios_base:cur:相对于当前位置(负数表示当前位置之前)。 ios_base:end:相对于文件尾。 故本题答案为A。 14、Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是_。 Sample a2, *p=new Sample; A、0 B、1

13、C、2 D、3 本题主要考查了构造函数。 构造函数在对象被创建的时候由系统自动调用。本题定义了一个含有2个元素的对象数组a和一个指向动态创建对象的指针p,因此共创建了3个对象。故Sample类的构造函数被调用3次。 故本题答案为D。 15、已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则_。 A、FA必须定义在FB之前 B、FB必须定义在FA之前 C、若FA定义在FB之后,则FA的原型必须出现在FB的定义之前 D、若FB定义在FA之后,则FB的原型必须出现在FA的定义之前 本题主要考查了函数原型。 在C+中,函数在使用之前要预先声明原型。因此如果函数FB定义在函数FA之后,则必须在

14、函数FA之前声明函数FB的原型,才可以在函数FA中调用函数FB。 故本题答案为D。 16、 有如下程序段: int i=1; while(1) i+; if(i=10) break; if(i%2=0) cout<<'*' 执行这个程序段输出字符*的个数是_。 A、10 B、3 C、4 D、5 本题主要考查了while循环和if语句。 在while循环中,变量i的值从1开始,按步长值1递增,当i的值等于10时退出while循环,当i的值为2的整数倍且i的值不等于10时,输出字符*,故执行这个程序段输出字符*的个数为4。 故本题答案为C。 17、有如下模板声明: te

15、mplate<typename T1,typename T2> class A; 下列声明中,与上述声明不等价的是_。 A、template<class T1,class T2> class A; B、template<class T1,typename T2> class A; C、template<typename T1,class T2> class A; D、template<typename T1,T2> class A; 本题主要考查了类模板的声明。 在C+中,类模板声明的语法形式为: template<模板参数表声

16、明> class 类名; 每个模板形参具有下面几种形式: (1)typename <参数名> (2)class <参数名> (3)类型修饰 <参数名> 在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class可以互换。因此选项A、B、C和该题模板声明等价。 故本题答案为D。 18、有如下程序: #include<iostream> using namespace std; class A public: A(int i):r1(i) void print() cout<< 'E'<

17、;<r1<<'-' void print() const cout<< 'C'<<r1*r1<<'-' private:int r1; ; int main() A a1(2); const A a2(4); a1.print();a2.print();return 0; 运行时的输出结果是_。 A、运行时出错 B、E2-C16- C、C4-C16- D、E2-E4- 本题主要考查了常对象和常成员函数。 使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称为常成员函数

18、,const关键字可以用于对重载函数的区分。本题在A类中说明了两个同名函数print,其中一个是常函数。在主函数main中说明了两个对象a1和a2,其中a2是常对象。如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他成员函数,因此通过对象a1调用的是没有用const修饰的函数print,输出E2-,而通过对象a2调用的是用const修饰的常函数print,输出C16-。故本题程序运行时的输出结果是E2-C16-。 故题答案为B。 19、下列关于虚基类的描述中,错误的是_。 A、使用虚基类可以消除由多继承产生的二义性 B、构造派生类对象时,虚基类的构造函数只被调用一次

19、 C、声明"class B:virtual public A"说明类B为虚基类 D、建立派生类对象时,首先调用虚基类的构造函数 本题主要考查了虚基类。 当一个派生类从多个基类派生,而这些基类又有一个共同的基类,当对该基类中说明的成员进行访问时,可能出现二义性。虚基类就是为了解决这种二义性问题提出来的,因此选项A正确。 使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类子对象,因此,在建立派生类的一个对象时,为保证虚基类子对象只被初始化一次,这个虚基类构造函数必须只被调用一次,因此选项B正确。 虚基类的说明格式如下: class <类名>:virtual

20、<继承方式> <基类名> 选项C中声明"class B:virtual public A"说明类A为虚基类,因此选项C错误。 建立派生类对象时,根据派生类构造函数的执行顺序,应首先调用基类构造函数,因此选项D正确。 故本题答案为C。 20、下列关于运算符重载的描述中,错误的是_。 A、:运算符不能重载 B、类型转换运算只能作为成员函数重载 C、将运算符作为非成员函数重载时必须定义为友元 D、重载运算符应完成"下标访问"操作 本题主要考查了运算符重载。 C+语言规定,除了.、.*、->*、:、?:这五个运算符外,其他运算符都可

21、以重载,因此选项A是正确;在C+中,运算符函数重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数。非成员函数通常是友元。(可以把一个运算符作为一个非成员、非友元函数重载。但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。),因此选项C错误;=、()、->以及所有的类型转换运算符只能重载为成员函数,因此选项B正确;重载的应完成"下标访问"操作,使得向指定下标处的元素赋值或取值成为可能,因此选项D正确。 故本题答案为C。 21、计算斐波那契数列第n项的函数定义如下: int fib(i

22、nt n) if(n=0) return 1; else if(n=1) return 2; else return fib(n-1)+fib(n-2); 若执行函数调用表达式fib(2),函数fib被调用的次数是_。 A、1 B、2 C、3 D、4 本题主要考查了递归函数。 如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。若执行函数调用表达式fib(2),则执行表达式fib(2-1)+fib(2-2),即执行表达式fib(1)+fib(0),故函数fib共被调用了3次:fib(2)、fib(1)和fib(0)。 故本题答案为C。 22、下列关于模板形参的描述中,错误的是

23、_。 A、模板形参表必须在关键字template之后 B、模板形参表必须用括弧( )括起来 C、可以用class修饰模板形参 D、可以用typename修饰模板形参 本题主要考查了模板。 在C+中,模板分为函数模板和类模板。声明一个函数模板的格式是: template <模板形参表声明> <函数声明> 声明一个类模板的格式是: template <模板形参表声明> <类声明> 所有模版的定义都以关键字template开始,模板形参表必须在关键字template之后,因此选项A正确;<模板形参表声明>必须用一对尖括号<>括起

24、来,因此选项B错误。 每个<模板形参>具有下面几种形式: (1)typename<参数名> (2)class<参数名> (3)类型修饰<参数名> 在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class可以互换,因此选项C、D正确。 故本题答案B。 23、已知数组arr的定义如下: int arr5=1,2,3,4,5; 下列语句中输出结果不是2的是_。 A、cout<<*arr+1<<endl; B、cout<<*(arr+1)<<endl; C、cout<<

25、;arr1<<endl; D、cout<<*arr<<endl; 本题主要考查了数组和指针。 在C+中,数组的名字就是指向该数组第一个元素(下标为0)的指针,即该数组第一个元素的地址,也即数组的首地址。因此表达式*arr等价于arr0,故选项D的输出结果为1;选项A中,表达式*arr+1等价于表达式a0+1,输出结果为2。 一般情况下,一个数组元素的下标访问ai等价于相应的指针访问*(a+i),因此选项B和选项C均输出元素arr1的值,即2。 故本题答案为D。 24、下列关于C+流的描述中,错误的是_。 A、cout>> 'A'表

26、达式可输出字符A B、eof()函数可以检测是否到达文件尾 C、对磁盘文件进行流操作时,必须包含头文件fstream D、以ios_base:out模式打开的文件不存在时,将自动建立一个新文件 本题主要考查了C+流。 cout是C+流预定义的标准输出流对象。插入运算符<<是所有标准C+数据类型预先设计的,用于传送字节到一个输出流对象。>>是提取运算符,用于从一个输入流对象获取字节。故选项A的描述错误。 故本题答案是A。 25、下列关于运算符函数的描述中,错误的是_。 A、运算符函数的名称总是以operator为前缀 B、运算符函数的参数可以是对象 C、运算符函数只能定义

27、为类的成员函数 D、在表达式中使用重载的运算符相当于调用运算符重载函数 本题主要考查了运算符重载。 运算符函数的函数名是由运算符前加关键字operator构成的,因此选项A正确;运算符的重载形式有两种,重载为类的成员函数和重载为类的友元函数,因此选项C错误;在表达式中使用重载的运算符相当于调用运算符重载函数,因此选项D正确;运算符函数的参数可以是对象,因此选项B正确。 故本题答案为C。 26、有如下程序: #include<iostream> using namespace std;class AA public: AA()cout<< '1' ; cl

28、ass BB:public AAint k; public: BB():k(0)cout<<'2'BB(int n):k(n)cout<< '3' ; int main() BB b(4),c; return 0; 运行时的输出结果是_。 A、1312 B、132 C、32 D、1412 本题主要考查了类的继承与派生。 建立派生类对象时,构造函数的执行顺序如下:(1)执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);(2)执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);(3)执行派生类的

29、构造函数。在main()函数中,第一条语句定义了两个派生类BB的对象:b和c,并初始化对象b。创建对象b时构造函数的执行顺序:执行基类AA的构造函数,输出1,然后执行派生类BB的带参数的构造函数,输出3;创建对象c时构造函数的执行顺序为:执行基类AA的构造函数,输出1,然后执行派生类BB的不带参数的构造函数,输出2。故程序运行时的输出结果是1312。 故本题答案为A。 27、有如下程序: #include<iostream> using namespace std; class Namechar name20; public:Name() strcpy(name,"&qu

30、ot;); cout<<'?' Name(char *fname) strcpy(name,fname); cout<<'?' ; int main() Name names3=Name("张三"),Name("李四"); return 0; 运行此程序输出符号?的个数是_。 A、0 B、1 C、2 D、3 本题主要考查了构造函数。 构造函数在对象被创建的时候由系统自动调用。本题的构造函数有两种重载形式:有参数的和无参数的,无参数的构造函数也称为默认形式的构造函数。main()函数中,第一条语句定义

31、了一个含有3个元素的Name类对象数组names,即创建了三个Name类对象,建立前两个对象时,给出初始值,因此调用有参数的构造函数,输出2个?,建立第三个对象时调用无参数的构造函数,输出1个?,因此运行此程序输出符号?的个数是3。 故本题答案为D。 28、下列字符串中可以用作C+标识符的是_。 A、2009var B、goto C、test-2009 D、_123 本题主要考查了标识符。 标识符的组成要符合一定的规则: 标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串; 标识符不能与任意一个关键字同名; 标识符中的字母区分大小写; 标识符不宜过长。 选项A的第一个字符是数字

32、,选项B是关键字,选项C中的字符-不合法。只有选项D可以用作C+标识符。 故本题答案为D。 29、下列枚举类型的定义中,包含枚举值3的是_。 A、enum testRED,YELLOW,BLUE,BLACK; B、enum testRED,YELLOW=4,BLUE,BLACK; C、enum testRED=-1,YELLOW,BLUE,BLACK; D、enum testRED,YELLOW=6,BLUE,BLACK; 本题主要考查了枚举常量。 枚举常量是枚举类型中定义的值,即枚举值。枚举类型实际上是int类型的一个子集,其每一个枚举值代表一个整数;n个枚举值全部未赋常量值时,它们自左至右

33、分别与整数0,1n-1对应;若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2对应,直到下一个赋了值的枚举值或结束。因此只有选项A包含枚举值3。 故本题答案为A。 30、 有如下类定义: class XX int xdata; public: XX(int n=0):xdata(n) ; class YY:public XX int ydata;public: YY(int m=0,int n=0):XX(m),ydata(n) ; YY类的对象包含的数据成员的个数是_。 A、1 B、2 C、3 D、4 本题主要考查了类的继承与派生。 派生类继承了基类的全部数据成员

34、和除了构造、析构函数之外的全部成员函数。在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员。因此派生类YY的数据成员有两个:一个是从基类XX继承得到的xdata,另一个是自己定义的新数据成员ydata。 故本题答案为B。31、 有如下程序: #include<iostream> using namespace std; class Publication /出版物类 char name30; public: Publication(char *name= "未知名称") strcpy(this->name,name);

35、 const char * getName() constreturn name; virtual const char * getType()constreturn "未知类型" ; class Book:public Publication /书类 public: Book(char *name):Publication(name) virtual const char * getType()constreturn "书" ; void showPublication(Publication &p) cout<<p.getType

36、()<<":"<<p.getName()<<endl; int main() Book book("精彩人生");showPublication(book); return 0; 运行时的输出结果是_。 A、未知类型:未知名称 B、未知类型:精彩人生 C、书:未知名称 D、书:精彩人生 本题主要考查了虚函数与多态性 在C+中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。在实函数的情况下,通过基类指针(或引用)所

37、调用的只能是基类的那个函数版本,无法调用到派生类中的重定义函数。在main()函数中,第一条语句定义了派生类Book的对象book,建立派生类对象时,构造函数的执行顺序:先执行基类的构造函数,初始化基类数据成员数组name为字符串"精彩人生",然后执行派生类的构造函数。第二条语句以派生类对象book为实参调用函数showPublication(),函数showPublication()的形参为基类引用p,即基类引用p指向派生类对象book。基类Publication的成员函数getType()被定义成虚函数,这个虚函数在派生类Book中被重定义。因此p.getType()调

38、用的是派生类的那个重定义版本,函数返回值为"书"。成员函数getName()为实函数,p.getName()调用的是基类的那个版本,函数返回值为基类的数据成员,即"精彩人生"。故程序运行时的输出结果是书:精彩人生。 故本题答案为D。 32、将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是_。 A、不合法的运算符 B、一元运算符 C、无操作数的运算符 D、二元运算符 本题主要考查了运算符重载。 运算符的重载形式有两种,重载为类的成员函数和重载为类的友元函数。运算符重载为成员函数时,因为此成员函数所属的对象可成为运算符的一个运算分量,所以形参个

39、数一般为运算符的元数减1。因此将运算符重载为类的成员函数时,其参数表中没有参数,说明该运算符是一元运算符。 故本题答案为B。 33、有如下两个类定义: class AA; class BB AA v1,*v2; BB v3; int *v4; ; 其中有一个成员变量的定义是错误的,这个变量是_。 A、v1 B、v2 C、v3 D、v4 本题主要考查了类和对象。 C+规定,在提供一个完整的类声明之前,不能声明该类的对象。本题在完整声明类BB之前声明了类BB的对象v3,故成员变量v3的定义是错误的。 故本题答案为C。 34、有如下程序: #include <iostream> usin

40、g namespace std; class Toy public: Toy(char* _n)strcpy(name,_n); count+; Toy()count-; char* GetName() return name; static int getCount() return count; private: char name10;static int count; ; int Toy:count=0; int main() Toy t1("Snoopy"),t2("Mickey"),t3("Barbie"); cout&l

41、t;<t1.getCount()<<endl; return 0; 运行时的输出结果是_。 A、1 B、2 C、3 D、运行时出错 本题主要考查了静态数据成员。 一个类的静态数据成员被这个类的所有对象所共享,但它不属于类的任何一个对象。它的作用域是类范围。本题中,Toy类定义了一个静态数据成员count,并被初始化为0。main函数的第一条语句定义了3个Toy类对象t1、t2和t3,因为每创建一个Toy类对象,系统自动调用一次Toy类的构造函数,count的值就增1,故第一条语句执行结束后,静态数据成员count的值为3,第二条语句调用静态成员函数getCount(),在屏幕

42、上输出count的值,最后执行return语句返回,整个程序执行结束。因此本题程序运行时的输出结果是3。 故题答案为C。 35、有如下类定义: class Achar *a; public:A():a(0) A(char *aa) /把aa所指字符串拷贝到a所指向的存储空间 a=_; strcpy(a,aa); A() delete a; ; 横线处应填写的表达式是_。 A、new charstrlen(aa)+1 B、charstrlen(aa)+1 C、charstrlen(aa) D、new charsizeof(aa)-1 本题主要考查了动态存储分配。 动态存储分配功能在C+中是通过n

43、ew和delete运算符来实现的。运算符new用于申请动态存储空间,它的操作数为某种数据类型且可以带有初值表达式或元素个数。new返回一个指向其操作数类型变量的指针。使用new对某种类型变量进行动态分配的语法格式为:<指针>=new<类型> 其中,<类型>表示要分配的变量类型(如char、int、double);<指针>表示指向<类型>类型变量的指针(如char*、int*、double*等)。 类A的带参数构造函数的功能是把aa所指字符串拷贝到指针a所指向的存储空间,根据待填空的下一条语句可以判断横线处表达式的功能应为申请分配用于存

44、放拷贝aa所指字符串的存储空间,函数strlen的功能是获得字符串有效字符的个数,字符串应以字符'0'结束,而字符串结束符'0'也占用一个字符空间,故横线处的表达式为new charstrlen(aa)+1。 故本题答案为A。 36、软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中_阶段产生"软件需求规格说明书"。 标准答案为:需求分析 软件需求规格说明书是需求分析阶段产生的最后成果,是软件开发中的重要文档之一。 37、程序流程图中的菱形框表示的是_。 标准答案为:逻辑条件 或 逻辑判断 程序流程图是一种传统的、应用广泛的软件过程

45、设计表示工具,通常也称为程序框图,箭头表示控制流,矩形表示加工步骤,菱形表示逻辑条件。 38、人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字的是_。 标准答案为:身份证号 主关键字能惟一标识每条记录。主关键字可以是一个字段,也可以是一组字段。本题中能惟一标识一条记录的是身份证号。 39、某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有_个结点。 标准答案为:14 或 或 十四 二叉树的性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。本题中度为0的结点数为5+1=6,该二叉树中的总结点数为5+3+6=14。 40、在数据库

46、技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么"学生"和"可选课程"的联系为_。 标准答案为:多对多 或 m:n 或 n:m 或 m:n 或 n:m 41、 有如下类定义: class Sample public:Sample();Sample(); private: static int data; ; 将静态数据成员data初始化为0的语句是_。 标准答案为:int Sample:data=0; 本题主要考查了静态数据成员。 类Sample的数据成员data为静态数据成员,静态数据成员为类的所有对象所共享,但它不属于类的任何一个对象。静

47、态数据成员初始化的一般格式如下: <数据类型> <类名>:<静态数据成员名>=<初始值> 因此将静态数据成员data初始化为0的语句是int Sample:data=0;。42、 如下程序定义了"单词"类Word,类中重载了<运算符,用于比较"单词"的大小,返回相应的逻辑值。程序的输出结果为:After Sorting: Happy Welcome,请将程序补充完整 #include <iostream> #include <string> using namespace st

48、d;class Word public: Word(string s):str(s)string getstr()return str; _ const return (str<w.str); friend ostream& operator<<(ostream& output,const Word &w) output<<w.str; return output; private: string str; ; int main() Word w1("Happy"),w2("Welcome"); co

49、ut<<"After sorting: " if(w1<w2) cout<<w1<<' '<<w2; else cout<<w2<<' '<<w1; return 0; 标准答案为:bool operator<(Word w) 或 bool operator<(Word& w) 本题主要考查了运算符重载。 C+把重载的运算符视为特殊的函数,称为运算符函数,函数名就是在运算符前加上保留字operator,因此运算符<的函数名为op

50、erator <。由函数体语句return (str<w.str);可知:运算符函数的返回值类型为bool,str为成员函数所属对象的数据成员,对象w为运算符函数的参数,故运算符<被重载为成员函数。运算符重载为成员函数时,因为此成员函数所属的对象可成为运算符的一个运算分量,所以形参个数一般为运算符的元数减1,故横线处应填bool operator<(Word w)。 43、利用表达式ai可以访问int型数组a中下标为i的元素。在执行了语句int *p=a;后,利用指针p也可访问该元素,相应的表达式是_。 标准答案为:pi 或 *(p+i) 本题主要考查了指针与数组。 在

51、C+中,数组的名字就是指向该数组第一个元素(下标为0)的指针,即该数组第一个元素的地址,也即数组的首地址。一般情况下,一个数组元素的下标访问ai等价于相应的指针访问*(a+i),所以利用指针p访问ai的表达式为pi或*(p+i)。43、 类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。 class Sample public: Sample(int data=0); private:int data; ; Sample:Sample(int data) _ 标准答案为:this->data=data; 或 Sample:data=data; 本题主要考查

52、了变量的作用域和可见性。 类Sample的私有数据成员data具有类作用域,其构造函数形参data具有块作用域,该类作用域包含块作用域,因为在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见,所以在构造函数中直接使用data引用的是形参变量data,而不是Sample类的数据成员data。此时,有两个方法可以引用到Sample类的数据成员:一是通过this指针,在类的成员函数中,this指针是成员函数所属对象的指针,它指向类对象的地址,故本题可以填this->data=data;。二是通过作用域运算符":"明确指出访问的是Sample类的成员

53、,故还可以填Sample:data=data;。44、 请将下列模板类Data补充完整。 template<typename T> class Data public: void put(T v) val=v; _ get() return val; /返回数据成员val的值,返回类型不加转换 private: T val; ; 标准答案为:T 本题主要考查了类模板。 根据题意,横线处应填函数get的返回值类型。根据函数体语句return val;以及该语句的注释,函数get的返回值类型应为数据成员val的类型T。因此横线处应填T。45、 下面是一个递归函数,其功能是使数组中的元素

54、反序排列。请将函数补充完整。 void reverse(int *a,int size)if(size<2) return; int k=a0; a0=asize-1;asize-1=k; reverse(a+1,_); 标准答案为:size-2 本题主要考查了递归函数。 递归函数reverse有两个参数:第一个参数a是指向待反序数组的首元素地址的指针,第二个参数size是待反序数组的元素个数。reverse函数先把数组a的第一个元素和最后一个元素交换,然后以剩下待反序元素集合的首地址(即a+1)和待反序元素个数size-2作为实参调用自己,直到把所有元素反序。因此横线上应填size-2。46、 有如下程序: #include<iostream> using namespace std; class GrandChild public: GrandChild() strcpy(name,"U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论