C++ 程序開發(fā)

2023-03-20 15:51 更新

現(xiàn)在你應(yīng)該可以閱讀并理解一個完整的C++函數(shù)了。但是到底怎么設(shè)計函數(shù)可能還不清楚。我會馬上介紹增量開發(fā)技術(shù)。

舉個例子,假設(shè)要計算兩點之間的距離,其中兩個點分別用坐標 (x1, y1)和(x2, y2)表示。按照定義, enter image description here

第一步要考慮的是,在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)錯誤,都能精確地知道錯誤位置。 ? 使用臨時變量保存中間值,以便于輸出并驗證它們。 ? 一旦程序正常工作,你可能想刪除一些支架代碼或者將多條語句合并為符合表達式,但要確認這不會讓代碼難以閱讀。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號