![点击分享此内容可以赚币 分享](/master/images/share_but.png)
编译原理陈意云课后答案市公开课一等奖百校联赛获奖课件.pptx
《编译原理陈意云课后答案市公开课一等奖百校联赛获奖课件.pptx》由会员分享,可在线阅读,更多相关《编译原理陈意云课后答案市公开课一等奖百校联赛获奖课件.pptx(43页珍藏版)》请在咨信网上搜索。
1、编译原理习题课编译原理习题课(4)栾 俊10/10/10/10/第1页6.1使用Pascal作用域规则,确定下面程序中用于名字a,b每个出现申明。程序输出整数1,2,3,4 program a(input output);procedure b(u,v,x,y:integer);var a:record a,b:integer end;b:record b,a:integer end;begin with a do begin a:=u;b:=v end;with b do begin a:=x;b:=y end;writeln(a.a,a.b,b.a,b.b)end;begin b(1,2,
2、3,4)end.10/10/第2页6.1(续续)with aarecorda:=uaa.ab:=vba.bwith bbrecorda:=xab.ab:=ybb.b10/10/第3页6.2考虑下面C程序 main()char*cp1,*cp2;cp1=“12345”;cp2=“abcdefghij”;strcpy(cp1,cp2);printf(“cp1=%s n cp2=%s n”,cp1,cp2);该程序经以前一些C编译器编译后,运行结果为:cp1=abcdefghij cp2=ghij 试分析为何cp2被修改10/10/第4页6.2(续续)C语言中,字符串会添加0作为串结束符,所以,串”
3、12345”存放为”123450”,而串”123450abc0”打印出来只有12345常量区连续分配因而本题中”12345”和”abcdefghij”存放为1 2 3 4 5 0 a b c d e f g h i j 0cp1 cp2拷贝后结果为a b c d e f g h i j 0 f g h i j 0cp1 cp2当代编译器编译经过,执行时会犯错。(GCC:段错误/VC 非法访问)10/10/第5页6.3一个C程序以下:typedef struct _a char c1;long I;char c2;double f;a;typedef struct _b char c1;char
4、 c2;long l;double f;b;main()printf(“Size of double,long,char=%d,%d,%dn”,sizeof(double),sizeof(long),sizeof(char);printf(“Size of a,b=%d,%dn”,sizeof(a),sizeof(b);该程序在SPARC/Solaris工作站上运行结果以下:Size of double,long,char=8,4,1Size of a,b=24,16试分析为何10/10/第6页6.3(续续)数据对齐:为了寻址方便A:charOXXXlongOOOOcharOXXX XXXXd
5、oubleOOOO OOOOB:charOcharOXXlongOOOO doubleOOOO OOOO能够用gcc S命令查看编译后汇编码VC下能够在debug模式下,菜单栏View-Debug Windows中 Dissassenbly查看编译后汇编码GCC:(GNU)3.2.2(Red Hat Linux 3.2.2-5)结果为20,1610/10/第7页6.3(续续)#include static struct _achar c1;long i;char c2;double f;a =A,1,B,1.0;VC6下,Debug模式Memory窗口查看GCC:(GNU)3.2.2 0222
6、(Red Hat Linux 3.2.2-5)|A|1|B|1.0|10/10/第8页6.4下面给出一个C程序及其在X86/Linux下编译结果,依据所生成汇编程序来解释程序中4个变量存放分配、作用域、生成期和置初始值方式区分static long aa=10;short bb=20;func()static long cc=30;short dd=40;生成汇编代码:10/10/第9页6.4(续续).file static.c“.version“01.01”gcc2_compiled:.data .align 4 .type aa,object .size aa,4aa:.long 10.g
7、lobl bb .align 2 .type bb,object .size bb,2bb:.value 20 .align 4 .type cc.2,object .size cc.2,4cc.2:.long 30 .text .align 4.globl func .type func,functionfunc:pushl%ebp movl%esp,%ebp subl$4,%esp movw$40,-2(%ebp).L1:leave ret.Lfe1:.size func,.Lfe1-func .ident GCC:(GNU)egcs-2.91.66 19990314/Linux(egcs
8、-1.1.2 release)”10/10/第10页6.4(续续).file static.c“.version“01.01”gcc2_compiled:.data .align 4 .type aa,object .size aa,4aa:-aa分配在静态数据区,作用域为本文件,生存期为整个程序 .long 10 aa静态置初值.globl bb -bb分配在静态数据区,作用域为全局,能够被其它文件引用,生存期为整个程序 .align 2 .type bb,object .size bb,2bb:.value 20 bb静态置初值 .align 4 .type cc.2,object .si
9、ze cc.2,4cc.2:-cc分配在静态数据区,作用域为本文件,生存期为整个程序。源程序中在函数内部,为预防重名,需要重命名为cc.2 .long 30 cc静态置初值 .text .align 4.globl func .type func,functionfunc:pushl%ebp movl%esp,%ebp subl$4,%esp movw$40,-2(%ebp)-dd分配在栈上,生存期为func调用期,动态置初值.L1:leave ret.Lfe1:.size func,.Lfe1-func .ident GCC:(GNU)egcs-2.91.66 19990314/Linux(
10、egcs-1.1.2 release)”10/10/第11页6.5假定使用:(a)值调用;(b)引用调用;(c)值-结果调用;(d)换名调用。下面程序结果分别是什么?program main(input,output);var a,b:integer;procedure p(x,y,z:integer);begin y:=y+1;z:=z+x;end;begin a:=2;b:=3;p(a+b,a,a);print a;end.10/10/第12页6.5(续续)值调用x:=5;y:=2;z:=2;y:=y+1;z:=z+x;对形参调用不改变实参值,结果a为2引用调用t:=a+b;a=a+1;a
11、=a+t;结果a为8值-结果调用t:=a+b;x:=t;y:=a;z:=ay:=y+1;z:=z+x;t:=x;a:=y;a:=z;结果为7换名调用a:=a+1;a:=a+(a+b);结果为910/10/第13页6.6一个C程序以下:func(i1,i2,i3)long i1,i2,i3;long j1,j2,j3;printf(“Address of i1 i2 i3=%o,%o,%on”,&i1,&i2,&i3);printf(“Address of j1 j2 j3=%o,%o,%on”,&j1,&j2,&j3);main()long i1,i2,i3;func(i1,i2,i3);该程
12、序在X86/Linux上运行结果为:Address of i1,i2,i3=27777775460,27777775464,27777775470Address of j1,j2,j3=27777775444,27777775440,27777775434从结果看func3个形参地址逐步升高,而3个局部变量地址逐步降低。试说明为何10/10/第14页6.6(续续)C语言中,实参从右向左进栈,所以func(i1,i2,i3)按i3,i2,i1次序进栈而j1,j2,j3按申明次序分配10/10/第15页6.7下面C程序中,printf调用仅含格式控制串,运行时输出3个参数,分析之main()pri
13、ntf(“%d%d%dn”);10/10/第16页6.7(续续)C语言不做实参和形参个数类型是否一致检验printf函数依据第一个参数格式控制列表,到栈中取参数本题中即使只传了格式控制列表,不过printf函数分析格式控制列表,认为程序员还传了3个整型数,所以继续去栈中取3个参数,并输出之。所以得到了三个不可预知值得整数。10/10/第17页6.8下面给出一个C程序及其在X86/Linux下编译结果。从结果看,func四个局部变量i1,j1,f1,e1地址间隔和他们类型一致,而形参i,j,f,e地址间隔和他们类型不一致,试分析原因func(i,j,f,e)short i,j;float f,e
14、;short i1,j1;float f1,e1;printf(“Address of i,j,f,e=%o,%o,%o,%on”,&i,&j,&f,&e);printf(“Address of i1,j1,f1,e1=%o,%o,%o,%on”,&i1,&j1,&f1,&e1);printf(“Address of short,int,long,float,double=%d,%d,%d,%d,%dn”,sizeof(short),sizeof(int),sizeof(long),sizeof(float),sizeof(double);main()short i,j;float f,e;f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 陈意云 课后 答案 公开 一等奖 联赛 获奖 课件
![提示](https://www.zixin.com.cn/images/bang_tan.gif)
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。