但是讓自己寫代碼完全不知道如何下手怎么辦?
謝邀。
初學者在學習一段時間C語言后,會對語法和結構基本了解,再看書常會產生一種“什么都會”的錯覺。之所以說“錯覺”是因為,真讓自己寫C語言代碼,不少初學者完全不知道如何下手。
這是一個比較普遍的現象,題主也不用驚慌,這里我將介紹一種非常適合初學者的編寫C語言程序的方法。
從頭開始編寫C語言程序解決某個問題,應該按照什么步驟來呢?我還記得我當初學習C語言時,看人家寫的例子非常順暢,覺得 C 語言也不過如此。可是真的給我一個問題讓我從頭編程解決,還真是一臉懵逼,完全沒有頭緒,不知道從何下手。
現在想想,這是因為當時我還沒有編程思想,還不會按照計算機的思維考慮問題,這項能力只能多鍛煉獲得。
長征是一步一步走的,再復雜的C語言程序也是一句一句完成的。這里我將介紹一種“增量式”開發的思路,非常適合還沒有形成“計算機思維”的初學者。
“增量式”C語言程序開發還是以實際問題為例,對這種開發思路做介紹,請看問題:
一個長方形對角的兩個點坐標分別為 (x1, y1) 和 (x2, y2),用 C 語言編寫程序求它的面積。
從數學上來看,要解決這個問題,顯然可以分三步:
計算這個長方形的長: L=|x1-x2|計算這個長方形的寬:W=|y1-y2|利用公式:長 x 寬 計算這個長方形的面積 S=L x W這里直接認為長方形的長在 x 軸方向,寬在 y 軸方向了,長寬的方向并不影響計算面積。
接著,我們看看如何用C語言計算長方形的長。首先應該知道,坐標,長寬,面積應該用 double 類型的數據表示,所以計算長方形長的函數可以如下寫:
初學者寫到這里就已經不太自信了:這個函數定義寫得對嗎?雖然我是按我理解的語法規則寫的,但書上沒有和這個一模一樣的例子,萬一不小心遺漏了什么呢?
既然不自信就不要再往下寫了,沒有一個平穩的心態來寫程序很可能會引入Bug。所以在函數定義中插一個return 0.0立刻結束掉它,然后立刻測試這個函數定義得有沒有錯誤:
編譯,運行,一切正常。這時你就會建立起信心了:既然沒問題,就不用管它了,繼續往下寫剩下的C語言代碼。
如果你不敢確定寫的對,可以就此打住,再來測試一次:
編譯并運行這段C語言代碼,程序輸出 2,是正確的。
至此,就完成了根據坐標計算長方形長度的函數,而且測試正確,又有信心往下繼續寫了。下面同樣的方式來完成計算寬度的C語言函數:
好了,計算長和寬的函數都完成了,現在可以來寫計算面積的C語言函數了。計算面積的話,就需要輸入兩個坐標了,也就是四個變量,然后要在計算面積的函數里計算長方形的長和寬,然后再把長寬相乘計算面積。
如果擔心C語言程序寫的不對,可以寫到這里停下來,先把長和寬計算后打印出來。因為你已經測試過 width 和 length 函數都正確了,如果寫到這里出問題了,那就說明肯定是 area 函數寫的有問題,這樣就不用去之前寫的代碼中找問題了。編譯,運行發現一切正常:
確定沒問題了,我們就可以繼續往下寫 area 函數的C語言代碼了。
area 函數中的,包括之前我們測試 width 和 length 函數中的 printf 都起到了類似腳手架的作用:在蓋房子時很有用,但它不是房子的一部分,房子蓋好之后就可以拆掉了。
房子蓋好之后可能還需要維修、加蓋、翻新,又要再加上腳手架,這很麻煩,要是當初不用拆就好了,可是不拆不行,不拆多難看啊。寫代碼卻可以有一個更高明的解決辦法:把 printf 的代碼注釋掉。
到這里我們就寫完了計算面積的代碼,趕緊放到 main 函數中測試:
編譯并運行這段C語言代碼,發現輸出正常:
成功了,至此,終于一點一點的(增量式)用C語言解決了問題。當然,熟練了以后,可以直接寫出求面積的函數:
這樣寫簡潔得多了。但是如果出錯了呢?只知道是這一長串表達式有錯,但根本不知道錯在哪,而且 area2 整個函數就一個語句,插 printf 都沒地方插。
所以用臨時變量有它的好處,程序更清晰,調試更方便。而且,這樣寫,length和width函數還要不要?不要的話刪掉,如果有些情況,只需求長方形的長和寬呢?
那留著 length 和 width 函數咋樣?這樣的話,length,width 以及 area2 函數有相同的C語言代碼,一旦出了錯,修改 length,width 還得記著修改 area2 函數。
維護重復的代碼是非常容易出錯的,在任何時候都要盡量避免。因此,盡可能復用以前寫的C語言代碼,避免寫重復的代碼。
按照這個思路來看,還是 area 函數好一點。更進一步的,我們發現 width 和 length 函數的C語言代碼邏輯其實是一樣的,只是變量的名字不一樣,這也應該避免,width 和 length 函數可以用 distance 函數代替:
整理一下,最終C語言代碼如下:
到這里,我們就一點一點的寫出了自己的C語言程序,可以發現并沒有什么難度。