如何零基礎自學C語言?

本文首發自「慕課網」,想了解更多IT乾貨內容,程式設計師圈內熱聞,歡迎關注!

作者 謝恩銘,慕課網精英講師Oscar老師。

內容簡介

開宗明義

什麼是程式設計

程式設計,用什麼語言呢

一些術語

為什麼選擇C語言

程式設計艱辛嗎

總結

1。 開宗明義

不知道為什麼,一直對 C語言有一種很深厚的“情懷”(類似老羅對錘子手機的那種)。

也許因為 C語言是很多前輩諄諄教誨說一定要學一下的一門程式語言;

也許因為 C語言自 1972 年誕生以來歷經數十年依然獨領風騷,位列程式語言排行榜前三;

也許因為幾乎所有作業系統(Windows、Unix、Linux,macOS,Android、iOS,等),底層都有大量的 C語言程式碼;

也許因為 C語言在嵌入式領域是主要的程式語言;

也許因為在諸多程式語言中,C語言的入門是比較難的;

也許因為需要 5 到 10 年的時間,你才能說自己精通了 C語言;

也許因為學好了 C語言,一般就能輕鬆入門其他語言。

全套C語言教程 免費學

如何零基礎自學C語言?

慕課網

智慧小程式

有太多也許,但是可以肯定的是:C語言是一門充滿魅力的程式語言。

C語言的發明人,“C語言之父” Dennis Ritchie 在 2011 年去世。很低調,沒有太多新聞報道。同年史蒂夫。喬布斯去世,各界報道鋪天蓋地(當然了,喬布斯也是很偉大的人)。

我想說:應該多紀念那些低調付出的人。

Dennis Ritchie 除了 C語言這項偉大發明(Windows、Linux 和 macOS 作業系統,底層幾乎都用到了 C語言),還與 Ken Thompson 一起研發了 Unix 作業系統(雖然大部分工作是 Ken Thompson 起步的,不過後來 Dennis 用自己發明的 C語言重寫了 Unix 作業系統)。

要知道,Unix 作業系統成為了後來舉世聞名的 Linux 作業系統的參考物件,Android 手機底層就是用的修改過的 Linux 系統。蘋果的 macOS 作業系統底層也是類 Unix 系統。我們用的 iPhone 和 iPad 等的作業系統,底層大部分也是 C語言編寫的。

不為了提高程式設計水平,光為了感受大師的風采,光為了探尋一下我們每天都在接觸的這門語言,也要學一下這位了不起的人物的傳世傑作:C語言。

在這個系統課程中,我將帶大家一起探索 C語言的奇妙世界。

2。 什麼是程式設計?

你也許聽說過程式設計,也許你想要真正明白程式設計到底是怎麼一回事。

用 C語言程式設計,是怎麼樣的呢?用 C語言作為入門程式設計的第一門語言真的好嗎?我們能用 C語言做任何事嗎?

這一課就是為了回答上述可能顯得有點愚蠢但實際上很重要的問題。而且藉著這些問題,你在學完這一課後會找到你真正想要的答案。

在學一樣技術前先了解一下用它能做什麼,不是很好麼?

我們從最簡單的問題開始:

什麼是程式設計?

程式設計意味著“編寫計算機程式”,這些程式能讓你的機器(一般來說是電腦)做你要它做的事情。

實際上,你的電腦裡充滿了各樣的程式:

計算器是一個程式;

文字編輯器也是一個程式;

你的聊天軟體(QQ,微信,等)也是程式;

你玩的遊戲也是程式。

如何零基礎自學C語言?

上圖大家可能有點陌生,不過這是我那一輩(80 後)的人很喜歡玩的經典遊戲 Metal Slug(《合金彈頭》或稱《越南戰爭》),就是一個程式。

簡單來說,在今天的日常生活中,程式隨處可見。大到航空母艦、空間站;小到智慧手錶、iPhone,裡面都有各種大大小小的程式。

程式幾乎可以讓你用電腦做任何事情。你可以自己編寫一個革命性的加密軟體,也可以編寫一個 3D 格鬥遊戲。你的電腦可以為你做任何事(除了泡咖啡之類,不過未來應該可以)。

