视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
A)枚举类型的定义为enum
2025-09-24 06:40:54 责编:小OO
文档
C++练习

一、选择题

1.字符串常量"ME"的字符个数是__________.

A) 4    B)  3    C)  2   D)  1

2.下面对枚举类型的描述正确的是__________.

A)枚举类型的定义为:enum {Monday,Tuesday,Wednesday,Thursday,Friday} Day;

B)在C++语言中,用户自定义的枚举类型的第一个常量的默认值是1.

C)可以定义如下枚举类型:enum {Monday,Tuesday,Wednesday=5,Thursday,Friday=5};.

D)以上说法都不正确.

3.定义如下枚举类型:enum Number{one=1, two=2, four=4, eight=8}; ,则下列语句正确的是__________.

A)Number num=1;                        B)Number num=Number(20);    

C)Number num=Number(eight|0xFF);        D)枚举类型Number的取值范围是0到15.

4.下列对字符数组进行初始化的语句正确的是__________.

A)char a[]="Hello";                        B)char a[][]={‘H’,’e’,’l’,’l’,’o’};

C)char a[5]= "Hello";                        D)char a[2][5]={ "Hello

5.下列描述正确的是__________.

A)不是每个C++程序都必须包含预处理命令#include.

B)C++程序必须有return语句.

C)C++程序中的变量必须定义在主程序内部.

D)C++程序中所使用的符号常量可以不进行定义.

6.对于语句const int x=10;的描述正确的是__________.

A)该语句不允许定义为int const x=10;

B)在程序中可以重新对x赋值.

C)变量x不能使用++运算符.

D)const关键字只能用来修饰常量.

7.执行完C++程序中的下列三条语句之后c指向__________.

 int a,b,*c=&a;        int *p=c;        p=&b;

A)p        B)c        C)b        D)a

8.有如下定义语句:    typedef char *PCHAR; ,下列语句正确的是__________.

A)语句PCHAR p定义了一个字符变量

B)PCHAR p=’a’;

C)PCHAR p;  char  name[5]=”jone”;     p=name;            

D)PCHAR p=”hello”; cout<9.下列对变量的引用中错误的是__________.

A)int a; int &p=a;                    B)char a; char &p=a;

C)int a; int &p; p=a;                D)float a; float &p=a;

10.下列程序段循环__________次.

int x=-10;

while(++x){}

A)9            B)10        C)11            D)无限

11.当一个函数无返回值时,函数的类型应为__________.

A)任意        B)void        C)int        D)char

12.一个函数带有参数说明时,则参数的默认值应该在__________中给出.

A)函数定义        B)函数声明        C)函数定义或声明        D)函数调用

13.在C++语言中函数返回值的类型是由__________决定的.

A)调用该函数时系统临时

B)return语句中的表达式类型

C)定义该函数时所指定的函数类型

D)调用该函数时的主调函数类型

14.若有以下函数调用语句:

f(m+n,x+y,f(m+n,z,(x,y)));

在此函数调用语句中实参的个数是__________.

A)    6        B)5        C)4        D)3

15.在C++语言中,对函数参数默认值的描述正确的是__________.

A)函数参数的默认值只能设定一个

B)一个函数的参数若有多个,则参数默认值的设定可以不连续

C)函数参数必须设定默认值

D)在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值

16.不能作为函数重载判断依据的是__________.

A)const            B)返回类型        C)参数个数        D)参数类型

17.不能实现函数之间数据传递的是__________.

A)全局变量        B)局部变量        C)函数接口        D)函数返回值

18.一个函数为void f(int, char=’a’),另一个函数为 void f(int),则它们__________.

A)不能在同一个程序中定义

B)可以在同一程序中定义并可重载

C)一个定义在main函数中,一个定义在子函数中

D)以上说法均不正确

19.函数定义为Fun(int &i),变量定义 n=100,则下面调用正确的是__________.

A) Fun(20)        B) Fun(20+n)        C) Fun(n)            D) Fun(&n)

20.对类的构造函数和析构函数描述正确的是__________.

A)构造函数可以重载,析构函数不能重载

B)构造函数不能重载,析构函数可以重载

C)构造函数可以重载,析构函数可以重载

D)构造函数不能重载,析构函数不能重载

21.假定MyClass为一个类,则执行MyClass a, b(2), *p; 语句时,自动调用该类构造函数__________次.

A)    2        B)3        C)4        D)5

22.下面对于友元函数描述正确的是__________.

A)友元函数的实现必须在类的内部定义

B)友元函数是类的成员函数

C)友元函数破坏了类的封装性和隐藏性

D)友元函数不能访问类的私有成员

23.在C++中,数据封装要解决的问题是__________.

A)数据的规范化        B)便于数据转换        

C)避免数据丢失        D)防止不同模块之间数据的非法访问

24.一个类的友元函数或友元类能够通过成员操作符访问该类的__________.

A)私有成员        B)保护成员        C)公有成员        D)所有成员

25.下面对静态数据成员的描述中,正确的是__________.

A)静态数据成员可以在类体内进行初始化

