繞開C語言4個大坑,這個學習順序要牢記,學習效率事半功倍

虎牙來了 發佈 2020-05-11T01:43:18+00:00

雖然 C 語言是眾多初學者進入編程世界的首選語言,但真正通過C 語言入行的人並不多,甚至不到「望 C 止步」的一半!中途而退的人都說難!難!難!難上加難!看了很多專業書籍、記錄重點知識點,最後卻無法真正運用到實際項目,時不時bug,斷連......

雖然 C 語言是眾多初學者進入編程世界的首選語言,但真正通過C 語言入行的人並不多,甚至不到「望 C 止步」的一半!

中途而退的人都說難!難!難!難上加難!看了很多專業書籍、記錄重點知識點,最後卻無法真正運用到實際項目,時不時bug,斷連......

而 C 程式設計師則是相反的說法,認為「這是一門勤能補拙的語言」,他們在開始學習的時候,除了看書,還要花時間去同步練習,就和學數學一樣:先看理論,再去練習實踐,從而掌握。

C 語言不單是編程世界的敲門磚,還是其他語言的敲門磚,當你學好C語言之後,接下來無論想進軍Java、C++、C#、還是Python、Go、PHP、JavaScript 等語言,都會輕鬆不少。


C語言為什麼學不好

經常聽到大家嘶喊:眼睛學會了,手卻跟不上操作!這是為什麼?

儘管C 語言如此火爆,學習的人也很多,縱使沒有「望 C 止步」,但能運用自如的卻遠遠不到一半!

● 無論是C++、Java、Object-C等其他很多語言,在語法特點上都很C語言類似,學習C語言更能為我們打好程序設計的堅實基礎。

● 作為一門歷史悠久的程序設計語言,C語言有著其他語言無可比擬的廣泛的應用領域,小到「Hello World!」,大到作業系統,C語言的工作場景處處可見。學好C語言將大有可為。

● C語言強調的面向過程的問題分析方法,更是培養我們思維靈活性和嚴謹性的最佳途徑。

C語言靈活多變的語法更是一柄雙刃劍,一方面它能夠充分發揮程式設計師的個性、提高工作效率,也提高程序運行效率。但是另一方面,C語言也能帶來一些問題,其中最大的問題就是,學習了卻無法應用到實際項目…………因為你只是單純地學習了理論知識,沒有去通過練習來真正掌握這些知識的核心!


常見的「坑」

哪一個編譯器更好?

GCC 還是Visual C++?

哪一個IDE更好?

Visual Studio還是Vim 或者 emacs?

這個表達式的結果到底是多少?

可能是這個?

有問題沒搞懂,該怎麼辦?

找網絡幫麼?

對於初學者來說,最重要是有一本讓你能夠系統全面地從基礎學起還能提供每個階段相對應的練習題及答案的一本書,而這些「坑」在初入門時並不那麼重要。


學習C語言的順序

1)選一本好的入門書,系統地學習。

2)動手去上機操作和練習,對答案,任何理論知識都需要實操驗證

3)正確認識和理解C語言,把握學習的重點,避免分散精力。

從最基礎的語法(變量、字符串、條件、循環、數組、函數、結構體等),再到高階的算法(指針、內存管理等C語言中至關重要的兩大標準),循序漸進。

確實,大家在學習 C 語言的過程中,往往忽視了最重要的一點,看書很重要,但配套的訓練同樣不容忽視,兩者結合起來同時進行的才能快速提升編程水平,最終達成學習的目標——在實際項目中運用。

而學習 C 語言恰恰就是一個堅持看、敲、寫的過程,缺一不可:

1) 多看書學習

不能僅僅記住那些名詞,那些規則,程序設計語言的重點在於應用。在應用中去總結和體會,用自己的語言去定義那些名詞術語,用自己的語言去概括那些語法的規則和意義。對,就是不要「你覺的」,而是要通過學習領會「你覺的」,最終到達「自己覺得」!

2) 操作和練習

C語言是一門工具,我們要在不斷的操作和練習中熟悉工具的性能、使用方法和使用技巧,僅僅停留在紙上談兵的程度,是遠遠不夠的。

3) 拓展知識面

C語言雖然是一門高級程序設計語言,但是它還是涉及很多計算機系統底層方面的知識,最典型的例如指針,多了解一些計算機原理方面的知識,拓展自己的知識面。

4) 多做練習

不能僅僅停留在編碼上,程序設計的重點在於設計。做習題時拿起紙和筆,整理自己的思路,記錄自己分析問題和解決問題的想法。過段時間再來看看自己曾經的想法,評價一下,也就是說,學習C語言,要反覆多次地進入學習。

5)反覆學習

學習C語言,要反覆多次地進入學習。每過段時間再來整理自己的所學和曾經的想法;

第一次,重點在於了解基本語法和知識點

第二次,在練習中體會基本語法和知識點

第三次,系統觀的練習和設計思想的鍛鍊

逐漸在學習中培養自己的邏輯思維能力。學習自頂而下的分析方法,學習嚴謹而全面的流程控制。學習其他優秀工程師的思維技巧,將會是我們受益終生。


例如:字符串與格式化輸入/輸出,我們應該這樣去進行練習、實操,從而鞏固我們從書本上學到的理論知識,只有這樣才能掌握它的核心!

