C語言C++探索之旅: 什麼是編程
內容簡介
1、課程大綱
2、什麼是編程?
課程大綱
不知道為什麼,一直對C語言有一種很深厚的「情懷」(類似老羅對鎚子手機的那種),說不出來。
也許因為C語言是很多前輩諄諄教誨說一定要學一下的一門編程語言;也許因為C語言是自己學習的專業「嵌入式系統」的首要語言;也許因為C語言自1972年誕生以來歷經43年依然獨領風騷,位列編程語言排行榜首位;也許因為「C語言之難,難於上青天」,自己以前入門著實困難;也許因為需要5-10年的時間,你才能說比較好地掌握了C語言;也許因為學好了C語言,一般就能輕鬆入門其他語言。
有太多也許,但是可以肯定的是:C語言是一門充滿魅力的編程語言。
它的發明人,「C語言之父」 Dennis Ritchie在2011年去世。很低調,甚至沒有太多新聞報道。同年喬布斯去世,各界報道鋪天蓋地。
我想說:應該多紀念那些低調付出的人。
Dennis Ritchie除了C語言這項偉大發明(Windows操作系統,Linux操作系統,蘋果操作系統底層幾乎全是C語言實現),還與Ken Tompson一起研發了Unix操作系統(雖然大部分工作是Ken起步的,後來Dennis用自己發明的C語言重寫了Unix操作系統)。要知道,Unix操作系統成為了後來舉世聞名的Linux操作系統的參考對象,Android手機底層就是用的修改過的Linux系統,Mac操作系統底層也是類Unix系統,我們用的iPhone和iPad等的操作系統,底層大部分也是C語言編寫的。
不為了提高編程水平,光為了感受大師的風采,光為了探尋一下我們每天都在接觸的這門語言,也要學一下這位了不起的猶太人的傳世傑作:C語言。
在這個系統課程中,小編和大家一起學習,共同進步,探索C語言的奇妙世界。
我們的課程分為四大部分,每一個部分結束後都會有練習題,並會公布答案。還會帶大家用C語言編寫三個遊戲。
C語言編程基礎知識
什麼是程序員?
工欲善其事,必先利其器
你的第一個程序
變數的世界
運算符
條件表達式
循環語句
實戰:第一個C語言小遊戲
函數
練習題
習作:完善第一個C語言小遊戲
C語言高級技術
模塊化編程
進擊的指針,C語言王牌
數組
字元串
預處理
創建你自己的變數類型
文件讀寫
動態分配
實戰:「懸掛小人」遊戲
安全的文本輸入
練習題
習作:用自己的語言解釋指針
用基於C語言的SDL庫開發2D遊戲
安裝SDL
創建窗口和畫布
顯示圖像
事件處理
實戰:「超級瑪麗推箱子」遊戲
掌握時間的使用
用SDL_ttf編輯文字
用FMOD控制聲音
實戰:可視化的聲音譜線
練習題
數據結構
鏈表
堆,棧和隊列
哈希表
練習題
《什麼是編程?》
你也許聽說過編程,也許你想要真正明白編程到底是怎麼一回事。
用C語言編程,是怎麼樣的呢?用C語言作為入門編程的第一門語言真的好嗎?我們能用C語言做任何事嗎?
這一課就是為了回答上述可能顯得有點愚蠢但實際上很重要的問題。而且借著這些問題,你在學完這一課後會找到你真正想要的答案。
在學一樣技術前先了解一下用它能做什麼,不是很好么?
我們從最簡單的問題開始:
什麼是編程?
編程意味著「編寫計算機程序」,這些程序能讓你的機器(一般來說是電腦)做你要它做的事情。
實際上,你的電腦里充滿了各樣的程序:
計算器是一個程序
文本編輯器也是一個程序
你的聊天軟體(QQ,微信,Skype等)也是程序
你玩的遊戲也是程序
上圖大家可能不陌生,我那一輩的人很喜歡玩的經典遊戲Metal Slug《合金彈頭》或稱《越南戰爭》,就是一個程序。
簡單來說,在今天的日常生活中,程序隨處可見。大到航空母艦、空間站,小到智能手錶、iPhone,裡面都有各種大大小小的程序。
程序幾乎可以讓你用電腦做任何事情。你可以自己編寫一個革命性的加密軟體,也可以編寫一個3D格鬥遊戲。你的電腦可以為你做任何事(除了泡咖啡之類,不過未來應該可以)。
注意了,我可不是讓大家現在就去寫一個3D格鬥遊戲,因為那太複雜了,會讓你手指抽筋的。我們的課程會循序漸進,一開始是最簡單的,可能只是實現在窗口裡顯示一段文字。
這個系列課程的目的是讓讀者最終能夠自己用C語言實現你想實現的幾乎任何程序。
說來說去,C語言是什麼呀?
編程,用什麼語言呢?
你的計算機(電腦)真的是一個奇怪的傢伙,這樣說已經算很給它面子了。我們給它傳遞命令,只能輸送給它0或1(因為電腦裡面有大大小小的數不勝數的晶體管,而他們被用來做「開關」,0和1正好可以用來表示開啟或關閉的兩個狀態,所以電腦最底層其實都是0和1這樣的二進位碼)。打個比方,我要讓電腦做加法:「計算1+2等於多少」。我實際上輸給電腦的是(是我隨便寫的,我並不記得怎麼轉換這句話到二進位碼):
01010011101100110011110101
正如你看到的,這就是你的電腦所會的語言,被稱為「二進位語言」。它也只會這門語言,可以看到這門語言完全不容易理解。
所以,我們的第一個真正的問題來了:
怎麼才能夠用更簡單的語言來和電腦對話呢,難道只能用0和1嗎?
你的電腦既不講中文也不講英語。然而,即使最瘋狂的專家也不會真的要去用二進位碼來編寫程序,那簡直令人難以忍受。
所以,我們的計算機學者們就想到:先用其他簡單一些、便於理解的語言編寫程序,之後再把它翻譯成電腦的二進位語言。
最不容易的,就是要編寫這樣一個「翻譯」程序。幸虧計算機學者們已經把這樣的翻譯程序寫好了,我們也沒必要重新做了(著實鬆了一口氣)。所以我們要做的就是告訴電腦:「我要做加法:1+2等於多少」,這句話會被翻譯成電腦的二進位碼:
01010011101100110011110101
一些術語
上面我在解釋時都是用的簡單的詞語,但要知道在計算機領域,每樣事情都有特定的術語。這個系列課程中我們都將使用合適的術語。
這樣有好處,不僅可以顯得你比較「高大上」,而且當你有一天要跟另一個程序員解釋一些原理,用專業術語才好。雖然周圍的人可能會把你當火星人看,但大可不必理會。
上面我們說過,我們不可能用0和1來編寫程序,所以我們使用「簡化的語言」,按專業術語應該被稱為「高級語言」。
編程語言有幾個等級,等級越高就越接近於我們人類的語言(比如英語)。高級語言使用方便,但是也有一些缺陷,之後我們會看到。
下面列舉一些高級語言:
C
C++
Java
Swift
Python
Visual Basic
Delphi
當然這裡只是列舉幾種,要把所有高級語言列出來那得花不少時間。
除了剛才的高級語言,另一個我們要記得的術語是:源代碼。所謂源代碼,就是你用高級語言寫出來的代碼。所以是你寫源代碼,然後再把源代碼轉化成機器能理解的二進位碼。
接下來再來學兩個術語:編譯器。指的是把源代碼轉為電腦能理解的二進位碼的工具。這個轉換的過程,稱為 編譯。
重要:對於每一種高級語言,都有對應的不同編譯器。當然,也不難理解,因為每種高級語言本身是不同的么,我們不可能用C語言的編譯器去編譯Java的源代碼。
之後我們還會看到,即使對於一種高級語言(例如C語言),也存在好幾種不同的編譯器,有Microsoft(微軟)的編譯器,GNU的編譯器,等等。這些我們會在下一課學到。
由編譯器編譯出來的二進位程序被稱為 可執行程序。所以對於微軟下的可執行程序,都有一個後綴名:.exe (就是EXEcutable 「可執行的」這個英語單詞的前三個字母)。
為什麼選擇學習C語言
之前說過,高級語言有很多種。我們應該在它們之中特別選擇一門來作為入門編程的語言么?
這是大問題。
我們有如下選擇:
很高級的語言
非常容易使用,可以說適合普羅大眾。其中,有Python,Ruby,Visual Basic等。通常來說,用這些語言寫程序會比較快捷。然而它們常需要一些額外的文件(比如 解釋器)才能執行。
沒有那麼高級的語言
這類的高級語言(C語言是一種),誠然不容易編寫。但是學習這樣的語言你可以更深刻地理解編程的原理和電腦運作的原理。之後你再要學一門新語言會很容易,你完全可以自學。
此外,C語言非常流行。大量我們日常使用的軟體都是用C語言編寫的。計算機學科也經常用C語言作為教授編程的語言。
你可能會問,有一個問題我不明白:C語言和C++語言有什麼區別呢?
可以說,C語言和C++比較類似,都是使用非常廣的語言。為了更好地說明它們分別是如何誕生的,我們來說點歷史好了:
在電腦重達幾噸,大小像一大間屋子那樣的時代,計算機領域的前輩們開始發明一門編程語言:Algol
技術不斷進步,他們又發明了一門新的語言:CPL,之後發展成為 BCPL,後來被稱為 B語言
後來,終於發展成了C語言
又過了一段時間,人們想要在C語言上加一些東西。一些改進,如果你要這麼說的話。這門新語言誕生了,就是C++,是基於C語言發明的。C++在C語言基礎上加了不少新的東西,使我們可以用不同的方式編程
注意:這並不是說C++比C更優秀,只是可以讓我們用不同的方式編程。也不是說C語言相比就是一門老舊的語言,不,C語言今天仍然很常用,它是我們所用的WIndows,Mac OS,Linux,Unix等操作系統的基礎。
編程艱辛么?
這個問題可能困擾很多人。是否需要成為有幾年研究經驗的數學家才能學編程呢?
答案是:絕不。學編程並不需要在數學方面有多大造詣,當然數學好對學編程也是有好處(比如編寫3D遊戲,就需要有一些空間幾何知識)。其實最常用的也就是四則運算了:加,減,乘,除。
那編程有什麼難的呢?
誠然,不是那麼可怕。但是可能需要知道電腦工作的機制,為了更好的理解我們用C語言做的事。
一個程序員一般有以下特質:
耐心:很多時候,你的程序不是第一次就能順利運行的,要堅持不懈
邏輯意識:不需要有很多數學知識,但是要會思考。對於認為編程輕而易舉的人,對不起了
冷靜:急躁起來也不能拿榔頭敲電腦啊。要讓程序運行不能這樣
簡單說來,學習編程沒有特別需要的技能。一個對數學一竅不通的人也可以成為很好的程序員,關鍵是要有耐心思考問題。很多人後來都發現自己愛上編程了,變得喜愛思考。
總結一下:
為了實現計算機程序,我們需要用電腦懂得的語言來編寫程序
有很多種編程語言,我們可以按等級來分。一般越高級的語言,越容易掌握。但是在最終的程序效能上可能會差一些
我們要一起來學習的C語言被認為是高級語言里偏低級的。它是全世界最著名和最常用的語言
源代碼是一系列指令,用編程語言編寫
編譯器是一個把我們的源代碼轉換成二進位碼(0和1)的程序,轉換之後的二進位程序可以被我們的電腦執行。我們一般遇到的 .exe 文件就是二進位文件,裡面可沒有源代碼
編程並不需要很高深的數學知識,除非你的程序要調用一些數學公式,比如加密程序。但是,需要你有邏輯意識,並且有條不紊
推薦閱讀: