您的位置:首页 > 编程语言 > C语言/C++

C++等级考试第一套题遇到的问题

2014-03-23 14:24 253 查看
1.程序流程图中带有箭头的线段表示的是( C )。

A) 图元关系

B) 数据流

C) 控制流

D) 调用关系



解析:程序流程图描述 的是控制流的情况,有向线段表示控制流从一个处理走到下一个处理.

图元关系:图元指的是绘图界面的实体,包括点、线、面等(entity)

数据流:出现于数据流程图,主要用于详细设计。

调用关系:





5.算法的有穷性是指(A  )。

A) 算法程序的运行时间是有限的

B) 算法程序所处理的数据量是有限的

C) 算法程序的长度是有限的

D) 算法只能被有限的用户使用



有穷性是时间的有限



6.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是( D )。

A) 快速排序

B) 冒泡排序

C) 直接插入排序

D) 堆排序

快速排序:快速排序是对冒泡排序的一种改进.基本思想是:通过一趟排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后在按此方法进行快速排序,整个排序过程可以递归进行,一次达到真个数据变成有序序列.

冒泡排序:相邻的两个数字比较,然后交换位置

直接插入排序:

每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程.我的理解就是每次拿出一个数字来放到新的表中.
堆排法:利用堆积树这种数据结构所设计的一种 排序算法,利用数组的特点快速定位指定索引的元素.



7.下列关于栈的叙述正确的是( B )。

A) 栈按"先进先出"组织数据

B) 栈按"先进后出"组织数据

C) 只能在栈底插入数据

D) 不能删除数据



栈:只允许在表的一端插入和删除的线性表,允许插入和删除的一端成为栈顶,栈是后进先出的线性表

堆:动态存储区即堆区。



8.在数据库设计中,将E-R图转换成关系数据模型的过程属于( C )。

A) 需求分析阶段

B) 概念设计阶段

C) 逻辑设计阶段

D) 物理设计阶段



需求分析阶段:这一阶段是面向客户的,在这一阶段确定做什么,达到什么效果!是对客户的业务环境进行分析,确定在业务环境下系统要做什么。

概念设计阶段:软件开发的具体功能的确定,由粗到精,由模糊到清晰,抽象到具体的过程。

逻辑设计阶段:将概念模型转换为具体的数据库系统支持的数据模型。将ER图向关系模式转化。



10.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,***号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为( C )。

A) 课号,成绩

B) 学号,成绩

C) 学号,课号

D) 学号,姓名,成绩



学号是学生表的主键,课号是课程表的主键,选课表的关键字就应该是与前两个表直接联系且唯一定义的学号和课号!



11.下列语句中,错误的是(B)。

A) const int buffer=256;

B) const int temp;

C) const double *point;

D) const double *rt=new double(5.5);

const限定变量 不允许被改变,temp是全局变量,作用域为文件域,所以是一定会被改变的,所以const修饰是错误的。

*point中的“*point”是指针变量

12.有如下程序:

int x=3;

do {

x-=2;

cout<<x;

} while(!(--x));

执行这个程序的输出结果是(C)。

A) 1

B) 3 0

C) 1-2

D) 死循环



a=1 x=a-- x=1

a=1 x=--a x=0

所以过程为X=1输出——判断为真,输出X=0——X-2=-2——输出——循环判断,X为真,非后为假,不在循环,循环结束 所以输出结果为1-2



13.有如下程序:

#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”为指针变量,指针变量赋值有三种情况:将变量地址赋给指针变量;将一个指针变量的地址赋给另一个指针变量;给指针变量赋控制,表示指针变量不指向任何地方。但是不能把常量赋值给指针变量。



14.if语句的语法格式可描述为:

格式1:if(<条件>)<语句>



格式2:if(<条件>)<语句1>

else <语句2>

关于上面的语法格式,下列表述中错误的是(A)。

A) <条件>部分可以是一个if语句,例如if(if(a==0) …) …

B) <语句>部分可以是一个if语句,例如if(…) if(…) …

C) 如果在<条件>前加上逻辑非运算符!并交换 <语句1> 和<语句2> 的位置,语句功能不变

D) <语句>部分可以是一个循环语句,例如if(…) while(…) …

if条件中的语句部分不能嵌套



15.下列符号中,正确的C++标识符是(D)。

A) enum

B) 2b

C) foo-9

D) _32

注:c++命名规则:

所有的标识符可以由字母数字和下划线组成,且以字母和下划线开头

C++的关键字不能是标识符

大小写字母表示不同的意义,即代表不同的标识符



18.下列有关内联函数的叙述中,正确的是(C)。

A) 内联函数在调用时发生控制转移

B) 内联函数必须通过关键字inline来定义

C) 内联函数是通过编译器来实现的

D) 内联函数函数体的最后一条语句必须是return语句



一般函数调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中,即发生控制转移;而内联函数调用时,试讲调用表达式用内联函数体来替换,所以在调用是不发生控制转移。在类内部实现的函数都是内联函数,可以不用inline定义,只有函数外部定义的内联函数才必须加关键字inline。编译系统并非对内联函数使用内联,而是视情况而定,内联函数不是必须有返回值的。



19.下列运算符不能重载为友元函数的是(A)。

A) = () () ->

B) + - ++ --

C) > < >= <=

D) += -= *= /=



关于运算符重载为友元函数有如下规定:

一般情况下,单目运算符最好重载为类的成员函数,双目运算符最好重载为类的友元函数

双目运算符“=、()、[]、->”不能重载为类的友元函数



20.有如下程序:

#include<iostream>

using namespace std;

int main()

{

void function(doubleval);

double val;

function(val);

cout<<val;

return 0;

}

void function(doubleval)

