




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1,第二章,C語言從零開始(C語言的基本結(jié)構(gòu)),2,第二章 C語言從零開始(C語言的基本結(jié)構(gòu)),在第一章中,相信讀者已經(jīng)熟悉如何編譯C語言程式。在本章中,我們將透過一個非常簡單的C語言程式來說明C語言的程式結(jié)構(gòu)。並且從本章開始,我們將實(shí)際撰寫每一個C語言範(fàn)例程式,在撰寫程式之前,我們必須先提醒讀者以下幾件事。 (1) 寫程式就和學(xué)數(shù)學(xué)一樣,必須親手練習(xí),每當(dāng)讀者看完一個範(fàn)例之後,請自行動手將程式內(nèi)容一個字一個字的輸入到檔案中。並且詢問自己,本行程式的意義為何,是否可以略過以及改寫。除此之外,我們並不建議讀者強(qiáng)記各種指令敘述與語法細(xì)節(jié),但由逐字輸入及練習(xí)撰寫程式的過程中,讀者將自然地記住這些指令敘述與語法。 (2) 寫程式就像是堆積木一樣,任何一個大型程式都是由小型程式、函式或程式區(qū)塊所組成,因此當(dāng)學(xué)習(xí)完畢本書所有範(fàn)例時,不必懼怕開發(fā)中大型程式的挑戰(zhàn),閱讀本書完畢,您應(yīng)該具有開發(fā)1000行以上程式的能力。 【註】:開發(fā)有效率的大型程式尚須要配合軟體工程的理論以及系統(tǒng)分析的能力,此時您可能需要更多有關(guān)於這方面的訓(xùn)練。,3,大綱,2.1 最簡單的C程式範(fàn)例 2.2 註解(comment) 2.3 前置處理指令#include 2.4 C程式的進(jìn)入點(diǎn)main()函式 2.5 敘述(statement) 2.6 自由格式與空白字元 2.7 深入C語言的文法【補(bǔ)充】 2.8 本章回顧,4,下面是一個簡單的C程式範(fàn)列,請逐字將之輸入到.c的檔案中,慢慢培養(yǎng)屬於自己的程式風(fēng)格。(若您的IDE已經(jīng)幫您建立了某些預(yù)設(shè)內(nèi)容,請先將它刪除後再輸入。) 範(fàn)例2-1:ch2_01.c(檔案位於隨書光碟 ch02ch2_01.c)。,2.1 最簡單的C程式範(fàn)例,5,2.1 最簡單的C程式範(fàn)例,執(zhí)行結(jié)果: 範(fàn)例說明: 雖然範(fàn)例2-1是一個只有14行的C語言程式,但是卻說明了C程式的基本結(jié)構(gòu)如下,我們將分別加以說明。,歡迎使用C語言! 這是一個簡單的C程式. 請按任意鍵繼續(xù) . . .,6,2.1 最簡單的C程式範(fàn)例,圖2-1 C程式基本結(jié)構(gòu),7,2.2 註解(comment),C的註解符號為/*.*/,在/*到*/之間的所有文字都將被編譯器忽略(事實(shí)上,註解將被前置處理器刪除後才輸入給編譯器),換句話說,沒有這些註解並不會影響程式的正確性。所以這些文字可以當(dāng)作說明該程式或程式片斷之用,善用註解文字將有助於日後維護(hù)程式時,快速了解程式功用。(在程式的任何地方都可以加入註解) 由於/*/具有換行功能,也就是可以將註解跨行描述,因此範(fàn)例2-1的註解可以改寫如下。,8,2.2 註解(comment),【謬誤】: 由於/*/註解格式在編譯器中,會從第一個遇到的/*開始視為註解文字,直到遇到第一個*/為止,因此並不允許使用巢狀註解文字,例如下列的程式碼中,就犯了這個錯誤。 【C+】: C+提供了另一種單行註解符號/,凡是/之後的整行文字都會被視為註解。,錯誤的巢狀註解,9,在C語言中,前置處理指令是前面出現(xiàn)#符號的指令,嚴(yán)格說起來,前置處理指令並非C語言的指令,因?yàn)檫@些指令會在程式進(jìn)行編譯之前,先被前置處理器(preprocessor)置換成某些程式碼,因此前置處理指令又稱為假指令。在此,我們先說明#include這個前置處理指令,至於其他的前置處理指令,則留待後面章節(jié)中再做說明。 #include的功用在於引入標(biāo)頭檔,所謂標(biāo)頭檔就是放置某些已經(jīng)撰寫完成函式內(nèi)容的函式庫檔案,這些標(biāo)頭檔可能是由編譯器所提供,也可能是自行撰寫的函式庫。我們必須先引入標(biāo)頭檔,才可以使用標(biāo)頭檔內(nèi)所提供的函式。例如:stdio.h標(biāo)頭檔中定義了printf()與scanf()函式的內(nèi)容,stdlib.h標(biāo)頭檔中定義了system()函式的內(nèi)容。因此,若我們在程式中要使用這些函式的話,就必須使用#include 及#include 將這些函式庫檔案引入。,2.3 前置處理指令#include,10,2.3 前置處理指令#include,圖2-2 包含前置指令的編譯過程,11,2.3 前置處理指令#include,#include引入標(biāo)頭檔可分為下列兩種格式: #include xxx.h為C編譯器提供的標(biāo)頭檔,並且存放在編譯器內(nèi)定的目錄中,使用此種格式,前置處理器會自動到內(nèi)定目錄中找到標(biāo)頭檔。 【註】: 目前絕大部分的C編譯器都提供了ANSI C所規(guī)範(fàn)的標(biāo)頭檔及其函式,除此之外,某些編譯器還提供了一些特別的標(biāo)頭檔函式庫,不過我們並不建議使用這些非ANSI C的函式,否則將會降低程式的可攜性。下列是所有ANSI C所規(guī)範(fàn)的函式庫標(biāo)頭檔名稱及功能 。,12,2.3 前置處理指令#include,ANSI C函式庫 標(biāo)頭檔,13,【函式庫的功能】: 引入的函式庫會在前置處理時被載入,通常函式庫會記錄許多的函式,除此之外,函式庫也可能定義了某些符號常數(shù),例如數(shù)學(xué)的無限大在電腦中根本無法完全實(shí)現(xiàn),因此只能用可儲存的最大值來代表,例如INT_MAX代表在int資料型態(tài)下的最大值2147483647,而INT_MAX的定義也被包含在limits.h之中。,2.3 前置處理指令#include,14,2.3 前置處理指令#include,#include “ooo.h“ ooo.h不是編譯器提供的標(biāo)頭檔,所以程式設(shè)計(jì)師必須標(biāo)明該檔案所在目錄,以便前置處理器取得該檔案。 【解析與說明】: 大多數(shù)由編譯器所提供的標(biāo)頭檔,都會使用英文縮寫來表示該檔案所包含的函式庫類型,例如:math.h就是包含數(shù)學(xué)函式庫的標(biāo)頭檔,stdio.h就是包含標(biāo)準(zhǔn)輸出入(standard input and output)的標(biāo)頭檔,您最好根據(jù)此原則來命名自行撰寫的函式庫檔案,並於檔案內(nèi)註解該檔案各函式庫的功用及各引數(shù)的規(guī)定,以便日後自行使用或提供他人使用。,15,2.4 C程式的進(jìn)入點(diǎn)main()函式,C語言屬於模組化設(shè)計(jì)的一種語言,而C語言的模組則是以函式來加以表示。換句話說,C程式是由各個不同功能的函式所組成,並且函式與函式之間可以透過呼叫以及回傳值方式加以聯(lián)繫,一個函式的基本定義格式如下: 函式的基本格式為函式名稱(),由於函式可以於被呼叫時接受呼叫者傳入引數(shù),因此這些引數(shù)必須在()內(nèi)加以宣告,而函式也可以回傳資料給呼叫者,所以我們也必須在函式名稱前面宣告回傳值的資料型態(tài)(關(guān)於資料型態(tài)請見第三章)。函式的內(nèi)容則是包含在與 之間。,函式回傳值型態(tài) 函式名稱(傳入引數(shù)) 函式內(nèi)容(敘述群) ,16,main()函式是命令列(Console Mode)C程式的進(jìn)入點(diǎn),換句話說,當(dāng)我們在命令列式的作業(yè)系統(tǒng)中執(zhí)行由C所撰寫的應(yīng)用程式時,會先從main()函式開始執(zhí)行。 在範(fàn)例2-1中,我們將main函式宣告為main(void),其中將void寫在()內(nèi),代表該函式不接受傳入任何引數(shù)資料。若將之寫在函式名稱前,則代表該函式執(zhí)行完畢後不回傳任何資料,例如:void main()。大多數(shù)的編譯器都接受省略void的宣告語法(但可能會出現(xiàn)warning警告訊息),也就是當(dāng)省略宣告void時,自動判定為不接受傳入引數(shù)或函式不回傳資料。例如我們可以將範(fàn)例2-1的main函式定義改寫如下:,2.4 C程式的進(jìn)入點(diǎn)main()函式,main() . ,void main() . ,main(void) . ,void main(void) . ,17,除了上述的介紹之外,main函式還具有以下兩個特點(diǎn): (1) 唯一性:在C函式中,任何函式都具有唯一性,main函式也是如此。 (2) 必要性:為了讓作業(yè)系統(tǒng)能夠找到程式進(jìn)入點(diǎn),因此不可省略或缺少main函式。 【解析】:本書以命令列式的C語言程式為說明主體,也就是以純粹指令模式(console mode)下的C程式為主要說明對象,若在Windows或Mac OS上的C/C+程式,則由於作業(yè)系統(tǒng)上層還包含一層複雜架構(gòu)(Framework),因此,如果要設(shè)計(jì)視窗程式,則必須遵循Framework的設(shè)計(jì)規(guī)範(fàn),而這將改變C /C+程式的運(yùn)作規(guī)則,例如:Windows下的C /C+程式進(jìn)入點(diǎn)為WinMain( )函式。 【解析】:main函式的呼叫者為作業(yè)系統(tǒng),因此範(fàn)例2-1的程式並不接受作業(yè)系統(tǒng)傳入引數(shù),也不會回傳任何數(shù)值給作業(yè)系統(tǒng)。但有的時候作業(yè)系統(tǒng)會傳入引數(shù)給main函式,例如:我們撰寫一個可接受指定總球數(shù)及開獎球數(shù)的樂透程式,並將之編譯為lotto執(zhí)行檔,此時可以在作業(yè)提示符號後面輸入lotto 42 7,來要求該程式以最大號碼42號的基本條件開出7個隨機(jī)號碼(6個基本號+1個特別號)。這個時候,我們就必須在main的()中宣告所接受的引數(shù)資料型態(tài)了(詳見第7章)。,2.4 C程式的進(jìn)入點(diǎn)main()函式,18,C語言是模組化設(shè)計(jì),並利用區(qū)塊來撰寫程式內(nèi)容,區(qū)塊的符號為,不論是函式、迴圈、決策都是使用區(qū)塊符號來包裝內(nèi)容。 而區(qū)塊內(nèi)容則是由敘述(statement) 所組成,每一個敘述後面必須加入; 做為結(jié)束。例如:範(fàn)例2-1中,main函式 內(nèi)容共有3個敘述,分別是 printf(“歡迎使用C語言!n“);、 printf(“這是一個簡單的C程式.n“); 及system(“pause“);。 前兩個敘述都是呼叫printf()函式, ()內(nèi)的字串則是傳入printf()函式的引數(shù), 而printf()函式則已經(jīng)定義在標(biāo)頭檔中。 最後的敘述是呼叫system()函式,()內(nèi)的字串“pause“則是傳入system()函式的引數(shù),代表要作業(yè)系統(tǒng)執(zhí)行pause指令,而system()則定義於標(biāo)頭檔中。執(zhí)行結(jié)果中的請按任意鍵繼續(xù) . . .其實(shí)就是執(zhí)行system(“pause“)的效果,它會等待使用者按下任意鍵之後才會繼續(xù)後面的動作,您可以開啟一個Dos環(huán)境,並且單獨(dú)輸入pause指令,看看會有什麼結(jié)果。,2.5 敘述(statement),19,2.5 敘述(statement),C語言的敘述除了函式呼叫之外,還有以下幾種類型,我們將在後面章節(jié)中加以說明: 算式敘述 (Expression Statement) 複合敘述 (Compound Statement) 選擇敘述 (Selection Statement) 迴圈敘述 (Iteration Statement) 標(biāo)籤敘述 (Labeled Statement) 跳躍敘述 (Jump Statement) 算式敘述的結(jié)束符號非常重要不可省略,因?yàn)榫幾g器將以;做為一般敘述的結(jié)束(也有例外,例如for迴圈敘述),而不是以換行符號做為算式敘述的結(jié)束。而在範(fàn)例2-1中,#include 沒有算式敘述結(jié)束符號,這是因?yàn)?include並非一個C算式敘述,而是前置處理指令,因此到了編譯階段時,並不存在該行程式碼。,20,2.6 自由格式與空白字元,C語言採用自由格式撰寫,換句話說,您可以去除程式中各敘述間的所有空白字元(spaces、tabs等等)及換行符號(carriage、return),編譯器仍會正確編譯程式,例如:您可以將範(fàn)例2-1中main的內(nèi)容改寫如下: 雖然省略空白字元以及換行符號能夠使得程式行數(shù)減少,但並不會加速程式的執(zhí)行效率,因?yàn)椴徽撌枪?fàn)例2-1的表示方法或上述表示方法,編譯器都將產(chǎn)生相同的輸出結(jié)果。不過上述的撰寫格式,則比範(fàn)例2-1更難以閱讀。因此,為了日後維護(hù)的方便,強(qiáng)烈建議讀者應(yīng)該培養(yǎng)程式碼縮排及適當(dāng)換行的習(xí)慣。,21,2.6 自由格式與空白字元,【解析】: “內(nèi)的空白字元則不會被編譯器忽略,因?yàn)椤霸贑語言中,是用來表示字串。 【常見的錯誤】: C程式和Unix/Linux作業(yè)系統(tǒng)一樣,對於字元的大小寫是有所區(qū)別的,因此您不能將main(void)改寫為Main(void)或MAIN(VOID)。,22,2.7 深入C語言的文法【補(bǔ)充】,C語言程式基本上仍舊是一個純文字檔案,因此是由眾多字元所構(gòu)成,這些字元將會被編譯器的掃描程式分割為句元(Token)。這些句元可能代表的是關(guān)鍵字、保留字、識別字、運(yùn)算子、變數(shù)名稱或資料值。 眾多句元又可以組合成敘述(statement),敘述的結(jié)尾則是;。而眾多的敘述則成為函式內(nèi)容。編譯器的剖析程式(parser)會針對C程式的敘述是否符合C語言的文法(Grammar)加以判斷,若不符合文法,則會產(chǎn)生錯誤訊息。 至於ANSI C語言的文法則列於附錄E中,它使用特殊的描述語法來表示,對於初次接觸程式語言的讀者來說,並不容易理解,因此,我們將在後面章節(jié)中,使用比較容易理解的格式來解說這些語法,讀者可以於學(xué)習(xí)完C語言後再回頭來看完整的C語言文法。,23,在本章中,我們學(xué)習(xí)到C程式的基本結(jié)構(gòu)。本章所學(xué)習(xí)到的內(nèi)容如下: (1) C程式的基本結(jié)構(gòu)包含3大部分: 程式註解、前置處理指令、函式及敘述 (2) 在C程式中,可使用/*/做為註解符號。 (3) 純文字模式的C程式進(jìn)入點(diǎn)為 main( )函式。 (4) 一般敘述以;做結(jié)尾。 (5) C語言的輸出函式printf( )的簡單使用方法如下(我們
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商務(wù)英語禮儀溝通試題及答案
- 2025年大學(xué)物理考試力學(xué)公式適用范圍試題及答案
- 2025年樂理考試中的樂器知識試題及答案
- 中國門鎖塊行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告2025-2028版
- 關(guān)注土木工程信息技術(shù)應(yīng)用的相關(guān)試題及答案
- 2025年大學(xué)物理學(xué)生探究試題及答案
- 地圖初中地理試題及答案
- 2025年大學(xué)物理復(fù)雜問題解決辦法試題及答案
- 工程承包協(xié)議補(bǔ)充協(xié)議
- 中國草坪修整機(jī)行業(yè)市場分析及競爭形勢與發(fā)展前景預(yù)測研究報(bào)告2025-2028版
- 企業(yè)6S管理成果匯報(bào)
- 2024年企業(yè)員工研發(fā)補(bǔ)貼協(xié)議范本模板3篇
- 湖南省對口招生考試醫(yī)衛(wèi)專業(yè)試題(2024-2025年)
- 孕期碘缺乏病的健康宣教
- 全國賽課一等獎初中統(tǒng)編版七年級道德與法治上冊《樹立正確的人生目標(biāo)》教學(xué)設(shè)計(jì)
- 《思想政治教育方法論》考研(第3版)鄭永廷配套考試題庫及答案【含名校真題、典型題】
- 初中數(shù)學(xué)新課程標(biāo)準(zhǔn)(2024年版)
- UL9540A標(biāo)準(zhǔn)中文版-2019儲能系統(tǒng)UL中文版標(biāo)準(zhǔn)
- 【MOOC】面向?qū)ο蟪绦蛟O(shè)計(jì)-濮陽職業(yè)技術(shù)學(xué)院 中國大學(xué)慕課MOOC答案
- 鋼結(jié)構(gòu)的油漆施工課件
- 子宮平滑肌瘤手術(shù)臨床路徑表單
評論
0/150
提交評論