一、选择题
1.D。【解析】一个算法的空间复杂度一般是指执行这个算法所需的存储空间。一个算法所占用的存储空闾包括算法程序所占用的空间、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。
2.D。【解析】数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。
3.D。【解析】算法的时间复杂度和算法的空间复杂度是从不同的角度来衡量算法的执行情况的,它们之间没有内在联系。
4.D。【解析】交换排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序。冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变得有序。
5.D。【解析】对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其虚、右子树。记住三种遍历的顺序:①前序,访问根→按前序遍历左子树→按前序遍历右子树;②中序,按中序遍历左子树→访问根→按中序遍历右子树;③后序,按后序遍历左子树→按后序遍历右子树→访问根。
6.D。【解析】需求分析常用的工具有数据流图(DFD)、数据字典(DD)、判定树和判定表。PAD(问题分析图)、PFD(程序流程图)、N-S(盒式图)都是详细设计的常用工具,不是需求分析的工具。
7.B。【解析】对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树。并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。
8.A。【解析】白盒测试是把测试对象看成一个打开的盒子,允许测试人员利用程序内部的逻辑结构及相关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。所以,白盒测试的对象基本上是源程序,以程序的内部逻辑和指定的覆盖标准测试数据。
9.C。【解析】软件的生命周期可分为软件定义、软件开发及软件运行维护三个阶段。其中软件定义阶段的主要工作有可行性研究、计划制定和需求分析等;软件开发阶段的主要工作有概要设计、详细设计和测试等;软件运行维护阶段的主要工作是软件的运行及后期的维护等。
10.C。【解析】数据库系统(DBS)由数据库(DBS)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台五个部分组成,可见DB和DBMS都是DBS的组成部分。
11.D。【解析】C++中函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时系统就能决定调用的是哪个函数。动态多态性是在程序运行过程中才动态确定操作所针对的对象。动态多态性是通过虚函数实现的。
12.A。【解析】本题考查混合运算表达式类型,由表达式中具有最高优先级的类型所确定,所以答案为A。
13.D。【解析】二维数组可以看做是一维数组的扩展。选项D表示的是一个一维数组,里面每个元素是一个指针,而指针肯定指向某个地址,从而完成二维数组的扩展。考生要了解*和[]的运算优先级。
14.C。【解析】在成员函数声明的前面加上virtual关键字即把该函数声明为虚函数。虚函数可以是另一个类的友元函数,但不是静态成员函数。在派生类中可以重新定义从基类继承下来的虚函数,在派生类中重新定义虚函数时,函数名、形参表和返回值类型必须保持不变。
15.A。【解析】本题考查运算符的重载。C++中,::、*…?:这4个运算符不能重载。
16.C。【解析】题中函数声明带有默认参数,那么在C选项的调用中,将会把字符型实参#赋值给整型形参b,这不符合参数传递规则。
17.C。【解析】由于取负运算符“-”是一元运算符,当作为成员函数重载时参数表中没有参数,那个唯一的操作数以this指针的形式隐藏在参数表中。
18.B。【解析】本题考查的是内联函数的定义,引入内联函数是为了解决程序中函数调用的效率问题,是以目标代码的增加为代价换取时间的节省;一般函数在运行时被调用,而调用的内联函数在编译时就被替代了,如果不加in-line关键字,则编译器会将在类说明部分定义的任何函数都被认定为内联函数。
19.C。【解析】所谓函数重载,是指同一个函数名可以对应多个函擞的实现,进行函数重载时,要求同名函数的参数个数不同,或者参数类型不同。
20.D。【解析】第一个字符必须是字母或下画线,中间不能有空格;在第一个字母后,可以是任意字母、下画线和数字组成的字符序列;标识符的长度是任意的,但特定的编译系统能够识别的标识符长度是有限的。一般不要超过31个字符;标识符中大小写字母是有区别的;用户定义标识符时,不要采用系统的保留字。
21.B。【解析】value作为类的数据成员在引用时可以通过对象来引用,也可以通过域操作符引入类名来限定。由于选项D中P是指针,它对指针变量的赋值方式是错误的。
22.C。【解析】本题考查友元函数的应用。程序中函数square是类sample的一个友元函数,它可以直接访问类sample的所有成员。它的功能是返回类sample的私有数据成员x的平方。所以程序的执行结果是900。
23.B。【解析】调用拷贝构造函数的情况为:一个新对象被另一个已存在的同类型对象初始化;当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数。在函数值返回时形参的生命期结束时它的析构函数被调用;在函数返回一个对象时调用拷贝构造函数。符合以上条件的有:用对象objl来初始化obj3;obj3作为实参被传入;函数fun返回一个对象时;系统用返回值初始化一个匿
名对象时调用了拷贝构造函数。总共调用4次。
24.A。【解析】由主函数main入手,定义外部变量x和y,调用函数add。因为x,y为外部变量,所以“intx(20),y(5);”的赋值在add也是有效的,即add函数的运算结果为25。
25.B。【解析】函数setfill(charc)用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满,设置的填充符一直有效,直到再次填充字符为止,如题中调用函数setfill(’*’)将填充字符设置为’*’,后又调用函数setfill(’#’)将填充字符设置为’#’。函数setw(intn)用于设置输入/输出宽度.宽度设置的效果只对一次输入或输出有效,在完成一次数据的输出/输入后,宽度设置自动恢复为0,如题中语句以宽度10输出数据“123”后,字符串“OK”的输出宽度就自动恢复为0了。而且题中输出的对齐方式为在输出宽度内左对齐。本题结果为123######OK。
26.D。【解析】C++中,虚基类说明格式为class<类名>:virtual<继承方式><基类名>。其中,virtual是虚基类的关键词。在定义派生类时使用虚基类的说明,写在派生类名的后面。
27C。【解析】本题考查在继承中构造函数和析构函数的调用顺序,应该是先调用基类的构造函数,再调用派生类的构造函数,调用析构函数时的顺序是先调用派生类的析构函数,后调用基类的析构函数。
28.D。【解析】构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。
29.A。【解析】程序中的TestClassl为TestClass的派生类,主函数main中定义。TestClass对象*P,
TestClassl对象objl,然后P引用0bjl,执行p->who()则是调用基类中的who函数,输出TestClass。
30.A。【解析】本程序设计了一个点类Point,包含了横、纵两个坐标数据x和y,由它派生出了圆类Circle,并加入了新的数据成员,即一个半径r和一个求圆面积的函数成员area。在主函数main中,首先定义了一个圆Circle类的对象c1,并通过它的构造函数初始化其数据成员。由此可知,其半径r的值为10,所以其面积为PI*10*10=314,即对象c1的函数成员area的返回值为314。
31.D。【解析】本题考查指针的使用。在给*P赋值前,指针P并没有指向一个具体的对象。此时可以通过编译,但运行时由于P中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。
32.D。【解析】本题考查类的定义。C++语言规定,在类体内不允许对所定义的数据成员进行初始化。
33.B。【解析】本题考查的是对构造函数的掌握,另外++运算符是右结合的,所以在进行输出的时候都是先把原来的输出后再自加1。
34.C。【解析】C++中可以在定义文件流对象的同时打开文件,也可以在定义文件流对象以后用open函数打开文件。可以通过构造函数或open函数的第二个参数,确定文件的打开模式。
35.C。【解析】++是右结合的,所以先赋值为3,最后输出3+1;常成员函数只有常对象才能调用,所以输出2。
36.C。【解析】根据递归调用的含义,当n为2时有fib(o),fib(1),fib(2)被调用,且fib(0),fib(1)时调用结束,共3次。
37.D。【解析】选项A错误,不存在这样的定义方式;选项B定义了一个MyClass类的对象P;选项C是Java的定义方式。
38.C。【解析】本题针对虚基类的定义及特点考查。虚基类的声明为“class<类名>:virtual<继承方式><基类名>”,即本题的A为虚基类。
39.B。【解析】一元或二元运算符函数作为成员函数时,第一操作数就是对象本身,并不出现在参数表中,即第一操作数仅以this指针的形式隐含于参数表中,因此对于一元运算符参数表是空的;而对于二元运算符参数表中只有一个参数,它代表第二操作数。
40.D。【解析】模板形参有typename<参数名>、class<参数名>、<类型修饰><参数名>3种形式,即typename与class通用。
二、程序改错题
(1)应改为“assert(sizeof(s1)==4);”。
(2)应改为“assert(sizeof(s2)==1O);”。
(3)应改为“assert(sizeof(s3)==1);”。
【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert函数只有为真,才不会产生中断异常。“assert(sizeof(s1)==3);”语句中“sizeof(s1)==3”为假,这会使程序产生异常,不能正常执行。因为str1的值为abc,但是它还有一个尾符,它的长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(s1)==4);”。str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeof(s2)==10);”。charstr3=23;语句说明23是字符,所占存储空间为1,所以修改为“assert(sizeof(s3)==1);”。
三、简单应用题
introw;
intmax;
intmin;
intcol;
for(row=0;row//外循环求行最大值中的最小值
{
for(max=a[row][0],col=1;col 每一行中的最大值
if(max max=a[row][col]:
if(row==0)//求最小值
min=max:
else
if(max min=max;
}
returnmin;
【解析】本题有两层循环,内层循环求每一行的最大值,外层循环求最小值。求最大值,首先将最大值赋值为每行第一列的元素,然后依次循环比较。将求出的第一个最大值赋值为第一个最小值,然后将以后求得的最大值依次与之比较,求出所有值的最小值。
四、综合应用题
(1)应添加“intNo;charName[32];”。
(2)应添加“voidSet(intno,char*strName)”。
(3)应添加“cout<<"No="<
2015年全国职称计算机考试教材(2007模 .. 定价:¥225 优惠价:¥213 更多书籍 | |
全国职称计算机考试速成过关系列套装:W .. 定价:¥133 优惠价:¥133.0 更多书籍 |