c重点难点复习题及答案_第1页
c重点难点复习题及答案_第2页
c重点难点复习题及答案_第3页
c重点难点复习题及答案_第4页
c重点难点复习题及答案_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、数据共享与保护一、选择题:1、在下面存储类中, ( C 对象的可见性与生存期不一致。A. 外部类 B. 自动类 C. 内部静态类 D. 寄存器类2、在下面存储类中,( A )的对象不是局部变量。A. 外部静态类 B. 自动类 C. 函数形参 D. 寄存器类3、关于局部变量,下面说法正确的是( C 。A. 定义该变量的程序文件中的函数都可以访问B. 定义该变量的函数中的定义处以下的任何语句都可以访问C. 定义该变量的复合语句中的定义处以下的任何语句都可以访问D. 定义该变量的函数中的定义处以上的任何语句都可以访问4、一个类的静态数据成员所表示属性 ( C 。A. 是类的或对象的属性 B. 只

2、是对象的属性C. 只是类的属性 D. 类和友元的属性 5、类的静态成员的访问控制( D )。A. 只允许被定义为privateB. 只允许被定义为private或protected C. 只允许被定义为public D. 可允许被定义为private、protected或public6、静态成员函数对类的数据成员访问( B )。A. 是不允许的 B. 只允许是静态数据成员 C. 只允许是非静态数据成员 D. 可允许是静态数据成员或非静态数据成员7、被非静态成员函数访问的类的数据成员( A 。A. 可以是非静态数据成员或静态数据成员 B. 不可能是类的静态数据成员C. 只能是类的非静态数据成员

3、D. 只能是类的静态数据成员8、静态数据成员的初始化是在( D )中进行的。A. 构造函数 B. 任何成员函数C. 所属类 D. 全局区9、当将一个类A或函数f(说明为另一个类B的友元后,类A或函数f(能够直接访问类B的( D )。A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员10、引入友元的主要目的是为了( C )。A. 增强数据安全性 B. 提高程序的可靠性C. 提高程序的效率和灵活性 D. 保证类的封装性11、 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( A )。A. 需加上类域的限定 B. 不需加上类域的限

4、定C. 类域的限定可加可不加 D. 不需要任何限定二、判断题1、类的静态数据成员需要在定义每个类的对象时进行初始化。F2、当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。T3、静态数据成员必须在类外定义和初始化。T4、静态成员函数可以引用属于该类的任何函数成员F。5、友元函数是在类声明中由关键字friend修饰说明的类的成员函数。F6、友元函数访问对象中的成员可以不通过对象名F三、填空题:1、若“double x=100;”是文件F1.CPP中的一个全局变量定义语句,若文件F2.CPP中的某个函数需要访问此x , 则应在文件

5、F2.CPP中添加对x的声明语句为Extern double x;2、如果一个函数定义中使用了static修饰,则该函数不允许被其它文件中的函数调用。3、定义外部变量时,不用存储类说明符Extern,而声明外部变量时用它。4、调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的头文件。5、C+程序运行时的内存空间可以分成全局数据区,堆区,栈区和代码区。6、局部变量具有局部生存期,存放在内存的栈区中。7、对类中对象成员的初始化是通过在构造函数中给出的初始化表来实现的。8、对类中常量成员的初始化是通过在构造函数中给出的初始化表来实现的。9、对类中引用成员的初始化只能通过在构造

6、函数中给出的初始化表来实现。10、对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的函数体来实现。11、假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句const int aa。12、假定要把aa定义为AB类中的一个引用整数型数据成员,则定义语句为int &aa。13、假定AB类中只包含一个整型数据成员a,并且它是一个常量成员,若利用参数aa对其进行初始化,则该类的构造函数的定义为AB (int aaa=aa;。14、假定AB类中只包含一个整型数据成员a,并且它是一个引用成员,若利用引用参数aa对其进行初始化,则该类的构造函数的定

7、义为AB(int &aaa=aa;。15、静态成员函数能够直接访问类的静态数据成员,只能通过对象名访问类的非静态数据成员。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,

8、y(j if(y>xt=x;x=y;y=t;int Variance(return x*x-y*y; /其它函数从略;void main( A_class A_obj(3,5;cout<<"Result:"< 修改后的源程序:class A_class private:int x,y,t; public:A_class(int i,int j:x(i,y(j if(y>xt=x;x=y;y=t;friend int Variance(; /其它函数从略;int variance (return x*x-y*y;void main( A_clas

9、s A_obj(3,5;cout<<"Result:"< 2、数组、指针与字符串一、 1、在下面的一维数组定义中,哪一个有语法错误。( C ) A. int a=1,2,3; B. int a10=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

10、,2; D. int a(10;4、假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素a12的值为( C )。A. 2 B. 4 C. 6 D. 85、假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素a21的值为( A )。A. 0 B. 4 C. 8 D. 66、若定义了函数 double *function(, 则函数function的返回值为( B )。A. 实数型 B.实数的地址 C.指向函数的指针 D.函数的地址7、以下函数的返回结果是( A )。int function(char *x char *p=x; while(*p+;

11、 return(p-x-1;A. 求字符串的长度 B.将字符串x连接到字符串p后面C. 将字符串x复制到字符串p中 D.将字符串x反向存放8、设有如下函数定义 int f(char *s char *p=s;while(*p!=0 p+;return(p-s;在主函数中用cout< “ 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;1

12、0、变量s的定义为“char *s=”Hello world!”;”,要使变量p指向s所指向的同一个字符串,则应选取( A )。A. char *p=s; 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

13、中下标为3的元素值赋给x,则不正确的语句为( D )。A. x=pa3; B. x=*(a+3; C. x=a3; D. x=*pa+3;13、假定有定义“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(p15、假定p指向的字符串为”string”,则cout< 的输出结果为( C )。 A. str

14、ing B. ring C. ing D. i16、假定p指向的字符串为”string”,若要输出这个字符串的地址值,则使用( D )。A. cout<<*s; B. cout< 17、定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为( A )。A. int *p=new int30; B. int *p=new int(30; C. int *p=new 30; D. *p=new int30;18、假定p是具有int*类型的指针变量,则给p赋值的正确语句为( B )。A. p=new int; B. p=new int*; C. p=new int*;

15、D. p=new int10;19、要使语句“p=new int1020;”能够正常执行,p应被事先定义为( D )。A. int *p; B. int *p; C. int *p20; D. int(*p20;20、假定变量a和pa定义为“double a10, *pa=a;”,要将12.35赋值给a中的下标为5的元素,不正确的语句是( D )。A. pa5=12.35; B. a5=12.35; C. *(pa+5=12.35; D. *(a0+5=12.35;21、假定变量b和pb定义为“int b10, *pb=b;”,要将24赋值给b1元素中,不正确的语句是( C )。A. *(pb

16、+1=24; B. *(b+1=24; C. *+b=24; D. *+pb=24;22、假定指针变量p定义为“int *p=new int(100;”,要释放p所指向的动态内存,应使用语句( A )。A. delete p; B. delete *p; C. delete &p; D. delete p;23、假定指针变量p定义为“int *p=new int30;”,要释放p所指向的动态内存,应使用语句( D )。A. delete p; B. delete *p; C. delete &p; D. delete p;24、当类中一个字符指针成员指向具有n个字节的存储空间时

17、,它所能存储字符串的最大长度为( C 。A. n B. n+1 C. n-1 D. n-225、在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给( D 。A. elemHead B. elemTailC. elemHead->next和elemHead D. elemTail->next和elemTail26、在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用el

18、emHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新结点的地址赋给( C 。A. elemHead B. elemTailC. elemHead和elemTail D. elemHead或elemTail27、当类中的一个整型指针成员指向一块具有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是指向一个类对象的

19、指针变量,则执行 “delete px;”语句时,将自动调用该类的( C 。A. 无参构造函数 B. 带参构造函数 C. 析构函数 D. 拷贝构造函数30、当一个类对象离开它的作用域时,系统自动调用该类的( D 。A. 无参构造函数 B. 带参构造函数 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. 1033、假定AB为一个类,则执行 “AB

20、 *px=new ABn;”语句时调用该类无参构造函数的次数为( A 。A. n B. n-1 C. 1 D. 034、假定AB为一个类,则执行 “AB a, b(3, *p;”语句时共调用该类构造函数的次数为( A 。A. 2 B. 3 C. 4 D. 535、假定AB为一个类,则执行 “AB a(2, b3, *p4;”语句时共调用该类构造函数的次数为( B 。A. 3 B. 4 C. 5 D. 936、假定AB为一个类,则执行“AB a, b(2, c3, *p=&a;”语句时共调用该类无参构造函数的次数为( D A. 5 B. 6 C. 3 D. 437、假定AB为一个类,则执

21、行“AB *p=new AB(1,2;”语句时共调用该类构造函数的次数为( B 。A. 0 B. 1 C. 2 D. 338、假定AB为一个类,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中所存字符串的表达式为_cout< _ 。 4、一个二维字符数组a10

22、20能够存储_10_个字符串,每个字符串的长度至多为_19_。5、对一个二维字符数组a进行初始化的数据为”123”,”456”,”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+

23、1_。 10、若有定义“double a35;”,则a 数组中行下标和列下标的最大值分别为_2_和_4_。11、一个指针类型的对象占用内存的_4_个字节的存储空间。12、 一个指针指向一个数据对象,它保存着该数据对象的_地址_,若数据对象为DataType类型,则相应的指针类型为_Datatype*_。13、 若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为_(char*p_。14、假定一个数据对象为int*类型,则指向该对象的指针类型为_int *_。15、假定p是一个指向整数对象的指针,则用_*P_表示该整数对象,用_P_表示指

24、针变量p的地址。16、 假定p是一个指针,则*p+运算首先访问_*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、假定a是一个一维

25、指针数组,则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,则所使用的定义语句为_int*p=&x_。28、 若p指向x,则_*p_与x的表示是等价的。

26、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操作得到的一个动态分配的整型对象为_*p_。  34、执行int *p=new int10操作,使p指向

27、动态分配的数组中下标为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_。40、变量v定义为“double v=23.4;”,要使指针pv指向v,则定义pv的语句为

28、_double *pv=&v_。41、 已知语句“cout< ”的输出是“ Hello! ”,则语句“ cout<<*p; ”输出的是 _ H_ _ 。 42、. 已知语句“cout< ”的输出是“ apple ”,则执行语句“ cout< ”的输出结果为 _ple_ _ 。 43、 指针变量pv和pc定义为“void *pv =”Hello, word!”; char *pc;”,要将pv值赋给pc,则正确的赋值语句是_ strcpy(pc,pv);pc=char(*pv_。

29、44、 数组b定义为“int b20100;”,要使pjk 与bjk 等效,则指针p应定义为_int (*p100=b _。45、 与结构成员访问表达式p->name等价的表达式是_(*_。46、 与结构成员访问表达式(*fp.score等价的表达式是_fp->score_。47、已知有定义“int x, a=5,7,9, *pa=a;”,在执行“x=+*pa;”语句后,x的值是_6_。48、已知有定义“int x, a=6,10,12, *pa=a;

30、”,在执行“x=*+pa;”语句后,*pa的值是_10_。49、已知有定义“int x, a=15,17,19, *pa=a;”,在执行“x=*pa+;”后,*pa的值是_17_。50、若采用p->abc(y表达式调用一个成员函数,在成员函数中使用的_this_就代表了类外的p指针。 51、在一个用数组实现的队列类中,包含有两个数据成员,一个指明队首元素位置,另一个指明_队列长度_。52、在一个用数组实现的队列类中,包含有两个数据成员,一个指明队列长度,另一个指明_队首_元素的位置。53、在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置

31、为first,队列长度为length,则插入一个新元素的位置为_(first+lengthMS_。54、在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则删除一个元素后队首的位置为_(first+1)MS _。55、定义类动态对象数组时,其元素只能靠自动调用该类的_无参构造函数_来进行初始化。56、为了释放类对象中指针成员所指向的动态存储空间,则需要为该类定义_析构函数_。57、假定 AB为一个类,则执行“AB a10;”语句时,系统自动调用该类构造函数的次数为_10_。58、假定一个类对象数组为AN,当离开它的作用域时,系

32、统自动调用该类析构函数的次数为_N_。60、假定指针p指向一个动态分配的类对象,则当执行“delete p;”语句时,在释放p所指向的动态存储空间之前将自动调用该类的_析构函数_。61、假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条_deletepa;_语句。三、程序填空题:1、采用指针访问方式从键盘给数组aN输入数据,然后对元素值重新按逆序存放并输出。#include const int N=8;void main(int aN,*p,*q;for(p=a; p cin>>*p ; p=a;q=a+N-1;while(

33、pint r=*p; *p=*q; *q=r;p+; q+;for(p=a;p cout<<*p<<' 'cout< 1、 (1 cin>>*p (2 p+ (或+p (3 q- (或-q2、假定有定义为“struct NODEint data; NODE* next;”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。void f6(NODE*& L, int table, int n L=NULL;if(n<=0 return;int i=0; NODE*

34、 p;while(_ (1_ p=new NODE;p->data=_ _(2_;p->next=L;_(3_;i+;2、(1 i 3、已知一维数组类ARRAY的定义如下,构造函数的作用是把参数n的值赋给s,给v动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。class ARRAY int *v; /指向存放数组数据的空间int s; /数组大小 public: ARRAY(int a, int n; ARRAY(delete v;int size( return s; int& operator(int n; ;_(1_ ARRAY(int a, in

35、t nif(n<=0 v=NULL;s=0;return;s=n;v=_ (2_;for(int i=0; i 3、 (1 ARRAY: (2 new intn (3 vi=ai4、下面是一维数组类ARRAY的定义,ARRAY与普通一维数组区别是:(a用(而不是进行下标访问,(2下标从1而不是从0开始,(c要对下标是否越界进行检查。class int *v; /指向存放数组数据的空间int s; /数组大小 public: ARRAY(int a, int n; ARRAY(delete v;int size( return s; int& operator(int n; _(1

36、_ operator(int n / (的运算符函数定义 if(_(2_ cerr<<"下标越界!" exit(1;return _(3_;4、(1 int& ARRAY: (2 n<1 | n>s (3 vn-1 (或*(v+n-15、已知一个类的定义如下:#include class AA int a10;int n;public:void SetA(int aa, int nn; /用数组aa初始化数据成员a,/用nn初始化数据成员nint MaxA(; /从数组a中前n个元素中查找最大值void SortA(; /采用选择排序的方法对

37、数组a中前n个元素/进行从小到大排序void InsertA(;/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(; /依次输出数组a中的前n个元素;该类中MaxA(函数的实现如下,请在标号位置补充适当的内容。int _ _(1_ int x=a0;for(int i=1; i if(ai>x _ _(2_;_(3 _;5、(1 AA:MaxA( (2 x=ai (3 return x6、已知一个类的定义如下:#include class AA int a10;int n;public:void SetA(int aa, int nn; /用数组aa初始化数

38、据成员a,/用nn初始化数据成员nint MaxA(; /从数组a中前n个元素中查找最大值void SortA(; /采用选择排序的方法对数组a中前n个元素/进行从小到大排序void InsertA(;/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(; /依次输出数组a中的前n个元素;void AA:SortA(int i,j;for(i=0; _ _(1_; i+ int x=ai, k=i;for(j=i+1; j if(aj ak=ai;_(3_;6、(1 i 或 i<=n-2 (b x=aj; k=j; (c ai=x 7、已知一个类的定义如下:#

39、include class AA int a10;int n;public:void SetA(int aa, int nn; /用数组aa初始化数据成员a,/用nn初始化数据成员nint MaxA(; /从数组a中前n个元素中查找最大值void SortA(; /采用选择排序的方法对数组a中前n个元素/进行从小到大排序void InsertA(;/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(; /依次输出数组a中的前n个元素;void _(1_ int i,j;for(i=1; i int x=ai;for(j=i-1; j>=0; j-if(x el

40、se _(3_;aj+1=x;7、(1 AA:InsertA( (2 aj+1=aj (3 break 8、已知一个类的定义如下:#include class AA int a10;int n;public:void SetA(int aa, int nn; /用数组aa初始化数据成员a,/用nn初始化数据成员nint MaxA(; /从数组a中前n个元素中查找最大值void SortA(; /采用选择排序的方法对数组a中前n个元素/进行从小到大排序void InsertA(;/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(; /依次输出数组a中的前n个元素/最

41、后输出一个换行;使用该类的主函数如下:void main(int a10=23,78,46,55,62,76,90,25,38,42;AA x; _ _(1_;int m=_(2_;_(3_;cout< 该程序运行结果为:23 78 46 55 62 76788、(1 x.SetA(a,6 (2 x.MaxA( (3 x.PrintA( 9、已知一个类的定义如下:#include class AA int a10;int n;public:void SetA(int aa, int nn; /用数组aa初始化数据成员a,/用nn初始化数据成员nint MaxA(; /从数组a中前n个元素

42、中查找最大值void SortA(; /采用选择排序的方法对数组a中前n个元素/进行从小到大排序void PrintA(; /依次输出数组a中的前n个元素,/最后输出一个换行;使用该类的主函数如下:void main(int a10=23,78,46,55,62,76,90,25,38,42;_ _(1_; x.SetA(a,8;int _(2_;_(3_;x.PrintA(;cout< 该程序运行结果为:23 25 46 55 62 76 78 90909、(1 AA x (2 m=x.MaxA( (3 x.SortA(10、class A int a;public:A( a=0;_(

43、1_ /定义构造函数,用参数aa初始化数据成员a;main( _(2_; /定义类A的指针对象p_(3_; /用p指向动态对象并初始化为整数510、 答案:(1 A(int aa:a(aa(2 A *p 11、class A char *a;public:_(1_ /定义无参构造函数,使a的值为空A(char *aa a=_(2_; strcpy(a,aa; /用aa所指字符串初始化a所指向的动态存储空间_ _(3_ /定义析构函数,删除a所指向的动态存储空间;(3 p=new A(511、 答案:(1 A( a=0; 或A(:a(0 注:数据0可用NULL代替(2 new charstrle

44、n(aa+1(3 A( delete a;12、class A int a,b;public:A(int aa=0, int bb=0 _(1_ /分别用aa和bb对应初始化a和b;main( _(2_ ; /定义类A的对象x并用5初始化,同时定义y并用x初始化_(3_ ; /定义p指针,使之指向对象x12、 答案:(1 :a(aa,b(bb(2 A x(5,y(x 注:x(5与x=5等效,y(x 与y=x等效(3 A *p=&x13、class A int a,b;public:_(1_ /定义构造函数,使参数aa和bb的默认值为0,/在函数体中用aa初始化a,用bb初始化b;mai

45、n( A *p1, *p2;_(2_ ; /调用无参构造函数生成由p1指向的动态对象_(3_ ; /调用带参构造函数生成由p2指向的动态对象,/使a和b成员分别被初始化为4和513、 答案:(1 A(int aa=0, int bb=0a=aa; b=bb;(2 p1=new A (3 p2= new A(4,514、 一种类定义如下:class Goodsprivate:char gd_name20; /商品名称int weight; /商品重量static int totalweight; /同类商品总重量public:Goods (char*str,int w /构造函数strcpy(g

46、d_name,str;weight=w;totalweight+=weight; Goods (totalweight -= weight; char* GetN(_(1_; /返回商品名称int GetW(return weight;_(2_ GetTotal_Weight( /定义静态成员函数返回总重量_(3_;14、(1 return gd_name (2 static int (3 return totalweight四、阅读程序题:1、 #include #include void main( char a510="student","worker&qu

47、ot;,"soldier","cadre","peasant"char s110, s210;strcpy(s1,a0; strcpy(s2,a0;for(int i=1;i<5;i+ if(strcmp(ai, s1>0 strcpy(s1,ai;if(strcmp(ai, s2<0 strcpy(s2,ai;cout< 2、 #include #include class CD char* a;int b;public:void Init(char* aa, int bba=new charstrlen(a

48、a+1;strcpy(a,aa;b=bb;char* Geta( return a;int Getb( return b;void Output( cout< dx;void main(CD dy;dx.Init("abcdef",30;dy.Init("shenyafen",3*dx.Getb(+5;dx.Output(;dy.Output(;abcdef 30shenyafen 953、#include #include class CD char* a;int b;public:void Init(char* aa, int bba=new

49、charstrlen(aa+1;strcpy(a,aa;b=bb;char* Geta( return a;int Getb( return b;void Output( cout< ;void main(CD dx,dy;char a20;dx.Init("abcdef",30;strcpy(a,dx.Geta(;strcat(a,"xyz"dy.Init(a,dx.Getb(+20;dx.Output(;dy.Output(;abcdef 30abcdefxyz 50 4、#include #include class A char *a;pu

50、blic:A(char *s a=new charstrlen(s+1;strcpy(a,s;cout< A( delete a; cout<<"Destructor!"< ;void main( A x("xuxiaokai"A *y=new A("weirong"delete y;xuxiaokaiweirongDestructor!Destructor!5、#include class A int a;public:A(int aa=0: a(aa cout< A( cout<<&quo

51、t;Xxk"void main( A *p; A x3=1,2,3,y=4;cout< p=new A3;cout< delete p;cout< 1 2 3 40 0 0XxkXxkXxkXxkXxkXxkXxk五、程序改错1. 在下面的定义中,NODE是链表结点的结构,appendToList则是一函数,其功能是:在list所指向的链表的末尾添加一个新的值为x的结点,并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。struct NODEint data;NODE *next;NODE* appendToList(NODE *list, in

52、t x /1行NODE *p=new int; /2行p->data=x; /3行p->next=NULL; /4行if(list=NULL return p; /5行NODE *p1=list; /6行while(p1->next!=NULL p1=p1->next; /7行,链表非空先找到表尾p1=p; /8行,让原表尾指针指向新添加的结点return list; 错误行的行号为_2_和_8_。分别改正为NODE *p=new NODE;和_strcpy(p1,p_ p1->next=p; _。 2、 假定要求下面程序输出结果为“d=800,f=60”,在第4-23行中存在着三条语句错误,请指出错误语句的行号并改正。#include class A /1行int a10; int n; /2行public: /3行A(int aa, int nn: n(nn /4行for(int i=0; i aai=ai ; /5 行 /6行int Get(int i return ai; /7行int SumA(int n; /8行; /9行int A:SumA(int n /10行int s=0; /11行for(int j=0; j 行 return s; /13行 /14行void main( /15行int a=2,5,8,10,15,20;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论