如何學好c語言?

20世紀80年代初,C 在 UNIX系統的小型機世界中已經是主導語言了,從那時開始,它已經擴展到個人計算機和大型機, 大部分軟體開發商公司都選用了 C 語言來開發其子處理程序,電子表格軟體,編譯器等等。因為他們知道,C 可以產生緊湊而高效的程序。更重要的是,他們知道這些程序易於修改而且易於適應新的計算機模式。

對於公司和熟悉 C 語言的人有幫助的東西,對其他用戶同樣有幫助。越來越多的計算機用戶已轉身使用 C 以便利用其優點。不一定非得是計算機專業人員才能使用 C。

而到了20世紀90年代,許多軟體開發商開始轉身使用C++語言來進行大的編程項目。C++向 C 語言嫁接了面向對象編程工具(面向對象編程是一種哲學思想,它試圖讓語言來適應問題,而不是讓問題來適應語言)。C++差不多是 C 的一個超集,意味著任何 C 程序都同時是,或差不多是一個有效的 C++程序。通過學習 C,你能夠更容易的接受 C++的許多知識。

不管 C++ 和 Java 這樣較新的語言如何流行,C 在軟體產業中仍然是一種重要的技能,在最想獲得的技能中,它一般都列在前10名。特別是在嵌入式系統的編程中,C也補課或缺。也就是說,它將用來為汽車,照相機,DVD播放器和其他現代化設備中逐漸普及的微處理器編程。同樣,C 已開始進入長期以來一直屬於 FORTRAN 的科學編程領域。最後,由於它是一種適合用來開發操作系統的語言,C 在 Linux的開發中也扮演著重要的角色。即使到現在,C 仍將保持強勁的勢頭。

簡而言之,C 是最重要的編程語言之一,並將繼續如此,如果你想找一份編程的工作,則首先你所不能缺失的一種能力就是C的使用。

計算機工作的基本原理

計算機

如果你打算學習如何使用 C語言來進行編程,你就必須要了解計算機工作原理方面的一些知識。這些知識會幫助你更好的理解使用 C語言 編寫程序與運行該程序時最終會發生的事情之間的聯繫。

現在的計算機可分為幾個部件。中央處理單元(CPU)擔負著絕大部分的計算工作,隨機訪問存儲器(RAM)作為一個工作區來保存程序和文件;永久存儲器,一般是硬碟,即使在計算機關機時也能記下程序和文件;還有各種外部輸入輸出設備(如鍵盤,滑鼠,印表機)用來提供人與計算機之間的通信。CPU負責處理程序,所以我們集中來討論它的功能。

CPU

CPU 的工作非常簡單,至少在我們所了解的情況中是這樣的。它從內存中獲取一個指令並執行這條指令,然後從內存中獲取下一個指令並執行它,周而復始。一個千兆 CPU 可以在一秒種內進行大約一億次這樣的操作,所以 CPU 能以驚人的速度來從事極其枯燥的工作,如果用人力來執行,可能會使一個人精神崩潰。CPU 有自己的小工作區,該工作區由若干個寄存器組成,每個寄存器可以保存一個數。一個寄存器保存下一條指令的內存地址,CPU 使用該信息獲取下一條指令。獲取一條指令後,CPU 在另一個寄存器中保存該指令並將第一個寄存器的值更新為下一條指令的地址。CPU 只能理解有限的指令(指令集)。還有,這些指令是相當具體的,其中許多指令要求計算機將一個數從一個位置移動到另一個位置,例如,從內存單元移到寄存器。

這段說明有兩個有趣的地方。首先,存儲在計算機中的一切內容都是數字。數字是以數字形式存儲 的,字元也是以數字形式存儲的,每個字元有一個數字代碼(ASCII)。計算機裝載到寄存器的指令是以數字形式存儲的,指令集中的每條指令具有一個數字代碼。其次,計算機程序最終必須以這種數字指令代碼(或稱為機器語言)來表示。

