一、单选题
1.以下叙述正确的是( C )
A.在C++程序中,main函数必须位于程序的最前面
B.C++程序的每行中只能写一条语句
C.C++语言本身没有输入输出语句
D.在对一个C++程序进行编译的过程中,可发现注释中的拼写错误
2.有关函数重载的正确说法是( B )
A.函数名不同,但参数的个数和类型相同
B.函数名相同,但参数的个数不同或参数的类型不同
C.函数名相同,参数的个数和类型相同
D.函数名相同,函数的返回值不同,而与函数的参数和类型无关
3.已知int a[3][2]={3,2,1}; 则表达式“a[0][0]/a[0][1]/a[0][2]”的值是( B )
A.0.166667
B.1
C.0
D.错误的表达式。
4.若用数组名作为函数调用时的实参,则实际上传递给形参的是( A )
A.数组首地址
B.数组的第一个元素值
C.数组中全部元素的值
D.数组元素的个数
5.下面函数的功能是( B )
void fun(char *s1, char *s2) { while(*s2++ = *s1++); }
A.字符串比较
B.字符串复制
C.字符串连接
D.字符串反向
6.下面关于虚函数和函数重载的叙述中,不正确的是( A )
A.虚函数不是类的成员函数
B.虚函数实现了C++的多态性
C.函数重载允许非成员函数,而虚函数则不行
D.函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定
7.要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为( D )
A.const char *p="ABCD";
B.char const *p="ABCD";
C.char *const p="ABCD";
D.const char * const p="ABCD";
8.以下不合法的用户标识符是( C )
A.f2_G3
B.IF
C.4d
D._8
9.C语言中,double型数据所占字节数是( D )
A.2
B.4
C.6
D.8
10.关于类和对象不正确的说法是( C )
A.类是一种类型,它封装了数据和操作
B.对象是类的实例
C.一个类的对象只有一个
D.一个对象必属于某个类
11.在类定义的外部,可以被访问的成员有( C )
A.所有类成员
B.private或protected的类成员
C.public的类成员
D.public或private的类成员
12.关于this指针的说法错误的是( A )
A.this指针必须显示说明
B.当创建一个对象后,this指针就指向该对象
C.成员函数拥有this指针
D.静态成员函数不拥有this指针
13.对静态成员的不正确描述是( C )
A.静态成员不属于对象,是类的共享成员
B.静态数据成员要在类外定义和初始化
C.调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D.非静态成员函数也可以操作静态数据成员
14.在创建派生类对象时,构造函数的执行顺序是( D )
A.对象成员构造函数、基类构造函数、派生类本身的构造函数
B.派生类本身的构造函数、基类构造函数、对象成员构造函数
C.基类构造函数、派生类本身的构造函数、对象成员构造函数
D.基类构造函数、对象成员构造函数、派生类本身的构造函数
15.字符串:”\\\\0211\\”xab” 的长度为( B )
A.1
B.9
C.0
D. 11
16.以下叙述中错误的是( C )
A.局部变量的定义可以在函数体内部
B.全局变量的定义可以在函数以外的任何位置
C.同一程序中,全局变量和局部变量不能同名
D.函数的形参属于局部变量
17.下面对构造函数的不正确描述是( B )
A.系统可以提供默认的构造函数
B.构造函数可以有参数,所以可以有返回值
C.构造函数可以重载
D.构造函数可以设置默认参数
18.下面对析构函数的正确描述是( C )
A.系统不能提供默认的析构函数
B.析构函数必须由用户定义
C.析构函数没有参数
D.析构函数可以设置默认参数
19.对静态成员的不正确描述是( C )
A.静态成员不属于对象,是类的共享成员
B.静态数据成员要在类外定义和初始化
C.调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D.非静态成员函数也可以操作静态数据成员
20.下面对友元的错误描述是( D )
A.关键字friend用于声明友元
B.一个类的成员函数可以是另一个类的友元
C.友元函数访问对象的成员不受访问特性影响
D.友元函数通过this指针访问对象成员
21.下列关于类的继承描述中,错误的是( A )
A.派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
B.派生类也是基类,但基类不一定具有派生类的全部属性和方法
C.继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
D.一个基类可以有多个派生类,一个派生类可以有多个基类
22.当一个派生类私有继承一个基类时,基类中的所有仅有成员和保护成员成为派生类的( B )
A.public成员
B.private成员
C.protected成员
D.友元
23.不论派生类以何种方法继承基类,都不能使用基类的( B )
A.public成员
B.private成员
C.protected成员
D.public成员和protected成员
24.在C++中,要实现动态联编,必须使用( D )调用虚函数
A.类名
B.派生类指针
C.对象名
D.基类指针
25.下列运算符中( A )运算符在C++中不能重载。
A.? :
B.[ ]
C.new
D.&&
26.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( B )
A.不同
B.相同
C.相容
D.部分相同
27.下面函数原型声明中,( B )声明了fun为纯虚函数
A.void fun()=0;
B.virtual void fun()=0;
C.virtual void fun();
D.virtual void fun(){};
28.在排序方法中,关键码比较次数与记录地初始排列无关的是( D )
A.Shell排序
B.归并排序
C.直接插入排序
D.选择排序
29.代码如下中,变量val的内存地址位于( B )
void func() {
static int val;
…
}
A.已初始化数据段
B.未初始化数据段
C.堆
D.栈
30.同一进程下的线程可以共享以下( B )
A.stack
B.data section
C.register set
D.thread ID
31.short a[100],sizeof(a)返回值是( D )
A.2
B.4
C.100
D.200
E.400
32.一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是( C )
A.EDCBA;
B.DECBA;
C.DCEAB;
D.ABCDE
33.友元运算符obj>obj2被C++编译器解释为( A )。
A. operator>(obj1,obj2)
B. >(obj1,obj2)
C. obj2.operator>(obj1)
D. obj1.oprator>(obj2)
34.在一个类中可以对一个操作符进行( D )重载。
A.1种
B.2种以下
C.3种以下
D.多种
35.下列关于C++运算符函数的返回类型的描述中,错误的是( C )。
A.可以是类类型
B.可以是int类型
C.可以是void类型
D.可以是float类型
二、多选题
36.下面描述中,错误的是( BC )
A.在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问
B.在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问
C.在基类定义的public和protected成员在保护继承的派生类中不可见
D.在派生类中不可见的成员要变成可访问的,需要进行访问声明
37.在C++中,不能被派生类继承的函数是( BC )
A.成员函数
B.构造函数
C.析构函数
D.静态成员函数
38.当不同的类具有相同的间接基类时,有特点( AD )
A.各派生类对象将按继承路线产生自己的基类版本
B.派生类对象无法产生自己的基类版本
C.为了建立惟一的间接基类版本,在基类定义前加virtual即可
D.为了建立惟一的间接基类版本,应该声明虚继承
39.下列函数中,可以作为虚函数的是( CD )
A.普通函数
B.构造函数
C.成员函数
D.析构函数
40.下面描述中,正确的是( BD )
A.虚函数是没有实现的函数
B.纯虚函数的实现在派生类中
C.抽象类是没有纯虚函数的类
D.抽象类指针可以指向不同的派生类
41.下列的模板说明中,正确提( AD )
A.template B.template C.template D.template 42.假设有函数模板定义如下: Template Max(T a, T b, T &c) { c=a+b; } 下列选项正确的是( AD ) A.float x,y; float z; Max(x,y,z); B.int x,y,z; Max(x,y,z); C.int x,y; float z; Max(x,y,z); D.float x; int y, z; Max(x,y,z); 43.以下多线程对int型变量x的操作,哪几个需要进行同步( ABC ) A.x=y; B.x++; C.++x; D.x=1; 44.TCP和IP分别对应了 OSI中的哪几层 ( EG ) A.Application layer B.Data link layer C.Presentation layer D.Physical layer E.Transport layer F.Session layer G.Network layer 全国计算机等级考试二级C++样题 公共基础知识 一、选择题 (1)下列关于栈的叙述正确的是 A)栈是非线性结构 B)栈是一种树状结构 C)栈具有先进先出的特征 D)栈具有后进先出的特征 (2)结构化程序设计所规定的三种基本控制结构是 A)输入、处理、输出 B)树形、网形、环形 C)顺序、选择、循环 D)主程序、子程序、函数 (3)结构化程序设计的一种基本方法是 A)筛选法 B)递归法 C)归纳法 D)逐步求精法 (4)如果对一个关系实施了一种关系运算后得到了一个新的关系,而且新的关系中属性个数少于原来关系中属性个数,这说明所实施的运算关系是:A)选择 B)投影 C)连接 D)并 二、填空题 1.对于输入为N个数进行快速排序算法的平均时间复杂度是( ) 2.在面向对象方法学中,直接反映了用户对目标系统的要求的模型是( ) 3.软件测试方法中,黑盒测试个白盒测试法是常用的方法,其中黑盒测试法主要是用于测试( ) 4.关系型数据库管理系统中存储与管理数据的基本形式是( ) C++语言程序设计 一、选择题 (1)C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是() A)面向过程 B)面向对象 C)安全性 D)复用性 (2)C++语言的跳转语句中,对于break和continue说法正确的是() A)break语句只应用与循环体中 B)continue语句只应用与循环体中 C)break是无条件跳转语句,continue不是 D)break和continue的跳转范围不够明确,容易产生问题 (3)for(int x=0,y=o;!x& &y<=5;y++)语句执行循环的次数是() A)0 B)5 C)6 D)无次数 (4)考虑函数原型void test(int a,int b=7,char="*"),下面的函数调用中,属于不合法调用的是() A)test(5); B)test(5,8); C)test(6,"#") D)test(0,0."*"); (5)下面有关重载函数的说法中正确的是() A)重载函数必须具有不同的返回值类型; B)重载函数形参个数必须不同; C)重载函数必须有不同的形参列表 D)重载函数名可以不同; (6)下列关于构造函数的描述中,错误的是() A)构造函数可以设置默认参数; B)构造函数在定义类对象时自动执行 C)构造函数可以是内联函数; D)构造函数不可以重载 (7)下面描述中,表达错误的是() A)公有继承时基类中的public成员在派生类中仍是public的 B)公有继承是基类中的private成员在派生类中仍是private的 C)公有继承时基类中的protected成员在派生类中仍是protected的 D)私有继承时基类中的public成员在派生类中是private的 (8)应在下列程序划线处填入的正确语句是() #include class Base { public: void fun(){cout<<"Base::fun"< }; class Derived:public Base { void fun() {_____________ //显示调用基类的函数fun() cout<<"Derived::fun"< } }; A)fun(); B)Base.fun(); C)Base::fun(); D) Base->fun(); (9)有如下程序: #include class BASE{ char c; public: BASE(char n):c(n){} virtual~BASE(){cout< }; class DERIVED:public BASE{ char c; public: DERIVED(char n):BASE(n+1),c(n){} ~DERIVED(){cout< }; int main() { DERIVED("X"); return 0; } 执行上面的程序将输出() A)XY B)YX C)X D)Y (10)在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是() A)fail B)eof C)bad D)good 二、填空题 (1)下面程序的打印结果是 [1] #incude int f(int); int main() { int i; for(i=0;i<5;i++) cout< return0; } int f(int i) { static int k=1; for(;i>0;i- -) k + = i; return k; } (2)在用class定义一个类时,数据成员和成员函数的默认访问权限是 [2] (3)含有纯虚函数的类称为 [3] (4)已知intDBL(int n){return n + n;}和longDBL(long n){return n +n;}是一个函数模板的两个实例,则该函数模板的定义是 [4] (5)在下面程序的横线处填上适当的语句,使该程序执行结果为10. #include class MyClass { public: MyClass(int a){x = a;} [5] //取x值 private int x; }; int main() { MyClass my(10); cout< return 0; } 三、上机操作题(改错题1道,简单应用1道,综合应用1道) 1.使用VC6打开考生文件夹下的工程proj1,此工程包含一个源程序文件main.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果为: member=0 member=5 menber=10 源程序文件main.cpp清单如下: #include class MyClass { public: MyClass(int i){member=i;} void SetMember(int m){member=m;} int GetMember()const{return menber;} void print()cont{cout<<"member="< private: int member; }; voed main() { /* * * * * * * * * * found * * * * * * * * * */ MyClass obj1; obj1.print(); MyClass obj2(3); /* * * * * * * * * * found * * * * * * * * * */ obj1.member=5; /* * * * * * * * * * found * * * * * * * * * */ MyClass.SetMember(10); obj1.print(); obj2.print(); } 2.请编写一个函数int find(char s[],char t[]),该函数在字符串s中查找字符串t,如果找到,则返回字符串t在字符串s中的位置(整数值);否则返回-1.注意:用数组方式及两重循环来实现该函数. 注意:部分源文件程序已存在文件PROC2,CPP中. 请勿修改主函数main和其他函数中的任何内容,仅在函数find的花括号中填写若干语句. 文件PROC2.CPP的内容如下: #include int find(char s[],char t[]); const int MAXLINE =256; int main() { char source[MAXLINE],rarget[MAXLINE]; cout <<"Please input a string for searching:\\n"; cin.getline(source,MAXLINE); cout<<"Please input a string you want to find:\\n"; cin.getline(target,MAXLINE); int intpos = find(source,target); if(intpos>=0 cout<<"Finding it.The target string is at index" < else cout<<"Not finding it.\\n"; return 0; } int find(char s[],char t[]) { } 3.使用VC6打开考生文件夹下的工程proj3.此工程包含一个源程序文件main.cpp.其中定义了用于表示日期的类Date,但类Date的定义并不完整.请按要求完成下列操作,将类Date的定义补充完整: (1)定义私有数据成员year,month和day分别用于表示年,月,日,它们都是int型的数据.请在注释"// * * 2 * *"之后添加适当的语句. (2)完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1,请在注释"// * * 2 * *"之后添加适当的语句. (3)完成重载构造函数Date(int y,int m,int d)的定义,把数据成员year,month和day分别初始化为参数y,m,d的值,请在注释"//* * 3 * *"之后添加适当的语句. (4)完成成员函数print的类外定义,使其以"年-月-日"的格式将Date对象的值输出到屏幕上.请在注释"//* * 4 * *"之后添加适当的语句. 注意:除在指定位置添加语句之外,请不要改动程序中的其他内源程序文件main.cpp清单如下: //main.cpp #include class Date{ public: //* * 2 * * Date(int y,int m,int d) { //* * 3 * * } void print() const; private: // date members //* * 1 * * }; void Date::print()const { //* * 4 * * } int main() { Date national_day(1949,10,1); national_day.print(); return 0; } ---------------------------------------------------- 参: 公共基础知识: 一:选择题: (1) D (2) C (3) D (4) B 二:填空题: (1)[1]:O(Nlog2N) (2)[2]:功能模型 (3)[3]:软件外部功能 (4)[4]:二维表 C++程序设计 一:选择题 1-5 :B B C C C 6-10:D B C A B 二:填空题 (1)[1]:1 2 5 11 21 (2)[2]:private 或 私有 (3)[3]:抽象类 (4)[4]:templateT DBL(T n){return n+n;} (5)[5]:int GetNum(){return x;} 或 int GetNum() const{return x;} 2.是问<>和""的区别吧? #include #include “filename.h” 引用非标准库的头文件(从用户工作目录开始搜索) 3.const的用途是定义常量(包括一般常量、函数的参数等),另外一个是在函数的定义后 面写上const,用来保护函数内用到的变量不会随意改变