1、国家二级( C+)机试模拟试卷 174及答案与解析 一、选择题 1 下列叙述中错误的是 ( )。 ( A)算法的时间复杂度与问题规模无关 ( B)算法的时间复杂度与计算机系统无关 ( C)算法的时间复杂度与空间复杂度没有必然的联系 ( D)算法的空间复杂度与算法运行输出结果的数据量无关 2 设表的长度为 20。则在最坏情况下,冒泡排序的比较次数为 ( )。 ( A) 190 ( B) 20 ( C) 19 ( D) 90 3 下列叙述中正确的是 ( )。 ( A)带链栈的栈底指针是随栈的操作而 动态变化的 ( B)若带链队列的队头指针与队尾指针相同,则队列为空 ( C)若带链队列的队头指针与队
2、尾指针相同,则队列中至少有一个元素 ( D)带链栈的栈底指针是固定的 4 设一棵树的度为 3,共有 27个结点,其中度为 3, 2, 0的结点数分别为 4, 1,10。该树中度为 1的结点数为 ( )。 ( A) 12 ( B) 13 ( C) 11 ( D)不可能有这样的树 5 下面描述中正确的是 ( )。 ( A)好的软件设计应是高内聚低耦合 ( B)内聚性和耦合性无关 ( C)内聚性是指多个模块间相互连接的紧 密程度 ( D)耦合性是指一个模块内部各部分彼此结合的紧密程度 6 某系统总体结构如下图所示 该系统结构图的最大扇出数、最大扇入数的总和是 ( )。 ( A) 5 ( B) 7 (
3、 C) 4 ( D) 8 7 下面属于应用软件的是 ( )。 ( A)人事管理系统 ( B) Oracle数据库管理系统 ( C) C+编译系统 ( D) ios操作系统 8 下面选项中不是关系数据库基本特征的是 ( )。 ( A)不同的列应有不同的数据类型 ( B)不同的列应有不同的列名 ( C)与行的次序无关 ( D)与 列的次序无关 9 工厂生产中所需的零件可以存放在多个仓库中,而每一仓库中可存放多种零件。则实体仓库和零件间的联系是 ( )。 ( A)多对多 ( B)一对多 ( C)多对一 ( D)一对一 10 学生和课程的关系模式定义为 S(S#, Sn, Sd, Dc, SA)(其属
4、性分别为学号、姓名、所在系、所在系的系主任、年龄 ); C(C#, Cn, P#)(其属性分别为课程号、课程名、先选课 ); SC(S#, C#, G)(其属性分别学号、课程号和成绩 )。 关系中包含对主属性传递依赖的 是 ( )。 ( A) S#Sd , SdDc ( B) S#Sd ( C) S#Sd , (S#, C#)G ( D) C#P# , (S#, C#)G 11 下列选项中,不属于 C+关键字的是 ( )。 ( A) for ( B) then ( C) inline ( D) while 12 下列选项中,错误的 C+表达式是 ( )。 ( A) a+1 ( B) b=65
5、( C) int(x) ( D) x+=33 13 有如下程序段 int k=10; do cout using namespace std; int main() int sum=0; for(int i=1; ib?(b?c 1: 0): 0; 等价的是 ( )。 ( A) if(ab)&(bc) temp=1; else temp=0; ( B) if(ab)|(bc) temp=1; else temp=0; ( C) if(ab) temp=1; else if(bc) temp=1; else 22 下列有关指针的操作中,正确的是 ( )。 ( A) int a=10; void*
6、ptr=&a; cout ( D)输出流的插入运算符 using namespace std; int fun(char x, char y) if(xy) return x; return y; int main() int a(9), b(8), c(7); cout using namespace std; void hey(_, int&b) int c; c=a; a=b; b=c; int main() int m=14, n=20; hey(m, n); cout using namespace std; void f(int i)cout using namespace std
7、; class Goods货物类 double unit_price;单价 int quantity;数量 public: Goods(double u=0 0, int q=0): unit_price(u), quantity(q) double getPrice()constreturn unit_price; 返回单价 int getQuantity()constreturn quantity; 返回数量 增加数量 Goods operator+(int q)constreturn Goods(unit_price, quantity+q); ; 增加数量 Goods operator
8、+(_)return g+q; 输出货 物信息 ostream&operator using namespace std; class Xabe int*a; int n; public: Xabc(int aa, int nn): n(nn) a=Hew intn; for(int i=0; i class vehicle private: int MaxSpeed; int Weight public: *found* vehicle(int maxspeed, int weight): _ vehicle(); int getMaxSpeed()return MaxSpeed; int
9、getWeight()return Weight; ; *found* class bicycle: _public vehicle private: int Height; public: bicycle(int maxspeed, int weight, int height): vehicle(maxspeed, weight),Height(height) int getHeight()return Height; ; ; *found* class motorcar: _public vehicle private: int SeatNum; public: motorcar(int
10、 maxspeed, int weight, int seatnum): vehicle(maxspeed, weight),SeatNum(seatnum) int getSeatNum()return SeatNum; ; ; *found* class motorcycle: _ public: motorcycle(int maxspeed, int weight, int height): vehicle(maxspeed, weight),bicycle(maxspeed, weight, height), motorcar(maxspeed, weight, 1) ; void
11、main() motorcycle a(80, 150, 100); cout #include using namespace std; class MiniString public: friend ostream&operator(istream&input, MiniString&s)重载流提取运算符 char temp100;用于输入的临时数组 temp0= 0;初始为空字符串 inputsetw(100)temp; int inLen=strlen(temp);输入字符串长度 if(inLen!=0) s 1ength=inLen;赋长度 if(s sptr!=0)deletes
12、sPtr;避免内存泄漏 s sPtr=new chars length+1; strcpy(s sPtr, temp);如果 s不是空指针,则复制内容 else s sPtr0= 0;如果 s是空指针,则为空字符串 return input; void modString(const char*string2)更改字符串内容 if(string2 !=0)如果 string2不是空指针,则复制内容 if(strlen(string2)!=length) length=strlen(string2); deletesPtr; sPtr=new charlength+1; 分配内存 strcpy(
13、sPtr, string2); else sPtr0= 0;如果 string2是空指针,则为空字符串 MiniString&operator=(const MiniString&otherString); MiniString(const char*s=|): length(s!=0)?strlen(s): 0)构造函数 sPtr=0; if(1ength!=0) setString(s); MiniString()析构函数 deletesPtr; private: int length;字符串长度 char*sPtr;指向字符串起始位置 void setString(const char*
14、string2)辅助函数 sPtr=new charstrlen(string2)+1; 分配内存 if(string2!=0)strepy(sPtr, string2);如果 string2不是空指针,则复制内容 else sPtr0= 0;如果 string2是空指针,则为空字符申 ; proj3 cpp #include #include using namespace std; #include“proj3 h“ MiniString&MiniString: operator=(const MiniString&otherString) 重载赋值运算符函数。提示:可以调用辅助函数 se
15、tString *333* *666* int main() MiniString strl(“Hello!“), str2; void writeToFile(const char*); str2=strl;使用重载的赋值运算符 str2 modString(“Happy new year!“); coutb?(bc?1: 0): 0是条件运算表达式,首先执行 bc?1: 0当 bc时,值为 1;当 bb?(x):0,其中 x的值为 1或 0,当 ab时, temp的值为 x,否则 temp的值为 0;所以当ab且 bc时, temp=1,否则 temp=0,答案 A满足,本题答案为 A。
16、22 【正确答案】 C 【试题解析】 选项 A首先定义整型变量 a,初值为 10;然后定义 void类型指针ptr,将 a的地址赋给 ptr,由于 a的类型和 ptr的类型不同,所以不能直接赋值,A错误;选项 B动态分配 10个整型数的存储空间,首地址赋给 ptr,释放 ptr时需要使用 delete, B错误;选项 C定义数组 Array,它包含 4个整型元素,然后将与数组首地址 Array偏移 3个整型数的地址指向的元素,赋值为 10,即Array3=10,正确;选项 D使用 new运算符动态分配 10个整型指针元素的存储空间,首地址赋给 ptr,所以 ptr必须是一个指向指针的指针 in
17、t*ptr,错误;本题答案为 C。 23 【正确答案】 C 【试题解析】 C+中,运算符重载的规则有:不允许定义新的运算符;重载不能改变运算符运算对象 (操作数 )的个数;重载不能改变运算符的优先级;重载不能改变运算符的结合性;运算符重载函数可以是类的成员函数,有些运算符也可以作为非成员函数重载;重载运算符至少有一个操作数的类型是用户定义类型;综上选项 A、 B、 D正确;选项 C错误,本题答案为 c。 24 【正确答案】 B 【试题解析】 C+中,对于单目运算符的运算符重载,操作数可能是类对象,所以参数表可能是空,选项 A正确 ;运算符重载不允许定义新的运算符,选项 B错误;运算符函数的名字
18、是以 operator为前缀,选项 C正确;运算符函数的参数类型可以是类,选项 D正确;本题答案为 B。 25 【正确答案】 B 【试题解析】 C+中,赋值运算符 =必须重载为类成员函数,选项 A不满足;对于输入流的提取运算符和输出流的插入运算符 b,所以 fun(a, b)返回值为 a, bc, fun(b, c)返回值为 b,所以 fun(fun(a,b), fun(b, c)等价于 fun(a, b),也就等价于 a的值,所以程序输出 9,本题答案为 B。 35 【正确答案】 C 【试题解析】 fa()函数是一个递归函数,当参数 n的值大于 1时,函数会递归调用自身,返回值为 fa(n1
19、)+fa(n一 2),所以当调用 fa(3)时,等价于:fa(2)+fa(1),也就等价于 fa(1)+fa(0)+fa(1),即 1+0+1=2,本题答案为 c。 36 【正确答案】 C 【试题解析】 题意 hey()函数体中是将 a和 b的值进行交换,可知 a是。 hey()函数的第一个参数, main()函数中, m初值为 14, n初值为 20,经过 hey()函数的调用,将 m传给参数 a, n传给参数 b后,输出 m的值 14, n的值也是 14,可知在hey()函数中,交换 a、 b值的同时修改了实参 n,而 m未被修改,所以形参 a只是实参 m的一个拷贝变量,选项 A、 B错误
20、;另外在定义形参 a时,需要指定数据类型,所以选项 D错误;本题答案为 C。 37 【正确答案】 A 【试题解析】 题意两个 f()函数是重载函数, main()函数中调用 f(3 0),。由于参数 d=3 0是实型,所以调用参数为 double类型的函数,输出 d*2,由于 C+在输出时,默认不显示小数点后的 0,所以输出 6,接下来调用 f(3),调用参数为 int类型的函数,输出 3,所以本题答案为 A。 38 【正确答案】 C 【试题解析】 程序中,语句 Goods g(35 6, 100);定义了 Goods类的对象 g,通过构造函数可知单价 unit_price赋值为 35 6,数
21、量 quantity赋值为 100,所以coutg使用重载的输出运算符 输出结果为: 单价: 35 6, 数量: 100 由于重载的输出运算符 返回类型为 ostream引用,所以继续输出 g+33和25+g,对于程序中重载的加法运算符 operator+(int q)const可知,将对象 g与整数33相加时,重新构造一个新的对象,使用旧对象的单价 unit_price初始化新对象的 unit_price,使用旧对象的数量 quantity与 33相加初始化新对象的 quantity,所以 g+33输出结果为: 单价: 35 6,数量: 133 而整数 25作为第一操作数执行 25+g时,使
22、用非成员重载运算符 +, 间接的调用g+25,所以题意中缺失部分应该将整数作为第一操作数,将类对象作为第二操作数,选项 A、 B、 D错误,只有选项 C正确,程序输出:单价: 35 6,数量:125。本题答案为 C。 39 【正确答案】 A 【试题解析】 静态成员不属于任何一个对象,它由该类所有对象所共享,静态成员函数只能够访问类中的静态数据成员,选项 A错误,选项 B正确;静态数据成员只能在类的定义体外进行初始化,选项 C正确;即使没有定义任何对象,也可以通过作用域运算符使用该类的公有静态成员,使用方法是 类名:静态成员名,选项 D正确 ,本题答案为 A。 40 【正确答案】 C 【试题解析
23、】 MyClass提供一个参数为整型变量的构造函数,构造对象时,使用参数初始化成员 k的值;选项 A定义一个包含 4个元素的数组,数组元素的类型是 MyClass类型,并且对该数组的 4个元素分别显示调用构造函数完成初始化,选项 A正确;同理,选项 B定义数组 m4,由于初始化值个数为 3个,所以系统默认该数组长度为 3,选项 B正确;选项 D定义数组 m4,使用 3个整数初始化数组元素,此时系统调用构造函数将整数隐式转换成 MyClass类型,并默认数组长度为 3,选项 D正确 ;选项 C同样定义数组 m4,它包含 4个元素,初始化时,同样使用 3个整数 1, 2, 3初始化前 3个元素,系统调用构造函数将整数隐式转换成MyClass类型,来完成前 3个元素的初始化,但是由于 MyClass没有默认构造函数,所以第 4个元素不能完成构造,选项 C错误,本题答案为 C。