C++AND UML习题及答案给学生.docx

上传人:b****7 文档编号:25077545 上传时间:2023-06-04 格式:DOCX 页数:65 大小:38.63KB
下载 相关 举报
C++AND UML习题及答案给学生.docx_第1页
第1页 / 共65页
C++AND UML习题及答案给学生.docx_第2页
第2页 / 共65页
C++AND UML习题及答案给学生.docx_第3页
第3页 / 共65页
C++AND UML习题及答案给学生.docx_第4页
第4页 / 共65页
C++AND UML习题及答案给学生.docx_第5页
第5页 / 共65页
点击查看更多>>
下载资源
资源描述

C++AND UML习题及答案给学生.docx

《C++AND UML习题及答案给学生.docx》由会员分享,可在线阅读,更多相关《C++AND UML习题及答案给学生.docx(65页珍藏版)》请在冰豆网上搜索。

C++AND UML习题及答案给学生.docx

C++ANDUML习题及答案给学生

复习要求:

1.C++语言概述

(1)了解C++语言的基本符号。

(2)了解C++语言的词汇(保留字、标识符、常量、运算符、标点符号等)。

(3)掌握C++程序的基本框架(结构程序设计框架、面向对象程序设计框架等)。

(4)能够使用VisualC++6.0集成开发环境编辑、编译、运行与调试程序。

2.数据类型、表达式和基本运算

(1)掌握C++数据类型(基本类型、指针类型)及其定义方法。

(2)了解C++的常量定义(整型常量、字符常量、逻辑常量、实型常量、地址常量、符号常量)。

(3)掌握变量的定义与使用方法(变量的定义及初始化、全局变量、局部变量)。

(4)掌握C++运算符的种类、运算优先级和结合性。

(5)熟练掌握C++表达式类型及求值规则(赋值运算、算术运算符和算术表达式、关系运算符和关系表达式、逻辑运算符和逻辑表达式、条件运算、指针运算、逗号表达式)。

3.C++的基本语句

(1)掌握C++的基本语句,例如赋值语句、表达式语句、复合语句、输入、输出语句和空语句等。

(2)用if语句实现分支结构。

(3)用switch语句实现多分支选择结构。

(4)用for语句实现循环结构。

(5)用while语句实现循环结构。

(6)用do…while语句实现循环结构。

(7)转向语句(goto,continue,break和return)。

(8)掌握分支语句和循环语句的各种嵌套使用。

4.数组、指针与引用

(1)掌握一维数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。

(2)了解字符串与字符数组。

(3)熟练掌握常用字符串函数(strlen,strcpy,strcat,strcmp,strstr等)。

(4)掌握指针与指针变量的概念、指针与地址运算符、指针与数组。

(5)掌握引用的基本概念、引用的定义与使用。

5.掌握函数的有关使用

(1)函数的定义方法和调用方法。

(2)函数的类型和返回值。

(3)形式参数与实在参数,参数值的传递。

(5)递归函数。

(6)函数重载。

(7)内联函数。

(8)带有默认参数值的函数。

6.熟练掌握类与对象的相关知识

(1)类的定义方式、数据成员、成员函数及访问权限(public,private,protected)。

(2)对象和对象指针的定义与使用。

(3)构造函数与析构函数。

(4)this指针的使用。

(5)对象数组与成员对象。

7.掌握类的继承与派生知识

(1)派生类的定义和访问权限。

(2)继承基类的数据成员与成员函数。

8.了解UML的一些相关知识

(1)UML的发展史,建模对象。

(2)UML的四种类型事物。

(3)UML的四种关系。

9.函数、运算符重载

(1)掌握常用运算符重载的方法,包括成员函数重载和友元函数的重载。

(2)掌握虚函数和纯虚函数的概念。

(3)在成员函数中实现自加,重载前置自加运算符,重载后置自加运算符.

(4)重载加法运算函数operator+,重载赋值运算函数operator=.

(5)转换类型运算符

10.多态性

(1)运算符重载的运用。

(2)虚函数的定义。

(3)抽象类的声明。

一.填空

1、

#include

Usingnamespacestd;

intadd(inta,intb);

intmain()