注意了,我可不是讓大家現在就去寫一個 3D 格鬥遊戲,因為那太複雜了,會讓你手指抽筋的。我們的課程會循序漸進,一開始是最簡單的,可能只是實現在窗口裡顯示一段文字。

說來說去,C語言是什麼呀?

3。 程式設計,用什麼語言呢?

你的計算機(computer,也叫“電腦”)真的是一個奇怪的傢伙,這樣說已經算很給它面子了。我們給它傳遞命令,只能輸送給它 0 或 1(因為電腦裡面有大大小小的數不勝數的電晶體,而它們被用來做“開關”,0 和 1 正好可以用來表示“開啟”或“關閉”這兩個狀態,所以電腦最底層其實都是 0 和 1 這樣的二進位制碼)。打個比方,我要讓電腦做加法:

“計算 1 + 2 等於多少”。我實際上輸給電腦的是(是我隨便寫的,我並不記得怎麼轉換這句話到二進位制碼):

01010011101100110011110101

正如你看到的,這就是你的電腦所會的語言,被稱為“二進位制語言”。它也只會這門語言,可以看到這門語言完全不容易理解。

所以,我們的第一個真正的問題來了:

怎麼才能夠用更簡單的語言來和電腦對話呢,難道只能用 0 和 1 嗎?

你的電腦既不講中文也不講英語。然而,即使最瘋狂的專家也不會真的要去用二進位制碼來編寫程式,那簡直令人難以忍受。

所以,我們的計算機學者們就想到:先用其他簡單一些、便於理解的語言編寫程式,之後再把它翻譯成電腦的二進位制語言。

最不容易的,就是要編寫這樣一個“翻譯”程式。幸虧計算機學者們已經把這樣的翻譯程式寫好了,我們也沒必要重新做了(著實鬆了一口氣)。所以我們要做的就是告訴電腦:“我要做加法:1 + 2 等於多少”,這句話會被翻譯成電腦的二進位制碼:

01010011101100110011110101

4。 一些術語

上面我在解釋時都是用的簡單的詞語,但要知道在計算機領域,每樣事情都有特定的術語。這個系列課程中我們都將使用合適的術語。

這樣有好處,不僅可以顯得你比較“高大上”,而且當你有一天要跟另一個程式設計師解釋一些原理,用專業術語才好。雖然周圍的人可能會把你當“火星人”看,但大可不必理會。

上面我們說過,我們不可能用 0 和 1 來編寫程式,所以我們使用“簡化的語言”,按專業術語應該被稱為“高階語言”。

程式語言有幾個等級,等級越高就越接近於我們人類的語言(比如英語)。高階語言使用方便,但是也有一些缺陷,之後我們會看到。

下面列舉一些高階語言:

C

C++

Java

Swift

Python

JavaScript

PHP

Go

當然這裡只是列舉常用的幾種,要把所有高階語言列出來那得花不少時間。

除了剛才的高階語言,另一個我們要記得的術語是:

原始碼

。所謂原始碼,就是你用高階語言寫出來的程式碼。所以你得先寫出原始碼,然後再把原始碼轉換成機器能理解的二進位制碼。

接下來再來學兩個術語:

編譯器

編譯

。編譯器指的是把原始碼轉為電腦能理解的二進位制碼的工具。這個轉換的過程,稱為編譯。

對於每一種高階語言,都有對應的不同編譯器。當然,也不難理解,因為每種高階語言本身是不同的麼,我們不可能用 C語言的編譯器去編譯 Java 的原始碼。

之後我們還會看到,即使對於一種高階語言(例如 C語言),也存在好幾種不同的編譯器,有 Windows 的編譯器,GNU 的編譯器,等等。這些我們會在下一課學到。

由編譯器編譯出來的二進位制程式被稱為

可執行程式

。所以對於 Windows 下的可執行程式,都有一個字尾名 。exe(就是 EXEcutable 這個英語單詞的前三個字母,表示“可執行的”)。

5。 為什麼選擇學習 C語言

之前說過,高階語言有很多種。我們應該在它們之中特別選擇一門來作為入門程式設計的語言麼?

這是大問題。

我們有如下選擇:

