c面向对象程序设计语言重点难点复习题模拟自测题及答案.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《c面向对象程序设计语言重点难点复习题模拟自测题及答案.pdf》由会员分享,可在线阅读,更多相关《c面向对象程序设计语言重点难点复习题模拟自测题及答案.pdf(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习必备欢迎下载提示:1、本练习题、试题集全部来自网上共享资源,包括C+面向过程和面向对象的相关内容,今下载整理仅为便于复习、练习,请有选择地阅读;2、请同学们做练习题时先独立思考,再参考答案;附后有几套模拟试题,全部来自网上其他院校的期末试卷,供同学们模拟自测。3、试题量大,难免会有错误,请慎重选用、思考。1、数据共享与保护一、选择题:1、在下面存储类中, ( C ) 对象的可见性与生存期不一致。 A. 外部类 B. 自动类 C. 内部静态类 D. 寄存器类2、在下面存储类中,(A)的对象不是局部变量。 A. 外部静态类 B. 自动类 C. 函数形参 D. 寄存器类3、关于局部变量,下面说法
2、正确的是( C )。A. 定义该变量的程序文件中的函数都可以访问B. 定义该变量的函数中的定义处以下的任何语句都可以访问C. 定义该变量的复合语句中的定义处以下的任何语句都可以访问D. 定义该变量的函数中的定义处以上的任何语句都可以访问4、一个类的静态数据成员所表示属性 ( C )。 A. 是类的或对象的属性 B. 只是对象的属性 C. 只是类的属性 D. 类和友元的属性5、类的静态成员的访问控制( D )。A. 只允许被定义为private B. 只允许被定义为private 或 protected C. 只允许被定义为public D. 可允许被定义为private、protected 或
3、 public 6、静态成员函数对类的数据成员访问(B)。 A. 是不允许的 B. 只允许是静态数据成员 C. 只允许是非静态数据成员 D. 可允许是静态数据成员或非静态数据成员7、被非静态成员函数访问的类的数据成员( A ) 。 A. 可以是非静态数据成员或静态数据成员 B. 不可能是类的静态数据成员 C. 只能是类的非静态数据成员 D. 只能是类的静态数据成员8、静态数据成员的初始化是在(D )中进行的。学习必备欢迎下载 A. 构造函数 B. 任何成员函数 C. 所属类 D. 全局区9、当将一个类 A或函数 f() 说明为另一个类B的友元后,类 A或函数 f() 能够直接访问类 B的( D
4、 )。 A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员10、引入友元的主要目的是为了( C )。 A. 增强数据安全性 B. 提高程序的可靠性 C. 提高程序的效率和灵活性 D. 保证类的封装性11、 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( A )。 A. 需加上类域的限定 B. 不需加上类域的限定 C. 类域的限定可加可不加 D. 不需要任何限定二、判断题1、类的静态数据成员需要在定义每个类的对象时进行初始化。F2、当将一个类 S定义为另一个类A的友元类时,类 S的所有成员函数都可以直接访问类 A的所有成员。
5、 T3、静态数据成员必须在类外定义和初始化。T 4、静态成员函数可以引用属于该类的任何函数成员F。5、友元函数是在类声明中由关键字friend 修饰说明的类的成员函数。F 6、友元函数访问对象中的成员可以不通过对象名F 三、填空题:1、若“double x=100;”是文件 F1.CPP中的一个全局变量定义语句,若文件 F2.CPP中的某个函数需要访问此x , 则应在文件 F2.CPP中添加对 x 的声明语句为 Extern double x;2、如果一个函数定义中使用了static修饰,则该函数不允许被其它文件中的函数调用。3、定义外部变量时,不用存储类说明符Extern ,而声明外部变量时
6、用它。4、调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的头文件 。5、C+ 程序运行时的内存空间可以分成全局数据区,堆区,栈区和代码区。6、局部变量具有局部生存期,存放在内存的栈区中。7、对类中对象成员的初始化是通过在构造函数中给出的初始化表 来实现的。8、对类中常量成员的初始化是通过在构造函数中给出的初始化表 来实现的。9、对类中引用成员的初始化只能通过在构造函数中给出的初始化表 来实现。10、对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的函数体 来实现。11、假定要把aa 定义为 AB类中的一个常量整数型数据成员,则
7、定义语句const int aa。学习必备欢迎下载12、假定要把 aa 定义为 AB类中的一个引用整数型数据成员,则定义语句为int &aa 。13、假定 AB类中只包含一个整型数据成员a,并且它是一个常量成员, 若利用参数 aa 对其进行初始化,则该类的构造函数的定义为AB (int aa)a=aa; 。14、假定 AB类中只包含一个整型数据成员a,并且它是一个引用成员, 若利用 引 用 参 数aa 对其 进 行 初 始 化 , 则 该 类 的 构造 函 数 的 定义 为AB(int &aa)a=aa;。15、静态成员函数 能够直接访问类的静态数据成员,只能通过对象名访问类的非静态数据成员。
8、16、静态数据成员必须在所有函数的定义体外进行初始化 。17、一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上 类域的限定。四、修改程序题:下列程序段中, A_class 的成员函数 Variance() 可求出两数的平方差, 请改写该程序段,把Variance() 函数从 A_class 类中分离出来,用友元函数来实现该函数的功能。class A_class private: int x,y,t; public: A_class(int i,int j):x(i),y(j) if(yx)t=x;x=y;y=t; int Variance()return x*x-
9、y*y; /其它函数从略; void main() A_class A_obj(3,5); coutResult:A_obj.Variance()x)t=x;x=y;y=t; friend int Variance(); /其它函数从略; int variance () return x*x-y*y; 学习必备欢迎下载 void main() A_class A_obj(3,5); coutResult:A_obj.Variance()endl; 2、数组、指针与字符串一、选择题: 1 、在下面的一维数组定义中,哪一个有语法错误。(C ) A. int a=1,2,3; B. int a10=
10、0; C. int a; D. int a5; 2、在下面的字符数组定义中,哪一个有语法错误。(D)。 A. char a20=”abcdefg ”; B. char a=”x+y=55. ”; C. char a15; D. char a10=5; 3、在下面的二维数组定义中,正确的是( C ) 。 A. int a5; B. int a5; C. int a3=1,3,5,2; D. int a(10); 4、假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素 a12的值为(C )。 A. 2 B. 4 C. 6 D. 8 5、假定一个二维数组的定义语句为“int
11、 a34=3,4,2,8,6;”,则元素 a21的值为( A)。 A. 0 B. 4 C. 8 D. 6 6、若定义了函数 double *function(), 则函数 function的返回值为(B)。 A. 实数型 B.实数的地址 C.指向函数的指针 D.函数的地址7、以下函数的返回结果是( A )。 int function(char *x) char *p=x; while(*p+); return(p-x-1); A. 求字符串的长度 B.将字符串 x 连接到字符串 p后面 C. 将字符串 x 复制到字符串 p 中 D.将字符串 x 反向存放8、设有如下函数定义 int f(cha
12、r *s) char *p=s; while(*p!=0) p+; return(p-s); 在主函数中用 coutf( “good”)调用上述函数 , 则输出结果为( B )。学习必备欢迎下载 A. 3 B. 4 C. 5 D. 69、假定变量 m定义为“ int m=7; ”,则定义变量 p 的正确语句为(B )。 A. int p=&m; B. int *p=&m; C. int &p=*m; D. int *p=m;10、变量 s 的定义为“ char *s= ”Hello world!”; ”,要使变量 p 指向 s 所指向的同一个字符串,则应选取( A)。 A. char *p=s
13、; B. char *p=&s; C. char *p;p=*s; D. char *p; p=&s11、关于 void 指针,下列说法正确的是(C )。 A. void 指针就是未指向任何数据的指针 B. void 指针就是已定义而未初始化的指针 C. 指向任何类型数据的指针可直接赋值给一个void 指针 D. void 指针值可直接赋给一个非void 指针12、假定一条定义语句为“ int a10, x, *pa=a;”,若要把数组 a 中下标为 3的元素值赋给 x,则不正确的语句为( D)。 A. x=pa3; B. x=*(a+3); C. x=a3; D. x=*pa+3; 13、假
14、定有定义“ int b10; int *pb;”,则不正确的赋值语句为(D )。 A. pb=b; B. pb=&b0; C. *pb=new int; D. pb=b5; 14、假定 p 是具有 double 类型的指针变量,则表达式+p使 p 的值(以字节为单位)增加(C )。 A. 1 B. 4 C. sizeof(double) D. sizeof(p) 15、假定 p 指向的字符串为” string ”,则 coutp+3 的输出结果为(C)。 A. string B. ring C. ing D. i 16、假定 p 指向的字符串为” string ”,若要输出这个字符串的地址值,
15、则使用( D )。 A. cout*s; B. couts; C. cout&s; D. coutnext和 elemHead D. elemTail-next和 elemTail 26、在一个用链表实现的队列类中,假定每个结点包含的值域用elem 表示,包含的指针域用 next 表示,链队的队首指针用elemHead表示,队尾指针用elemTail 表示,若链队为空,则进行插入时必须把新结点的地址赋给( C ) 。 A. elemHead B. elemTail C. elemHead和 elemTail D. elemHead或 elemTail 27、当类中的一个整型指针成员指向一块具有
16、n*sizeof(int)大小的存储空间时,它最多能够存储 ( A ) 个整数。 A. n B. n+1 C. n-1 D. 128、假定 AB为一个类,则执行“AB *px=new ABn; ”语句时将 ( A ) 。 A. 动态分配一个数组 B. 动态分配一个对象 C. 静态分配一个数组 D. 静态分配一个对象29、设 px 是指向一个类对象的指针变量,则执行“delete px; ”语句时,将自动调用该类的 ( C ) 。 A. 无参构造函数 B. 带参构造函数 C. 析构函数 D. 拷贝构造函数30、当一个类对象离开它的作用域时,系统自动调用该类的( D ) 。 A. 无参构造函数 B
17、. 带参构造函数 C. 拷贝构造函数 D. 析构函数31、假定一个类对象数组为An ,当离开它定义的作用域时,系统自动调用该类析构函数的次数为 ( C ) 。 A. 0 B. 1 C. n D. n-132、假定 AB为一个类,则执行“AB a10; ”语句时调用该类无参构造函数的次数为 ( D ) 。 A. 0 B. 1 C. 9 D. 10 33、假定 AB为一个类,则执行“AB *px=new ABn; ”语句时调用该类无参构造函数的次数为 ( A ) 。 A. n B. n-1 C. 1 D. 0 学习必备欢迎下载34、假定 AB为一个类,则执行“AB a, b(3), *p;”语句时
18、共调用该类构造函数的次数为 ( A )。 A. 2 B. 3 C. 4 D. 5 35、假定 AB为一个类,则执行“AB a(2), b3, *p4;”语句时共调用该类构造函数的次数为 ( B )。 A. 3 B. 4 C. 5 D. 9 36、假定 AB为一个类,则执行“ AB a, b(2), c3, *p=&a;”语句时共调用该类无参构造函数的次数为( D ) A. 5 B. 6 C. 3 D. 4 37、假定 AB为一个类,则执行“ AB *p=new AB(1,2); ”语句时共调用该类构造函数的次数为 ( B ) 。 A. 0 B. 1 C. 2 D. 3 38、假定 AB为一个类
19、, px 为指向该类的一个含有n 个对象的动态数组的指针,则执行“ delete px;”语句时共调用该类析构函数的次数为( C ) 。 A. 0 B. 1 C. n D. n+1二、填空题:1、用于存储一个长度为n 的字符串的字符数组的长度至少为_n+1_。2、若 a 是一个字符数组,则从键盘上向该数组输入一个字符串的表达式为_getline(cin,a);_。3、若a 是一个字符数组,则向屏幕输出a 中所存字符串的表达式为_couta_。4、一个二维字符数组a1020能够存储 _10_个字符串,每个字符串的长度至多为 _19_。5、对一个二维字符数组a 进行初始化的数据为 ”123”,”4
20、56”,”789” ,则 a1 元素对应的字符串为 _”456”_。6、 strlen(” apple ” )的值为 _5_, strcmp( ” a” ,” A” )的值为 _1_。7、假定对数组 a 进行初始化的数据为 2,7,9,6,5,7,10,则 a2 和 a5分别被初始化为 _9_和_7_。8、假定对二维数组a34进行初始化的数据为 3,5,6,2,8,7,则a11和 a23分别被初始化为 _8_和_0_。9、若二维数组 a 有 m列,设 a00位于数组的第一个位置上, 则计算任一元素 aij在数组中位置序号的公式为_i*m+j+1_ _。10、若有定义“ double a35;”
21、,则 a 数组中行下标和列下标的最大值分别为_2_和_4_。11、一个指针类型的对象占用内存的_4_个字节的存储空间。12、一个指针指向一个数据对象,它保存着该数据对象的 _地址_,若数据对象为 DataType 类型,则相应的指针类型为_Datatype* _。13、 若要把一个整型指针p 转换为字符指针,则采用的强制转换表达式为_(char*)p_ _。14、假定一个数据对象为int* 类型,则指向该对象的指针类型为_int 学习必备欢迎下载*_ _。15、假定 p 是一个指向整数对象的指针,则用_*P_表示该整数对象,用_P_表示指针变量 p 的地址。16、假定 p 是一个指针,则*p+
22、运算首先访问 _*p_, 然后使 p_的值增 1。17、假定 p 是一个指针,则 (*p)+ 运算首先访问 _*p_,然后使 _*p_的值增 1。18、 假定 p 所指对象的值为25,p+1 所指对象的值为42,则*p+的值为_25_。19、假定 p 所指对象的值为25,p+1 所指对象的值为42,则*+p 的值为_42_。20、假定 p 所指对象的值为 25,p+1所指对象的值为42,则执行 (*p)+ 运算后,p 所指对象的值为 _26_。21、 假定 p 所指对象的值为 25, p+1所指对象的值为 42, 则执行 *(p+) 或*p+运算后, p 所指对象的值为 _42_。22、 假定
23、 a 是一个一维指针数组, 则 a+i 所指对象的地址比a 大_4*i_ _字节。23、 假定 a 是一个一维数组,则ai 的指针访问方式为 _*(a+i )_。24、假定 a 是一个一维数组,则ai对应的存储地址(以字节为单位)为_a+i*sizeof(ai)_。25、一个数组的数组名实际上是指向该数组_首_元素的指针, 并且在任何时候都不允许 _ _修改_它。26、假定指向一维数组b10 中元素 b4 的指针为 p,则 p+3所指向的元素为_b7_ _,p-2 所指向的元素为 _b2 _。27、 若 要 定 义 整 型 指 针 p 并 初 始 指 向 x, 则 所 使 用 的 定 义 语
24、句 为_int*p=&x_ _。28、 若 p 指向 x,则_*p_与 x 的表示是等价的。29、在一个二维数组int amn 中,包含的一维元素ai的类型为 _ intn_,访问 ai时返回值的类型为 _ int*_。30、 假定一个二维数组为c58, 则 c3 的值为二维元素 c30_的地址, c3+2 的值为二维元素 _c32_的地址。31、假定 p 为指向二维数组int d46的指针,则 p的类型为 _int (*)6 _。32、假定 a 是一个二维数组, 则 aij的指针访问方式为 _*(*(a+i )+j )_。33、 执 行 int p=new int操 作 得 到 的 一 个
25、动 态 分 配 的 整 型 对 象 为_*p_。 34 、执行 int *p=new int10操作,使 p 指向动态分配的数组中下标为0的元素,该元素可表示为_*p_或_p0_ _。35、 执行 char *p=new char( a) 操作后, p 所指向的数据对象的值为_a_。36、 执行 new charmn操作时的返回值的类型为_char(*)n_。37、执行 _delete_p_ _操作将释放由 p 所指向的动态分配的数据空间。38、执行_deletep_操作将释放由 p 所指向的动态分配的数组空间。39、 NULL 是一个符号常量,通常作为空指针值,它的具体值为_0_。学习必备欢
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计语言 重点难点 复习题 模拟 自测 答案
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内