2006
09-05

二、填空题


1.程序文件的编译错误分为____________________两类.


2.字符串类型的变量一般用____________________类型的变量表示.


3.空字符串的长度是__________.


4.一个指针类型的对象占用内存的__________个字节的存储空间.


5.假设p是一个指针,a=*p++运算首先__________,然后__________.


6.若指针p所指向的对象的值为10,p+1所指向的对象的值为20,*++p的值为__________.


7.除了在____________________的情况下,定义引用变量必须初始化.


8.下列程序计算由09之间的任意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,有数据成员XY,重载++运算符,要求同时重载前缀方式和后缀方式.


9.编写一个程序,其中有一个简单的串类String,包含设置字符串,返回字符串长度及内容等功能.另有一个具有编辑功能的串类EditString,它的基类时String,在其中设置一个光标,使其能支持在光标处的插入,替换和删除等编辑功能.


10.使用模板函数实现swap(x,y),函数功能为交换xy的值.


11.分别用递归和非递归方式实现(在有效的范围内,考虑最简单的情况即可)


(1)将一个整型数转换为数字字符串


(2)将一个数字字符串转换为整型数


(3)将一个字符串反转


C++练习2》有 4 条评论

  1. liu11140514 说:

    没有答案??

  2. 朗月88 说:

    where’s the key?

  3. mei1977mei 说:

    应该在后面加上正确的答案!

  4. hiroki 说:

    答案呢

    我想要答案

留下一个回复