{

intx,y,sum;

cout<<"Entertwonumbers:

"<<'\n';

//在下画线处填上语句,完成用cin读入x和y

cin>>x;

cin>>y;

sum=add(x,y);

cout<<"Thesumis:

"<

return0;

}

intadd(inta,intb)

{

//在下画线处填上语句,完成计算a与b的和并返回之

returna+b;

}

2、

#include

Usingnamespacestd;

intmain()

{

charname[20];

cout<<”Hello,yourname:

”;

//在下画线处填上语句,完成将字符串输入到数组name中

cin>>name;

//在下画线处填上语句,完成将name数组用cout输出

cout<

return0;

}

3

#include

Usingnamespacestd;

intmul(intx,inty)//mul函数1

{returnx*y;}

intmul(intx,inty,intz)//mul函数2

{returnx*y*z;}

voidmain()

{

inta=3,b=4,c=5;

//在下画线处填上语句,用于调用mul函数1

cout<

//在下画线处填上语句,用于调用mul函数2

cout<

}

4

#include

Usingnamespacestd;

main()

{

int*p;//声明一个整型指针变量p

//在下画线处,用new关键字动态分配一个int型存储区,并将首地址赋给p

p=newint;

*p=10;

cout<<*p;//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间

deletep;

return0;

}

5

#include

main()

{

int*p;

//在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给p

p=newint;

if(!

p)

{

cout<<"allocationfailure\n";

return1;

}

//在下画线处填上语句,将p所指向的存储区赋值20

*p=20;

cout<<*p;

//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间

deletep;

return0;

}

6下列程序的输出结果是7。

#include

usingnamespacestd;

intmain()

{

inti=5;

int*p=&i;*p=7;

cout<

return0;

}

7下面是用来计算n的阶乘的递归函数,请将该函数的定义补充完整。

(注:

阶乘的定义是n!

=n*(n-1)*...*2*1)

unsignedfact(unsignedn)

{

if(n<=1)

return1;

returnn*fact(n-1);

}

8与成员访问表达式p->name等价的表达式是(*P).name。

9.UML的全称为UnifiedModelingLanguage,统一建模语言。

10.UML中有结构事物,动作事物,分组事物,注释事物四种类型事物。

11.UML中的四种关系为依赖,关联,泛化,实现。

12.类Sample的构造函数将形参data赋值给数据成员data。

请将类定义补充完整。

classSample{

public:

Sample(intdata=0);

Private:

Intdata;

};

Sample:

:

Sample(intdata){

 【this->data=data;】

}

(13)若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为【double】。

(14)有如下循环语句:

For(inti=50;i>20;i-=2) cout<

运行时循环体的执行次数是【15】。

(15)利用表达式a[i]可以访问int型数组a中下标为i的元素。

在执行了语句int*p=a;后,利用指针p也可访问该元素,相应的表达式是【*(p+i)】。

(16)下面是一个递归函数,其功能是使数组中的元素反序排列。

请将函数补充完整。

voidreverse(int*a,intsize){

if(size<2)return;

intk=a[0];

a[0]=a[size-1];

a[size-1]=k;

reverse(a+1, size-1);

}

(17)有如下类定义:

classSample{

public:

Sample();

~Sample();

Private:

Staticintdate;

};

将静态数据成员data初始化为0的语句是【intSample:

:

data=0;】

(18)“图形”类Shape中定义了纯虚函数CalArea(),“三角形”类Triangle继承了类Shape,请将Triangle类中的CalArea函数补充完整。

classShape{

public:

virtualintCalArea()=0;

}

classTriangle:

publicShape{

public:

Triangle{ints,inth}:

side(s),height(h){}

 【intCalArea(intside,intheight)】{returnside*height/2;}

private:

   intside;

   intheight;

};

二.选择题

1建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数),这3种构造函数的调用顺序为()

AabcBacbCcabDcba

答案:

A

2下面描述中,符合结构化程序设计风格的是(A)

A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑

B)模块只有一个入口,可以有多个出口

C)注重提高程序的执行效率

D)不使用goto语句

3下面概念中,不属于面向对象方法的是(D)

A)对象B)继承C)类D)过程调用

4关于面向对象的程序设计方法,下列说法正确的是(D)

A)“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理

