《C++程序设计》
考试样卷
学校: 学号: 姓名:
一、 单项选择题(30分,共15题,每小题2分)
1.C++对C语言作了很多改进,从面向过程变成为面向对象的主要原因为____。
A) 增加了一些新的运算符 B) 允许函数重载,并允许设置缺省参数
C) 规定函数说明符必须用原型 D) 引进了类和对象的概念
2. 以下说法中,错误的是 。
A) 函数的形式参数类型若与实际参数不一致,则以实际参数类型为准.
B) 函数的形式参数在函数被调用时系统才为其分配存储空间.
C) 函数的嵌套调用就是直接或间接地调用函数本身.
D) 在函数定义时若没有指出函数的数据类型, 则默认函数的返回值是void.
3.已知:int m=10; 下列表示引用的方法中,正确的是____。
A) int& x=m; B) float& t=&m; C) int& z; D) float& t=m;
4. 下列析构函数的特征是____。
A) 一个类中只能定义一个析构函数
B) 析构函数名与类名无关
C) 析构函数的定义只能在类体内
D) 析构函数可以有一个或多个参数
5. sizeof(double) 是 。
A) 一个不合法的表示形式 B) 一种函数的调用
C) 一个整型表达式 D) 一个双精度浮点表达式
6. 若条件表达式(exp)? a++: b--, 则以下表达式中能完全等价于表达式(exp)的是 。
A) (exp==0) B) (exp!=1)
C) (exp==1) D) (exp!=0)
7. 若定义char t[10]; 则在下面表达式中不表示t[1]的地址的是 。
A) t+1 B) t++ C) &t[0]+1 D) &t[1]
8.一个函数功能不太复杂,但要求被频繁调用,选用____。
A) 内联函数 B) 重载函数 C) 递归函数 D) 嵌套函数
9. 下面程序段的运行结果是 。
char str[] = "ABC", *q =str;
cout<<*(q+3);
A) 67 B) 字符 'C' C) 字符 'C'的地址 D) 0
10.在C++中,关于下列设置参数默认值的描述中,正确的是____。
A) 程序中有函数重载,就不能设置参数默认值
B) 设置参数默认值,只能在函数定义时进行
C) 设置参数默认值时,应该是先设置右边的再设置左边的
D) 设置参数默认值时,应该全部参数都设置
11.下列标识符中,具有文件作用域的是____。
A) 函数参数 B) 语句标号 C) 静态全局变量 D) 局部变量
12.下列不能作为类的成员的是____。
A) 自身类对象的指针 B) 自身类对象
C) 自身类对象的引用 D) 另一个类的对象
13.下列析构函数的特征是____。
A) 一个类中只能定义一个析构函数
B) 析构函数名与类名无关
C) 析构函数的定义只能在类体内
D) 析构函数可以有一个或多个参数
14.关于成员函数的特征描述中,错误的是____。
A) 成员函数一定是内联函数 B) 成员函数可以重载
C) 成员函数可以设置参数默认值 D) 成员函数可以是静态的
15.已知:int a, *pa=&a; 输出指针pa值的十进制表示的方法是____黄豆芽。
A) cout<<pa; B) cout<<*pa;
C) cout<<&pa; D) cout<<long(pa);
二、是非判断题(10分,共10题,每小题1分)(请在题号上打√或X)
□ 1. C++中使用注释符(//),不能使用注释符(/*…*/)。
□ 2. C++中定义常量,不能用宏定义的方法,只能用const。
□ 3. C++是一种编译型的高级语言。
□ 4. 错误信息可能会出现在编译过程中,不会出现在链接过程中。
□ 5. C++提供的库函数都被定义在它所对应的头文件中。
□ 6. C++中数组元素的下标是从0开始,它们连续存储在内存单元中。
□ 7. 引用是某个变量的别名,对引用的操作,就是对被引用变量的操作。
□ 8. 语句int a(5), &b = a, *p = &a;中,b的值和*p的值是相等的。
□ 9. 在C++中,声明函数时都用函数原型。
□ 10.如果一个函数没有返回值,定义时函数头前需用void。
三、填空题(10分,共5题,每小题2分)
1. 在用class定义一个类时,数据成员和成员函数的默认访问权限是____。
2. 含有纯虚函数的类称为____引以为戒。
3. 已知int fn(int n){return n+n;}和long fn(long n){return n+n;}是一个函数模板的两个实例,则该函数模板的定义是____。
4. 继承的方式有公有继承、私有继承和____3种。
5. 表达式operator+(x,y)还可以表示为____led灯。
四、读程序,写运行结果(30分)
1.(7分)
#include<iostream>
using namespace一生一世的数字 std;
//----------------------------------
void other();
//----------------------------------
int main(){
int x=0, y=3;
other();
cout<<x<<” ”<<y<<”\n”;
other();
}//---------------------------------
void other(){
static int x=2;
int y=6;
x += 2;
cout<<x<<” ”<<y<<”\n”;
}//---------------------------------
2. (8分)
#include <iostream>
using namespace std;
//----------------------------------
class Class{
int x,y;
public:
Class(int n=6, int m=7);
~Class();
void Set(int n, int m){ x=n; y=m; }
};//--------------------------------
Class::Class(int n, int m){
Set(n,m);
cout<<"Construct: x="<<x<<",y="<<y<<”\n”;
}//---------------------------------
Class::~Class(){
cout<<"Destruct: x="<<x<<",y="<<y<<”\n”;
}//---------------------------------
int main(){
Class a(5);
Class b=Class(1,3);
cout <<"\n";
}//---------------------------------
3. (8分)
#include<iostream>
using namespace std;
//----------------------------------
class Tdate{
void Init(int m,int d,int y);
int month, day, year;
public:
Tdate();
Tdate(int d);
Tdate(int m,int d);
Tdate(int m,int d,int我与地坛主要内容 y);
void Print();
};
Tdate::Tdate(){
Init(6,13,2000);
}
Tdate::Tdate(int d){
Init(6,d,2000);
}
Tdate::Tdate(int m,int d){
Init(m,d,2000);
}
Tdate::Tdate(int m,int d,int y){
Init(m,d,y);
}
void Tdate::Init(int m,int d,int y){
month = m;
day = d;
year = y;
}
新家祝福语void Tdate::Print(){
cout<<month<<”-”<<day<<”-”<<year<<”\n”;
}//---------------------------------
int main(){
Tdate today(6,17,2000);
Tdate someday(4,25);
Tdate oneday(3);
Tdate otherday;
today.Print();
someday.Print();
oneday.Print();
otherday.Print();
}//---------------------------------
4.(7分)
#include<iostream>
using namespace std;
//----------------------------------
class Counter{
int v;
public:
Counter(){ v=0; }
Counter& preAddOne();
Counter postAddOne();
void print(){ cout<<v<<”\n”; }