1、国家二级 C+机试(选择题)模拟试卷 6及答案与解析 一、选择题 1 算法的时间复杂度是指 ( )。 ( A)算法的长度 ( B)执行算法所需要的时间 ( C)算法中的指令条数 ( D)算法执行过程中所需要的基本运算次数 2 以下数据结构中,属于非线性数据结构的是 ( )。 ( A)栈 ( B)线性表 ( C)队列 ( D)二叉树 3 数据结构中,与所使用的计算机无关的是数据的 ( )。 ( A)存储结构 ( B)物理结构 ( C)逻辑结构 ( D)线性结构 4 内聚性是对模块功 能强度的衡量,下列选项中,内聚性较弱的是 ( )。 ( A)顺序内聚 ( B)偶然内聚 ( C)时间内聚 ( D)
2、逻辑内聚 5 在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的 ( )。 ( A)连接码 ( B)关系码 ( C)外码 ( D)候选码 6 检查软件产品是否符合需求定义的过程称为 ( )。 ( A)确认测试 ( B)需求测试 ( C)验证测试 ( D)路径测试 7 数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图 符构成。下列图符名标识的图符不属于数据流图合法图符的是 ( )。 ( A)控制流 ( B)加工 ( C)存储文件 ( D)源和潭 8 待排序的关键码序列为 (15, 20, 9, 30, 67, 65, 45, 90),要按关
3、键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码 15被放到第 ( )个位置。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 9 对关系 S和关系 R进行集合运算,结果中既包含关系 S中的所有元组也包含关系 R中的所有元组,这样的集合运算称为 ( )。 ( A)并运算 ( B) 交运算 ( C)差运算 ( D)除运算 10 下列选项中,不属于数据管理员 (DBA)职责的是 ( )。 ( A)数据库维护 ( B)数据库设计 ( C)改善系统性能,提高系统效率 ( D)数据类型转换 11 假定 MyClass为一个类,则该类的拷贝构造函数的声明语句为 ( )。 ( A) My
4、Class(MyClass x); ( B) MyClass(MyClass&x); ( C) MyClass(&x); ( D) MyClass(x); 12 下列函数的功能是判断字符串 str是否对称,对 称则返回 true,否则返回 false,则横线处应填上 ( )。 Bool fun(char*str) int i=0j=0; while(strj)j+; for(j-; i= ( B) ll ( C) & ( D) using namespace std; class Complex public: Complex(double r=0, double i=0): re(r), i
5、m(i) double real()constreturn re; double imagoconstreturn im; ) Complex operator+(Complex c)constreturn Complex(re+c re, im+c im); private: double re, im; ; int main() Complex a=Complex(1, 1)+Complex(5); cout #define MAX(x, y)(x)(y)?(x): (y) void main() int i, j, k; i=10; j=15; k=MAX(i,j),10; cout v
6、oid main() char a=”abbcabbcabbc”; int i=0,d=0, k=0; while(ai) if(ai=a) j+; if(ai=b) k+: i+: cout int fun(int n); void main() couta; result=fun(a); cout void main() int x; int &y=x;变量引用 y=99; cout void fun(int a, int b) int temp; temp=a: a=b: b=temp; ) void main() intm, n; m=1; n=2: fun(m, n); cout v
7、oid main() static int b3=l, 2, 3), 4), 5, 6; b01121=12, b12=18; cout using namespace std; void fun(int&n r*=2: ) int main() int n=50; fun(n); cout class A1 public: void show1() cout #include using namespace std; class point private: double x; double y; public: point(double a,double b) X=a; y=b; frie
8、nd double distances(point a,point b); ; double distances(point a,point b) return sqrt(a x-b x)*(a x b x)+(a y-b y)*(a y-b y); int main() point p1(1, 2); point p2(5, 2); cout using namespace std; class R public: R(int r1, int r2) Rl=r1; R2=r2; voidprint(); void print()const; private: intR1, R2; ; voi
9、d R: print() cout using namespace std; template T fun(T a,T b)retum(ay)?(x): (y)是当 x大于 y时 取 x,否则取 y。当 i=10, j=15时, “MAX(i, j)”的值为 15,所以 “k=MAx(i, j)*10; ”答案为: 150。 15 【正确答案】 B 【试题解析】 enum;其中:关键词 “enum”表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。本题中的枚举类型中的数据值 Wednesday为 2,而 Friday的值赋值为2,所以判断 Wednesday等
10、于 Friday的表达式值为真,即 true。 16 【正确答案】 D 【试 题解析】 程序中首先定义字符数组 a,然后在 while循环中统计字符 a和 b的个数。其中 n己录 a的个数, k记录 b的个数。第一个 if语句是当第 i个字符为a时, j加 1;第二个 if语句是当第 i个字符为 b时, k加 1。 17 【正确答案】 C 【试题解析】 由程序 main主函数入手,调用 fun函数获得返回值 result输出。题目中假定 a=3,即调用语句 fun(a)中的输入参数为 a,进入 fun函数,在 for循环中当 i小于等于 n,即输入参数 3时,循环 3次执行 “p*=i; re
11、sult+=p; ”语句。即执行三次 p=p*i, result=result+p, result的结果为 9。返回的 fun函数结果为9,即 “cout。 resultendl: ”输出 9。 18 【正确答案】 D 【试题解析】 指针变量如果指向同一个数组的元素,则可以进行比较,所以 A)是正确的。指针变量的赋值就是将一个变量地址赋给一个指针变量。并且指针变量可以是空值,即该指针不指向任何变量。 B)同样也是正确的。指针变量加减一个整数是将该指针变量的原值 (是一个地址 )和它指向的变量所占用的内存单元字节数相加或相减。即 C)也是正确的。如果两个指针指 向同一个数组元素,两个指针是可以相
12、减的,标识两个指针之间的元素个数。但是它们是不可相加的。 19 【正确答案】 A 【试题解析】 程序中的 “int&y=x; ”语句中的 “&”引用运算符。 &y=x语句可以理解为 y具有 x的地址,所以 v的值 99, x的值也是 99,所以答案是 x=99。 20 【正确答案】 A 【试题解析】 函数 fun中定义的参数 a和 b为形式参数,它们并不是实际存在的数据,只有在发生函数调用时才被分配内存空间,结束后,形参所占有的内存单元也被释放。并且函数 fun没有返回值,它做的交换 操作,并不能影响实际参数m和 n。所以输出值保持不变,仍然是 l和 2,即输出: 12。 21 【正确答案】
13、A 【试题解析】 选项 B)、 C)、 D)都是获取 a(l)元素,而选项 A)是获取 a(0)的元素。 22 【正确答案】 B 【试题解析】 数组作为参数实参传递的是数组的首地址。所以主调函数和被调函数共用一段存储单元。 23 【正确答案】 C 【试题解析】 可以在类的构造函数中对静态数据成员进行初始化。 24 【正确答案】 D 【试题解析】 在一个类中可以定义多个构造函数,以 便对类对象提供不同的初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。 25 【正确答案】 A 【试题解析】 本题 b是一个 33的二维数组:利用指针表示数组: *(*(数组名+i
14、)+i)。 *b表示 b00元素,值是 1, *(b+1)表示是 b01的元素,值是 4。*(b+1)+2)表示 b12的元素,值是 18, b02+b12+b22之和是 30。 26 【正确答案】 D 【试题解析】 题中主程序中首先定义整型变量 n=50,然后调用函数 fun,实际参数为 n。函数 fun中参数为引用,为地址。即函数中形参的改变会影响实参的值,函数的功能是参数乘以 2。 27 【正确答案】 B 【试题解析】 此题考查的是继承时基类成员属性改变。选项 B)中,公有继承时基类中的 private成员在派生类中不是 private的,而是不可访问的。所以选项 B)错误;其他选项叙述
15、均正确。 28 【正确答案】 C 【试题解析】 多继承派生类的构造顺序是:首先调用虚基类的构造函数,然后调用非虚基类的构造函数按照它们被继承的顺序构造,其次调用 子对象的构造函数,最后是派生类构造函数中的内容。 29 【正确答案】 D 【试题解析】 析构函数可以声明为虚函数,但是构造函数不能声明为虚函数;类的虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响。 30 【正确答案】 C 【试题解析】 由于 class A3: protectedA2,所以类 A3的对象 obj3不能直接访问基类 A1的成员函数 showl(),所以选项 C)是错误的;其他选项均有访问的权限,正确。 31 【
16、正确答案】 D 【试题解析】 重载的运算符仍要保持其原来的 操作数、优先级和结合性不变。 32 【正确答案】 B 【试题解析】 分析题目,此题最终要实现的结果是 sqrt(a xb x)*(a xb x)+(a yb y)*(a yb y),其中的 a x和 a y分别指 pl(1, 2)中的 1和2。这样容易得到结果是 (1-5)-(1-5)+(2-2)*(2-2)=16,再开方得到结果为 4。 33 【正确答案】 C 【试题解析】 此题中,语句 R a(5,4)调用构造函数 R(int r1, int r2)但未有输出结果: b print();调用常成 员函数 (因为 b是常对象 )vo
17、id print()const,输出结果是20, 52。 34 【正确答案】 B 【试题解析】 此函数模板的功能是输出 a、 b两数中较小的那个数。 (3, 6)输出3, (3 14F,6 28F)输出 3 14。 35 【正确答案】 B 【试题解析】 类模板不是一个实实在在的类,本身在编译中不会生成任何代码;用类模板定义一个对象时,不能省略实参;类模板的成员函数都是模板函数。 C+中可以为类模板的参数设置默认值,所以选项 B)错误。 36 【正确答案】 D 【试题 解析】 如果一个模板声明列出了多个参数,则每个参数之间必须使用逗号隔开,每个参数都必须使用 class关键字来修饰。 37 【正
18、确答案】 D 【试题解析】 this指针是成员函数所属对象的指针,它指向类对象的地址;它隐含于每个类的非静态成员函数中; this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象;静态成员函数没有 this指针,因为类中只有一个静态成员函数实例,使用 this指针无意义。 38 【正确答案】 C 【试题解析】 此题考查的是函数重载的概念。在 C+语言中,允许定 义一系列函数名相同,但形参的个数和类型不完全相同的函数,即函数的重载。重载函数对返回值类型不做要求,返回值类型也不参与区分函数的重载形式。故选项 C)错误。 39 【正确答案】 B 【试题解析】 此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。 40 【正确答案】 D 【试题解析】 此题考查的是派生类的构造函数和析构函数。在撤销派生类对象时,析构函数的执行过程和构造函数严格相反,即 :对派生类新增普通成员进行清理;调用成员对象析构函数,调用基类析构函数对基类进行清理。