了解了計算機運行方式之後:如果你希望計算機幫你做某件事,就必須提供一個特定的指令列表,確切地告訴計算機要做的事及如何去做,計算機是死的,他只會按照你的命令去做事。你必須以一種計算機可以直接理解的語言(機器語言)來創建該程序。這是一項繁瑣,乏味,費力的任務。即使將兩個想回這樣簡單的事也必須被分解成若干個步驟:

1 將內存單元為2000中的數字複製到寄存器1.

2 將內存單元為2004中的數字複製到寄存器2.

3 將寄存器2的內容加到寄存器1的內容,答案保留在寄存器1中。

4 將寄存器1的內容複製到內存單元2008.

而且你必須用數字代碼來表示這些指令中的每一個!

如果你喜歡以這種方式編寫程序,抱歉,機器語言編程的時代已經過去很久了。

而如果你還是想要學習編程,那麼你可以學習高級編程語言。

高級計算機語言和編譯器

如 C語言 這樣的高級編程語言,可以從幾個方面簡化你的編程過程。首先,你不必用數字代碼即ASCII來表示指令。其次,你所使用的指令更接近你考慮問題的方式,而非接近計算機使用的詳細操作步驟。現在你不用再考慮特定 CPU 實現特定任務所必須採取的精確步驟,而是可以在更抽象的層次上表達你的意圖。

例如,要對兩個數求和 a+b=c,你可以編寫下列內容:

c = a + b;

看到這樣的代碼,即使你沒學過編程,你也能大概的知道它所表達的意思。但如果看到用數字代碼表示的由若干條指令組成的機器語言等價代碼,則不會讓人這麼明白。

比如這樣的一段彙編代碼,:

mov ax,1

mov bx,2

add ax,bx

mov cx,ax

mov ax,4c00h

同樣是a+b=c,事實上如果沒有專門的學習過,我完全不理解它所表達的是什麼意思。

不幸的是,計算機對於我們來說則正好相反。對計算機來說,高級指令是完全不能理解的胡言亂語。因而才有了 編譯器 的出現。編譯器是將高級語言程序翻譯成計算機所能理解的詳細機器語言指令集的程序。分工合作,我們只需要進行高級思考,餘下的交給編譯器來完成就好可以了。

常見的編譯器

簡單的說,高級語言(如C,Java 和 C++)都以更抽象的方式即我們人的思維來實現代碼。同樣,高級語言相較於機器語言來說更容易學習,同時用高級語言編寫程序比用機器語言來說,代碼量更少,更容易。

C是一種編譯性語言。如果你以前從來沒有接觸過任何的編程語言,那麼你則需要學習一下一個拆分的邏輯思維。當我們想要寫一個項目或者軟體的時候,我們需要把這個整體拆分為7個步驟,這樣也會讓你的思路看起來更有條理。

當然啦,這是最完美的狀態。然而在實際操作中,並且是在較大的項目中,你可能需要做一些反覆工作,用後一步驟所了解到的內容來改進前一個步驟。

第1步: 定義程序目標

當你在開始寫程序之前,你應對希望程序要做什麼有一個清晰的想法。考慮程序需要的信息,程序需要進行的計算和操作,以及程序應該向你報告的信息。在這一規劃階段,你應該用一般概念來考慮問題,而不是一些具體的計算機語言術語來考慮。簡單來說,我們所要思考的就是,這個程序是用來做什麼的。

第2步: 設計程序

當你在對程序需要完成的事情有一個概念性的認識後,你就應該決定程序要如何完成它,用戶界面應該是怎麼樣的,程序應該如何組織,目標用戶是誰,你有多長的時間來完成實現這個程序等等。

這個部分其實就像寫作文一樣,當你想好要寫什麼題材的文章之後,接下來就要列出你文章中的大綱,需要幾個段落,需要用到什麼手法,每個段落寫的是什麼內容,一共有多少時間來給你完成這篇文章。把這些內容規划出來列成大綱,然後依次實現就可以了。

第3步: 編寫代碼

在程序有了清晰的設計後,就可以通過編寫代碼來實現它了。也就是說,將你的設計構思轉變為 C 語言。這裡是你真正需要使用 C 知識的地方。你可以在紙上勾畫你的想法,但最終必須將代碼輸入計算機。一般來說,需要使用文本編輯器來創建一種稱為源代碼的文件,該文件包含你的程序設計的的 C 實現形式。

