從C語言開始
1. 什么是語言,什么是C語言
語言就廣義而言,是采用一套具有共同處理規(guī)則來進(jìn)行表達(dá)的溝通指令,指令會以視覺、聲音或者觸覺方式來傳遞。嚴(yán)格來說,語言是指人類溝通所使用的指令-自然語言。
計算機語言是一種特殊的語言。因為它是用于人與計算機之間傳遞信息的,所以人和計算機都能“讀懂”。具體地說,一方面,人們要使用計算機語言指揮計算機完成某種特作,就必須對這種工作進(jìn)行特殊描述,所以它能夠被人們讀懂。另一方面,計算機必須按計算機語言描述來行動,從而完成其描述的特定工作,所以能夠被計算機“讀懂”。
軟件:一系列按照特定順序組織的計算機數(shù)據(jù)和指令的集合。
交互方式:
- 自然交互界面:聲音控制,觸摸屏手勢識別
- 圖形化界面:這種方式簡單直觀,使用者易于接受,容易上手操作。
- 命令行方式:需要有一個控制臺,輸入特定的指令,讓計算機完成一些操作。較為麻煩,需要記錄住一些命令。
C語言是一門面向過程的計算機編程語言,與C++、C#、Java等面向?qū)ο缶幊陶Z言有所不同。C語言的設(shè)計目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、僅產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。C語言描述問題比匯編語言迅速、工作量小、可讀性好、易于調(diào)試、修改和移植,而代碼質(zhì)量與匯編語言相當(dāng)。C語言一般只比匯編語言代碼生成的目標(biāo)程序效率低10%-20%。因此,C語言可以編寫系統(tǒng)軟件。
2. 計算機基礎(chǔ)知識
計算機指令執(zhí)行流程
計算機結(jié)構(gòu)
二進(jìn)制
二進(jìn)制是計算技術(shù)中廣泛采用的一種數(shù)制。二進(jìn)制數(shù)據(jù)是用0和1兩個數(shù)碼來表示的數(shù)。它的基數(shù)為2,進(jìn)位規(guī)則是“逢二進(jìn)一”,借位規(guī)則是“借一當(dāng)二”。
十進(jìn)制 0 1 2 3 4 5 6 7 8 9 二進(jìn)制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
電子計算機出現(xiàn)以后,使用電子管來表示十種狀態(tài)過于復(fù)雜,所以所有的電子計算機中只有兩種基本的狀態(tài),開和關(guān)。也就是說,電子管的兩種狀態(tài)決定了以電子管為基礎(chǔ)的電子計算機采用二進(jìn)制來表示數(shù)字和數(shù)據(jù)。
位(Bit):度量數(shù)據(jù)的最小單位
字節(jié)(Byte):最常用的基本單位,一個字節(jié)有8位
K 字節(jié) 1K = 1024 byte M(兆)字節(jié) 1M = 1024 K G(吉) 字節(jié) 1G = 1024 M T(太)字節(jié) 1T = 1024 G
十進(jìn)制 M=10, 數(shù)字集 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 二進(jìn)制 M=2 , 數(shù)字集 0, 1 八進(jìn)制 M=8 , 數(shù)字集 0, 1, 2, 3, 4, 5, 6, 7 十六進(jìn)制 M=16 ,數(shù)字集 0, … , 9, A, B, C, D, E, F
機器指令
機器指令(Machine Instructions)是CPU能直接識別并執(zhí)行的指令,它的表現(xiàn)形式是二進(jìn)制編碼。機器指令通常由操作碼和操作數(shù)兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,操作數(shù)指出參與運算的對象,以及運算結(jié)果所存放的位置等。
程序是為完成一項特定任務(wù)而用某種語言編寫的一組指令序列。
編譯器
編譯器就是將“一種語言(通常為高級語言)”翻譯為“另一種語言(通常為低級語言)”的程序。一個現(xiàn)代編譯器的主要工作流程:源代碼 (source code) → 預(yù)處理器 (preprocessor) → 編譯器 (compiler) → 目標(biāo)代碼 (object code) → 鏈接器 (Linker) → 可執(zhí)行程序 (executables)
語言的層次
不同語言 表達(dá)式 高級語言 A+B 匯編 Add AX,BX 機器語言 0000 0000 0000 1010
主流語言進(jìn)化史
機器語言→匯編→C→C++→C#,Java,Python,VB
C語言特點
優(yōu)點 缺點 代碼量小 編寫代碼實現(xiàn)周期長 執(zhí)行速度快 過于自由,經(jīng)驗不足易出錯 功能強大 對平臺庫依賴較多 編程自由 危險性高
3. 為什么要學(xué)習(xí)C語言
C語言是有史以來最為重要的,最基礎(chǔ)的編程語言
- 絕對重要的基石語言,Unix,Linux,Windows,JAVA,C++,C#底層實現(xiàn)都靠C
- 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),C++的基礎(chǔ)
- 可以說,只要是運行的系統(tǒng),都可以用C寫
五大編程語言統(tǒng)治地位加強
Python、Java、C 和 C++,C# 是 TIOBE 編程語言榜的 Top 5 已經(jīng)有很長一段時間了,并且遠(yuǎn)遠(yuǎn)領(lǐng)先于其它語言。
C語言適用的領(lǐng)域
- C語言的應(yīng)用極其廣泛,從網(wǎng)站后臺,到底層操作系統(tǒng),從多媒體應(yīng)用到大型網(wǎng)絡(luò)游戲,均可使用C語言來開發(fā)。
- C語言可以寫網(wǎng)站后臺程序
- C語言可以寫出絢麗的GUI界面
- C語言可以專門針對某個主題寫出功能強大的程序庫,然后供其他程序方便使用,從而讓其他程序節(jié)省開發(fā)時間。
- C語言可以寫出大型游戲的引擎。
- C語言可以寫出另一個語言來。
- C語言可以寫操作系統(tǒng)和驅(qū)動程序,并且只能用C語言編寫,Linux操作系統(tǒng)的全部源代碼都可以從網(wǎng)上得到,要深入了解操作系統(tǒng)的運行秘密,懂C語言,就能看懂。
- 任何設(shè)備只要配置了微處理器,就都支持C語言。從家用電器到手機,都是由C語言技術(shù)來推動的。
- ARM嵌入方式
- 單片機
- Arduino
學(xué)習(xí)C語言的理由
- 當(dāng)掌握了C語言后,再去學(xué)習(xí)其他面向過程的語言,最多一個星期就能學(xué)會。
- C語言已經(jīng)存在很多年了,它有廣泛的使用團體并且有大量的現(xiàn)成代碼可以利用。這就使大家能在過去程序的基礎(chǔ)上,快速和高效的實現(xiàn)自己的程序。
C語言的精髓
C語言僅有32個關(guān)鍵字,9種控制語句,卻能完成無數(shù)的功能。
數(shù)據(jù)類型關(guān)鍵字
a. 基本數(shù)據(jù)類型(5個)
- void:聲明函數(shù)無返回值或無參數(shù),聲明無類型指針,顯式丟棄運算結(jié)果。
- char:字符型類型數(shù)據(jù),屬于整型數(shù)據(jù)的一種。
- int:整型數(shù)據(jù),通常為編譯器指定的機器字長。
- float:單精度浮點型數(shù)據(jù),屬于浮點數(shù)據(jù)的一種。
- double:雙精度浮點型數(shù)據(jù),屬于浮點數(shù)據(jù)的一種。
b. 類型修飾關(guān)鍵字(4個)
- short:修飾int,短整型數(shù)據(jù),可省略被修飾的int。
- long:修飾int,長整形數(shù)據(jù),可省略被修飾的int。
- signed:修飾整型數(shù)據(jù),有符號數(shù)據(jù)類型。
- unsigned:修飾整型數(shù)據(jù),無符號數(shù)據(jù)類型。
c. 復(fù)雜類型關(guān)鍵字(5個)
- struct:結(jié)構(gòu)體聲明。
- union:共用體聲明。
- enum:枚舉聲明。
- typedef:聲明類型別名。
- sizeof:得到特定類型或特定類型變量的大小。
d. 存儲級別關(guān)鍵字(6個)
- auto:指定為自動變量,由編譯器自動分配及釋放,通常在棧上分配。
- static:指定為靜態(tài)變量,分配在靜態(tài)變量區(qū),修飾函數(shù)時,指定函數(shù)作用域為文件內(nèi)部。
- register:指定為寄存器變量,建議編譯器將變量存儲到寄存器中使用,也可以修飾函數(shù)形參,建議編譯器通過寄存器而不是堆棧傳遞參數(shù)。
- extern:指定對應(yīng)變量為外部變量,即在另外的目標(biāo)文件中定義,可以認(rèn)為是約定由另外文件聲明的對象的一個“引用“
- const:與volatile合稱“cv特性”,指定變量不可被當(dāng)前線程/進(jìn)程改變(但有可能被系統(tǒng)或其他線程/進(jìn)程改變)。
- volatile:與const合稱“cv特性”,指定變量的值有可能會被系統(tǒng)或其他進(jìn)程/線程改變,強制編譯器每次從內(nèi)存中取得該變量的值。
流程控制關(guān)鍵字
a. 跳轉(zhuǎn)結(jié)構(gòu)(4個)
- return:用在函數(shù)體中,返回特定值(或者是void值,即不返回值)。
- continue:結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)。
- break:跳出當(dāng)前循環(huán)或switch結(jié)構(gòu)。
- goto:無條件跳轉(zhuǎn)語句。
b. 分支結(jié)構(gòu)(5個)
- if:條件語句。
- else:條件語句否定分支(與if連用)。
- switch:開關(guān)語句(多重分支語句)。
- case:開關(guān)語句中的分支標(biāo)記。
- default:開關(guān)語句中的“其他”分治,可選。
c. 循環(huán)結(jié)構(gòu)(3個)
- for:for循環(huán)結(jié)構(gòu),for(1;2;3)4;的執(zhí)行順序為1->2->4->3->2...循環(huán),其中2為循環(huán)條件。
- do:do循環(huán)結(jié)構(gòu),do 1 while(2);的執(zhí)行順序是1->2->1...循環(huán),2為循環(huán)條件。
- while:while循環(huán)結(jié)構(gòu),while(1) 2;的執(zhí)行順序是1->2->1...循環(huán),1為循環(huán)條件。
- 以上循環(huán)語句,當(dāng)循環(huán)條件表達(dá)式為真則繼續(xù)循環(huán),為假則跳出循環(huán)。
34種運算符
- 算術(shù)運算符:+ - * / % ++ --
- 關(guān)系運算符:< <= == > >= !=
- 邏輯運算符:! && ||
- 位運算符 :<< >> ~ | ^ &
- 賦值運算符:= 及其擴展
- 條件運算符:?:
- 逗號運算符:,
- 指針運算符:* &
- 求字節(jié)數(shù) :sizeof
- 強制類型轉(zhuǎn)換:(類型)
- 分量運算符:. ->
- 下標(biāo)運算符:[]
- 其它 :( ) -
4. 怎么學(xué)好C語言
-
方向和目標(biāo)
首先要確定為什么要學(xué)習(xí)計算機編程語言,為考試?為工作?為興趣?
如果是為興趣學(xué)習(xí),興趣很容易轉(zhuǎn)易,熱情最容易消逝,興趣一開始比較濃,如何無功利長期堅持就比較難,所以在學(xué)習(xí)興趣中不段找到成就感就非常重要。
如果是為工作,換一個行業(yè)或方向而學(xué)習(xí),最有效的方式還是培訓(xùn)。為換一個工作而學(xué)習(xí),動力和壓力應(yīng)該是比較大的。也容易在一開始就當(dāng)作一個技能,工作的技能來學(xué)習(xí)和操練。
為提升工作效率而學(xué)習(xí),把編程的思維,工具和方法,應(yīng)用到不同的工作中,也是一個很大的學(xué)習(xí)動力,和能夠帶來成就感的地方。只是學(xué)習(xí)的時間相對要少很多。
-
學(xué)習(xí)中最難的是什么?
學(xué)習(xí)編程開發(fā)中最常見的問題:
1、編程環(huán)境不會搭建
編程學(xué)習(xí)的第一步就是搞定環(huán)境,包括開發(fā)環(huán)境,開發(fā)工具,運行環(huán)境,服務(wù)器等等。 要學(xué)會解決環(huán)境中遇到各種問題。2、知識點太多,前面學(xué)后面忘
如學(xué)習(xí)C/C++開發(fā),涉及的內(nèi)容和知識就太多,對初學(xué)者來說首先是程序邏輯,然后面對的可能就是C語言三大巨頭(指針,數(shù)組,數(shù)據(jù)結(jié)構(gòu))等,C++的面向?qū)ο缶幊?,STL標(biāo)準(zhǔn)模板庫,還有圖形化編程等, 太多知識我們需要學(xué)習(xí)。 如果是自學(xué)的話,你可能才到嵌套循環(huán)就感覺到困難了,可能是到面向?qū)ο蟾杏X到難以理解,要放棄了。 所以一定要有長期作戰(zhàn)的思想,有打硬仗的準(zhǔn)備。3、代碼太多,不知道從哪里看起
剛開始代碼少還容易,過不了多久,看網(wǎng)上的教程也好,下載的代碼也好,拿到的代碼很多了,不知道從哪里看起,不知道程序入口在哪里,不知道怎么去運行。 這個原因,就是練習(xí)太少,調(diào)試太少。很多同學(xué)在學(xué)習(xí)編程時,當(dāng)作知識來學(xué)習(xí),這是一個誤區(qū),應(yīng)該當(dāng)作技能來學(xué)習(xí),技能就需要反復(fù)練習(xí),訓(xùn)練。4、完全對著教程做的,就是運行不了
明明是一模一樣的代碼,視頻中能運行出來,你的就是不行。原因還是環(huán)境和配置的問題。 當(dāng)然也有不細(xì)心的錯誤,如拼寫錯誤你沒有發(fā)現(xiàn)。5、錯誤解決不了,想放棄
這是自學(xué)最大的障礙。編程的學(xué)習(xí),不像英語(外語)等語言類的學(xué)習(xí),可以通過反復(fù)重復(fù)得到提高,甚至可以跳過一兩課,都沒有關(guān)系。 如果長時間被卡殼,錯誤得不到解決,百度怎么查也不行,或者照著網(wǎng)上的還是解決不了,就是分分鐘想放棄。 其實,這就是老師的重要性。有老師在旁邊,可能就是稍微點撥一下,這個問題就過去,你也能馬上獲得到經(jīng)驗。當(dāng)然現(xiàn)在還可以利用網(wǎng)絡(luò)上的社群,網(wǎng)上的老師,遠(yuǎn)程協(xié)助,來解決你學(xué)習(xí)過程中遇到的那些稀奇古怪的問題。6、學(xué)了很久了,感覺還沒有入門
練習(xí)不夠,項目不夠。 這是典型的把編程語言的學(xué)習(xí),當(dāng)作知識點來學(xué)習(xí)。做項目,就是要把所有知識點一個一個串起來,對你所學(xué)習(xí)的知識點,技能點都是一個應(yīng)用的檢驗。7、技術(shù)更新太快,感覺又要重頭開始學(xué)
還是沒有把一門語言,一個技能吃透。掌握了一種語言后,對新的語言,框架掌握起來都不是一件難事。 -
編程學(xué)習(xí)如何突破?
語言方向,如果你現(xiàn)在開始學(xué)習(xí),不妨選擇學(xué)習(xí)起來更容易上手的,而且功能強大。
coding coding coding
就是多敲代碼,多練習(xí)
要有實戰(zhàn)的項目
項目也是增加你代碼量最有效的手段
-
掌握一門編程語言的意義
- 編程學(xué)起來很苦,但也并不是完全一無是處??陀^地看,自學(xué)編程還是有很多好處。
- 掌握一門技術(shù)技能
- 培養(yǎng)學(xué)習(xí)能力
- 改變思維方式
- 學(xué)會快速迭代,不斷迭代,完善改進(jìn)產(chǎn)品的思路
- 享受沉浸專注的快樂
- 編程的學(xué)習(xí)不能靠碎片化的時間,一定需要大塊的時間安排。編程有助于提升你的專注度。
- 享受創(chuàng)造的快樂
- 會編程的人不會感覺枯燥和孤獨,他會創(chuàng)造一個世界出來。
- 鍛煉毅力和獨處能力
- 提高解決問題能力
- 提高面對挫折失敗的承受能力
-
常用網(wǎng)站
GitHub: Let’s build from here · GitHub
百度一下,你就知道 (baidu.com)
5. 常用開發(fā)環(huán)境IDE
-
Visual Studio 2022
Visual Studio: IDE and Code Editor for Software Developers and Teams (microsoft.com)
下載運行VisualStudioSteup.exe,點擊是
點擊繼續(xù)
可能需要等一會時間
進(jìn)入安裝界面
現(xiàn)階段學(xué)習(xí)使用勾選以下就可以了。
點擊安裝
此時需要聯(lián)網(wǎng)安裝,安裝時間根據(jù)具體網(wǎng)速條件。
重啟系統(tǒng),安裝成功了!
點擊啟動
可以用Microsoft登錄,或是以后再說。
-
Code Blocks
Binary releases - Code::Blocks (codeblocks.org)
-
QT
Embedded Software Development Tools & Cross Platform IDE | Qt Creator
-
Xcode
-
VI
6. HelloWorld?
用Visual Studio
下一步
右鍵新建
#include<stdio.h> void main() { printf("hello world!"); getchar();//等待 }
使用Code:Blocks
下載免安裝版本,
新建項目
默認(rèn)會創(chuàng)建一個main.c的文件
這里需要注意編譯器找不到,
Settings→Compiler→Toolchain executables
7. 其它系統(tǒng)下
Debain下,安裝c編譯器,切換管理員
apt install build-essential
安裝圖形界面
sudo apt install xorg
sudo apt install xfce4
修改遠(yuǎn)程端口
sudo sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini
sudo echo xfce4-session>~/.xsession
sudo service xrdp restart
通過遠(yuǎn)程桌面進(jìn)系統(tǒng)
安裝gedit
sudo apt install gedit
sudo apt install wget
編寫第一個c語言程序
注意后綴名.c結(jié)尾
gcc -o c01 c01.c
通過gcc編譯
運行編譯后程序
./c01
Qt安裝
下載連接
Index of /qt/development_releases/online_installers/4.4/ | 清華大學(xué)開源軟件鏡像站 | Tsinghua Open Source Mirror
新版本安裝基本都是在線安裝,需要注冊賬號