《面向对象程序设计第六章练习与思考题参考解答》由会员分享,可在线阅读,更多相关《面向对象程序设计第六章练习与思考题参考解答(14页珍藏版)》请在金锄头文库上搜索。
1、练习与思考题答案6-1请说明以卜.语句的区别(1)(a) mt* pti;/声明一个基类型为mt的指针变量ptr* ptr=240(V/给指针ptr中存放的地址所指向的存储空间的值赋值为2400(b) mt * pti;/ptr=2400;给指针变量ptr赋值为2400(2)(a) mtm=10;/声明并初始化一个mt型变量m为10mt *mpti-=&m;/声明并初始化指针变量mptr,将m的地址赋给mptr(b) mtm=10;/声明并初始化一个int型变量m为10mt * mpti-y/声明一个int型指针变量*mptr=m;/ /将 m 作为地址赋值给 mptr(3)(a) char
2、name=,Apple,V/声明并初始化字符数组name,字符串长度为6(b) charname=(tA,p,p,l,e,y/字符串长度为 56-2请完成以下变量的声明(1) 指向字符的指针变量char_ptr; char * char_ptr;(2) 10 个字符的数组 chai_anay; chai- chai_anay10;(3) 指向字符串的指针变量stimg_ptr; chai * suing_ptr;(4) 10 个字符串数组 string_array; char strmg_aiTay10N;(5) 指向字符串数组的指针变量 strmg_array_ptr; char (* st
3、img_aiTay_pti)NN6-3请详细说明以下使用指针或数组的程序片段有什么语法错误。(1) mt * age_ptr,test_pti;/test_ptr 并未声明为 int 型指针mt m=3;* age_pti-&m; test_ptr=&m;/ *age_ptr 和 test_ptr 都是 int 型变量,而&m 是 m 的地址, 不能把地址赋值给前者(2) mt * salai-y_ptr;float * working_pti-300.00;salary_pti-woiking_pti;/不能把float*转换为int*,所以不能赋值(3) mt mt_aiTayl 0;mt
4、 * int_pti-new int 10;mt_aiTay+;int_ptr+;/mt_array是整型数组名,是个常量指针,不能自加操作mt_aiTay=int_ptr/int_ptr是指针变量,而int_anay是常量指针,不能对常量指针赋值(4) extern int test(iiit);int (* fimc)(mt);声明函数指针,指向有一个参数,且参数类型为int型的函数 fiinc=&test();/Z函数指针调用方式为fiinc=test;函数名代表函数入I I地址(*fimc)+;/函数指针也是常量指针,不能进行自加运算(5) char * depart;char nam
5、e30;mt mt_aiTay3;depait=,Computer Science”;naine=-L1U Bing-;/name是常量指针,不能用赋值语句,只能声明用赋值运算时初始化 mt_aiTay=( 1,2,3 ; 常量指针无法赋值(6) char nanie4=Computer”,Department”,Software”,Engineering”;/第二个卜标不能 省略,应改为chai name12,第二个小标值不得小于其中最长字符串的长度int scores=(l,2),(3,4),(5,6jy/i改为 scores2float salaiy式 1,2,3,4,5,6;mt ma
6、x_number=4;/改为 const Hit max_number=4;声 明 max_number 为常 量double amountmax_number-J!数组卜标不能使用变量,应该用常量6-4以卜.程序片段在编译时不会出现任何语法错误,甚至连警告信息也没有,但它们在运 行期间可能引起致命的错误。请指出这些错误,并说明产生错误的原因。(1) mt * age_ptr;/指针没有指向任何地址,指针悬空int age=30;* age_ptr=age;(2) const hit student_numbei-20;mt scoresstudent_number;/从 scores0开始到
7、 scores19结束,共 20 个数据fbr(int i=i;iComputer,;Z/字符串实际长度为9。因为最后还有一个结束标 志,AT,下标越界char departnameJen=(om,p,u,;r/er;/字符串长度为 8if(strcmp(name,depart)=0)cout,Depart is equal to name.Xn;/结果不会相等(4) cosnt introw=2,col=2;float niatrixrowcol;fbr(int j=jv=n)w;j+)下标超过,matnx2 1 ,matrix2,matnx 1 为未知数据 fbr(int k=l;kzDe
8、panment of ”vvdepart”n”; delete depart;delete univ;(6) const mt msg_len=80;char * enoi_nisg=new charnisg_len+l;char * prompt_nisg=new chainisg_len+l;strcpy(em)r_msg, Character pomter enor.n”);运彳亍结果 出错prompt_nisg=eiTor_msg;/字符串不能用进行赋值,而只能采用strcpy函数 coutpiompCmsg,iVV/strcpy(prompt_nisg,enoi_nisg);把后者的
9、内容复制给前者 delete enor_msg;delete prompt_nisg;6-5请改正以卜程序中的错误,使得程序可以连续五次连续输出字符串string。#iiicludehitclw stnng30=HZhongshaii UniveisitynM;char * pti-stiing;/连续五次输出字符串for(int loop=0;loop=4;loop=loop+l)(错误原因:while 循环一次输出字符串后while(* ptr)(指针己经指向了字符串尾结束标志,0,cout*ptr;下次循环时,while循环条件为假,所以ptr=ptr+l;不执行循环体内语句。)pti=
10、stnng;/使指针重新指向字符串首地址letmn 0;6-6试指出以下main()主函数分别调用(1)、(2)、(3)中定义的函数fhnc()的输出结果。 #iiiclude/fimcO函数的适当说明(1)、(2)或(3)main()intx=5;nit v= 18;Jzfiinc(x,y);coutnX is ,x, Y is nyMnM;return 0;输出:A is 6, B is 16Xis 5,Yis 18输出:A is 6, B is 16Xis 5,Yis 16(3)输出:A is 6, B is 16Xis 6.Y1S 166-7试改正以卜使用枚举类型的程序中的语法错误。#
11、iiicludeenum COLOR(WHITE=2,/或把此处改为(WHITE),其值为0,则BLUE无需修改BLACK=1,BLUE/此处BLUE的值也为2,和WHITE重复,应改为除2之外的自他值比如(BLUE=3) ;此处分号;不可缺少/enum类型名常量1,常量2,,常量n;默认情况下常量1的值为0,常量2的值为1,依次 类推;若常量2被赋值为m,则常量3的值为m+1;(常量3未赋值情况下)。hitCOLOR color=BLACK;switch(color)(case WHITE:coutvv”Color is wliite.n;break;case BLACK:coutHColo
12、r is black.iin;break:case BLUE:coutnColor is blue.bieak;return 0;6-8 (略)6-9所谓n阶魔方阵是指每一行、每一列以及两个对角线上的n个自然数的和都相等的方 阵,以下程序用于生成m阶魔方阵(n为奇数),试填写程序中的空格,使其能正常地运行。 #iiiclude#iiicludeconst hit MAX_LEN=17+1;static int fill_magic(iiit magicMAX_LEN,mt magicjen);static int ptint_magic(int magicMAX_LEN.int niagicj
13、en);hitmt magicMAX_LENMAX_LEN;int magic_len;do(coutMPlease mput and odd positive integer0;coutvv”(v=y(MAX_LEN-l)vv”):“;cinniagic_len;wliile(magic_len=MAX_LEN) | |(niagic_len%2=0);filLmagic(magic,niagic_len);pnnt_niagic(magic,magic_len);return 0;mt fill_magic(iiit magic MAX_LEN,int magic Jen)int i,j,row,col,count;count=l;iow=l;col=magic len/2+1:/fbr(i= 1 ;i=niagic_len; i+) (fbr(j=l J=magic_lenJ+)niagicrowcol=count; count+;if(-rowiiiagic_len)col=l/ row+=2;if(rowniagic_len)