同學們好。在前面一節課,我們了解了什麼是算法,知道了在一個算法中,要有輸入、計算過程、還要有輸出。這節課我們來討論算法的實現。
這節課的內容與前面課程的課後練習有關。在課後練習中要求同學們寫出計算長方形面積算法的步驟,步驟要包含輸入、計算過程和輸出。老師在這裡寫出計算長方形面積算法的步驟,同學們可以和自己寫的算法步驟比較一下,看看哪個寫的更詳細和完善一些?
計算長方形面積算法的步驟如下:
第一步,要求用戶輸入長方形的長度和寬度;
第二步,判斷長方形的長度和寬度是否大於0,如果大於0,繼續下一個步驟,否則提示用戶輸入的長度和寬度錯誤,算法結束;
第三步,計算長度和寬度的乘積;
第四步,輸出長度和寬度的乘積。
在這個算法中:第一步是輸入,算法要獲取長方形的長度和寬度;第二步、第三步是計算過程,主要是判斷長度和寬度的數值是否符合要求,以及計算它們的乘積;第四步是輸出計算結果。
現在我們需要把算法步驟寫成代碼,然後交給計算機,計算機就可以來幫助我們計算長方形面積了。其實計算機最擅長做這種已經形式化的公式的東西,只有把公式中的數值代入進去就可以計算出結果來,而這恰恰不是我們人腦最擅長的。因此我們可以將數學中的各種計算公式都可以寫成程序,讓計算機幫我們來計算各種數學公式,我們要做的就是輸入公式中的數值。
下面我們給出計算長方形面積的算法步驟,不過這次的算法步驟是站在計算機角度來寫的:
第一步,算法的輸入就是長方形面積的長和寬。因次要設置num1和num2兩個變量,接收用戶輸入的長度和寬度,並存儲到num1和num2兩個變量。
這裡的變量類似於我們數學中學過的用字母來表示數,例如a可以表示8,b可以表示12,那麼a*b的結果就是96,這裡用的是字符串,字符串和字母的意義是一樣的。
第二步,判斷num1和num2是否大於0,如果大於0,繼續下一個步驟,否則提示用戶長度和寬度輸入錯誤,算法結束。前面我們說過,算法的步驟是有限的而且還要有計算結果,如果用戶輸入的長方形長度和寬度小於0的話,計算長方形的面積就無意義,因此算法也無意義,所以要判斷用戶輸入的長度和寬度是否小於零。
第三步,計算num1和num2的乘積,並將乘積結果存儲到result變量;result是用來存儲結果的。
第四步,顯示result變量的值到屏幕。就是把result表示的那個數在計算機屏幕上顯示出來。
算法非常簡單,四個步驟,如何讓計算機執行這個算法呢?我們用偽代碼來實現算法。偽代碼不是真正的程序代碼,但它已經接近程序代碼,它是用人類能理解的語言來實現算法的一種語言。
偽代碼估計同學們都看不懂,我來解釋一下。
每段偽代碼都是從Begin開始,End結束。Begin和End都是英文單詞,Begin在偽代碼中表示算法開始的意思,End在偽代碼中表示算法結束的意思。在偽代碼中,我們可以把每行的句子稱為一條語句,這樣算來,這段偽代碼共有9條語句,括號佔一行的不算。
第二行語句是說我這裡聲明了兩個變量,變量名稱分別是num1和num2,前面我們說過可以把變量看成是可以表示數字的字母或字符串,但現在num1和num2表示什麼數還不清楚。
第三行語句是說輸入num1和num2,這條語句就是為num1和num2賦值一個數的,賦值的意思就是把一個數和前面聲明的變量名稱聯繫起來。例如,把5賦值給變量num1,num1表示的數就是5,把20賦值給變量num2,num2表示的數就是20。
第四行語句用到英文單詞IF,IF在英文單詞中是如果的意思。如果是假設的意思,既然是假設就要分兩種情況了:第一種情況是滿足假設的條件,在上面的偽代碼中就是num1小於0,或者num2小於0,這裡的「||」是或者的意思。因此只要有一個條件滿足,或者num1小於0,或者num2小於0、或者num1和num2都小於0,就會執行IF後面大括號內的語句。如果不滿足假設,也就是在num1和num2都大於0的情況下,就不執行IF後面大括號內的語句。
我們來分析偽代碼的第五條語句,這條語句的內容是在Print單詞後面跟著一對小括號,小括號裡面的內容是用雙引號括起來的字符串。前面我們說過,字符串是由多個字符組成的詞或句子。如果同學們不了解Print單詞的意思,我們可以百度一下,Print最直接的意思就是列印。那麼我們就明白這條語句的意思了,Print就是把小括號內的字符串列印到計算機屏幕上。
偽代碼的第六條語句是退出程序,我們知道程序既然是算法的實現,算法結束程序自然就結束了。但是我們要注意,這個退出程序是不正常的退出,因為算法過程沒有結束,只是出了問題,算法沒法往下執行了,所以要退出。
偽代碼的第七條語句是一個算式,同學們一定會說這是一個乘法算式。對,它確實是乘法算式,只是這個乘法算式中的乘數和被乘數不是數而是變量名稱,前面我們已經說過了,可以把變量看成是可以表示數字的字母或字符串,這個字母或字符串就是變量的名稱,每個變量都表示一個數。例如num1表示數5,num2表示數6,那麼num1*num2的結果是30,30再賦值給result變量,這裡的=就是賦值的意思,就是把數30和result變量關聯起來,在這裡result就是30,當然如果我們把50賦值給result,result表示的數就是50。
偽代碼的第八條語句也是Print語句,這個Print語句是列印result表示的數到計算機屏幕,不是列印result這個字符串到計算機屏幕。
偽代碼的第九條語句是End語句,也就是算法結束,算法結束程序也就結束了。
因此要讓計算機執行算法,就必須要把算法用程式語言編寫出來,如Python語言。偽代碼是一種算法描述語言,可以很容易地轉換為程式語言,如Python、java語言等。可見,程序是算法的實現,算法通過某一種程式語言實現後,就是程序。
課程小結
這節課我們主要討論和學習了下面這些內容:
(1)在描述算法的過程中,要用到變量來說明需要輸入的數據,數據可能是一些數、也可能是一些單詞或句子。變量就是用來描述這些數據的,每個變量都有一個名稱,我們通過這個名稱就能確定這個變量對應的是什麼數據。
(2)在描述算法的過程中,我們還用到了賦值這個詞語。賦值就是將一個數或者一個單詞或句子與變量關聯起來。在程式語言中賦值與「=」等價。程式語言裡的「=」號不是相等的意思,而是賦值的意思。
(3)我們還學習了用偽代碼來實現算法,用偽代碼實現的算法雖然不能在計算機上運行,但它已經非常接近於程式語言了。我們只要能看懂偽代碼,就能看懂實際的程序代碼。
課後小練習
如果要編寫一個求兩數和的算法,需要用到幾個變量?算法步驟你會怎麼寫呢?