资源描述
(完整word版)最新全国计算机等级考试二级c++题库1(共17套)
第一套
1、下面叙述正确的是______。
A、算法的执行效率与数据的存储结构无关
B、算法的空间复杂度是指算法程序中指令(或语句)的条数
C、算法的有穷性是指算法必须能在执行有限个步骤之后终止
D、以上三种描述都不对
算法的设计可以避开具体的计算机程序设计语言,但算法的实现必须借助程序设计语言中提供的数据类型及其算法。数据结构和算法是计算机科学的两个重要支柱。它们是一个不可分割的整体。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。算法的有穷性是指一个算法必须在执行有限的步骤以后结束。
本题答案为C。
2、数据库系统的核心是______。
A、数据模型
B、数据库管理系统
C、软件工具
D、数据库
数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。DBMS建立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过DBMS。另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。
本题答案为B。
3、在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是______。
A、可行性分析
B、需求分析
C、详细设计
D、程序编码
软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流图和数据字典。
本题答案为B。
4、在软件开发中,下面任务不属于设计阶段的是______。
A、数据结构设计
B、给出系统模块结构
C、定义模块算法
D、定义需求并建立系统模型
软件设计一般分为总体设计和详细设计两个阶段,总体设计的任务是确定软件的总体结构,子系统和模块的划分,并确定模块间的接口和评价模块划分质量,以及进行数据分析。详细设计的任务是确定每一模块实现的定义,包括数据结构、算法和接口。
本题答案为D。
5、下列叙述中正确的是______。
A、数据库是一个独立的系统,不需要操作系统的支持
B、数据库设计是指设计数据库管理系统
C、数据库技术的根本目标是要解决数据共享的问题
D、数据库系统中,数据的物理结构必须与逻辑结构一致
数据库是存储在计算机存储设备中的、结构化的相关数据的集合。数据库中的数据不只是面向某一项特定的应用,而是面向多种应用,可以被多个用户、多个应用程序共享,不具有独立的系统。设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。
本题答案为C。
6、下面描述中,符合结构化程序设计风格的是______。
A、使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑
B、模块只有一个入口,可以有多个出口
C、注重提高程序的执行效率
D、不使用goto语句
基于对结构化程序设计原则、方法以及结构化程序基本构成结构的掌握和了解,在结构化程序设计的具体实施中,要注意把握如下要素:
1、使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;
2、选用的控制结构只准许有一个入口和一个出口;
3、程序语句组成容易识别的块,每块只有一个入口和一个出口;
4、复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现;
5、语言中所没有的控制结构,应该采用前后一致的方法来模拟;
6、严格控制GOTO语句的使用。其意思是指:
(1)用一个非结构化的程序设计语言去实现一个结构化的构造;
(2)若不使用GOTO语句会使功能模糊;
(3)在某种可以改善而不是损害程序可读性的情况下。
本题答案为A。
7、下列模式中,能够给出数据库物理存储结构与物理存取方法的是______。
A、内模式
B、外模式
C、概念模式
D、逻辑模式
数据库管理系统的三级模式结构由外模式、模式和内模式组成。
外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。
模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。
内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。
本题答案为A。
8、下面概念中,不属于面向对象方法的是______。
A、对象
B、继承
C、类
D、过程调用
面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,发展出对象,类,消息,继承等概念。
本题答案为D。
9、在一棵二叉树上第5层的结点数最多是______。
A、8
B、16
C、32
D、15
根据二叉树的性质:二叉树第i(i≥1)层上至多有2i-1个结点。得到第5层的结点数最多是16。
本题答案为B。
10、以下数据结构中不属于线性数据结构的是______。
A、队列
B、线性表
C、二叉树
D、栈
线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。所以栈又称后进先出表(Last In First Out);队列可看作是插入在一端进行,删除在另一端进行的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。在队列中,只能删除队头元素,队列的最后一个元素一定是最新入队的元素。因此队列又称先进先出表(First In First Out)。
本题答案为C。
11、下列程序的输出结果是______。
#include<iostream>
using namespace std;
int main()
{
char a[]="Hello,World";
char *ptr=a;
while(*ptr)
{
if(*ptr>='a'&&*ptr<='z')
cout<<char(*ptr+'A'-'a');
else cout<<*ptr;
ptr++;
}
return 0;
}
A、HELLO,WORLD
B、Hello,World
C、hELLO,wORLD
D、hello,world
此程序段的功能是将字符串中的小写字母转换为大写字母并将其输出。
本题答案为A。
12、关于动态存储分配,下列说法正确的是______。
A、new和delete是C++语言中专门用于动态内存分配和释放的函数
B、动态分配的内存空间也可以被初始化
C、当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存空间
D、当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new
new和deleted在C++中用来申请与释放内存的运算,不是函数,故选项A错。动态内存分配时是可以对其进行初始化的,如对类的初始化。在C++中,没有垃圾回收装置,系统本身不会自动回收内存,选项C也错。由于采用了new操作分配内存,在内存分配失败时,产生一个NULL指针,不会导致系统的崩溃,因此建议使用new操作,故选项D错。
本题答案为B。
13、执行语句序列
int n;
cin>>n;
switch(n)
{ case 1:
case 2:cout<<'1';
case 3:
case 4:cout<<'2';break;
default:cout<<'3';
}
时,若键盘输入1,则屏幕显示______。
A、1
B、2
C、3
D、12
switch语句又称为开关语句,它也是一种选择语句。switch语句的功能是根据给定表达式的不同取值来决定从多个语句序列中的哪一个开始执行。
break语句又称为跳出语句。break语句只能用在switch语句和循环语句中。在switch语句中,break用来使执行流程跳出switch语句,而继续执行switch后面的语句。在循环语句中,break用来使执行流程无条件地跳出本层循环。
本题答案为D。
14、有以下类定义
class Point{
public:
Point(int x=0,int y=0){_x=x;_y=y;}
void Move(int xOff,int yOff)
{_x+=xOff;_y+=yOff;}
void Print() const
{cout<<'('<<_x<<','<<_y<<')'<<endl;}
private:
int _x,_y;
};
下列语句中会发生编译错误的是______。
A、Point pt;pt.Print();
B、const Point pt;pt.Print()
C、Point pt;pt.Move(1,2);
D、const Point pt;pt.Move(1,2);
本题主要考查了const关键字的使用。可以在类型或类名前加上const来声明一个在运行时不可改变的对象或变量。如果声明了一个常量对象,则其内部成员均不可改变,在编译时会检查其对应类的成员变量是否为左值,如果是,则会出现错误。对于B而言,由于在对象pt中的print方法中没有发现存在左值成员变量,故在编译时不会出错。
本题答案为D。
15、有以下类定义
class MyClass
{
private:
int id;
char gender;
char *phone;
public:
MyClass():id(0),gender('# '),phone(NULL){}
MyClass(int no,char ge='# ',char *ph=NULL)
{id=no;gender=ge;phone=ph;}
};
下列类对象定义语句中错误的是______。
A、MyClass myObj;
B、MyClass myObj(11,"13301111155");
C、MyClass myObj(12,'m');
D、MyClass myObj(12);
对于A,由于在创建MyClass的实例myObj时,没有参数,所以其调用了第一个构造函数。对于B,由于有两个参数,故其调用了第二个构造函数,第二个构造函数有两个缺省参数,在调用时,实参会按从左到右的顺序依次传给形参,所以第二个参数”13301111155”会传递给形参ge,而在原型中ge为字符型,实参为指向字符的指针,故在编译时会出现错误。C与D都能够正确的实现参数的传递。
本题答案为B。
16、下列函数原型声明中错误的是______。
A、void Fun(int x=0,int y=0);
B、void Fun(int x,int y);
C、void Fun(int x,int y=0);
D、void Fun(int x=0,int y);
在C++中,可以为参数指定默认值,在函数调用时没有指定与形参相对应的实参时就自动使用默认值。默认参数可以简化复杂函数的调用。
默认参数通常在函数名第一次出现在程序中的时候,如在函数原型中,指定默认参数值。指定默认参数的方式从语法上看与变量初始化相似。例如:
void myfunc(int x=0,int y=1);
如果一个函数中有多个参数,则默认参数应从右至左逐个定义。
本题答案为D。
17、关于面向对象的程序设计方法,下列说法正确的是______。
A、"封装性"指的是将不同类型的相关数据组合在一起,作为一个整体进行处理
B、"多态性"指的是对象的状态会根据运行时要求自动变化
C、基类的私有成员在派生类的对象中不可访问,也不占内存空间
D、在面向对象的程序设计中,结构化程序设计方法仍有着重要作用
封装性是指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部;多态性是指当多种事物继承自一种事物时,同一种操作在它们之间表现出不同的行为;基类的私有成员对派生类来说是不可访问的,因此在派生类中直接引用基类的私有变量成员是不允许的,可以通过基类的公用成员函数来引用基类的私有变量成员;C++是一种优秀的高级程序设计语言,它是以C语言为基础而逐渐发展起来的。C++语言既保留了传统的结构化程序设计方法,又对流行的面向对象程序设计方法提供了完整的支持。
本题答案为D。
18、下列是模板声明的开始部分,其中正确的是______。
A、template<T>
B、template<class T1,T2>
C、template<class T1,class T2>
D、template<class T1;class T2>
本题主要考查了模板的定义,在C++中可以在定义类时不指定具体的数据类型,而在编译时进行前期绑定,对于多参数的模板,在参数间用“,”隔开,如果模板参数为一个类,在模板参数前面必须加上class关键字。
本题答案为C。
19、有以下程序
#include<iostream>
int i=0;
void fun()
{ {
static int i=1;
std::cout<<i++<<',';
}
std::cout<<i<<',';
}
int main()
{
fun();fun();
return 0;
}
程序执行后的输出结果是______。
A、1,2,1,2,
B、1,2,2,3,
C、2,0,3,0,
D、1,0,2,0,
本题主要考查了static型的变量,在C++中可以为函数或类指定static型的变量,如果将一个变量指定为static型,则该变量在内存中仅有一个副本,同时在函数或类执行完成后空间不会被释放,以前的值将会被保留。同时还考查了C++中变量作用域的问题,在C++中如果要将一个变量限定在指定的范围内,可以将该作用域用{}包含起来,同时可在函数的外部指定全局变量,该变量的作用范围是从当前位置开始到程序结束。对于"static int i=1;"中的i,初始值为1,在调用std::cout<<i++<<','后,将输出"1,",然后自加1,对于第二句std::cout<<i<<',',该i所代表的应该是全局变量"i",故输出"0,"。在第二次执行fun()时,由于第一i为static型变量,其值是保留的,故输出"2,",对于第二个i则输出"0,"。
本题答案为D。
20、有以下程序
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(int n){number=n;}
// 拷贝构造函数
MyClass(MyClass& other){number=other.number;}
~MyClass(){ }
private:
int number;
};
MyClass fun(MyClass p)
{
MyClass temp(p);
return temp;
}
int main()
{
MyClass obj1(10),obj2(0);
MyClass obj3(obj1);
obj2=fun(obj3);
return 0;
}
程序执行时,MyClass类的拷贝构造函数被调用的次数是______。
A、5
B、4
C、3
D、2
obj1(10)将执行一次构造函数,obj2(0)也将执行一次构造函数;
obj3(obj1)将以obj1作为参数执行一次构造函数;
fun(obj3)中的temp(p)也将执行一次构造函数,而fun本身是按值传递参数的,形参在fun函数内也要分配独立的空间,故也要执行一次构造函数,对于其返回结果也是MyClass类型的,同样需要执行一次构造函数,故一共要执行4次。
本题答案为B。
21、已知:int m=10;在下列定义引用的语句中,正确的是______。
A、int &x=m;
B、int y=&m;
C、int &z;
D、int &t=&m;
本题主要考查了对引用及地址(&)的理解,引用实际上就是别名,它与被引用变量拥有同一个地址空间,对于选项A而言,其操作实际上就是为m赋于一个别名x,因此选项A是对的。对于选项B,&m表示m的地址,而y是一个整型变量,在C++中不能从地址值隐式转换为整型值,故选项B是错的。对于选项C,引用必须要用被引用的对象,即引用必须要初始化;选项D中t是一个整型引用,而其被引用的对象却是m的地址,存在着与选项B类似的错误,因此选项D也是错的。
本题答案为A。
22、在下面的运算符重载函数的原型中,错误的是______。
A、Volume operator-(double,double);
B、double Volume::operator-(double);
C、Volume Volume::operator-(Volume);
D、Volume operator-(Volume,Volume);
本题主要考查了运算符的重载。对于运算符的重载,通常有两种形式。
1、操作结果 operator 运算符(操作数1,[操作数2])
2、操作结果 类::operator 运算符(操作数)
对于上述选项中,B、C为第二种类型,A、D为第一种类型,在第一种类型中,两个操作数必须至少有一个自定义类,对选项A而言,其两个操作数均为double型数据,因此选项A是错误的运算符重载。
本题答案为A。
23、执行语句序列
ofstream outfile("DATA.DAT");
if(…)cout<<"OK";else cout<<"FAIL";
后,如果文件打开成功显示"OK",否则就显示"FAIL"。由此可知,上面if语句的…处的表达式应是______。
A、outfile.fail() 或 outfile
B、outfile.good() 或 !outfile
C、outfile.good() 或 outfile
D、outfile.fail() 或 !outfile
在采用ofstream类打开文件时,在创建其实例时,可在构造函数中输入要打开的文件名,如果打开成功,则返回一个ofstream类的实例,否则创建实例失败,返回0,同时可通过good()或fail()方法来判断文件是否已打开,如果正常打开则fail()方法返回0,good()方法返回非零,否则fail()返回非零,good()返回0。
本题答案为C。
24、在一个类体的下列声明中,正确的纯虚函数声明是______。
A、virtual void vf()=0;
B、void vf(int)=0;
C、virtual int vf(int);
D、virtual void vf(int){}
本题考查了纯虚函数的定义,在C++中要定义一个函数为虚函数,可在函数定义前加上virtual关键字,如果要定义一个函数为纯虚函数,只要在函数原型后加上“=0”就可以了。对于纯虚函数,必须要在其派生类中实现,因此对于一个拥有纯虚函数的类,实质上就是一个抽象类。对于这种类,不能为其创建实例。
本题答案为A。
25、有以下类定义
class MyClass
{
public:
MyClass(){cout<<1;}
};
则执行语句MyClass a,b[2],*p[2];后,程序的输出结果是______。
A、11
B、111
C、1111
D、11111
class MyClass定义了一个类,其中MyClass(){cout<<1;}为其的构造函数,当程序创建类MyClass的实例时,该函数将会被调用,在执行“MyClass a,b[2],*p[2];”时,一共创建了3个这样的实例,故一共执行构造函数3次,对于变量p,则是声明了一个指针数组,该数组中的元素是指向类MyClass实例的指针,本身并没有创建类的实例。
本题答案为B。
26、有以下程序
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(double r=0,double i=0):re(r),im(i){}
double real() const { return re; }
double imag() const { return im; }
Complex operator+(Complex c)const
{ return Complex(re+c.re,im+c.im); }
private:
double re,im;
};
int main()
{
Complex a=Complex(1,1)+Complex(5);
cout<<a.real()<<'+'<<a.imag()<<'i'<<endl;
return 0;
}
程序执行后的输出结果是______。
A、6+6i
B、6+1i
C、1+6i
D、1+1i
本题定义了一个复数类,并在该类上重载了+运算符。在main函数中,定义了一个复数类a,其值为两个复数1+i与5的和。在复数类中,定义了real与imag方法,分别用来取出复数的实部与虚部。
本题答案为B。
27、已知程序中已经定义了函数test,其原型是int test(int,int,int);,则下列重载形式中正确的是______。
A、char test(int,int,int);
B、double test(int,int,double);
C、int test(int,int,int=0);
D、float test(int,int,float=3.5F);
在对函数进行重载时,不允许为其指定缺省参数,故C、D是错的,同时,对于重载的函数原型间不允许有类型完全相同的参数列表,故A是错的,对于返回类型,在重载时没有特别的要求。
本题答案为B。
28、C++流中重载的运算符>>是一个______。
A、用于输出操作的非成员函数
B、用于输入操作的非成员函数
C、用于输出操作的成员函数
D、用于输入操作的成员函数
C++流的输入运算符>>和输出运算符<<只能作为非类成员函数重载。在一个类中,如有必要,可将>>或<<声明为友元函数。
本题答案为B。
29、已知函数f的原型是:void f(int *a,long &b);,变量v1、v2的定义是:int v1;long v2;,正确的调用语句是______。
A、f(v1,&v2);
B、f(v1,v2);
C、f(&v1,v2);
D、f(&v1,&v2);
对于函数f而言,其第一个参数为整型指针,第二个参数为一引用(实际上就是按地址传递参数),该引用是一长整型的引用。
对于选项A、B,实参变量 v1为整型,而所要传递的对应的形参变量a是指针型,它接受的是地址,若将实参变量v1改为&v1,那么这一传递就是正确的;对于选项A、D,&v2为一地址,传递给整型引用,也将导致出错。
本题答案为C。
30、在公有派生的情况下,派生类中定义的成员函数只能访问原基类的______。
A、公有成员和私有成员
B、私有成员和保护成员
C、公有成员和保护成员
D、私有成员、保护成员和公有成员
在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员,所有这些成员仍然分为公有、私有和保护三种访问属性。其中,从基类继承下来的全部成员构成派生类的基类部分,这部分的私有成员是派生类不能直接访问的,公有成员和保护成员则是派生类可以直接访问的,但是它们在派生类中的访问属性将随着派生类对基类的继承方式而改变。
本题答案为C。
31、一个类可以同时继承多个类,称为多继承。下列关于多继承和虚基类的表述中,错误的是______。
A、每个派生类的构造函数都要为虚基类构造函数提供实参
B、多继承时有可能出现对基类成员访问的二义性问题
C、使用虚基类可以解决二义性问题并实现运行时的多态性
D、建立最远派生类对象时,虚基类的构造函数会首先被调用
虚基类的构造函数将在其派生类创建实例时被执行,在执行时,派生类必须为虚基类的构造函数提供实参。在多重继承中,如果通过两条以上的路径对同一基类实行继承,这样,在派生类中将有多个基类的副本,从而产生二义性。在采用虚基类时,其成员将仅存唯一的副本,这样就可以解决二义性问题,但不能够实现运行时多态,可通过抽象类或虚拟函数来实现,虚基类的构造函数将会首先被执行。
本题答案为C。
32、在C++中用来实现运行时多态性的是______。
A、重载函数
B、析构函数
C、构造函数
D、虚函数
构造函数是类在创建实例时自动执行的函数,它不能实现运行时多态;析构函数是类在销毁其实例时创建的,也不能实现运行时多态,重载函数能够使相同的的功能具有统一的接口,但可以有不同的参数。虚函数可以用来动态地根据当前实例所属的类调用相应的函数,实现运行时多态性。
本题答案为D。
33、关于友元,下列说法错误的是______。
A、如果类A是类B的友元,那么类B也是类A的友元
B、如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员
C、友元关系不能被继承
D、如果类A是类B的友元,那么类A的所有成员函数都是类B的友元
本题主要考查了友元的概念,在C++中,有些对象或函数需要访问另一些对象的内部成员,这样我们可以用friend关键字来为对应的类指定友元函数或友元类,这种关系不是相互的。如果声明一个类A为另一个类B的友元类,则类A中的所有成元函数均可访问类B中的私有成员。友元关系不会被继承。
本题答案为A。
34、判断字符型变量ch是否为大写英文字母,应使用表达式______。
A、ch>='A'&ch<='Z'
B、ch<='A'||ch>='Z'
C、'A'<=ch<='Z'
D、ch>='A'&&ch<='Z'
C++语言提供了三种逻辑运算符,它们是:!(逻辑非)、&&(逻辑与)、||(逻辑或)。其中!为单目运算符,&&和||为双目运算符。本题的选项中符合题意的是D。
本题答案为D。
35、已知下列语句中的x和y都是int型变量,其中错误的语句是______。
A、x=y++;
B、x=++y;
C、(x+y)++;
D、++x=y;
对于++、--这样的运算,其操作数必须为一变量,因为x+y是表达式故答案C是错误的。
本题答案为C。
36、数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。
标准答案为:模式 或 逻辑模式 或 概念模式
模式也称逻辑模式或概念模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。例如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等。
外模式是模式的子集,所以也称子模式或用户模式,是数据库用户能够看见的和使用的、局部的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。
内模式也称物理模式或存储模式。一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据库内部的表示方法。例如,记录的存储方式是顺序存储、索引按照什么方式组织;数据是否压缩存储,是否加密等。
37、关系数据库管理系统能实现的专门关系运算包括选择、连接和______。
标准答案为:投影
专门的关系运算主要包括对单个关系进行垂直分解(投影操作)或水平分解(选择操作)和对多个关系的结合(连接操作)等。
38、如果一个工人可管理多个设施,而一个设施只被一个工人管理,则实体"工人"与实体"设备"之间存在______联系。
标准答案为:一对多 或 1对多 或 一对n 或 1:N 或 1:n 或 1:n 或 1:N 或 一对m 或 1:M 或 1:m 或 1:m 或 1:N
实体之间的对应关系称为联系,它反映现实世界事物之间的相互关联。两个实体间的联系可以归结为三种类型:一对一联系表现为某一实体与另一实体一一对应相关联;一对多联系表现为某一实体与相关多个实体相关联;多对多联系表现为多个实体与相关多个实体相关联。
39、算法的复杂度主要包括______复杂度和空间复杂度。
标准答案为:时间
一个程序在计算机上运行时所耗费的时间由下列因素所决定:程序运行时所需输入的数据总量,对源程序进行编译所需时间,计算机执行每条指令所需时间,程序中的指令重复执行的次数。前一条取决于实现算法的计算机软、硬件系统,习惯上常常把语句重复执行的次数作为算法运行时间的相对量度,称做算法的时间复杂度。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。
40、若按功能划分,软件测试的方法通常分为白盒测试方法和______测试方法。
标准答案为:黑盒
软件测试的方法有三种:动态测试、静态测试和正确性证明。设计测试实例的方法一般有两类:黑盒测试方法和白盒测试方法。在使用黑盒法设计测试实例时,测试人员将程序看成一个"黑盒",也就是说,他不关心程序内部是如何实现的,而只是检查程序是否符合它的"功能说明",所以使用黑盒法设计的测试用例完全是根据程序的功能说明来设计的;如用白盒法,则需要了解程序内部的结构,此时的测试用例是根据程序的内部逻辑来设计的,如果想用白盒法发现程序中所有的错误,则至少必须使程序中每种可能的路径都执行一次。实际上这是不可能的,即使测遍所有的路径,仍不一定能保证符合相应的功能要求。
41、设有定义语句:int a=12;,则表达式a*=2+3的运算结果是______。
标准答案为:60
根据运算的优先级和结合性,可以将表达式的计算顺序规则总结为以下3条:(1)优先计算带有括号的子表达式。(2)在没有括号的部分,依照运算优先级,由高到低进行计算。(3)具有相同优先级的运算符,按照结合性规定,依次进行计算。本题中*=的结合性是右结合,所以表达式a*=2+3相当于a=a*(2+3),所以a=60。
42、下列程序的输出结果是______。
#include<iostream>
using namespace std;
class Test{
public:
Test(){cnt++;}
~Test(){cnt--;}
static int Count(){return cnt;}
private:
static int cnt;
};
int Test::cnt=0;
int main()
{
cout<<Test::Count()<<' ';
Test t1,t2;
Test*pT3=new Test;
Test*pT4=new Test;
cout<<Test::Count()<<' ';
delete pT4;
delete pT3;
cout<<Test::Count()<<endl;
return 0;
}
标准答案为:0 4 2
本题主要考查了类的静态成员的概念。在C++中可以用static关键字为类指定静态成员。静态成员为类的所有实例所共享。对于类中的静态函数,可以通过类名::函数名的方法来调用,并且该函数只能访问类中的静态数据。对于静态int型数据,在编译时将会被初始化为0,故在main函数中第一句将会输出“0 ”;在Test t1,t2;语句中将创建类的两个实例,一共调用了两次构造函数,故类的静态数据cnt将会执行两次自加运算,变为2,main中接下来的两条语句通过new方法也创建了该类的两个实例,此时cnt变为4,故第二次执行输出时将输出“4 ”;接下来执行了两条delete语句,将销毁pT4,pT3所对应的实例,这将执行两次析构函数,故cnt的值将变为2,最后的一条输出语句将输出“2”(后面有回车)。
43、下列程序的输出结果是______。
#include<iostream>
using namespace std;
int main()
{
int i=5;
int &r=i;r=7;
cout<<i<<endl;
return 0;
}
标准答案为:7
本题主要考查了引用的概念,引用实质上是为变量取一个别名,因为系统不会为引用变量所代表的数据对象再次分配空间。本题中引用变量r与它所代表的数据对象i共用一个存储空间,所以所有对r的操作就是对i的操作,故本题在执行r=7后,i的值也就是7。
44、下列程序的输出结果是______。
#include<iostream>
using namespace std;
template<typename T>
T fun(T a,T b) { return(a<=b)?a:b; }
int main()
{
cout<<fun(3,6)<<','<<fun(3.14F,6.28F)<<endl;
return 0;
}
标准答案为:3,3.14
本题主要考查了模板的定义及使用。在C++中为了能够实现代码的重用,提供了模板机制。在本题中,定义了一个模板函数,其参数a,b及返回结果均为T类型。分析fun函数的可知,其功能是返回a,b中数值较小的数。在main函数中第一次调用fun时,实际上是调用了int fun(int a,int b)这个函数,故返回3,第二次调用时,实质上是调用了函数float fun(float a,float b),返回值为一个浮点型数据3.14。
45、将一个函数声明为一个类的友元函数必须使用关键字______。
标准答案为:friend
友元函数不是当前类的成员函数,而是独立于当前类的外部函数(包括普通函数和其他类的成员函数),但它可以访问该类的所有对象的成员,包括私有成员、保护成员和公有成员。友元函数要在类定义时声明,声明时要在其函数名前加上关键字friend。该声明可以放在公有部分,也可以放在私有部分。友元函数的定义既可以在类内部进行,也可以在类外部进行。
46、请按下面注释的提示,将类B的构造函数定义补充完整。
请按下面注释的提示,将类B的构造函数定义补充完整。
class A
{
int a;
public:
A(int aa=0){a=aa;}
};
class B:publ
展开阅读全文