1)假設一個程序的開頭是這樣的。

#define BOOK "War and Peace"

int main(void){

float coast =12.99;

float percent = 80.0;

請構造一個使用 BOOK、coast 和 percent 的 printf()語句,列印以下內容。

This copy of "War and Peace" sells for $12.99.

That is 80% of list.

分析與解答:

程序要求列印帶雙引號的字符串,因此在 printf()函數中需要加入轉義序列\"。此外,80% 需要使用浮點型數據 percent,列印時需要添加修飾符,百分號的列印需要使用轉換說明符號%% 。具體代碼如下。

*/

#include

#define BOOK "War and Peace"

int main(void){

float coast =12.99;

}

float percent = 80.0;

printf("This copy of \"%s\" sells for $%.2f.\n",BOOK,coast);

printf("That is %.0f%% of list.\n",percent);

return 0;

2)列印下列各項內容要分別使用什麼轉換說明符?

a.一個欄位寬度與位數相同的十進位整數;

b.一個形如 8A、欄位寬度為 4 的十六進位整數;

c.一個形如 232.346、欄位寬度為 10 的浮點數;

d.一個形如 2.33e+002、欄位寬度為 12 的浮點數;

e.一個欄位寬度為 30、左對齊的字符串。

分析與解答:

a.整型數據使用轉換說明符%d,欄位寬度與位數相同不需要使用特殊修飾符,因此轉 換說明符為%d;

b.十六進位數據的轉換說明符(輸出大寫字符應當使用大寫 X)是%X,因為寬度是 4, 使用 4 作為修飾符,因此轉換說明符為%4X;

c.浮點型數據轉換說明符是%f,10 位,小數點後有 3 位修飾符,應表示為 10.3,因此 轉換說明符為%10.3f;

d.顯示指數使用轉換說明符%e,欄位寬度為 12,小數點後有 2 位的修飾符,應表示為 12.2,因此轉換說明符為%12.2e;

e.字符串使用轉換說明符%s,長度為 30,左對齊,使用−30 修飾符,因此轉換說明符 為%−30s;

3)列印下面的內容要分別使用什麼轉換說明符?

a.欄位寬度為 15 的 unsigned long 類型整數;

b.一個形如 0x8a、欄位寬度為 4 的十六進位整數;

c.一個形如 2.33E+02、欄位寬度為 12、左對齊的浮點數;

d.一個形如+232.346、欄位寬度為 10 的浮點數;

e.一個欄位寬度為 8 的字符串的前 8 個字符。

分析與解答:

a.unsigned 類型整數轉換說明符是%u,對於 long 類型欄位寬度,應添加 l 修飾符,字 段寬度為 15,就需要添加 15 修飾符,因此轉換說明符為%15lu。

b.十六進位整型數據的轉換說明符是%x(輸出小寫字母使用小寫 x),輸出 0X 使用# 修飾符;長度為 4 就使用 4 作為修飾符,因此轉換說明符為%#4x;

c.輸出科學計數法使用轉換說明符%E(輸出大寫字母使用大寫 E),左對齊使用'−'號修 飾符,字符寬度為 12,顯示兩位小數使用 12.2 修飾符,因此轉換說明符為%−12.2E;

d.浮點數轉換說明符是%f,顯示正號使用'+'修飾符,字符寬度是 10,有 3 位小數,使 用 10.3 修飾符,因此轉換說明符為%+10.3f;

e.字符串轉換說明符是%s,欄位寬度為 8,顯示前 8 個字符使用 8.8 修飾符,因此轉換 說明符為%8.8s。

4)列印下面各項內容要分別使用什麼樣的轉換說明符?

a.一個欄位寬度為 6、最少有 4 位數字的十進位數;

b.一個在參數列表中給定欄位寬度的八進位整數;c.一個欄位寬度為 2 的字符;

d.一個形如+3.13、欄位寬度等於數字中字符數的浮點數;

e.一個欄位寬度為 7、左對齊的字符串中的前 5 個字符。

分析與解答:

a.十進位整數使用轉換說明符%d,欄位寬度為 6,最少有 4 位數字,使用 6.4 修飾符, 因此轉換說明符為%6.4d;

b.八進位數據使用轉換說明符%o,欄位寬度由參數列表指定,使用修飾符' * ',因此轉 換說明符為%*o;

c.字符數據使用轉換說明符%c,欄位寬度為 2,使用修飾符 2,因此轉換說明符為%2c;

d.浮點型數據使用轉換說明符%f,顯示正號,欄位寬度為數字中字符數,即不指定字 段寬度,小數點後顯示兩位,使用修飾符+0.2,因此轉換說明符為%+0.2f;

e.字符串使用轉換說明符%s,欄位寬度為 7,顯示前 5 個字符,左對齊,使用修飾符−7.5,因此轉換說明符為%−7.5s。

▲ 摘選自《C Primer Plus(第6版)中文版習題解答》第四章課後訓練題

對於熱愛編程的人來說,有一群一起學習一起解答的小夥伴很重要!

小編有一個C/C++編程學習交流俱樂部(群),私信小編【01】申請進入!

還有編程學習文件(源碼,零基礎教程,項目實戰教學視頻),歡迎初學者和正在進階中的小夥伴們!

關鍵字: