C语言程序设计基础(01)—— 计算机与程序设计基础
C語言程序設(shè)計(jì)基礎(chǔ)(01)——計(jì)算機(jī)與程序設(shè)計(jì)基礎(chǔ)
- 一、計(jì)算機(jī)組成及基本原理
- 1、計(jì)算機(jī)硬件系統(tǒng)
- 2、計(jì)算機(jī)軟件系統(tǒng)
- 3、計(jì)算機(jī)工作原理
- 二、程序設(shè)計(jì)基礎(chǔ)
- 1、程序設(shè)計(jì)風(fēng)格
- 2、結(jié)構(gòu)化程序設(shè)計(jì)(structured programming)
- 三、C語言程序基本結(jié)構(gòu)和開發(fā)過程
- 1、C語言程序的基本結(jié)構(gòu)
- 2、C語言程序開發(fā)過程
- 3、程序開發(fā)環(huán)境
寫在前面
我剛上大學(xué)的時(shí)候,學(xué)的第一門計(jì)算機(jī)編程語言就是 C語言,當(dāng)時(shí)覺得這仿佛是天書,畢竟腦子里只有中學(xué)數(shù)學(xué)課上那點(diǎn)簡(jiǎn)單的流程圖和VB概念,但是隨著多年的練習(xí)和開發(fā)使用,我漸漸地開始掌握并喜歡上了這門語言,并且也開始學(xué)習(xí)C++、C#、JAVA等其它編程語言。不得不說,C語言的學(xué)習(xí)為我打下了良好的編程基礎(chǔ),同樣也讓我越來越清晰地認(rèn)識(shí)到自己的不足。如今時(shí)代呈現(xiàn)指數(shù)式發(fā)展,尤其在IT等行業(yè), 必須保證自己永遠(yuǎn)在學(xué)習(xí)新的知識(shí)技能,否則迎接你的就是淘汰。
大一課堂使用的課本是《C語言程序設(shè)計(jì)(第2版)》(姚琳 主編,屈微 副主編),雖然課本上也有一些小的瑕疵,但掩蓋不了它開蒙啟智的光輝。搬磚之余,在這里整理回顧下C語言的基礎(chǔ)知識(shí),感謝當(dāng)年老師細(xì)致入微的指導(dǎo),幫助我們解決了程序上數(shù)不盡的bug,為我們打下了良好的編程基礎(chǔ)。
一、計(jì)算機(jī)組成及基本原理
計(jì)算機(jī)系統(tǒng)構(gòu)成:
- 硬件系統(tǒng)
- 主機(jī)
- 內(nèi)存儲(chǔ)器(內(nèi)存)
- 中央處理器(CPU,Central Processing Unit)
- 運(yùn)算器
- 控制器
- 外部設(shè)備(外設(shè))
- 輸入輸出設(shè)備
- 外存儲(chǔ)器(外存)
- 主機(jī)
- 軟件系統(tǒng)
- 應(yīng)用軟件
- 系統(tǒng)軟件
- 操作系統(tǒng)
- 語言處理程序
- 服務(wù)程序
完整的計(jì)算機(jī)系統(tǒng)包含兩個(gè)部分:硬件系統(tǒng)、軟件系統(tǒng)。二者相輔相成,仿佛軀體和靈魂不可分割。
1、計(jì)算機(jī)硬件系統(tǒng)
(1)概念
組成計(jì)算機(jī)的各種電磁、機(jī)械部件和設(shè)備裝置的總稱,硬件(Hard ware) 系統(tǒng)是計(jì)算機(jī)實(shí)現(xiàn)自動(dòng)控制和運(yùn)算的物質(zhì)基礎(chǔ)。
(2)馮·諾依曼結(jié)構(gòu)
組成:運(yùn)算器、存儲(chǔ)器、控制器、輸入設(shè)備、輸出設(shè)備。
特點(diǎn):程序和數(shù)據(jù)以二進(jìn)制形式存在存儲(chǔ)器中,在控制器的指揮下,自動(dòng)從存儲(chǔ)器中取指令并執(zhí)行。1
- 運(yùn)算器
對(duì)數(shù)據(jù)進(jìn)行處理和運(yùn)算。基本操作:算術(shù)運(yùn)算、邏輯運(yùn)算。
包括算術(shù)邏輯單元(ALU,Arithmetic Logic Unit)和寄存器。 - 存儲(chǔ)器
用來存儲(chǔ)程序和數(shù)據(jù)。由許多存儲(chǔ)單元組成,每個(gè)單元有自己的地址,可根據(jù)地址找到所需數(shù)據(jù)和程序。
分為兩類:
①內(nèi)存儲(chǔ)器(主存儲(chǔ)器):存儲(chǔ)當(dāng)前要執(zhí)行的程序和數(shù)據(jù)以及中間結(jié)果和最終結(jié)果。
②外存儲(chǔ)器(輔助存儲(chǔ)器):長(zhǎng)期存儲(chǔ)大量暫時(shí)不參與運(yùn)算的數(shù)據(jù)和程序以及運(yùn)算結(jié)果。 - 控制器
指揮計(jì)算機(jī)各部件協(xié)調(diào)工作。控制:將輸入設(shè)備輸入的程序和數(shù)據(jù)存入存儲(chǔ)器,按照程序要求指揮運(yùn)算器進(jìn)行運(yùn)算處理并把結(jié)果再存入存儲(chǔ)器中,最后將結(jié)果傳給輸出設(shè)備。
主要組成部分:
①程序計(jì)數(shù)器(PC,Program Counter):存放當(dāng)前要執(zhí)行的指令地址,有自動(dòng)加1的功能。
②指令寄存器(IR,Instruction Register):存放當(dāng)前要執(zhí)行的指令代碼。
③指令譯碼器(ID,Instruction Decoder):識(shí)別IR中指令的性質(zhì)和操作。
④操作控制器(Operation Controller):根據(jù)ID的譯碼,產(chǎn)生實(shí)現(xiàn)該指令全部動(dòng)作的控制信號(hào)。 - 輸入設(shè)備
將用戶的程序、數(shù)據(jù)和命令輸入到計(jì)算機(jī)內(nèi)存的設(shè)備。標(biāo)準(zhǔn)輸入設(shè)備是鍵盤。其它常用輸入設(shè)備:鼠標(biāo)、掃描儀、語音輸入設(shè)備、手寫識(shí)別輸入設(shè)備等。 - 輸出設(shè)備
顯示、打印或保存計(jì)算機(jī)運(yùn)算和處理結(jié)果。標(biāo)準(zhǔn)輸出設(shè)備是顯示器。其它常用輸出設(shè)備:打印機(jī)、繪圖儀、數(shù)據(jù)投影設(shè)備(投影儀)等。
2、計(jì)算機(jī)軟件系統(tǒng)
(1)概念
軟件(Software) 是計(jì)算機(jī)系統(tǒng)中各類程序、有關(guān)文檔以及所需要的數(shù)據(jù)的總稱。
程序:為了解決某一問題而設(shè)計(jì)的一系列指令或語句的集合。只是軟件的一部分。
源程序(Source Program):用戶為解決自己的問題編制的程序。
計(jì)算機(jī)指令:用來控制計(jì)算機(jī)、告訴計(jì)算機(jī)進(jìn)行怎樣操作的命令。
(2)兩大分類
-
系統(tǒng)軟件
用來管理、維護(hù)計(jì)算機(jī)及協(xié)調(diào)計(jì)算機(jī)內(nèi)部更有效工作。
①操作系統(tǒng)(核心軟件)
對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行控制和管理的大型軟件。
操作系統(tǒng)的基本任務(wù):
1)管理好計(jì)算機(jī)的全部資源(包括CPU、存儲(chǔ)器、程序、數(shù)據(jù)、各種外設(shè));
2)擔(dān)任用戶與計(jì)算機(jī)之間的接口。
操作系統(tǒng)的主要功能:
CPU管理、存儲(chǔ)管理、文件管理、設(shè)備管理、作業(yè)管理。
②語言處理程序
③服務(wù)性程序 -
應(yīng)用軟件
為某個(gè)具體應(yīng)用開發(fā)的軟件。如文字處理軟件、殺毒軟件、財(cái)務(wù)軟件、圖形軟件、工具軟件、游戲程序等。
(3)計(jì)算機(jī)語言的發(fā)展
人類的語言一般稱為自然語言。人為了讓計(jì)算機(jī)完成某種任務(wù)而需要的語言就是計(jì)算機(jī)語言。機(jī)器語言是計(jì)算機(jī)語言發(fā)展的原點(diǎn),高級(jí)程序設(shè)計(jì)語言是計(jì)算機(jī)語言發(fā)展的重要階段。C語言是高級(jí)程序設(shè)計(jì)語言中的經(jīng)典,是深入掌握其他程序設(shè)計(jì)語言的基礎(chǔ)。
- 機(jī)器語言
指令通常包含兩個(gè)部分
①操作碼(Operation Code):表示計(jì)算機(jī)執(zhí)行什么操作
②操作數(shù)(Operand):表示參加操作的數(shù)的本身或所在地址
計(jì)算機(jī)發(fā)展的初期,用指令的機(jī)器碼(Machine Code)也就是用0和1組成的二進(jìn)制代碼形式來編寫源程序。
是計(jì)算機(jī)能唯一識(shí)別和可直接執(zhí)行的語言,被稱為“面向機(jī)器的語言”。它占用內(nèi)存少,執(zhí)行速度快效率高,無須“翻譯”。但編寫麻煩,無通用性。 - 匯編語言
通常用由指令功能英文單詞縮寫形成的 助記符(Mnemonic) 代替操作碼,用 符號(hào)(Symbol) 表示操作數(shù)。
對(duì)于機(jī)器,必須用匯編程序?qū)R編語言源程序(.ASM)翻譯成機(jī)器語言程序即目標(biāo)程序(.OBJ),然后用連接程序?qū)⒛繕?biāo)程序連接成可執(zhí)行程序(.EXE)。
匯編語言同樣具有很差的通用性,也屬于“面向機(jī)器的語言”。 - 高級(jí)語言(算法語言)
特點(diǎn)是和人類的自然語言(英語)及數(shù)學(xué)語言比較接近,與硬件無關(guān),無須熟悉計(jì)算機(jī)的指令系統(tǒng)。
分類:
面向過程 的高級(jí)語言:BASIC、FORTRAN、Pascal、C等。
面向?qū)ο蟆〉母呒?jí)語言:C++、JAVA等。
高級(jí)語言的翻譯方式:
編譯方式: 先通過編譯程序?qū)⒏呒?jí)語言源程序(.C和.PAS等)編譯成目標(biāo)程序(.OBJ),翻譯過程中進(jìn)行語法檢查,如果有錯(cuò)將給出錯(cuò)誤信息,無錯(cuò)才形成二進(jìn)制的目標(biāo)程序;然后通過連接程序進(jìn)行連接和定位,生成可執(zhí)行程序文件(.EXE)。類似于筆譯。
解釋方式: 通過解釋程序,對(duì)源程序(.BAS)解釋一條語句便執(zhí)行一條語句,若發(fā)現(xiàn)錯(cuò)誤便給出錯(cuò)誤信息并停止解釋和執(zhí)行,無錯(cuò)便解釋執(zhí)行到最后。不生成目標(biāo)文件和可執(zhí)行文件,重復(fù)運(yùn)行程序需重新翻譯。效率低,執(zhí)行速度慢,但便于人機(jī)對(duì)話。類似于口譯。
3、計(jì)算機(jī)工作原理
馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)的工作原理最重要之處是“存儲(chǔ)原理”,要先把編好的程序輸入存儲(chǔ)器中存儲(chǔ)起來,然后依次取出指令執(zhí)行。
每條指令的執(zhí)行過程分為3個(gè)基本操作:
①取出指令:從存儲(chǔ)器某個(gè)地址中取要執(zhí)行的指令;
②分析指令:送指令譯碼器進(jìn)行譯碼;
③執(zhí)行指令:向各個(gè)部件發(fā)送控制操作,完成指令要求。
二、程序設(shè)計(jì)基礎(chǔ)
1、程序設(shè)計(jì)風(fēng)格
風(fēng)格會(huì)影響軟件的質(zhì)量和可維護(hù)性。好的程序設(shè)計(jì)風(fēng)格可以使程序結(jié)構(gòu)清晰合理,使代碼便于維護(hù)。考慮因素如下。
(1)源程序文檔化
標(biāo)志符命名: 見名知義。
程序注釋信息:
序言性注釋:位于程序開頭,包括標(biāo)題、程序主要功能、主要算法、作者等。
功能性注釋:位于程序中間,描述變量含義、語句作用等。
視覺組織: 程序清晰,便于閱讀,使用空格、空行、縮進(jìn)技巧。
(2)數(shù)據(jù)說明方法
數(shù)據(jù)說明應(yīng)注意次序規(guī)范化。例如多個(gè)變量按照字母順序排列,使用注釋來說明復(fù)雜數(shù)據(jù)的結(jié)構(gòu)等。
(3)語句構(gòu)造
當(dāng)不考慮效率時(shí),程序編寫應(yīng)清晰第一,效率第二。
(4)輸入輸出
輸入輸出方式和格式應(yīng)盡可能方便用戶使用。
2、結(jié)構(gòu)化程序設(shè)計(jì)(structured programming)
以模塊化設(shè)計(jì)為中心,基本原則是:采用自頂向下、逐步細(xì)化的方法進(jìn)行設(shè)計(jì),采用模塊化原則和方法進(jìn)行設(shè)計(jì),限制使用goto語句。主要特點(diǎn)是:程序易于理解、使用和維護(hù),提高了編程工作效率,降低了軟件開發(fā)成本。
程序化設(shè)計(jì)的基本結(jié)構(gòu):
(1)順序結(jié)構(gòu)
最基本做常用的結(jié)構(gòu),按照書寫順序依次執(zhí)行語句。
(2)選擇結(jié)構(gòu)(分支結(jié)構(gòu))
按照給定條件判斷選擇執(zhí)行相應(yīng)的語句序列,可改變程序的執(zhí)行流程。
(3)循環(huán)結(jié)構(gòu)(重復(fù)結(jié)構(gòu))
通過循環(huán)控制條件來決定是否重復(fù)執(zhí)行相同的語句序列。包括當(dāng)型循環(huán)和直到型循環(huán)。
由三部分構(gòu)成
①初始化部分:為循環(huán)作準(zhǔn)備,如為循環(huán)變量賦初值,往往位于循環(huán)語句前面。
②循環(huán)控制部分:循環(huán)控制的條件。
③循環(huán)體部分:循環(huán)工作的重復(fù)部分。
三、C語言程序基本結(jié)構(gòu)和開發(fā)過程
1、C語言程序的基本結(jié)構(gòu)
C語言程序的幾點(diǎn)說明:
(1)以函數(shù)作為模塊單位,有且僅有一個(gè)main()函數(shù)即主函數(shù),總是從main函數(shù)開始執(zhí)行,在main函數(shù)中結(jié)束。
(2)C函數(shù)模塊分為兩大部分
①函數(shù)說明部分(函數(shù)首部):包括函數(shù)類型、函數(shù)名、函數(shù)參數(shù)。
②函數(shù)體部分:用左“{”表示開始,用右“}”表示結(jié)束。
(3)語句分為說明性語句和可執(zhí)行語句。每條語句必須以分號(hào)“;”結(jié)束,但書寫格式自由,一行可以寫多條語句,一條語句也可以占多行。
(4)編譯預(yù)處理命令不是C語言語句,不能用分號(hào)結(jié)束,并且需要單獨(dú)一行
(5)任何位置都可以用/**/進(jìn)行注釋,可以用英文或者中文進(jìn)行注釋,但建議使用英文注釋,因?yàn)椴煌拈_發(fā)環(huán)境使用的編碼格式不同時(shí),中文易導(dǎo)致亂碼。
2、C語言程序開發(fā)過程
即:編輯、編譯、連接、運(yùn)行、調(diào)試。
(1)源程序的編輯
使用文本編輯器(Editor)編寫擴(kuò)展名為.C的C語言源程序,實(shí)質(zhì)是文本文件,可用任何文本編輯器來建立。
(2)源程序的編譯
使用編譯系統(tǒng)(編譯器)對(duì)源程序文件進(jìn)行編譯。若沒有語法錯(cuò)誤,則生成目標(biāo)程序文件(.OBJ),有錯(cuò)會(huì)給出錯(cuò)誤信息提示。兩類錯(cuò)誤:
①語法錯(cuò)誤(Error):必須修改源文件的錯(cuò)誤代碼,否則無法生成目標(biāo)程序文件。
②警告錯(cuò)誤(Warning):系統(tǒng)按照缺省處理方式生成目標(biāo)程序文件,但不一定符合作者預(yù)期。
(3)目標(biāo)程序文件的連接
利用連接器將一個(gè)或多個(gè)目標(biāo)程序文件與庫(kù)文件連接,生成可執(zhí)行文件(.EXE),若找不到所需連接信息,會(huì)給出錯(cuò)誤提示,不生成.EXE文件。
(4)可執(zhí)行文件的運(yùn)行
可執(zhí)行文件可以直接運(yùn)行。在集成開發(fā)環(huán)境(IDE,Integrated Development Environment)下,可以方便地進(jìn)行代碼的運(yùn)行和調(diào)試。也可不使用IDE,在Windows系統(tǒng)中,可直接在命令提示符中鍵入文件名來運(yùn)行可執(zhí)行文件。
(5)可執(zhí)行文件的調(diào)試
若.EXE文件運(yùn)行異常,得不到正確結(jié)果,則要返回源程序進(jìn)行修改。
3、程序開發(fā)環(huán)境
集成開發(fā)環(huán)境IDE
初學(xué)的比較經(jīng)典的C語言集成開發(fā)環(huán)境有Microsoft Visual C++(簡(jiǎn)稱VC++)和Microsoft Visual Studio(簡(jiǎn)稱VS),前者是后者這個(gè)完整開發(fā)工具集中的針對(duì)C類語言的開發(fā)環(huán)境。在學(xué)校用的是 VC++ 6.0 和 VS 2012 這兩個(gè)版本。個(gè)人目前做嵌入式開發(fā)比較多,嵌入式C語言工程多結(jié)合具體的硬件設(shè)備開發(fā),不同的產(chǎn)品可能有不同的IDE,比如經(jīng)典的 ICCAVR、IAR、Keil、CodeWarrior 等。
關(guān)于編輯器
最近常用兩款編輯器,一個(gè)是很火的Visual Studio Code,微軟推出的跨平臺(tái)、多語言文件格式、輕量級(jí)代碼編輯器。一個(gè)是由Scitools發(fā)行的Understand,具有很強(qiáng)大的代碼編輯跟蹤和靜態(tài)分析能力,而且界面非常方便友好,堪稱神器。另外一些簡(jiǎn)單代碼也會(huì)拿Windows記事本或者Notepad++直接擼,不得不說程序猿的工具還是相當(dāng)多而且很人性的!
THE END
控制流可由控制器指向其余四個(gè)部分,但是運(yùn)算器的數(shù)據(jù)只能跟存儲(chǔ)器交換,控制器從存儲(chǔ)器中取數(shù)據(jù),也就是控制器與運(yùn)算器之間沒有直接的數(shù)據(jù)流,但有控制流。 ??
總結(jié)
以上是生活随笔為你收集整理的C语言程序设计基础(01)—— 计算机与程序设计基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 驱动框架6——linux内核的gpiol
- 下一篇: android studio创建文件,如