B)静态数据成员不可以被类的对象调用

C)静态数据成员不能受private控制符的作用

D)静态数据成员可以直接用类名调用

26.下面对静态数据成员的描述中,正确的是__________.

A)静态数据成员是类的所有对象共享的数据

B)类的每个对象都有自己的静态数据成员

C)类的不同对象有不同的静态数据成员值

D)静态数据成员不能通过类的对象调用

27.假定MyClass为一个类,则执行MyClass a[3],*p[2]; 语句时,自动调用该类构造函数_____次.

A) 2            B) 3            C) 4             D) 5

28.对于常数据成员,下面描述正确的是_____.

A)常数据成员可以不初始化,并且不能更新

B)常数据成员必须被初始化,并且不能更新

C)常数据成员可以不初始化,并且可以被更新

D)常数据成员必须被初始化,并且可以被更新

29.对下列语句正确的描述是_____.

const int *x;   //①

int * const x;   //②

A)语句①的含义是指针变量x不能更改

B)语句②的含义是指针变量x所指向的值不能更改

C)语句②的含义是指针变量x不能更改

D)语句①和②相同含义的不同定义方式

30.关于new运算符的错误的描述是_____

A)使用运算符new创建对象数组时必须定义初始值

B)使用运算符new创建对象时,会调用类的构造函数

C)运算符new可以用来动态创建对象和对象数组

D)使用new运算符创建的对象可以使用运算符delete删除

31.下列关于运算符重载的描述中,正确的是_____.

A)运算符重载可以改变运算符的操作数的个数

B)运算符重载可以改变优先级

C)运算符重载可以改变优先级

D)运算符重载不可以改变语法结构

32.C++语言建立类族是通过_____实现的。

A)类的嵌套            B)虚函数        C)类的继承        D)抽象类

33.继承具有_____,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类成员.

A)规律性            B)传递性        C)重复性          D)多样性

34.下列对基类和派生关系的描述中,错误的是_____.

A)派生类是基类的具体化

B)派生类是基类的子集

C)派生类是基类定义的延续

D)派生类是基类的组合

35.下列对派生类的描述中,错误的是_____.

A)一个派生类可以作为另一个派生类的基类

B)派生类至少有一个基类

C)派生类的缺省继承方式是private

D)派生类只继承了基类的公有成员和保护成员

36.下列关于继承的描述中,错误的是_____.

A)析构函数不能被继承    

B)派生类是基类的组合

C)派生类的成员除了它自己的 成员外,还包含了它的基类的 成员

D)派生类中继承的基类成员的访问权限到派生类保持不便

37.派生类的 对象对它的基类成员中_____是可以访问的.

A)公有继承的成员            B)公有继承的私有成员        

C)公有继承的保护成员        D)私有继承的公有成员

38.派生类的构造函数的成员初始化列表中,不能包含_____.

A)基类的构造函数

B)派生类中子对象的初始化

C)基类中子对象的初始化

D)派生类中一般数据成员的初始化

39.关于多继承二义性的描述中,错误的是_____.

A)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性

B)解决二义性的最常用的方法是对成员名的限定法

C)基类和派生类中同时出现的同名函数,也存在二义性问题

D)一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性

40.下面_____的叙述不符合赋值兼容规则.

A)派生类的对象可以赋值给基类的对象

B)基类的对象可以赋值给派生类的对象

C)派生类的对象可以初始化基类的引用

D)派生类的对象的地址可以赋值给指向基类的指针

41.下列程序中,编译时不会出错的语句是_____.

#include

class Base

{

public:

    Base(){}

    Base(int i){ data=i; }

private:

    int data;

};

class Derived:public Base

{

public:

    Derived():Base(0){}

    Derived(int x):Base(x){}

};

void main()

{

    Derived d1(1);

    Base *pb,b1;

    pb=&d1;             //A

    d1=b1;              //B

    Base &refB=d1       

    Derived d2=*pb      //C

    Derived &refD=refB; //D

}

42.下列关于动态联编的描述中,错误的是_____.

A)动态联编是以虚函数为基础的 

B)动态联编是在运行时确定所调用的函数代码的

C)动态联编调用函数操作是指向对象的指针或对象引用

D)动态联编是在编译时确定操作函数的

43.关于虚函数的描述中,正确的是_____.

A)虚函数是一个静态成员函数

B)虚函数是一个非成员函数

C)虚函数既可以在函数说明时定义,也可以在函数实现时定义

D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型.

44.实现运行时的多态性要使用_____.

A)重载函数        B)构造函数        C)析构函数        D)虚函数

45.要实现动态联编,必须通过_____调用虚函数.

A)对象指针        B)成员名限定        C)对象名            D)派生类名

46.在派生类中重新定义虚函数时,除了_____方面,其他方面都必须与基类中相应的虚函数保持一致.

A)参数个数        B)参数类型        C)函数名称        D)函数体

47.下面关于构造函数和析构函数的描述,错误的是_____.

A)析构函数中调用虚函数采用静态联编

B)对虚析构函数的调用可以采用动态联编

