二、填空题
1.程序文件的编译错误分为__________和__________两类.
2.字符串类型的变量一般用__________和__________类型的变量表示.
3.空字符串的长度是__________.
4.一个指针类型的对象占用内存的__________个字节的存储空间.
5.假设p是一个指针,则a=*p++运算首先__________,然后__________.
6.若指针p所指向的对象的值为10,p+1所指向的对象的值为20,则*++p的值为__________.
7.除了在__________和__________的情况下,定义引用变量必须初始化.
8.下列程序计算由0到9之间的任意3个不相同的数字组成的三位数共有多少种不同的组合方式.请完成下列程序.
#include<iostream.h>
void main()
{
int i,j,k,count=0;
for(i=9;i>=1;i–)
for(j=9;j>=0;j–)
if(______) continue;
else
for(k=0;k<=9;k++)
if(_______) count++;
cout<<count<<endl;
}
9.在C++中, __________函数不需要使用相应的函数原型语句加以声明.
10.函数的调用方式分为两种: __________调用和__________调用.其中, __________调用又根据C++中变量值的不同分为:传递变量本身的调用和__________的__________调用.
11.具有相同函数名但具有不同参数表的函数称为__________.
12.假定一个函数的参数说明为int x[][N](N是常数),则等价的指针参数说明为__________..
13.执行完下列三条语句后,指针变量c指向__________.
int a,b,*c=&a; int *&p=c; p=&b;
14.下面的函数Fun未使用中间变量实现了对两个数的交换,请完成下列函数的定义.
void Fun(int &x,int &y) { x+=y; y= _______; ________;}
15.在C语言中,编程单位是__________,在C++中,编程的单位是__________.
16.类的具体表现是通过定义__________来操作的.
17.一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为__________权限,而把成员函数(方法)定义为__________权限.
18.在结构定义中,数据和成员函数默认权限是__________.在类定义中,数据和成员函数默认权限是__________..
19.类中构造函数有__________个,析构函数有__________个.
20.要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句__________.
21.在C++语言中,每个类都有一个隐含的指针叫_____指针.该指针指向_____.
22.重载运算符函数的函数名有关键字_____引出.
23.利用成员函数对二元运算符重载,其左操作数为_____,右操作数为_____.
24.派生类对基类的继承有三种方式: _____. _____. _____.
25.构造函数_____被继承,析构函数_____被继承.
26.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行_____,再执行_____,最后执行_____.
27.对基类数据成员的初始化必须在派生类构造函数中的_____处执行.
28.当撤销一个含有基类和子对象成员的派生类对象时,将首先完成_____的析构函数定义体的执行,接着完成_____的析构函数定义体的执行,最后完成_____的析构函数定义体的执行.
29.动态联编中直到_____时才能确定调用哪个函数;而静态联编则是在_____时进行的.
30.对虚函数使用对象指针或引用调用,系统使用_____联编;使用对象调用时,系统使用_____联编.
31.C++中_____虚构造函数,但_____虚析构函数.
32.带有_____的类称为抽象类,它只能作为_____来使用.
33.抽象类不能_____,但可以_____作为参数类型,函数返回类型或显式转换类型.
34.如果一个模板声明列出多个参数,则多个参数之间必须使用_____隔开,每个参数都必须重复使用关键字_____.
35.函数模板既可以与_____重载,也可以与_____重载.
36.函数模板的友元函数可以是_____或_____.
三、阅读程序
1.写出下列程序的运行结果.
#include<iostream.h>
void main()
{
int a[2][2]={1,2,3,4},*p;
p=a[0]+1;
cout<<*p<<endl;
}
2.写出下列程序的运行结果.
#include<iostream.h>
void main()
{
int x;
int &p=x;
x=10;
p=x+10;
cout<<x<<”,”<<p<<endl;
}
3.写出下列程序的运行结果
#include<iostream.h>
int a=100;
void fun()
{
int a=0;
a++;
::a=200;
cout<<”The a of fun is”<<a<<endl;
cout<<”::a=”<<::a<<endl;
}
void main()
{
int a=10;
fun();
a++;
::a+=1;
cout<<”The a of main is”<<a<<endl;
cout<<”::a=”<<::a<<endl;
}
4.写出下列程序的运行结果.
#include<iostream.h>
int f(int a)
{
return ++a;
}
int g(int &a)
{
return ++a;
}
void main()
{
int m=0,n=0;
m+=f(g(m));
n+=f(f(n));
cout<<”m=”<<m<<endl;
cout<<”n=”<<n<<endl;
}
5.写出下列程序的运行结果.
#include<iostream.h>
class MyClas
{
public:
MyClass(int a)
{
X=a;
cout<<”This is”<<X<<”‘s constructor.”<<endl;
}
~MyClass()
{
cout<<”This is “<<X<<”‘s destructor.”<<endl;
}
private:
int X;
};
MyClass globalObj(0);
void main()
{
MyClass commonObj(1);
static MyClass staticObj(2);
}
6.写出下列程序的运行结果.
#include<iostream.h>
class CStatic
{
public:
CStatic(){val++;}
static int val;
};
int CStatic::val=0;
void main()
{
cout<<”CStatic::val=”<<CStatic::val<<endl;
CStatic cs1;
cout<<”cs1.val=”<<cs1.val<<endl;
CStatic cs2;
cout<<”cs2.val=”<<cs2.val<<endl;
CStatic cs3,cs4;
cout<<”cs1.val=”<<cs1.val<<endl;
cout<<”cs2.val=”<<cs2.val<<endl;
}
7. 写出下列程序的运行结果.
#include<iostream.h>
class MyClass
{
public:
void SetValue(int val);
MyClass();
~MyClass();
private:
int i;
};
MyClass::MyClass()
{
i=0;
cout<<”This is a constructor!i=”<<i<<endl;
}
void MyClass::SetValue(int val)
{
i=val;
cout<<”i=”<<i<<endl;
}
MyClass::~MyClass()
{
cout<<”This is a destructor!i=”<<i<<endl;
}
void main()
{
MyClass * myl[3];
int k;
for(k=0;k<3;k++)
myl[k]=new MyClass;
for(k=0;k<3;k++)
delete myl[k];
}
8. 写出下列程序的运行结果.
#include<iostream.h>
class Data
{
public:
Data(int x)
{
Data::x=x;
cout<<”Data cons.”<<endl;
}
~Data(){ cout<<”Data des.”<<endl; }
private:
int x;
};
class Base
{
public:
Base(int x)d1(x){cout<<”Base cons.”<<endl;}
~Base(){cout<<”Base des.”<<endl;}
private:
Data d1;
};
class Derived:public Base
{
public:
Derived(int x):Base(x),d2(x){cout<<”Derived cons.”<<endl;}
~Derived(){cout<<”Derived des.”<<endl;}
private:
Data d2;
};
void main()
{
Derived obj(5);
}
9. 写出下列程序的运行结果.
#include<iostream.h>
class Base
{
public:
Base(int i=0):x(i){}
virtual int sum() const{ return x;}
private:
int x;
};
class Derived:public Base
{
public:
Derived(int i=0,int j=0):Base(i),y(j){}
int sum() const { return Base::sum()+y;}
private:
int y;
};
void Call(Base b)
{
cout<<”sum=”<<b.sum()<<endl;
}
void main()
{
Base b(10);
Derived d(10,40);
Call(b);
Call(d);
}
10. 写出下列程序的运行结果.
#include<iostream.h>
template<class T1,class T2>
void fun(T1 &x,T2 &y)
{
if(sizeof(T1)>sizeof(T2))
x=(T1)y;
else
y=(T2)x;
}
void main()
{
double d;
int i;
d=99.99;
i=88;
fun(d,i);
cout<<”d=”<<d<<”i=”<<i<<endl;
d=8.8;
i=9999;
fun(i,d);
cout<<”d=”<<d<<”i=”<<i<<endl;
}
四、编写程序
1.定义一个学生结构student,包括学生的学号、姓名、性别和出生日期。要求出生日期包括年、月、日。
2输入一个自然数,将该自然数的每一位数字按反序输出.例如:输入12345,输出54321.
3.编写程序,计算s=1+(1+2)+(1+2+3)+…..+(1+2+3+…+n)的值.
4.编写一个递归函数完成以下公式的运算:
sum(n)=1-1/2+1/3-1/4+…(其中n>0)
5.用函数指针实现对下面3个函数的调用.
(1)求两个数的最大值: int Max(int x, int y);
(2)求两个数的最小值: int Min(int x, int y);
(3)求两个数的和: int Add(int x, int y);
6.设计一个类CRectangle,要求如下所述.
(1)该类中的私有成员变量存放Rectangle的长和宽,并且设置它们的默认值是1.
(2)通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内.
(3)求周长Perimeter.
7.设计一个类CDateInfo,要求其满足下述要求.
(1)要求有一个无参的构造函数,其初始的年.月.日分别为:2000,1,1.
(2)要求有一个带参数的构造函数,其参数分别对应年.月.日.
(3)要求用一个成员函数实现日期的设置.
(4)要求用一个成员函数实现日期的获取.
8.定义Point类,有数据成员X和Y,重载++和—运算符,要求同时重载前缀方式和后缀方式.
9.编写一个程序,其中有一个简单的串类String,包含设置字符串,返回字符串长度及内容等功能.另有一个具有编辑功能的串类EditString,它的基类时String,在其中设置一个光标,使其能支持在光标处的插入,替换和删除等编辑功能.
10.使用模板函数实现swap(x,y),函数功能为交换x和y的值.
11.分别用递归和非递归方式实现(在有效的范围内,考虑最简单的情况即可)
(1)将一个整型数转换为数字字符串
(2)将一个数字字符串转换为整型数
(3)将一个字符串反转
>> 本文固定链接: http://www.vcgood.com/archives/1046
没有答案??
where’s the key?
应该在后面加上正确的答案!
答案呢
我想要答案