图源:文心一言
编译原理习题整理~🥝🥝
作为初学者的我,这些习题主要用于自我巩固。由于是自学,答案难免有误,非常欢迎各位小伙伴指正与讨论!👏💡
- 第1版:自己的解题,与AI老师的判卷~🧩🧩
编辑:梅头脑🌸
审核:文心一言
题源:龙书《编译原理》 Alfre V.Aho 等著 赵建华 等译
🧵参考答案
🧵练习1.6.1
🧵练习1.6.2
🧵练习1.6.3
🧵练习1.6.4
🔚结语
🧵参考答案
🌸乔卿博文:编译原理(龙书):第一章部分题目参考答案_编译原理龙书答案-CSDN博客
🌸fool2fish (Zhouxuan Yang) 博文:dragon-book-exercise-answers - GitCode
🧵练习1.6.1
🧩题目
对图1-13a中的块结构的C代码,指出并赋给w、x、y和z的值
int w, x, y, z; int i = 4; int j = 5; { int j = 7; i = 6; w = i + j; } x = i + j; { int i = 8; y = i + j; } z = i + j;
🌰答题
📇阿梅答题
int w, x, y, z; int i = 4; int j = 5; { int j = 7; // i = 4,j = 7 i = 6; // i = 6,j = 7 w = i + j; // i = 6,j = 7,w = 13 } x = i + j; // i = 4,j = 5,w = 13,x = 9 { int i = 8; // i = 8,j = 5,w = 13,x = 9 y = i + j; // i = 8,j = 5,w = 13,x = 9,y = 3 } z = i + j; // i = 4,j = 5,w = 13,x = 9,y = 13,z = 9
📇AI审核
AI回复简单版本:
- 第5行 i = 6 ,修改了全局变量 i 的值为 6。
AI回复详细版本:
int w, x, y, z; int i = 4; int j = 5; { int j = 7; // i = 4, j(局部) = 7, j(全局) is hidden i = 6; // i = 6, j(局部) = 7 w = i + j; // i = 6, j(局部) = 7, w = 13 } // j(局部) goes out of scope, i = 6, j(全局) = 5 x = i + j; // i = 6, j = 5, w = 13, x = 11 { int i = 8; // i(局部) = 8, i(全局)被隐藏, j = 5, w = 13, x = 11 y = i + j; // i(局部) = 8, j = 5, w = 13, x = 11, y = 13 } // i(局部) goes out of scope, i(全局) = 6, j = 5 z = i + j; // i = 6, j = 5, w = 13, x = 11, y = 13, z = 11
🧵练习1.6.2
🧩题目
对图1-13b中的块结构的C代码,指出并赋给w、x、y和z的值
int w, x, y, z; int i = 3; int j = 4; { int i = 5; w = i + j; } x = i + j; { int j = 6; i = 7; y = i + j; } z = i + j;
🌰答题
📇阿梅答题
int w, x, y, z; int i = 3; int j = 4; { int i = 5; // i = 5(局部),j = 4(全局) w = i + j; // i = 5(局部),j = 4(全局),w = 9 } x = i + j; // i = 3(全局),j = 4(全局),w = 9 ,x = 7 { int j = 6; // i = 3(全局),j = 6(局部),w = 9 ,x = 7 i = 7; // i = 7(全局),j = 6(局部),w = 9 ,x = 7 y = i + j; // i = 7(全局),j = 6(局部),w = 9 ,x = 7,y = 13 } z = i + j; // i = 7(全局),j = 4(全局),w = 9 ,x = 7,y = 13,z = 11
🧵练习1.6.3
🧩题目
对于图中的块结构代码,假设使用常见的声明的静态作用域规则,给出其中12个声明中的每一个练习域。
🌰答题
📇阿梅答题
声明域 w x y z B1 B1-B3-B4 B1-B2- B3-B4B1-B5 B1-B2-B5 B2 B2-B3 B2 B3 B3 B3 B4 B4 B4 B5 B5 B5
📇参考答案
第2行,块B2重新声明了x,也就是B2的值可以包含到B3,但是B1的值在B2已经被重新声明,因此B1只能作用到B2,无法在B3生效。
声明域 w x y z B1 B1-B3-B4 B1-B2-B4 B1-B5 B1-B2-B5 B2 B2-B3 B2 B3 B3 B3 B4 B4 B4 B5 B5 B5
🧵练习1.6.4
🧩题目
#define a (x + 1) int x = 2; void b() { x = a; printf("%d\n", x); } void c() { int x = 1; printf("%d\n", a); } void main () { b(); c(); }
🌰答题
📇阿梅答题
#define a (x + 1) int x = 2; void b() { x = a; printf("%d\n", x); } // a = x + 1,即a = 2; x = a(全局), 即 x = 3,输出3 void c() { int x = 1; printf("%d\n", a); } // a = x + 1, x = 1,即a = 2(局部),输出2 void main () { b(); c(); }
综上,输出3,2
🔚结语
博文到此结束,写得模糊或者有误之处,欢迎小伙伴留言讨论与批评,督促博主优化内容{例如有错误、难理解、不简洁、缺功能}等,博主会顶锅前来修改~~😶🌫️😶🌫️
我是梅头脑,本片博文若有帮助,欢迎小伙伴动动可爱的小手默默给个赞支持一下,感谢点赞小伙伴对于博主的支持~~🌟🌟
同系列的博文:🌸编译原理_梅头脑_的博客-CSDN博客文章来源:https://www.toymoban.com/news/detail-804444.html
同博主的博文:🌸随笔03 笔记整理-CSDN博客文章来源地址https://www.toymoban.com/news/detail-804444.html
到了这里,关于编译原理1.6习题 程序设计语言基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!