很高階的語言:非常容易使用,可以說適合普羅大眾。其中,有 Python,Ruby,等。通常來說,用這些語言寫程式會比較快捷。然而它們常需要一些額外的檔案(比如

直譯器

)才能執行。

沒有那麼高階的語言:這類的高階語言(C語言是一種),誠然不容易編寫。但是學習這樣的語言可以幫助更深刻地理解程式設計的原理和電腦運作的原理。之後你再要學一門新語言會很容易,你完全可以自學。

此外,C語言非常流行。大量我們日常使用的軟體都是用 C語言編寫的。計算機學科也經常用 C語言作為教授程式設計的語言。

你可能會問,有一個問題我不明白:“C語言和 C++語言有什麼區別呢?”

可以說,C語言和 C++ 比較類似,都是使用非常廣的語言。為了更好地說明它們分別是如何誕生的,我們來說點歷史好了:

在電腦重達幾噸,大小像一大間屋子那樣的時代,計算機領域的前輩們開始發明一門程式語言:Algol。

技術不斷進步,他們又發明了一門新的語言:CPL,之後發展成為 BCPL,後來被稱為 B語言。

後來,終於發展成了 C語言。

又過了一段時間,人們想要在 C語言上加一些東西(一些改進,如果你非要這麼說的話)。這門新語言誕生了,就是 C++,是基於 C語言發明的。C++ 在 C語言的基礎上加了不少新的東西,使我們可以用不同的方式程式設計。

注意:這並不是說 C++ 比 C 更優秀,只是可以讓我們用不同的方式程式設計。也不是說 C語言相比就是一門老舊的語言,不,C語言今天仍然很常用,它是我們所用的 Windows,macOS,Linux,Unix 等作業系統的基礎,而且在嵌入式領域也是主要的程式語言。

6。 程式設計艱辛麼?

這個問題可能困擾很多人。是否需要成為有幾年研究經驗的數學家才能學程式設計呢?

答案是:絕不。學程式設計並不需要在數學方面有多大造詣,當然數學好對學程式設計也是大有裨益的(比如編寫 3D 遊戲,就需要有一些空間幾何知識)。其實最常用的也就是四則運算了:加、減、乘、除。

那程式設計有什麼難的呢?

誠然,不是那麼可怕。但是可能需要知道電腦工作的機制,為了更好的理解我們用 C語言做的事。

一個程式設計師一般有以下特質:

耐心:很多時候,你的程式不是第一次就能順利執行的,要堅持不懈。

邏輯意識:不需要有很多數學知識,但是要會思考。對於認為程式設計輕而易舉的人,對不起了。

冷靜:急躁起來也不能拿榔頭敲電腦啊。要讓程式執行,可不能這樣做。

簡單說來,學習程式設計沒有特別需要的技能。一個對數學一竅不通的人也可以成為很好的程式設計師,關鍵是要有耐心思考問題。很多人後來都發現自己愛上程式設計了,變得喜愛思考。

7。 總結

為了實現計算機程式,我們需要用電腦懂得的語言來編寫程式。

有很多種程式語言,我們可以按等級來分。一般越高階的語言,越容易掌握,但是在最終的程式效能上可能會差一些。

我們要一起來學習的 C語言被認為是高階語言裡偏低階的。它是全世界最著名和最常用的語言。

原始碼是一系列指令,用程式語言編寫。

編譯器是一個把我們的原始碼轉換成二進位制碼(0 和 1)的程式,轉換之後的二進位制程式可以被我們的電腦執行。我們在 Windows 作業系統裡經常遇到的 。exe 檔案就是二進位制檔案,裡面可沒有原始碼。

程式設計並不需要很高深的數學知識,除非你的程式要呼叫一些數學公式,比如加密程式。但是,程式設計需要你有邏輯意識,並且有條不紊。

小慕雞湯時刻:學習C語言,一定要有耐心,不能急於求成!並且,一定不能眼高手低,學習程式設計,一定要親自動手去練習,多多去實踐才行!不能只光看看書,看看教學影片,一定要親自動手!

歡迎關注「慕課網」,發現更多IT圈優質內容,分享乾貨知識,幫助你成為更好的程式設計師!