国家二级(C++)机试模拟试卷256
选择题
1.下面关于数据库三级模式结构的叙述中,正确的是( )。(B)
A. 内模式可以有多个,外模式和模式只有一个
B. 外模式可以有多个,内模式和模式只有一个
C. 内模式只有一个,模式和外模式可以有多个
D. 模式只有一个,外模式和内模式可以有多个
解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。
2.将\\(C)
A. x.rational+(rational*(y,z))
B. x.const+(const*(y,z))
C. x.operator+(operator*(y,z))
D. x.temp+(temp*(y,z))
解析:运算符重载为成员函数的形式:“函数类型operator运算符(形参表){函数体;}”;运算符重载为友元函数的形式:“friend函数类型operator运算符(形参表){函数体;}”。一般来讲,单目运算符最好重载为成员函数,双目运算符最好重载为友元函数。运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即“y.operator*(z)”或者“operator*(y,z)”;另一种是通过运算符构成表达式,即“y*z”。
3.有如下程序:
#include<iostream>
using namespace std;
int main()
{
int.p;
*p=9;
cout<<”The value at p:”<<*p;
return 0;
编译运行程序将出现的情况是( )。(D)
A. 编译时出现语法错误,不能生成可执行文件
B. 运行时一定输出:The value at p:9
C. 运行时一定输出:The value at p:*9
D. 运行时有可能出错
解析:先定义指针变量,然后给指针变量赋初值有三种情况:①用取地址运算符“&”将变量地址赋给指针变量,如p=&a;②将一个指针变量中的地址赋给另一个指针变量,如p=p1;③给指针变量赋空值0,如q=0,表示该指针变量不指向任何变量。而不能用一个常量给指针变量赋初值,所以本题选D。
4.有如下类定义:
class Point
{
int XX,YY;
public:
Point():xx(0),yy(0){}
Point(int X,int y=0):xx(x),yy(y){}
};
若执行语句
Point a(2),b[3],*c[4];
则Point类的构造函数被调用的次数是( )。(C)
A. 2次
B. 3次
C. 4次
D. 5次
解析:本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a(2)以及对象数组b[3],共执行4次构造函数,对象指针不调用构造函数。所以本题答案为C。
5.有如下程序:
#include
using namespace std;
class TestClass
{
int n;
public:
TestClass(int k):n(k){}
int get(){return n;}
int get()const{return n+1;}
};
int main()
{
TestClass p(5);
const TestClass q(6);
cout<<p.get()<<q.get();
return 0:
}
执行后的输出结果是( )。(B)
A. 55
B. 57
C. 75
D. 77
解析:C++中对常对象的成员函数调用,将自动调用其常成员函数,程序中调用原型为\\
6.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是( )。(C)
A. 10
B. 8
C. 6
D. 4
解析:根据二叉树的基本性质3:在任意一颗二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中是5+1=6个。
7.下列运算符中不能在C++中重载的是( )。(A )
A. ?:
B. +
C. 一
D. <=
解析:此题考查的是运算符的有关概念。运算符重载是针对C++原有运算符进行的,不能通过重载创造新的运算符;除了.、.*、->*、::、?:这五个运算符之外,其他运算符都可以重载。
8.如果表达式一X/y中的“一”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为( )。(B)
A. operator/(x.operato一(),y);
B. operator/(operator一(x),y);
C. x.operator一().operator/(y);
D. y.operator/(operator一(x));
解析:运算符重载实际上时函数的重载。重载运算符的一般格式:函数类型operator运算符名称(参数表)。重载运算符之后:函数operatot+重载运算符“+”。“一”重载为“operator一”,“/”重载为“operator/”。另外重载不能改变运算的优先级,一x/y计算一x后,除以y,所以表达式改写为:operator/(operator一(x),y):。
9.有如下定义:
int a[5]={1,3,5,7,9},*p=a;
下列表达式中不能得到数值5的是( )。(B)
A. a[2]
B. a[3]
C. *(p+2)
D. *p+4
解析:本题考查指向数组的指针,本题中指针变量p指向数组a,直接使用数组下标即可取值,数组下标是从0开始标号的,所以a[2]能取到5,而a[3]取不到5,C选项中使用指针后移方法能够取到5,D选项中*p为1,所以*p+4为5。
10.有如下类声明:
class MyBASE
{int k;
public:
void set(int n){k=n;)
int get()const{retum k;}
};
class MyDERIVED:protected MyBASE
{protected:
intj;
public:
void set(int m,int n){MyBASE::set(m);j=n;}
int getoconst{return MyBASE::get(
本文档预览:3600字符,共17901字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载