--- title: 成績判斷 tags: 程式設計基礎,成績判斷,php,html,泰山職訓,PHP資料庫網頁設計 date: 2020-09-23 --- # 成績是否及格判斷 這邊我們來做簡單的判斷式應用,判斷式被歸類在選擇結構中,其中包含了二選一的**if..else**判斷式及多選一的**switch...case**結構。 一個簡單的成績判斷邏輯可以從我們日常的語意做為出發來思考,再進而轉換成為程式的語法; ```txt= step1:純口語的描述: "如果成績大於60分則及格,否則不及格" step2:加入希望程式執行功能的描述: "如果成績大於60分則在畫面上顯示文字[及格],否則(小於60分)在畫面上顯示文字[不及格]" step3:將語意描述的內容轉換或加上程式的語法或符號或流程結構: " 成績=61分 if(成績 >= 60){ 在畫面上顥示文字[及格] }else{ 在畫面上顯示文字[不及格] } " step4:將所有的文字描述都轉換成變數或公式或程式指令 " $score=61; //宣告一個變數用來儲存成績 if($score >= 60){ echo '及格'; //用echo 指令來讓[及格]兩個字可以呈現在瀏灠器上 }else{ echo '不及格'; } " ``` ## 成績等級判斷 當我們了解基本的二選一結構的做法後,我們進一步思考,如果要把成績分成多段來給予不同的等級時,要怎麼做?假設我們把學生的成績分成以下四個等級 | 區間 |等級| |---------|----| |100 ~ 90 | A | |75 ~ 89 | B | |60 ~ 74 | C | |0 ~59 | D | 一樣,我們從語意描述開始,一步一步的從自己熟悉的語言,慢慢的導向程式語言: ```txt= step1:直接在口語中加入希望程式執行的功能描述 " 如果成績在100到90之間,就在畫面上顯示文字[A] 如果成績在75到89之間,就在畫面上顯示文字[B] 如果成績在60到74之間,就在畫面上顯示文字[C] 如果成績在0到59之間,就在畫面上顯示文字[D] " step2:將語意描述的內容轉換或加上程式的語法或符號或流程結構: " 成績=60分 if(成績>=90 並且 成績<=100){ 在畫面上顯示文字[A] }else{ //會進來else的表示成績不在90~100之間 if(成績>=75 並且 成績 <=89){ 在畫面上顯示文字[B] }else{ //會進來else的表示成績不在90~100之間,同時成績也不在75~89之間 if(成績>=60 並且 成績<=74){ 在畫面上顯示文字[C] }else{ //會進來else的表示成績不在90~100之間,同時成績也不在75~89之間, //而且也不在60~74之間,應此成績應該是0~59之間 在畫面上顯示文字[D] } } } " step3:將所有的文字描述都轉換成變數或公式或程式指令 " $score=60; if($score>=90 && $score<=100){ echo 'A'; }else{ //會進來else的表示成績不在90~100之間 if($score>=75 && $score <=89){ echo 'B'; }else{ //會進來else的表示成績不在90~100之間,同時成績也不在75~89之間 if($score>=60 && $score<=74){ echo 'C'; }else{ //會進來else的表示成績不在90~100之間,同時成績也不在75~89之間, //而且也不在60~74之間,應此成績應該是0~59之間 echo 'D'; } } } " ``` 雖然上面的範例完成了成績等級的判斷,但是這種巢狀式的語法事後很難閱讀及維護,因此我們尋找程式語言中是否有提供任何的其它做法可以簡化寫法或是提高閱讀性的做法,接著將程式確做進一步的簡化: ```php= $score=60; if($score>=90 && $score<=100){ echo 'A'; }else if($score>=75 && $score <=89){ echo 'B'; }else if($score>=60 && $score<=74){ echo 'C'; }else{ echo 'D'; } ``` :::info 使用巢狀結構本身並沒有對錯問題,只是需要注意日後自己回頭看程式時,會不會難以理解。 ::: 除了語法結構的簡化,在程式的邏輯上也可以做進一步的簡化,以成績為例,我們預設成績的範圍應該是在0~100之間,所以如果不在這區間的應該警告成績錯誤; 接著是既然成績一定在0~100之間,那麼會進到判斷式的成績應該只需要判斷有沒有大於90就好了,同樣的道理,如果成績不到90的,那就一定是在89~0,我們只需要判斷下一個斷點就可以了; 因此,在邏輯面再簡化後,程式可以再精簡如下: ```php= $score=60; if($score<0 && $score>100){ echo "注意:成績應該在0~100之間"; }else if($score>=90){ echo 'A'; }else if($score>=75){ echo 'B'; }else if($score>=60){ echo 'C'; }else{ echo 'D'; } ```