一、选择题
1.B。【解析】数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。
2.B。【解析】将E-R图转换成指定RDBMS中的关系模式是数据库逻辑设计的主要工作。从E—R图到关系模式的转换是比较直接的,实体和联系都可以表示成关系。
3.C。【解析】对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查找到所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为n。
4.C。【解析】树具有明显的层次关系,即树是一种层次结构。在树结构中,根结点在第一层上。当树为非空时,树中有且只有一个根结点,当树为空时,树中根结点的数目为0。
5.B。【解析】关系的交(∩)、并(∪)和差(-)运算要求两个关系是同元的,显然作为二元的R和三元的S只能做笛卡儿积运算。
6.C。【解析】限制使用GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用GOTO语句。其他三项为结构化程序设计的原则。
7.A。【解析】关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。
8.C。【解析】面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。
9.B。【解析】程序的三种基本控制结构包括顺序、选择和重复(循环),这三种结构足以表达出各种其他形式的结构。
10.B。【解析】数据库设计阶段主要包括需求分析、概念设计、逻辑设计和物理设计。其中逻辑设计的主要工作是将E-R图转换为关系模式。
11.C。【解析】函数类型决定了函数返回值的类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将return后面的表达式的类型强制转换为该函数定义时指定的返回值类型。
12.D。【解析】本题主要考查C++语言的基本语法,选项A中应该为m>n‖m 13.D。【解析】使用ifstream流类定义流对象并打开磁盘文件时,文件没有默认的打开方式。其中ios::in是为输入而打开;iso::out是为输出而打开。
14.C。【解析】构造函数包括默认构造函数和拷贝构造函数等,析构函数和构造函数一样属于类的特殊的成员函数。而友元函数则是为了增加类的访问灵活性而允许其他类的成员函数或全局函数访问类的内部变量或成员函数的一种机制,其缺点是破坏了类的封装性。
15.A。【解析】本题考查的是字符数组的初始化。选项B中用三个元素初始化大小为2的数组,越界了;选项C中应该是2行3列的数组,题中使用3行2列初始化;选项D中数组应用方括号。
16.B。【解析】声明一个函数模板的格式template<模板形参表声明>函数声明。调用模板函数时,如果与模板实参中最后的若干个参数有关的信息可以从模板函数的实参中获得,则相关的模板实参可以省略。
17.D。【解析】语句p=&my;是把对象my的地址值赋给指针变量P。语句MyClass*P,my;,由于P只是一个指向对象的指针,因此定义指针P不调用构造函数,所以此语句只调用一次构造函数。对成员函数的引用可以通过两种形式:指针->成员函数(形参表)或者对象名.成员函数名(形参表)。
18.D。【解析】本题考查break语句的使用。break可以结束switch语句和for循环语旬,但是不能使用在条件判断语句内。
19.B。【解析】本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1.operator+(c2)与c1+c2含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。同理,运算符“/”作为友元函数重载,则(--x)/y与表达式operator/((…x),y)相同。前缀运算符“--”作为友元函数重载,则--x与operator--(x)相同,所以组合起来是operator/(operator--(x),y);,即B选项。
20.A。【解析】本题考查const修饰符的作用。注意,const位置不同,其修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,所以,ptr可以重新指向新的对象,而ptr->a则无法被更新。
21.D。【解析】只有公有继承的公有成员才能被派生类的对象直接访问,其他的情况都会因为访问权限问题产生错误。
22.C。【解析】本题考查考生对拷贝构造函数的掌握。因为++运算是右结合的,所以在使用a对b赋值时,b的hum变为1,而a的num变为2(先赋值再自加)。
23.D。【解析】本题考查cin流对象的几种成员函数get,getline,read及流提取符>>的使用规则。
24.C。【解析】由主函数main入手,定义TestClass类的对象cs1,执行cs1.va1,其中va1为静态变量,根据intTestClass::val=0;初始化,TestClass中的TestClass(){val++;}构造函数执行后,val值为1。主函数中接着定义对象cs2,cs3,cs4。执行cout< 25.B。【解析】本题考查构造函数的应用。对象建立用初始化列表对数据成员进行时。列表中的参数类型要与构造函数中形参类型一致。B选项中第二个参数为13301111155,是字符串,而构造函数中第二个形参为char型,两者不一致造成错误。
26.D。【解析】声明派生类的一般形成为class派生类名:[继承方式]基类名。其中继承方式包括public、private和protected。而virtual为C++中的关键字,所以选项C错。虚函数的使用方法是在基类用virtual声明成员函数为虚函数。
27.D。【解析】本题考查的是友元类的定义:类A为类B的友元类,则类A的所有成员函数都是类B的友元函数,但反之则不一定成立。
28.B。【解析】虚基类的引入就是为了消除二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚基类的构造函数先于非虚基类的构造函数执行。
29.C。【解析】编译时的多态性是通过函数重载和模板体现的,运行时的多态性是通过虚函数体现的。
30.D。【解析】首先定义TestClass3的对象obj,参数为10。其中TestClass3为TestClass1和TestClass2的派生类。然后调用disp成员函数。disp中首先执行TestClassl::disp();,然后执行TestClass2::disp();,最后执行输出语句cout< 31.D。【解析】由主函数main入手,定义了类D对象obi。其中D为类B和C的公有继承,A是C的
虚基类。题目中要求的输出结果为ABCD,依次为类A、类B、类C、类D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承,即保证A只被继承一次,输出一个A,所以不但需要声明A为C的虚基类,同样也要声明A为B的虚基类。
32.B。【解析】所谓函数重载,是指同一个函数名可以对应着多个函数的实现,类AA中定义了两个9et()函数,一个为普通成员函数,另一个为常成员函数。一般对象a既可以调用普通成员函数get,也可以调用常成员函数get,但是由于常成员函数不能更新对象的数据成员,所以题中通过对象a调用的函数为普通成员函数get(),返回值为5。常对象b只能调用常成员函数,所以题中通过对象b调用的函数为常成员函数get(),返回值为7。
33.C。【解析】函数Demo()为构造函数,而Demo(constDemo&x)为复制构造函数。C++在创建一个对象时,会自动调用类的构造函数,所以语句"Demoa,d;"将调用函数Demo()2次。当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数;在函数返回一个对象时调用拷贝构造函数。由此可知语句d=userCode(a);调用拷贝构造函数3次。
34.C。【解析】本题考查的是析构函数和对象的生存期。在主函数中,首先定义了一个DA类对象数组d,从初始化列表中可以看出,它包含三个对象;然后通过new运算符动态创建了一个DA类的对象数组,并将首地址赋给DA类指针P;接着通过delete[]运算符销毁指针P所指向的数组,故此时会输出11。最后函数结束,销毁前面定义的对象数组d,会输出333。故最后的输出结果是11333。
35.D。【解析】在建立类对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承的声明顺序;执行成员对象的构造函数,调用顺序按照各个成员在类中的声明顺序;执行自身的构造函数。根据以上总结以及题意可知答案选择D选项。
36.B。【解析】<返回类型>又称函数类型,表示一个
函数所计算(或运行)的结果值类型,这里的类型可以是预定义类型(如int)、复合类型(如double*)、用户定义类型(如枚举类),若返回值只做更新(或设置)等操作,则该函数返回类型为void类型,函数类型和内置数组不能作为返回类型,但类类型和容器类型可以被直接返回。
37.D。【解析】构造函数在对象被创建时由系统自动调用,本题共创建3个对象。
38.C。【解析】派生类从基类保护继承classYY:pro-tectedXX时,基类的公有成员在派生类中变为保护成员,基类的保护成员在派生类中仍然是保护成员;本题中YY本身有一个保护成员y2,再加上基类XX的x2和x3,故选C。
39.A。【解析】运算符的重载是针对C++中原有运算符进行的,不能通过重载创造新的运算符。
40.D。【解析】类模板是一系列相关类的模板,类成员组成相同,成员函数的源代码形式相同,所不同的是所针对的类型。类模板的成员函数都是模板函数,在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板实参。但可以为类模板的参数设置默认值。由此可知应选D。
二、程序改错题
(1)应改为“virtualvoidfun()=0;”。
(2)应改为“p=&obj1;”。
(3)应改为“p=&obj2;”。
【解析】如果在基类中不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数fun应该是纯虚函数,也就是声明虚函数时初始化为0的函数。即第2处的“virtualvoidfun()=0;”。第2处的P为指针变量,将对象obj1赋值给P,实际上蹙P指向对象obj1的地址,所以将“p=*obj1;”修改为“P=&obj1;”。第3处的“P=*obj2;”修改为“p=&obj2;”。
三、简单应用题
inti,j,k;
for(i=0;i<4;i++)//百位循环
{
for(j=0;j<4;j++)//十位循环
for(k=0;k<4;k++)//个位循环
{
if(i!=j&&j!=k&&k!=i&&N[i]!=0)//
当三位数不同,并且百位不为0
{
cout< }
}
}
【解析】本题利用3层循环,对3位数字是否相同进行判断。如果3位数不同,并且百位不为0,那么依次输出这3 位数,即由3位数组成的数字。
四、综合应用题
(1)将“voidprint(){};”补充完整为“virtualvoidprint(){};”。
(2)应添加“sex=1;”。
(3)应添加“sex=0;”。
(4)应添加“voidfun(People&p)”。
【解析】第1处要求“基类People完成打印功能,定义其中的打印函数为虚函数”。虚函数是函数的一种,定义虚函数,在函数名前声明virtual就可以了,所以将第1处的“voidprint(){}”语句修改为“virtualvoidprint(){}”。第2处要求“类Boy继承于People,在构造函数中设置性别为l”。基类People中变量sex用来存放性别,Boy继承People,所以Boy中性别的变量可以使用基类中的sex变量,设置性别为1,即“sex=1;”。第3处要求“类Girl继承于People,在构造函数中设置性别为0”。在第3处添加语句“sex=0;”。第4处要求“实现函数fun,用于传递不同的类型,打印出性别”。根据“P.print();”语句知道,fun函数的形参为指针P,由于它调用了基类People中的成员函数print,所以P的基类为People,即添加函数fun的定义为“voidfun(People&p)”。
2015年全国职称计算机考试教材(2007模 .. 定价:¥225 优惠价:¥213 更多书籍 | |
全国职称计算机考试速成过关系列套装:W .. 定价:¥133 优惠价:¥133.0 更多书籍 |