1、国家二级 C+机试(选择题)模拟试卷 15 及答案与解析 一、选择题 1 有如下程序: #include using namespace std; class Music public: void setTitle(char * str)strcpy(title, str); protected: char type10; private: char title20; ; class Jazz: public Music public: void set(char*str) strcpy(type, “Jazz“); strcpy(title, str); ; 下列叙述中正确的是 ( )。 (
2、 A)程序编译正确 ( B)程序编译时语句 出错 ( C)程序编译时语句 出错 ( D)程序编译时语句 和 都出错 2 有如下程序: #include using namespaee std; class Book public: Book(char*t=“)strcpy(title, t); private: char title40; ; class Novel: public Book public: Novel(char* t=“): Book(t) char ag Category()constreturn“文学 “; ; int main() Book*pb; pb=new Nov
3、el(); coutCategory(); delete pb; return 0; 若程序运行时输出结果是 “文学 ”,则横线处缺失的语句是 ( )。 ( A) char ag Category(); ( B) char*Category()const; ( C) virtual char*Category()const; ( D) virtual char木 Category()const=0; 3 如下函数模板: templateT square(T x)retum x * x; 其中 T是 ( )。 ( A)函数形参 ( B)函数实参 c)模板形参 ( C)模板实参 4 下列函数模板的
4、定义中,合法的是 ( )。 ( A) templateT abs(T x)return xT abs(T x)retum xabs(T x)return x1; i-=2)cout using namespace std; class CD public: CD()cout using namespace std; class MyClass public: MyClass()+count; MyClass()-count; static int getCount()return count; private: static int count; ; int MyClass: count=0;
5、 int main() MyClass obj; cout using namespace std; class MyClass public: MyClass(int x): val(x) void Print()constcout“const: val=“val t; void Print()cout“val=“val t; private: int val; ; int main() const MyClass objl(10); MyClass obj2(20); objl Print(); obj2 Print(); retum 0; 执行这个程序的输出结果是 ( )。 ( A) v
6、al=10 const: val=20 ( B) const: val=10 const: val=20 ( C) const: val=10 val=20 ( D) val=10 val=20 国家二级 C+机 试(选择题)模拟试卷 15 答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 本题考查公用继承和保护继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。保护成员不能被类外访问,但是可以被派生类的成员函数访问。 Type成为派生类的保护成员,可以被派生类访问, title仍为基类私有,派生类不能直接访问。所以答案为
7、 c。 2 【正确答案】 D 【试题解析】 本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被 “初始化 ”为 0的函数 ,包含纯虚函数的类为抽象类,抽象类是不能被实例化的,但是可以定义指向抽象类数据的指针变量,当派生类成为具体类后,就可以用这种指针指向派生类的对象,然后通过该指针调用虚函数,实现多态性的操作。所以本题答案为 D。 3 【正确答案】 C 【试题解析】 本题考查模板函数的基本概念,根据模板函数的定义, T 是模板形参,所以答案为 c。 4 【正确答案】 A 【试题解析】 本题考查模板函数的基本概念,根据模板函数的定义,所以答案为A。 5 【正确答案】 B 【试题解析】 本题考查
8、流对象 cin, 属于基础知识, cin是输入流对象,负责从键盘获取数据,然后送到内存。本题答案为 B。 6 【正确答案】 A 【试题解析】 iomanip 中定义的操纵符包括: setfill(ch)用 ch 填充空白、setprecision(n)将浮点精度置为 n、 setw(w)、读写 w 个字符的值 showpoint设置小数点。 7 【正确答案】 C 【试题解析】 N S图提出了用方框图来代替传统的程序流程图,所以 A)不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设 计的图形表示工具,所以 B)不对。 E R图是数据库中的用于表示E R
9、模型的图示工具,所以 D)不对。根据图中所示表示方法是进行软件详细设计时使用的程序流程图。 8 【正确答案】 B 【试题解析】 数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。 9 【正确答案】 C 【试题解析】 在 E R图中实体集用矩形,属性用椭圆,联系用菱形。 10 【正确答案】 C 【试题解析】 树是简单的非线性 结构,所以二叉树作为树的一种也是一种非线性结构。 11 【正确答案】 B 【试题解析】 栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据。 12 【正确答案】 D 【
10、试题解析】 循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以队头指针有时可能大于队尾指针有时也可能小于队尾指针。 13 【正确答案】 A 【试题解析】 算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择 A。 14 【正确答案】 B 【试题解析】 一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。 15 【正确答案】 A 【试题解析】 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 goto语句,所以选择 A。 16 【正确答案】 C 【试题解析】
11、NS 图提出了用方框图来代替传统的程序流程图,所以 A不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以 B 不对。 ER图是数据库中 的用于表示ER模型的图示工具,所以 D不对。根据图中所示表示方法是进行软件详细设计时使用的程序流程图。 17 【正确答案】 B 【试题解析】 数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。 18 【正确答案】 C 【试题解析】 在 ER图中实体集用矩形,属性用椭圆,联系用菱形。 19 【正确答案】
12、D 【试题解析】 并关系 T 中包含了关系 R与 S中的所有元组,所以进行的是并的运算。 20 【正确答案】 A 【试题解析】 本题考查 C+标识符的命名规则,其规则有如下几点: 所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头; 所有标识符不能使用 C+已有的关键字; 大、小写字母表示不同意义,即代表不同的标识符。选项 B包含了字符 “一 ”,选项 C是关键字,选项 D不能以数字开头。故答案为 A。 21 【正确答案】 B 【试题解析】 本题考查整型变量的类型, A、 c选项中前者为无符号的,后者为有符号的, D选项中 short int为 2个字节, int为 4个字节。
13、22 【正确答案】 D 【试题解析】 本题考查 C+基本控制结构, A、 B、 C三个选项中的大括号不是必须的,而 D选项中的函数体必须使用大括号。 23 【正确答案】 A 【试题解析】 本题考查指针和地址,题目中定义了一个指向变量 k的一个指针p,那么与题目中等效的表达式 A选项,即先定义一个指向整型的指针,然后指向k 的地址。 24 【正确答案】 B 【试题解析】 本题考查 for循环语句,题目中每执行完循环体后, i都会减 2,那么只有 50到 2之间的偶数才能输出 “*”,所以总共输出 25次。 25 【正确答案】 B 【试题解析】 重载运算符的规则如下: C+不允许用户自己定义新的运
14、算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。所以答案为 B。 26 【正确答案】 C 【试题解析】 所谓函数重载是指同一个函数名可以对应多个函数的实现。每种 实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为 C。 27 【正确答案】 B 【试题解析】 重载运
15、算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载 j C+不能重载的运算符只有 5个 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许 参数全部是 C+的标准类型。所以答案为 B。 28 【正确答案】 D 【试题解析】 本题考查函数的基础知识,函数可以没有返回值,没有参数,也可以是一个类的成员,函数可以定义为模板,即模板函数。 29 【正确答案】 C 【试题解析】 所谓函数重载是指同一个函数名可以对应多个函数的实现
16、。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为 C。 30 【正确答案】 A 【试题解析】 运算符重载为成员 函数时,会省略一个参数,如果无参数,表明是一元运算符。一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须有两个参数。 C+有 5个运算符不能重载,它们是: (成员访问运算符 )、 *(成员指针访问运算符 )、: (域运算符 )、 sizeof(长度运算符 )和 ?: (条件运算符 )。故本题答案为 A。 31 【正确答案】 C 【试题解析
17、】 函数参数的 3种传递方式: 将变量名作为形参和实参,即传值方式; 传递变量指针; 引用形参。本题中实参 x为传值方式,所以 x的值不会改变; y为引用形参,所以会改变。故本题答案为 C。 32 【正确答案】 B 【试题解析】 本题考查构造函数和复制构造函数,如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数,如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数。如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数。 33 【正确答案】 C 【试题解析】 只有类的非静态成员函数才隐含 this 指针,其作用域是类内部,当类的非静态成员函数中访问类的非静态成员
18、时,编译器会自动将对象本身的地址作为一 个隐含参数传递给函数,而不必一定写上 this。所以本题答案为 C。 34 【正确答案】 A 【试题解析】 类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。 35 【正确答案】 D 【试题解析】 本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,所以本题答案为 D。 36 【正确答案】 C 【试题解析】 派生类可以访问基类的保护成员,而不能访 问基类的私有成员。作为虚基类的类可以被实例化。虚函数如果没有派生类中重
19、新实现,那么仍然使用基类的成员函数。 37 【正确答案】 B 【试题解析】 本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,所以本题答案为 B。 38 【正确答案】 B 【试题解析】 本题考查类的析构函,题目中定义了类的一个对象 a,对象指针木b,对象数组 d2,当程序执行完后,析构函数执行了 3次,输出 “CCC”,对象指针不会执行析构函数。所以本题答案为 B。 39 【正确答案】 A 【试题解析】 本题考查静态数据成员。静态数据成
20、员在内存中只占一份空间,静态数据成员属于类,即使不定义对象,也会给静态数据成员分配空间,可以被引用。本题中先是定义了一个对象 obj,执行构造函数使得静态数据成员 count变为了 1,然后又定义了指针对象,执行构造函数后, count变为了 2,释放指针后,执行析构函数,使得 count变为了 1。所以本题答案为 A。 40 【正确答案】 C 【试题解析】 本题考查常对象、常成员函数及构造函数。常对象只能调用常成员函数,普通对象调用普通成员函数。所以本题中 obj1 为常对象,执行 objl print()后,会执行常构造函数,输出 const: val: 10;而 obj2为普通对象,执行obj2 print()时,会执行默认构造函数,输出 val=20。故答案为 C。