例:比如我要實現在屏幕上實現輸出 helloworld!

----------------------------------------------------------------------------------------

#include<stdio.h>

int main()

{

printf ("helloworld!
");

return 0;

}

----------------------------------------------------------------------------------------

這是一個最基礎的C語言程序,其作用就是在屏幕上輸出一句helloworld!。

第4步:編譯

下一個步驟是編譯源代碼。不過,編譯細節取決於編程環境,下面很快就會看到一些常見的環境,讓我們先對要做的事情有一個一般性的了解。

前面講過,編譯器是一個程序,其工作是將源代碼轉換為可執行代碼。可執行代碼是用計算機的機器語言表示的代碼。這種語言是由數字代碼表示的詳細指令組成。C 編譯器用來將 C 語言轉換成機器語言。C 編譯器還從 C 的庫中向最終程序加入代碼。庫中包括著許多標準常式供你使用,例如 printf()和scanf()。最後的結果是,形成一個包含計算機可以理解的代碼並且你能夠運行的可執行文件。

編譯器還檢查你的程序是否為有效的 C 語言程序。如果編譯器發現錯誤,就將錯誤報告給你,而且不生成可執行文件。理解編譯器的報錯信息是你將要學習的另一種技能。

第5步:運行程序

一般來說,可執行文件就是你打開之後可以直接能夠運行的文件。在一般的操作系統中(例如Windows,Linux),要想運行某個程序,只需要雙擊這個文件或者右鍵打開就可以運行,這就是可執行文件。那要怎麼才能生成可執行文件呢?例如為在Windows環境中,用QT編譯器運行程序可以用快捷鍵Ctrl+R生成程序並顯示程序結構,如果用Visual Studio編譯器則是Ctrl+F5編譯運行。

第6步: 測試和調試程序

程序能夠正常運行那是極好的,但有時候它也可能運行不正確。因此,你應該進行檢查,看程序是否存在錯誤。這個錯誤在計算機行話中稱之為 Bug。調試(Debugging)就是要發現並修正程序錯誤。學習中自然會犯錯誤,看起來編程中似乎也會犯錯誤,所以在將所學知識應用到編程中時,最好準備好時時想到自己很容易犯錯誤。當你成為本領更強,技藝更精湛的程序員時,你的錯誤也會變得更嚴重而且不易察覺。

你犯錯誤的機會很多。你可能會犯一個基本設計錯誤,可能會錯誤地實現了好的想法,可能會因為忽略了某個條件而將程序搞得一團糟,可能會錯誤地使用C,可能會犯打字母錯誤,也可能會將中英文輸入搞錯等等.....

不過,這並不是什麼丟臉的事情,每個人都會犯錯誤,當你被一個錯誤折騰的焦頭爛額的時候,你才會深刻的記住這個錯誤,以確保下次不會再犯。另外,編譯器擁有簡單找錯誤的能力,雖然不會具體到教你怎麼改,但它會幫你標記出錯誤所在的那行,只要你認真仔細的檢查錯誤的那幾行並改正就可以了。

第7步: 維護和修改程序

在為自己或為別人創建程序後,該程序可能會有更廣泛的應用。如果是這樣,你可能會發現需要對其進行更改,也就是項目的維護和修改。在這裡不得不提代碼風格和注釋的作用了,很多人都不喜歡寫注釋,代碼風格也極亂。可當你去維護別人程序的時候,如果他沒有寫過注釋,並且代碼一堆堆的擠在一起,那你可能會頭痛的要死,只想破口大罵寫這個程序的程序員。由人及己,養成一個良好的編程風格是一個非常好的習慣,寫完程序順便標上注釋。

註:部分文章摘自」輕鬆學c語言「。



推薦閱讀:

編程-前端jsp頁面開發
放學快走,你的電腦在實驗室自己喊啪嗒!
編程中所講的「思維深度」的本質是什麼?
Djinni
LCUI 1.0 Beta 發布

TAG:C(編程語言) | 編程 | 計算機 | 編程語言 |