B)“多态性”指的是对象的状态会根据运行时要求自动变化

C)基类的私有成员在派生类的对象中不可访问,也不占内存空间

D)在面向对象的程序设计中,结构化程序设计方法仍有着重要作用

5判断字符型变量ch是否为大写英文字母,应使用表达式(D)

A)ch>='A'&ch<='Z'B)ch<='A'||ch>='Z'

C)'A'<=ch<='Z'D)ch>='A'&&ch<='Z'

6已知下列语句中的x和y都是int型变量,其中错误的语句(C)

A)x=y++;B)x=++y;C)(x+y)++;D)++x=y;

7执行语句序列(D)

intn;

cin>>n;

switch(n)

{case1:

case2:

cout<<'1';

case3:

case4:

cout<<'2';break;

default:

cout<<'3';

}

时,若键盘输入1,则屏幕显示

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

8关于动态存储分配,下列说法正确的是(B)

A)new和delete是C++语言中专门用于动态内存分配和释放的函数

B)动态分配的内存空间也可以被初始化

C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存空间

D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new

9)对类的构造函数和析构函数描述正确的是(A)

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

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

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

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

(10)下列程序的输出结果是(A)

#include

usingnamespacestd;

intmain()

{

chara[]="Hello,World";

char*ptr=a;

while(*ptr)

{

if(*ptr>='a'&&*ptr<='z')

cout<

elsecout<<*ptr;

ptr++;

}

return0;

}

A)HELLO,WORLDB)Hello,World

C)hELLO,wORLDD)hello,world

11)已知:

intm=10;在下列定义引用的语句中,正确的是(A)

A)int&x=m;B)inty=&m;

C)int&z;D)int&t=&m;

(17)下列函数原型声明中错误的是(D)

A)voidFun(intx=0,inty=0);

B)voidFun(intx,inty);

C)voidFun(intx,inty=0);

D)voidFun(intx=0,inty);

(12)已知程序中已经定义了函数test,其原型是inttest(int,int,int);,则下列重载形式中正确的是(B)

A)chartest(int,int,int);

B)doubletest(int,int,double);

C)inttest(int,int,int=0);

D)floattest(int,int,float=3.5F);

(13)已知函数f的原型是:

voidf(int*a,long&b);变量v1、v2的定义是:

intv1;longv2;,正确的调用语句是(C)

A)f(v1,&v2);B)f(v1,v2);

C)f(&v1,v2);D)f(&v1,&v2);

(14)有以下类定义

classMyClass

{

public:

MyClass(){cout<<1;}

};

则执行语句MyClassa,b[2],*p[2];后,程序的输出结果是(B)

A)11B)111C)1111D)11111

(15)关于动态存储分配,下列说法正确的是(B)

A)new和delete是C++语言中专门用于动态内存分配和释放的函数

B)动态分配的内存空间也可以被初始化

C)当系统内存不够时,会自动回收不再使用的内存单元,因此程序中不必用delete释放内存空间

D)当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用new

(16)关于友元,下列说法错误的是(A)

A)如果类A是类B的友元,那么类B也是类A的友元

B)如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员

C)友元关系不能被继承

D)如果类A是类B的友元,那么类A的所有成员函数都是类B的友元

(17)在公有派生的情况下,派生类中定义的成员函数只能访问原基类的(C)

A)公有成员和私有成员B)私有成员和保护成员

C)公有成员和保护成员D)私有成员、保护成员和公有成员

(18)在C++中用来实现运行时多态性的是(D)

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

(19)一个类可以同时继承多个类,称为多继承。

下列关于多继承和虚基类的表述中,错误的是(C)

A)每个派生类的构造函数都要为虚基类构造函数提供实参

B)多继承时有可能出现对基类成员访问的二义性问题

C)使用虚基类可以解决二义性问题并实现运行时的多态性

D)建立最派生类对象时,虚基类的构造函数会首先被调用

(20)在一个类体的下列声明中,正确的纯虚函数声明是(A)

A)virtualvoidvf()=0;B)voidvf(int)=0;

C)virtualintvf(int);D)virtualvoidvf(int){}

(21)在下面的运算符重载函数的原型中,错误的是(A)

A)Volumeoperator-(double,double);

B)doubleVolume:

:

