標籤:
構造演算法:執行個體研究1(計數器控制重複)
要示範如何開發演算法,我們要解決幾個全班平均成績的問題。考慮下列問題:
班裡有10個學生進行測驗,可以提供考試成績(0到100的整數值),以確定全班平均成績。
全班平均成績等於全班成績總和除以班裡人數。電腦上解決這個問題的演算法是輔人每人的成績,進行平均計算,然後列印結果。
下面用虛擬碼列出要執行的操作,指定這些操作執行的順序。我們用計數器控制重複(counter-conttrolled repetition)一次一個地輸人每人的成績。這種方法用計數器(counter)變數控制一組語句執行的次數。本例中,計數器超過10時,停止重複。本節介紹虛擬碼演算法(2.6)和對應程式(2.7)。下節介紹如何開發這個虛擬碼演算法。計數器控制重複通常稱為確定重複(definiterepetition),因為迴圈執行之前,已知重複次數。
注意演算法中引用了總數(total)和計數器。總數變數用於累計一系列數值的和。計數器變數用於計數,這裡計算輸人的成績數。存放總數的變數通常應先初始化為0之後再在程式中使用,否則總和會包括總數的記憶體位址中存放的原有數值。
Set total to zero Set grade counter to one While grade counter is less than or equal to ten Input the next grade Add the grade i.to the total Add one to the grade counter Set the class average to the total divided by ten Print the class average
圖2.6 用計數器控制重複解決全班平均成績問題的虛擬碼演算法
// Fig. 2.7: fig0207.cpp// Class average program with counter-controlled repetition#include <iostream.h>int main(){int total, // sum of gradesgradeCounter, // number of grades enteredgrade, // one gradeaverage; // average of grades// initialization phasetotal = 0; // clear totalgradeCounter = 1; // prepare to loop// processing phasewhile ( gradeCounter <= 10 ) { // loop 10 timescout << "Enter grade: "; // prompt for inputcin >> grade; // input gradetotal = total + grade; // add grade to totalgradeCounter = gradeCounter + 1; // increment counter}// termination phaseaverage - total / 10; // integer divisioncout << "Class average is "<< average << endl;return 0; // indicate program ended successfully}
輸出結果:
Enter grade: 98 Enter grade: 76 Enter grade: 71 Enter grade: 87 Enter grade: 83 Enter grade: 90 Enter grade: 57 Enter grade: 79 Enter grade: 82 Enter grade: 94 Class average is 81
圖2.7 用計數器控制重複解決全班平均成績問題的C++程式和樣本輸出
根據使用方式,計數器變數通常應先初始化為0或1(下面會分別舉例說明)。未初始設定變數會包含垃圾值“garbage”value),也稱為未定義值(undefined
value),為該變數儲存記憶體位址中最後存放的值。
常見編程錯誤2.6
如果不初始化計數器和總和變數,則程式的結果可能不正確.這是一種邏輯錯誤。
編程技巧2.7
一定要初始化計數器和總和變數。
編程技巧2.8
每個變數在單獨一行中聲明。注意程式中的平均計算產生一個整數結果。實際上,本例中的成績總和是817,除以10時應得到81.7,是個帶小數點的數,下節將介紹如何處理這種值(稱為浮點數)。
常見編程錯誤2.7
在計數器控制迴圈中,由於迴圈計數器(每人迴圈加1時)比最大合法值多1(例如,從1算到10時為11).因此在迴圈之後用計數器值進行計算通常會出現差1的錯誤。
圖2.7中,如果第21行用gradeCounter而不是10進行計算,則這個程式的輸出顯示數值74。
2016考研政策http://www.kyjxy.com/yuanxiao/zhengce/
2016考研數學資料http://www.kyjxy.com/shuxue/ziliao/
2016考研專碩複習方法http://www.kyjxy.com/zhuanshuo/
考研電腦基礎構造演算法的執行個體研究