練習1.1:執行階乘的示例並觀察,如果輸入負數,程式會出現什麼問題?試著修改**來解決問題。
答:當輸入負數時,迴圈無法終止,因為原本程式中的終止條件為n==0,而在輸入為負數情況下,無法達成此終止條件。
程式在輸入為負數時會失效,在輸入為0和整數以外的其他數時都會失效,因為每次迭代將值減少1;在其他情況下,無法出現恰好==0的終止條件,從而導致堆疊溢位。
解決辦法有兩個思路:1.在呼叫方進行約束;2.在被呼叫方進行約束。
為函式本身簡單起見,函式中終止條件修改為<=0,呼叫方負責傳入的數值為非負整數。最後得到的**如下:
--定義乙個計算階乘的函式練習1.2:分別使用-l引數和dofile執行twice示例,並感受你喜歡哪種方式。function fact(n)
if n<=0 then
return 1;
else
return n*fact(n-1);
endendprint("enter a number:");
a= io.input():read("n");--讀取乙個數字
print(fact(math.max(0,math.floor(a))));
練習1.3:你是否能夠舉出其他使用「--」作為注釋的語言?
答:不知道。
練習1.4:以下字串中哪些是有效的識別符號?
___, _end,end,end,until?,nil,null,one-step
答:one-step中有非法字元"-",null,nil,end都是關鍵字;until?中有非法字元」?「,前面三個都是有效的識別符號。
練習1.5:表示式type(nil)==nil的值是什麼?你可以直接在lua中執行來得到答案,但是你能夠解釋原因嗎?
答:值為false,因為type的返回值為字串,與nil的型別不同,所以不可能相等,所以值為false.
練習1.6:除了使用函式type外,如何檢查乙個值是否為boolean型別?
答:假設檢查形式為是boolean型別就返回true,否則返回false.
function isboolean( value )練習1.7:考慮如下的表示式:--body
return (value==true or value==false
);end
(x and y and (not z)) or ((not y) and x)
其中的括號是否是必須的?你是否推薦在這個表示式中使用括號?
答:not的優先順序最高,因此,not的括號首先不是必須的;and優先度高於or;由此可見,從語義角度,括號沒有必要;但為了清晰起見,在這個表示式中應當使用括號。
練習1.8:請編寫乙個可以列印出指令碼自身名稱的程式(事先不知道指令碼自身的名稱)。
答:第11提到,有乙個全域性的變數arg,可以用來獲取直譯器傳入的引數。其中arg儲存的內容為指令碼名稱。因此,可以如下書寫:
function getscriptname()
return arg[0]
end測試如下:
進一步,如果考慮去除路徑,可以繼續優化函式。
第一章 習題
第一章 習題 1 linux採用什麼版權方式發行?這種版權與通常的商業軟體有何區別?答 早期版本採用的是gpl版權方式發行的,即general public license。後來採用的發行方式是gnu 這種版權與通常的商業軟體的最大區別是免費和開放源 2 簡述linux的技術特點。答 1 提供全部源...
第一章 習題一
軟體就是程式,編寫軟體就是編寫程式 f 軟體 程式 資料 文件 軟體危機的主要表現是軟體需求增加,軟體 上公升.f 軟體工程學科的出現的主要原因是軟體危機的出現.t 與電腦科學的理論研究不同,軟體工程是一門原理性學科 f 軟體工程是工程性學科 在下列選項中,d 不是軟體的特徵.a.系統性與複製性 b...
Lua 複習 第一章
暑假的時候在家呆了半個月,準確的說應該是大三的暑假,在這半個月的時間裡自學了lua.說起學習lua,也算是 自己第一次做的沒有目的的學習吧,因為當時完全沒有對lua的需求.以至於到現在都不知道當時是為什麼學習lua 的,就如大二的時候學python一樣.現在就複習一下,然後找點東西寫點 關於學習lu...