operator-(double);

C)VolumeVolume:

:

operator-(Volume);

D)Volumeoperator-(Volume,Volume);

(22)下列关于继承方式的描述中,错误的是(D) 

 A)如果不显式地指定继承方式,缺省的继承方式是私有(private)

  B)采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员

  C)采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员

D)采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员

(23)已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则:

D

  A)FA必须定义在FB之前

  B)FB必须定义在FA之前

  C)若FA定义在FB之后,则FA的原型必须出现在FB的定义之前

  D)若FB定义在FA之后,则FB的原型必须出现在FA的定义之前

(24)有如下两个类定义

  classAA{};

  classBB{

     AAv1,*v2;

     BBv3;

     int*v4;

  };

  其中有一个成员变量的定义是错误的,这个变量是:

C

   

A)v1  B)v2  C)v3  D)v4

(25)有如下类定义 (13)B:

  classXX{

      intxdata;

  public:

     XX(intn=0):

xdata(n){}

  };

  classYY:

publicXX{

     intydata;

  public:

     YY(intm=0,intn=0):

XX(m),ydata(n){}

  };

  YY类的对象包含的数据成员的个数是

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

(26)下列有关运算符函数的描述中,错误的是:

C

  A)运算符函数的名称总是以operator为前缀

  B)运算符函数的参数可以是对象

  C)运算符函数只能定义为类的成员函数

  D)在表达式中使用重载的运算符相当于调用运算符重载函数

(27)下列字符串可以用作C++标识符的是:

D

  A)2009var  B)goto  C)test-2009  D)_123

(28)下列枚举类型的定义中,包含枚举值3的是:

A

  A)enumtest{RED,YELLOW,BLUE,BLACK};

  B)enumtest{RED,YELLOW=4,BLUE,BLACK};

  C)enumtest{RED=-1,YELLOW,BLUE,BLACK};

  D)enumtest{RED,YELLOW=6,BLUE,BLACK};

(29)有如下程序段:

C

  inti=1;

  while

(1){

     i++;

     if(i==10)break;

     if(i%2==0)cout<<'*';

  }

  执行这个程序段输出字符*的个数是

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

(30)已知数组arr的定义如下:

D

  intarr[5]={1,2,3,4,5};

  下列语句中输出结果不是2的是

  A)cout<<*arr+1<

  C)cout<

(31)计算斐波那契数列第n项的函数定义如下:

B

  Intfib(intn){

     if(n==0)return1;

     elseif(n==1)return2;

     elsereturnfib(n-1)+fib(n-2);

  }

  若执行函数调用表达式fib

(2),函数fib被调用的次数是

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

 (32)Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是:

D

  Samplea[2],*p=newSample;

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

(33)下列关于虚基类的描述中,错误的是:

 C

  A)使用虚基类可以消除由多继承产生的二义性

  B)构造派生类对象时,虚基类的构造函数只被调用一次

  C)声明“classB:

virtualpublicA”说明类B为虚基类

  D)建立派生类对象时,首先调用虚基类的构造函数

(34)下列关于运算符重载的描述中,错误的是:

C

A):

:

运算符不能重载

B)类型转换运算符只能作为成员函数重载

C)将运算符作为非成员函数重载时必须定义为友元

D)重载[]运算符应完成“下标访问”操作

(35)有如下类定义 classA{

char*a;

public:

A():

a(0){}

A(char*aa){ //把aa所指字符串拷贝到a所指向的存储空间

a=          A     ;

strcpy(a,aa);

strcpy(a,aa);

}

~A(){delete[]a;}

};

横线处应填写的表达式是

A)newchar[strlen(aa)+1]              B)char[strlen(aa)+1]

C)char[strlen(aa)]                    D)newchar[sizeof(aa)-1]

(36)将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是:

(B)

  A)不合法的运算符  B)一元运算符  C)无操作数的运算符  D)二元运算符(37)下列选项中不属于结构化程序设计原则的是:

A

A)可封装B)自顶向下C)模块化D)逐步求精

第一章概述

1-1简述计算机程序设计语言的发展历程。

解:

迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。

1-2面向对象的编程语言有哪些特点?

解:

面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。

面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。

通过类的继承与多态可以很方便地实

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1