1、国家二级 C+机试(选择题)模拟试卷 131及答案与解析 一、选择题 1 算法的时间复杂度是指 ( )。 ( A)算法的长度 ( B)执行算法所需要的时间 ( C)算法中的指令条数 ( D)算法执行过程中所需要的基本运算次数 2 以下数据结构中,属于非线性数据结构的是 ( )。 ( A)栈 ( B)线性表 ( C)队列 ( D)二叉树 3 数据结构中,与所使用的计算机无关的是数据的 ( )。 ( A)存储结构 ( B)物理结构 ( C)逻辑结构 ( D)线性结构 4 内聚性是对模 块功能强度的衡量,下列选项中,内聚性较弱的是 ( )。 ( A)顺序内聚 ( B)偶然内聚 ( C)时间内聚 (
2、D)逻辑内聚 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) M
4、yClass(MyClass x); ( B) MyClass(MyClass&x); ( C) MyClass(&x); ( D) MyClass(x); 12 下列函数的功能是判断字符串 str是否 对称,对称则返回 true,否则返回 false,则横线处应填上 ( )。 Bool fun(char*str) int i=0, j=0; while(strj)j+; for(j一; i= ( B) ( C) & ( D) #define MAX(x, y)(x)(y)?(x): (y) void main() int i j, k; i=10; j=15; k=MAX(i,j)*10;
5、cout void main() char a=“abbcabbcabbc”; int i=0j=0, k=0; while(ai) if(aiD=a) j+; if(ai=b) k+: i+: cout int fun(intn); void main() couta; result=fun( a); cout void main() int x; int&y=x;变量引用 y=99; cout void fun(rota, int b) int temp; temp=a; a=b; b=temp; void main() int m, n; m=1; n=2; fun(m,n); cout
6、 void main() static int b3=1, 2,3, 4, 5, 6); b02=12,b12=18; cout using namespace std; void fun(int &r) r*=2; ) int main() intn=50; fun(n); cout class A1 public: void showl() cout #include using namespace std; class point private: double x: double y; public: point(double a,double b1 x=a; y=b; friend
7、double distances(point a,point b); ; double distances(point a,point b) return sqrt(a Xb x)*(a x一 b x)+(a yb 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) R1=r1; R2=r2: void print(); void print()const; private: int R1, R2; ; void
8、 R: print() cout using namespace std; template T fun(T a, T b)return(ay)?(x): (y)是当 x大于 y时取 x,否则取 y。当 i=10, j=15时, “MAX(i, j)”的值为 15,所以 “k=MAX(ij)*10; ”答案为: 150。 15 【正确答案】 B 【试题解析】 enum:其中:关键词 “enum”表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。本题中的枚举类型中的数据值 Wednesday为 2,而 Frida3,的值赋值为2,所以判断 Wednesday,等
9、于 Friday的表达式值为真,即 tnle。 16 【正确答案】 D 【试题解析】 程序中首先定义字符数组 a,然后在 while循环中统计字符 a和 b的个数。其中 i记录 a的个数, k记录 b的个数。第一个 if语句是当第 i个字符为a时, i加 1;第二个 if语句是当第 i个字符为 b时, k加 1。 17 【正确答案】 C 【试题解析】 由程序 main主函数入手,调用 fun函数获得返回值 resuh输出。题目中假定 a=3,即调用语句 fun(a)中的输入参数为 a,进入 fun晒数,在 for循环中当 i小于等于 n,即输入参数 3时,循环 3次执行 “p*=i; resu
10、lt+=p; ”语句。即执行三次 p=p*i, result=result+p, result的结果为 9。返回的 fun函数结果为9,即 “coutresult: end1: ”输出 9。 18 【正确答案】 D 【试题解析】 指针变量如果指向同一个数组的元素,则可以进行比较,所以 A)是正确的。指针变量的赋值就是将一个变量地址赋给一个指针变量。并且指针变量可以是空值,即该指针不指向任何变量。 B)同样也是正确的。指针变量 加减一个整数是将该指针变量的原值 (是一个地址 )和它指向的变量所占用的内存单元字节数相加或相减。即 C)也是正确的。如果两个指针指向同一个数组元素,两个指针是可以相减的
11、,标识两个指针之间的死索个数。但是它们是不可相加的。 19 【正确答案】 A 【试题解析】 程序中的 “inl&y=x; ”语句中的 “&”引用运算符。 &y=x语句叮以理解为 y具有 x的地址,所以 v的值 99, x的值也是 99所以答案是 x=99。 20 【正确答案】 A 【试题解析】 函数 fun中定义的参数 a和 b为形式参数,它们并不是 实际存在的数据,只有在发生函数调用时才被分配内存空问,结束后,形参所占有的内存单元也被释放。并且函数 fun没有返回值,它做的交换操作,并不能影 向实际参数 m和 n。所以输出值保持不变,仍然是 1和 2,即输出: 12。 21 【正确答案】 A
12、 【试题解析】 选项 B)、 C)、 D)都是获取 a(1)元素,而选项 A)是获取 a(0)的元索。 22 【正确答案】 B 【试题解析】 数组作为参数实参传递的赴数组的首地址。所以主调函数和被调函数共用一段存储单元。 23 【正确答案】 C 【试题解析】 可以在类的构造函数中对静态数据成员进行初始化。 24 【正确答案】 D 【试题解析】 在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化的疗法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。 25 【正确答案】 A 【试题解析】 本题 b是一个 33的一维数组:利用指针表示数组: *(*(数绀+j)+i
13、)*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成员在派生类中不是 pfivate的,而是不可访问的。所以选项 B)错误;其他选项叙述均正确。
14、 28 【正确答案】 C 【试题解析】 多继承派生类的构造顺序是:首先调用虚基类的构造函数,然后调用非虚基类的构造函数按照它们被继承的顺序构造,其次调用子对象的构造函数,最后是派生类构造函数中的内容。 29 【正确答案】 D 【试题解析】 析构函数可以声明为虚函数,但是构造函数不能声明为虚函数;类的虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响。 30 【正确答案】 C 【试题解析】 由于 class A3: protected A2,所以类 A3的对象 obi3不能直接访问基类 A1的成员函数 showl(),所以选项 C)是错误的;其他选项均有访问的权限,正确。 31 【正确答案
15、】 D 【试题解析】 重载的运算符仍要保持其原来的操作数、优先级和结合性不变。 32 【正确答案】 B 【试题解析】 分析题目,最终要实现的结果是 sqrt(a xb x)*(a xb x)+(a yb y)*(a yb y),其中的 a x和 a y分别指 pl(1, 2)中的 l和2。这样容易得到结果是 (1-5)*(1-5)+(22)*(22)=16,再开方得到结果为 4。 33 【正确答案】 C 【试题解析】 此题中,语句 R a(5,4)调用构造函数 R(int r1, int r2)但未有输出结果; b print();调用常成员函数 (因为 b是常对象 )void print()
16、const,输出结果是20, 52。 34 【正确答案】 B 【试题解析】 此函数模板的功能是输出 a、 b两数中较小的那个数。 (3, 6)输出3, (3 14F,6 28F)输出 3 14。 35 【正确答案】 B 【试题解析】 类模板不是一个实实在在的类,本身在编译中不会生成任何代码;用类模板定义一个对象时,不能省略实参 ;类模板的成员函数都是模板函数。 C+中可以为类模板的参数设置默认值,所以选项 B)错误。 36 【正确答案】 D 【试题解析】 如果一个模板声明列出了多个参数,则每个参数之间必须使用逗号隔开,每个参数都必须使用 class关键字来修饰。 37 【正确答案】 D 【试题
17、解析】 this指针是成员函数所属对象的指针,它指向类对象的地址;它隐含于每个类的非静态成员函数中; this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象;静态成员函数没有 this指针,因为类中只有一个静态成员函数 实例,使用 this指针无意义。 38 【正确答案】 C 【试题解析】 此题考查的是函数重载的概念。在 C+语言中,允许定义一系列函数名相同,但形参的个数和类型不完全相同的函数,即函数的重载。重载函数对返回值类型不做要求,返回值类型也不参与区分函数的重载形式。故选项 C)错误。 39 【正确答案】 B 【试题解析】 此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。 40 【正确答 案】 D 【试题解析】 此题考查的是派生类的构造函数和析构函数。在撤销派生类对象时,析构函数的执行过程和构造函数严格相反,即:对派生类新增普通成员进行清理;调用成员对象析构函数,调用基类析构函数对基类进行清理。