国家二级(C++)机试模拟试卷295
选择题
1.在下面的类定义中,横线处应填入的内容是( )。
class Fred
{
public:
void print(){cout<<data<<endl;)
void setData(double d) {data=d;}
static int count;
private:
double data;
};
count=0; //静态数据成员的定义(C)
A. int
B. static int
C. int Fred::
D. static int Fred::
解析:此题考查的是静态数据成员的定义。题目中count数据成员要定义成静态的,其初始化的格式为:类型类名::静态数据成员=常量。
2.对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是( )。(A )
A. 冒泡排序为n(n-1)/2
B. 简单插入排序为n
C. 希尔排序为n
D. 快速排序为n/2
解析:在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2:简单插入排序所需要的比较次数为n(n-1)/2;希尔排序所需要的比较次数为0(n1.5);堆排序所需要的比较次数为0(nlog2n)。
3.以下关键字不能用来声明类的访问权限的是( )。(B)
A. public
B. static
C. protected
D. private
解析:类的成员访问权限有3种:public(公用)、protected(保护)、private(私有)。
4.若整型变量a和b中的值分别为7和9,要求按以下格式输出a和b的值:
a=7
b=9
则输出的语句“printf(\\(C)
A. a=%c\nb=%c\n
B. a=%d/nb=%d/n
C. a=%d\nb=%d\n
D. a=%a\nb=%b\n
解析:本题考查两个知识点:标准输出函数的格式与转义字符。\n为转义字符,其意义为换行,%d代表以整型的格式输出相应位置变量的值。其他字符按原样输出。
5.有如下程序:
#include
using namespaee std;
elass Base{
protected:
Base(){cout<<’A’;}
Base(char c){cout<<c;}
};
class Derived:public Base{
public:
Derived(char c){cout<<c;}
};
int main(){
Derived dl(’B’);
return 0;
}
执行这个程序的输出结果是( )。(C)
A. B
B. BA
C. AB
D. BB
解析:本题考查派生类的构造函数和析构菌数,在定义二不派笙类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数;对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个派生类对象d1,首先执行基类的构造函数,输出A;然后执行派生类的构造函数,输出B。所以答案为C。
6.下列关于抽象类的表述中正确的是( )。(C)
A. 派生类必须要实现作为基类的抽象类中的纯虚函数
B. 抽象类的成员函数至少有一个没实现
C. 抽象类不可能用来定义对象
D. 派生类不能成为抽象类
解析:C++中拥有纯虚函数的类称为抽象类。抽象类不能用来定义对象。如果一个抽象类的派生类没有重定义来自基类的某个纯虚函数,则该函数在派生类中仍是纯虚函数,该类仍为抽象类。
7.下列叙述中正确的是( )。(D)
A. 栈是“先进先出”的线性表
B. 队列是“先进后出”的线性表
C. 循环队列是非线性结构
D. 有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
解析:栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。
8.对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含关系R中的所有元组,这样的集合运算称为( )。(A)
A. 并运算
B. 交运算
C. 差运算
D. 除运算
解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。
9.有如下程序:
#include<iostream>
using namespace std;
class A{
public:
static int a;
void init() {a=1;}
A(int a=2){init();a++;}
};
int A∷a=0:
A obj;
int main()
{
cout<<obj.a:
return 0;
}
运行时输出的结果是( )。(B)
A. 0
B. 1
C. 2
D. 3
解析:本题考查构造函数,本题中对类中的a数据成员先是赋值为0,当定义了对象obj时,执行构造函数,将a的值变为了1,所以输出1。
10.以下程序运行后的输出结果是( )。
#include
void main()
{
char a[]=“abbcabbcabbc”;
int i=0,j=0,k=0;
while(a[i])
{
if(a[i]=’a’)
j++;
if(a[i]==’b’)
k++:
i++:
}
cout<<j<<\\(D)
A. 2,6
B. 3,5
C. 4,7
D. 3,6
解析:程序中首先定义字符数组a,然后在while循环中统计字符a和b的个数。其中j记录a的个数,k记录b的个数。第一个if语句是当第i个字符为a时,j加1;第二个if语句是当第i个字符为b
本文档预览:3600字符,共17982字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载