{

val = 3;

}

编译运行这个程序将出现的情况是(D)。

A) 编译出错,无法运行

B) 输出:3

C) 输出:3.0

D) 输出一个不确定的数

函数调用及传值方式传递参数,执行函数function时,并没有将3的值传回来,而val又没有初始化,所以输出的是一个不确定的数



21.下面是重载为非成员函数的运算符的函数原型,其中错误的是(C)。

A) Fraction operator+(Fraction, Fraction);

B) Fraction operator-(Fraction);

C) Fraction& operator= (Fraction&,Fraction);

D) Fraction& operator+= (Fraction&,Fraction);



正确原型为:Fractionoperator=(Fraction &)



22.有如下类定义:

class MyClass

{

public:



private:

int data;

};

若要为MyClass类重载流输入运算符">>",使得程序中可以"cin>> obj;"的形式改变MyClass类的对象obj中数据成员data的值,则横线处的声明语句应为(A)。

A) friend istream& operator >>(istream& is, MyClass& a);

B) friend istream& operator >>(istream& is, MyClass a);

C) istream& operator >> (istream&is, MyClass& a);

D) istream& operator >> (istream&is, MyClass a);



23.由于常对象不能被更新,因此(A)。

A) 通过常对象只能调用它的常成员函数

B) 通过常对象只能调用静态成员函数

C) 常对象的成员都是常成员

D) 通过常对象可以调用任何不改变对象值的成员函数

常对象只能调用它的常成员函数,而不能调用非const函数,常对象的成员函数不一定是常成员函数,只需保证其数据成员是常数据成员即可





24.如下类定义:

class AA

{

int a;

public:

int getRef()const {return &a; } //①

int getValue()const {return a; } //②

void set(int n)const {a=n; } //③

friend void show(AAaa)const { cout<<a; } //④

};

其中四个函数的定义中正确的是(B)。

A) ①

B) ②

C) ③

D) ④



常成员函数只能引用本类中的数据成员,而不能修改它.



25.下列关于this指针的描述中,正确的是()。

A) 类的成员函数都有this指针

B) 类的友元函数都有this指针

C) 任何与类相关的函数都有this指针

D) 类的非静态成员函数都有this指针



this作用域是在类内部,当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数.另外,全局函数和静态函数都不能使用this指针.





26.下列关于虚函数的说明中,正确的是()。

A) 从虚基类继承的函数都是虚函数

B) 虚函数不得是静态成员函数

C) 只能通过指针或引用调用虚函数

D) 抽象类中的成员函数都是虚函数



在某基类中声明为virtual并在一个或多个派生类汇总被重新定义的成员函数,虚函数必须为非静态成员函数,起访问权限可以是protected或public.如果一个类中含有纯虚函数,称此类为抽象类.





27.下列关于基类和派生类关系的叙述中,正确的是(D)。

A) 每个类最多只能有一个直接基类

B) 派生类中的成员可以访问基类中的任何成员

C) 基类的构造函数必须在派生类的构造函数体中调用

D) 派生类除了继承基类的成员,还可以定义新的成员



派生类可以有多个直接基类,而派生类有三种继承方式,在私有继承中,派生类的成员不能访问基类的成员.如果基类中定义了缺省构造函数或根本没有定义任何一个构造函数时,在派生类构造函数的定义中可以省略对基类构造函数的调用.



29.有如下类定义:

class Foo

{

public:

Foo(int v) : value(v) {}   // ①

~Foo() { }   // ②

private:

Foo() { }    // ③

int value = 0;    // ④

};

其中存在语法错误的行是(D)。

A) ①

B) ②

C) ③

D) ④



类的数据成员是不能再声明类时初始化的.



30.有如下类定义:

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],共执行了四次构造函数,对象指针不调用构造函数



31.有如下类定义:

class Test

{

public:

Test() { a = 0; c = 0;}    // ①

int f(int a) const {this->a = a; }   // ②

static int g() { returna; }    // ③

void h(int b) { Test::b =b; };   // ④

private:

int a;

static int b;

const int c;

};

int Test::b = 0;

在标注号码的行中,能被正确编译的是(D)。

A) ①

B) ②

C) ③

D) ④



只能通过构造函数的参数初始化列表对常数据成员进行初始化,1中通过默认构造函数初始化,所以不正确。常成员函数只能引用本类中的数据成员,而不能修改它(const不允许改变函数)。静态成员函数没有this指针,不能访问本类中的非静态成员



32.有如下类声明:

class SAMPLE

{

int n;

public:

SAMPLE(int i=0):n(i) { }

void setValue(int n0);

};

下列关于getValue成员函数的定义中,正确的是(B)。

A) SAMPLE::setValue(int n0) { n=n0; }

B) void SAMPLE::setValue(int n0) { n=n0; }

C) void setValue(int n0) { n=n0; }

D) setValue(int n0) { n=n0; }



在类外定义类的成员函数需要使用作用域限定符“::”



34.有如下程序:

#include <iostream>

using namespace std;

class Base

{

private:

void fun1() const {cout<<"fun1"; }

protected:

void fun2() const {cout<<"fun2"; }

public:

void fun3() const {cout<<"fun3"; }

};

class Derived : protectedBase

{

public:

void fun4() const {cout<<"fun4"; }

};

int main()

{

Derived obj;

obj.fun1(); // ①

obj.fun2(); // ②

obj.fun3(); // ③

obj.fun4(); // ④

return 0;

}

其中有语法错误的语句是(B)。

A) ①②③④

B) ①②③

C) ②③④

D) ①④



保护继承中派生类对基类的访问属性,受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,保护基类的所有成员在派生类中都被保护起来,在类外不能访问,所以①②③错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: