Untitled Document

一、 填空题（25小题，共50分）
（以下每小题1分，共10分）
1． 在C++中，用数组、指针、和 引用 作为函数参数，能够将参数值带回。
2． 在C++中，虽然友元提供了类之间数据进行访问的一种方式，但它破坏了面向对象程序设计的 封装 特性。
3． 在C++中，构造派生类对象时，总是先从 基类 的初始化开始的。
4． 拷贝构造函数是在用一个对象初始化另一个对象时被调用，系统缺省的拷贝构造函数的工作方法是 拷贝每一个数据成员 。
5． 类是用户定义的类型，具有类类型的变量称作 对象 。
6． 在5个运算符"*(乘号)、<=、!=、！、&&"中，优先级由高到低的顺序是！、*(乘号)、<=、!=、 &&。
7． 在C++中，类定义一般用class关键字，不过用struct关键字也可以定义类，它们定义类的区别在于 在缺省访问权限时，struct 类成员是公有的，而class 类成员是私有的 。
8． 静态的成员函数没有隐含的 this指针 ，所以，它们只能访问静态的数据成员。
9． 与"(!a==0)"等价的C++表达式是 (a>0||a<0)或(a) 。
10． 若a=6，b=4，c=2，则表达式"!(a-b)+c-1&&b+c/2"的值是 1 。

（以下每小题2分，共20分）
11． 在面向对象的程序设计中，通过_封装_实现数据隐藏；通过_继承_实现代码的复用。
12． 在下面的程序段中，语句"const int* c=&a;"和语句"int* const d=&b;"的含义分别是 变量指针c指向整型常量a 、 常量指针d指向整型变量b 。
const int a=78;
int b=28;
const int* c=&a;
int* const d=&b;
13． 用new申请有10个元素的指针数组str，假定数组元素是指向字符型数据的指针，该C++语句为 char** str=new char* [10]; 。
14． 在C++中构造一个对象时，其数据成员在构造函数中初始化。对于内嵌的对象、 常量 、 引用 数据成员需要在构造函数的成员初始化列表中初始化。
15． 在类的定义中，说明为protected的数据成员称为保护成员。保护数据成员具有双重作用：对于其派生类而言， 是公有的 ；而对于其外部的程序而言， 是私有的 。
16． C++中有两种数据类型： 整型 和 字符型 可以使用signed修饰符。。
17． 举出C++中两种流程控制语句 if语句 、 for循环语句 。
18． 预编译指令由三种，它们是：文件包含、 宏定义 和 条件编译 。
19． C|++中，对象保存在内存中， 栈 内存是自动分配和释放的，而 堆 存需要用户自己申请和释放。
20． 在C++函数中，可用return语句带回一个值。如果有多个返回值，可用 指针 、引用等带回。

（以下每小题4分，共20分）
21． 下面程序的运行结果是 6 。
#include <stdio.h>
void main( )
{
char a='0',b='9';
float x;
x=(b-a)/('F'-'B');
printf("%d\n",(int)(3.14*x));
}
22．以下程序的输出结果是**#**#**#$。
#include<stdio.h>
void main()
{
int i;
for (i=0;i<=5;i++){
if (i%2) printf("**");
else continue;
printf("#");
}
printf("$\n");
}
23．下面程序的运行结果是 Hello 50 OK! 。
#include <iostream.h>
#define N 100
class CStack
{
public:
CStack() {top=0;cout<<"Hello ";}
~CStack() {cout<<"Bye";}
void push(int i);
int pop();
private:
int stack[N];
int top;
};

void CStack::push(int i)
{
if (top==N){
cout<<"Overflow";
return;
}
else{
top++;
stack[top]=i;
}
}

int CStack::pop( )
{
int temp;
if (top==0){
cout<<"Underflow";
return 0;
}
else{
temp=stack[top];
top--;
return temp;
}
}

void main()
{
CStack *ptr=new CStack;
ptr->push (10);
ptr->push(50);
cout <<ptr->pop( )<<" ";
cout << "OK!"<<endl;
}
24．下面程序的运行结果是________。
#include <iostream.h>
class B
{
public:
B(){cout<<"B::B() construction."<<endl;}
virtual ~B(){cout<<"B::~B() destruction."<<endl;}
};

class D:public B
{
public:
D(int i){cout<<"D::D() construction."<<endl;
buf=new char[i];
}
virtual ~D()
{
delete []buf;
cout<<"D::~D() destruction."<<endl;
}
private:
char *buf;
};

void fun(B *a)
{
delete a;
}

void main()
{
B *a=new D(25);
fun(a);
}
B::B() construction.
D::D() construction.
D::~D() destruction.
B::~B() destruction.
25．下面程序的运行结果是________。
#include <stdio.h>

int a[ ]={2,5,6,8,10};
int *p[ ]={a,a+1,a+2,a+3,a+4};

void main( )
{
printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]);
printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);
}
10 6 5
11 4 8