W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
現(xiàn)在你應(yīng)該可以閱讀并理解一個完整的C++函數(shù)了。但是到底怎么設(shè)計函數(shù)可能還不清楚。我會馬上介紹增量開發(fā)技術(shù)。
舉個例子,假設(shè)要計算兩點之間的距離,其中兩個點分別用坐標 (x1, y1)和(x2, y2)表示。按照定義,
第一步要考慮的是,在C++中距離函數(shù)應(yīng)該如何表示,也就是要確定函數(shù)的輸入(即參數(shù))和輸出(即返回值)。
在這個例子中,兩個點就是參數(shù),很自然,可以用四個double值表示。返回值就是距離,也是double類型的。
我們已經(jīng)可以寫出這個函數(shù)的輪廓了:
double distance (double x1, double y1, double x2, double y2) {
return 0.0;
}
返回語句只是用于占位,以便函數(shù)通過編譯并返回一個值,即使這個值是不正確的。眼下這個函數(shù)并沒有做什么有用的事情,但嘗試編譯一下這個函數(shù)還是值得的,因為這樣可以在函數(shù)變得更復(fù)雜之前發(fā)現(xiàn)任何語法錯誤。
為了測試這個新函數(shù),我們必須使用樣本值值調(diào)用它。在main函數(shù)的某個位置我添加了下面語句:
double dist = distance (1.0, 2.0, 4.0, 6.0);
cout << dist << endl;
我選擇這些值,這樣兩個點的水平距離是3,垂直距離是4;那樣,距離就是5(3-4-5直角三角形的斜邊)。測試函數(shù)時,知道正確答案是有用的。
一旦函數(shù)定義的語法驗證無誤,我們就可以開始一次一行的添加代碼了。每次增量改變,我們都重新編譯并運行程序。這樣,在任何點我們都能精確地知道錯誤的位置——肯定是在我們最后增加的代碼中。
計算的下一步就是求出x2?x1和y2?y1的差。我會把這些值存在臨時變量dx和dy中。
double distance (double x1, double y1, double x2, double y2) {
double dx = x2 - x1;
double dy = y2 - y1;
cout << "dx is " << dx << endl;
cout << "dy is " << dy << endl;
return 0.0;
}
我添加了輸出語句,在繼續(xù)之前先驗證中間值。前面提到過,我們已經(jīng)知道這兩個值應(yīng)該是3.0和4.0。
函數(shù)完成之后我會刪除輸出語句。這樣的代碼稱為支架代碼,因為它雖然有助于構(gòu)建程序,但并非最終產(chǎn)品的組成部分。有時保留支架代碼,僅將其注釋掉是個好想法,以防后面再用到。
開發(fā)的下一步就是求dx和dy的平方。我們可以使用pow函數(shù),但更簡單快捷的方法是通過每一項自乘來計算。
double distance (double x1, double y1, double x2, double y2) {
double dx = x2 - x1;
double dy = y2 - y1;
double dsquared = dx*dx + dy*dy;
cout << "dsquared is " << dsquared;
return 0.0;
}
現(xiàn)在,再次編譯運行程序,并檢查中間值(它應(yīng)該是25.0)。
最后,可以使用sqrt函數(shù)計算并返回結(jié)果。
double distance (double x1, double y1, double x2, double y2) {
double dx = x2 - x1;
double dy = y2 - y1;
double dsquared = dx*dx + dy*dy;
double result = sqrt (dsquared);
return result;
}
然后,我們應(yīng)該在main函數(shù)中輸出并驗證結(jié)果值。
隨著編程經(jīng)驗的增多,你會發(fā)現(xiàn)自己可以一次編寫和調(diào)試多條語句。不過,增量開發(fā)過程能節(jié)省很多調(diào)試時間。
這一過程的幾個關(guān)鍵方面是: ? 從一個小的、可以工作的程序開始,加以微小的增量變化。在任何時候,如果出現(xiàn)錯誤,都能精確地知道錯誤位置。 ? 使用臨時變量保存中間值,以便于輸出并驗證它們。 ? 一旦程序正常工作,你可能想刪除一些支架代碼或者將多條語句合并為符合表達式,但要確認這不會讓代碼難以閱讀。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: