C++ 程序開發(fā)

2023-03-20 15:51 更新

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

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

第一步要考慮的是,在C++中距離函數(shù)應(yīng)該如何表示,也就是要確定函數(shù)的輸入(即參數(shù))和輸出(即返回值)。

在這個(gè)例子中,兩個(gè)點(diǎn)就是參數(shù),很自然,可以用四個(gè)double值表示。返回值就是距離,也是double類型的。

我們已經(jīng)可以寫出這個(gè)函數(shù)的輪廓了:

double distance (double x1, double y1, double x2, double y2) {
  return 0.0;
}

返回語(yǔ)句只是用于占位,以便函數(shù)通過編譯并返回一個(gè)值,即使這個(gè)值是不正確的。眼下這個(gè)函數(shù)并沒有做什么有用的事情,但嘗試編譯一下這個(gè)函數(shù)還是值得的,因?yàn)檫@樣可以在函數(shù)變得更復(fù)雜之前發(fā)現(xiàn)任何語(yǔ)法錯(cuò)誤。

為了測(cè)試這個(gè)新函數(shù),我們必須使用樣本值值調(diào)用它。在main函數(shù)的某個(gè)位置我添加了下面語(yǔ)句:

double dist = distance (1.0, 2.0, 4.0, 6.0);
cout << dist << endl;

我選擇這些值,這樣兩個(gè)點(diǎn)的水平距離是3,垂直距離是4;那樣,距離就是5(3-4-5直角三角形的斜邊)。測(cè)試函數(shù)時(shí),知道正確答案是有用的。

一旦函數(shù)定義的語(yǔ)法驗(yàn)證無(wú)誤,我們就可以開始一次一行的添加代碼了。每次增量改變,我們都重新編譯并運(yùn)行程序。這樣,在任何點(diǎn)我們都能精確地知道錯(cuò)誤的位置——肯定是在我們最后增加的代碼中。

計(jì)算的下一步就是求出x2?x1和y2?y1的差。我會(huì)把這些值存在臨時(shí)變量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;
}

我添加了輸出語(yǔ)句,在繼續(xù)之前先驗(yàn)證中間值。前面提到過,我們已經(jīng)知道這兩個(gè)值應(yīng)該是3.0和4.0。

函數(shù)完成之后我會(huì)刪除輸出語(yǔ)句。這樣的代碼稱為支架代碼,因?yàn)樗m然有助于構(gòu)建程序,但并非最終產(chǎn)品的組成部分。有時(shí)保留支架代碼,僅將其注釋掉是個(gè)好想法,以防后面再用到。

開發(fā)的下一步就是求dx和dy的平方。我們可以使用pow函數(shù),但更簡(jiǎn)單快捷的方法是通過每一項(xiàng)自乘來計(jì)算。

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ùn)行程序,并檢查中間值(它應(yīng)該是25.0)。

最后,可以使用sqrt函數(shù)計(jì)算并返回結(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ù)中輸出并驗(yàn)證結(jié)果值。

隨著編程經(jīng)驗(yàn)的增多,你會(huì)發(fā)現(xiàn)自己可以一次編寫和調(diào)試多條語(yǔ)句。不過,增量開發(fā)過程能節(jié)省很多調(diào)試時(shí)間。

這一過程的幾個(gè)關(guān)鍵方面是: ? 從一個(gè)小的、可以工作的程序開始,加以微小的增量變化。在任何時(shí)候,如果出現(xiàn)錯(cuò)誤,都能精確地知道錯(cuò)誤位置。 ? 使用臨時(shí)變量保存中間值,以便于輸出并驗(yàn)證它們。 ? 一旦程序正常工作,你可能想刪除一些支架代碼或者將多條語(yǔ)句合并為符合表達(dá)式,但要確認(rèn)這不會(huì)讓代碼難以閱讀。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)