圖源:文心一言
編譯原理習(xí)題整理~????
作為初學(xué)者的我,這些習(xí)題主要用于自我鞏固。由于是自學(xué),答案難免有誤,非常歡迎各位小伙伴指正與討論!????
- 第1版:自己的解題,與AI老師的判卷~????
編輯:梅頭腦???
審核:文心一言
題源:龍書(shū)《編譯原理》 Alfre V.Aho 等著? 趙建華 等譯
??參考答案
??練習(xí)1.6.1
??練習(xí)1.6.2
??練習(xí)1.6.3
??練習(xí)1.6.4
??結(jié)語(yǔ)
??參考答案
??喬卿博文:編譯原理(龍書(shū)):第一章部分題目參考答案_編譯原理龍書(shū)答案-CSDN博客
??fool2fish (Zhouxuan Yang)?博文:dragon-book-exercise-answers - GitCode
??練習(xí)1.6.1
??題目
對(duì)圖1-13a中的塊結(jié)構(gòu)的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回復(fù)簡(jiǎn)單版本:
- 第5行 i = 6 ,修改了全局變量 i 的值為 6。
AI回復(fù)詳細(xì)版本:
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
??練習(xí)1.6.2
??題目
對(duì)圖1-13b中的塊結(jié)構(gòu)的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
??練習(xí)1.6.3
??題目
對(duì)于圖中的塊結(jié)構(gòu)代碼,假設(shè)使用常見(jiàn)的聲明的靜態(tài)作用域規(guī)則,給出其中12個(gè)聲明中的每一個(gè)練習(xí)域。
??答題
??阿梅答題
聲明域 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已經(jīng)被重新聲明,因此B1只能作用到B2,無(wú)法在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
??練習(xí)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
??結(jié)語(yǔ)
博文到此結(jié)束,寫(xiě)得模糊或者有誤之處,歡迎小伙伴留言討論與批評(píng),督促博主優(yōu)化內(nèi)容{例如有錯(cuò)誤、難理解、不簡(jiǎn)潔、缺功能}等,博主會(huì)頂鍋前來(lái)修改~~????????????
我是梅頭腦,本片博文若有幫助,歡迎小伙伴動(dòng)動(dòng)可愛(ài)的小手默默給個(gè)贊支持一下,感謝點(diǎn)贊小伙伴對(duì)于博主的支持~~????
同系列的博文:??編譯原理_梅頭腦_的博客-CSDN博客文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-804444.html
同博主的博文:??隨筆03 筆記整理-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-804444.html
到了這里,關(guān)于編譯原理1.6習(xí)題 程序設(shè)計(jì)語(yǔ)言基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!