C)当基类的析构函数是虚函数时,其派生类的构造函数也一定是虚函数

D)构造函数可以声明为虚函数

48.关于纯虚函数和抽象类的描述中,错误的是_____.

A)纯虚函数是一种特殊的虚函数,它没有具体的实现

B)抽象类是指具有纯虚函数的类

C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类

D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出

49.下面的描述,正确的是_____.

A)virtual可以用来声明虚函数

B)含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类

C)即使基类的构造函数没有参数,派生类也必须建立构造函数

D)静态数据成员可以通过成员初始化列表来初始化

50.在下面程序中,A,B,C,D四句编译时不会出现错误的是_____.

#include

class Base

{

public:

    Base(){}

    Base(int c):count(c){}

    virtual void print() const=0;

private:

    int count;

};

class Derived:public Base

{

public:

    Derived():Base(0){}

    Derived(int c):Base(c){}

void print() const { cout<<"Derived"<};

void main()

{

    Derived d(10);

    Base *pb;

    pb=&d;              //A

    Base &cb=d;

    Derived dd=*pb;     //B

    Derived &cd=cb;     //C

    Base bb=d;          //D

}    

51.模板式实现类属机制的 一种工具,其功能非常强大,它既允许用户构造类属函数,即_____;也允许用户构造类属类,即_____.

A)模板函数        B)函数模板        C)模板类        D)类模板

52.类模板的模板参数_____.

A)只可作为数据成员的类型            B)只可作为成员函数的返回类型

C)只可作为成员函数的参数类型        D)以上三者皆可

53.下列对模板的声明,正确的是_____.

A) template                  B) template

C) template D) template

54.cout是I/O流库预定义的_____.

A)    类            B)    对象        C)    包含文件        D)    常量

55.与C语言printf(“Hello world\\n”);语句功能相同的C++语句是_____.

A) cout>>”Hello world\\n”;         B)cin>>”Hello world\\n”;

C)cout<<”Hello world\\n”;         D)cin<<”Hello world\\n”;

56.已知int a,*pa=&a;,输出指针pa十进制的地址值的方法是_____.

A)cout<二、填空题

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

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

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

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

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

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

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

8.下列程序计算由0到9之间的任意3个不相同的数字组成的三位数共有多少种不同的组合方式.请完成下列程序.

#include

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<}

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

void main()

{

    int a[2][2]={1,2,3,4},*p;

    p=a[0]+1;

cout<<*p<}

2.写出下列程序的运行结果.

#include

void main()

{

    int x;

    int &p=x;

    x=10;

    p=x+10;

cout<}

3.写出下列程序的运行结果

#include

int a=100;

void fun()

{

    int a=0;

    a++;

    ::a=200;

cout<<"The a of fun is"< cout<<"::a="<<::a<}

void main()

{

    int a=10;

    fun();

    a++;

    ::a+=1;

cout<<"The a of main is"< cout<<"::a="<<::a<}

4.写出下列程序的运行结果.

#include

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="< cout<<"n="<}

5.写出下列程序的运行结果.

#include

class MyClas

{

public:

    MyClass(int a)

    {

        X=a;

     cout<<"This is"<    }

    ~MyClass()

    {

     cout<<"This is "<    }

private:

    int X;

};

MyClass globalObj(0);

void main()

{

    MyClass commonObj(1);

    static MyClass staticObj(2);

}

6.写出下列程序的运行结果.

#include

class CStatic

{

public:

    CStatic(){val++;}

    static int val;

};

int CStatic::val=0;

void main()

{

cout<<"CStatic::val="<    CStatic cs1;

cout<<"cs1.val="<    CStatic cs2;

cout<<"cs2.val="<    CStatic cs3,cs4;

cout<<"cs1.val="< cout<<"cs2.val="<}

7. 写出下列程序的运行结果.

#include

class MyClass

{

public:

    void SetValue(int val);

    MyClass();

    ~MyClass();

private:

    int i;

};

MyClass::MyClass()

{

    i=0;

cout<<"This is a constructor!i="<}

void MyClass::SetValue(int val)

{

    i=val;

cout<<"i="<}

MyClass::~MyClass()

{

cout<<"This is a destructor!i="<}

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

class Data

{

public:

    Data(int x)

    {

        Data::x=x;

     cout<<"Data cons."<    }

~Data(){ cout<<"Data des."<private:

    int x;

};

class Base

{

public:

Base(int x)d1(x){cout<<"Base cons."< ~Base(){cout<<"Base des."<private:

    Data d1;

};

class Derived:public Base

{

public:

Derived(int x):Base(x),d2(x){cout<<"Derived cons."< ~Derived(){cout<<"Derived des."<private:

    Data d2;

};

void main()

{

    Derived obj(5);

}

9. 写出下列程序的运行结果.

#include

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="<}

void main()

{

    Base b(10);

    Derived d(10,40);

    Call(b);

    Call(d);

}    

10. 写出下列程序的运行结果.

#include

template

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=8.8;

    i=9999;

    fun(i,d);

cout<<"d="<}

四、编写程序

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)将一个字符串反转下载本文

显示全文
专题