版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1.1初識C程序1.2C程序從編輯到運行1.3變量與賦值1.4輸入與輸出1.5流程控制1.6函數(shù)1.7編程風格1.1初識C程序?qū)τ诔鯇W者來說,C語言的詞匯即關(guān)鍵字,接近于我們使用的自然語言(這里指英語),在某種程度上可以見名知義。下面就讓我們通過一個簡單的程序來認識和了解C語言?!纠?.1】在屏幕上輸出一行文字:歡迎使用C語言!對于上述代碼,我們需要進行編輯、保存、編譯和運行,從而在屏幕上輸出相應(yīng)的文字。編輯代碼,必須有一個可以進行文字編輯的軟件。Windows操作系統(tǒng)中自帶的記事本或者MSWORD等軟件,均可以完成代碼的編輯與存儲功能。在C語言程序設(shè)計中,程序代碼編寫完成后保存在擴展名為“.c”的文件中,該文件即為源程序文件。我們將上述代碼保存在Lianxi_1_1.c源程序文件中。由于C語言是高級語言,因此需要將源程序翻譯成計算機可以識別的機器語言,也就是要對源程序進行編譯。程序在編譯成功以后,即可以運行,在屏幕上輸出相應(yīng)的文字。程序執(zhí)行后,輸出結(jié)果顯示在Windows的Console控制臺(也稱作Windows的命令行DOS框,本書中簡稱為控制臺)中。運行結(jié)果中,在標題欄列出了當前運行的程序“Lianxi_1_1.exe”,該程序即源程序編譯之后的可執(zhí)行程序??刂婆_上顯示出要求輸出的文字“歡迎使用C語言!”,以及該程序執(zhí)行所用時間與返回值。當根據(jù)控制臺上的提示“請按任意鍵繼續(xù)…”操作時,該程序運行結(jié)束。雖然例1.1僅有短短數(shù)行程序代碼,但是已經(jīng)具備了C語言的基本框架和特征。源程序中符號“//”后面的內(nèi)容為注釋,注釋的作用是在源程序中對特定的代碼進行簡要解釋,起到標記相應(yīng)代碼的作用,以增強程序的可讀性,尤其是在復雜的源程序文件中,注釋對理解源代碼起到了非常重要的作用。當程序運行時,注釋不會對程序產(chǎn)生任何作用。C語言中的注釋有兩種形式:(1)單行注釋:使用雙斜線符號“//”注釋其后的內(nèi)容,表示雙斜線以后到本行結(jié)束的內(nèi)容均為注釋部分。(2)多行注釋:使用一對符號“/*”與“*/”完成內(nèi)容注釋,表示從符號“/*”開始到符號“*/”結(jié)束之間的內(nèi)容均為注釋,無論這些內(nèi)容是在一行還是多行中。單行注釋短小精悍,多用于代碼中對某語句的解釋。多行注釋可以詳細描述某個部分的具體功能。C語言編譯器在編譯源程序時,對注釋部分忽略不計,不會為注釋生成機器代碼。源程序的第二行以“#”開始的部分,是一個預處理指令。該指令在對程序進行編譯之前告訴預處理器,該程序要包括標準輸入輸出函數(shù)庫。其中“stdio”是“standardinput&output”的縮寫,擴展名“.h”中的“h”是英文單詞head的縮寫,意為頭文件。C語言頭文件stdio.h中包含與輸入/輸出相關(guān)的函數(shù),在本程序中使用的printf(?)函數(shù)即定義在該文件中。因此凡是涉及與輸入/輸出相關(guān)的函數(shù)時,需要確認標準函數(shù)庫中是否已經(jīng)定義,若已定義,則可以直接使用,并在源程序中應(yīng)用上述預處理指令。代碼“intmain(?)”是任何C語言程序必不可少的一部分。C語言程序由一系列的函數(shù)所構(gòu)成,C語言程序設(shè)計的基本單位是函數(shù),這些函數(shù)可以在一個源文件中,也可以根據(jù)不同功能而分布在多個源文件中。在這一系列的函數(shù)中,必須有一個而且只能有一個以main為名的函數(shù),這個函數(shù)稱為主函數(shù),整個程序由主函數(shù)開始執(zhí)行,一般也是以主函數(shù)結(jié)束。該行代碼中,關(guān)鍵字int表示該主函數(shù)需返回一個整型數(shù)值,與程序最后一行的“return0;”相對應(yīng)。代碼“printf("歡迎使用C語言!");”告訴計算機執(zhí)行一個輸出動作,它是一條可執(zhí)行語句?!皃rintf”為“printfunction”的縮寫,是一個格式化輸出函數(shù),該函數(shù)在標準輸入/輸出文件stdio.h中定義。該函數(shù)將雙引號中的內(nèi)容輸出到屏幕上。C語言的語法規(guī)定分號“;”是一條語句的終止符號,每一條可執(zhí)行語句都必須以分號結(jié)束,但是只要符合語法,多條語句可以在一行書寫,一條語句也可以在多行書寫。1.2C程序從編輯到運行一個簡單的C語言程序,從編寫到運行經(jīng)過了幾個必不可少的過程,如圖1.2所示。在編輯階段,使用文字處理軟件編寫代碼,并將文件保存為以“.c”為擴展名的源程序文件。在編譯階段,編譯器(Compiler)將源程序翻譯為計算機可識別和執(zhí)行的機器指令,即目標程序,文件以“.obj”為擴展名。和源程序一樣,目標程序也不能直接執(zhí)行,需要經(jīng)過連接器(Linker),將目標程序同C語言庫中提供的支持程序和其他相關(guān)目標模塊連接起來,然后就生成了可以直接運行的可執(zhí)行文件(以“.exe”為擴展名)。連接器為C語言提供了豐富的手段,通過與外在資源的連接,迅速地擴充了C語言,從而得到了功能強大的可執(zhí)行程序。Dev-C++?是一個Windows環(huán)境下的集成開發(fā)環(huán)境,可用于C語言或者C++?語言程序的開發(fā)。作為一款自由開源軟件,它集成了眾多C/C++?語言開發(fā)環(huán)境的優(yōu)點,免費且實用。Dev-C++?遵循C11標準并兼容C99標準,其開發(fā)環(huán)境包括多頁面窗口、工程編輯器以及調(diào)試器等,在工程編輯器中集成了編輯器、編譯器、連接程序和執(zhí)行程序,提供高亮度語法顯示以減少編輯錯誤,具備基本的調(diào)試功能,可以進行單步語句跟蹤調(diào)試。最重要的是Dev-C++?有中文界面,這也是目前很多C語言開源軟件不具備的優(yōu)勢。該軟件可通過網(wǎng)絡(luò)免費下載使用,在下載了該軟件之后,雙擊該軟件,軟件即開始自動安裝;在安裝完成后第一次運行時,需要對運行環(huán)境進行配置,即選取開發(fā)界面所使用的語言,如圖1.3(a)所示。這時如果選擇中文,軟件的開發(fā)界面則為中文模式(見圖1.3(b))。下面我們結(jié)合例1.1來介紹如何使用Dev-C++?實現(xiàn)從源程序編輯到程序執(zhí)行的完整過程。1.源程序編輯選取菜單項【文件】→【新建】→【源代碼】,進入源代碼的編輯界面。按照例1.1的內(nèi)容輸入代碼,并保存為Lianxi_1_1.c源程序文件。在學習C語言程序之初,就應(yīng)該有一個良好的編程習慣,除了前文提到的對代碼進行詳盡的注釋之外,還應(yīng)該將代碼編寫得錯落有致,不同部分之間以空行間隔,這樣程序的可讀性也會隨之提高。2.源程序編譯在程序編寫完成后,選取菜單項【運行】→【編譯】,如圖1.6所示,即開始對源程序進行編譯。編譯過程中相關(guān)信息的反饋以及編譯結(jié)果會顯示在開發(fā)環(huán)境的編譯日志中。在編譯日志中,我們可以看到當前編譯的文件個數(shù)、文件名及所使用的編譯器的名稱。編譯過程中會進行C語言的語法檢查,對于沒有遵守語法規(guī)則所引起的錯誤,編譯器會顯示錯誤信息,從而使程序編寫人員可以很容易地定位該錯誤并進行修正。如果我們將例1.1中printf語句后的分號去掉,再進行編譯,就會看到,在開發(fā)界面下部的編輯器窗口中顯示了錯誤信息,并且指明了錯誤產(chǎn)生的位置。同時,在編譯日志中,也相應(yīng)地指出了程序錯誤及錯誤發(fā)生的位置。在編譯結(jié)果中,顯示出錯誤發(fā)生數(shù)目(1個),而且由于編譯過程中有錯誤產(chǎn)生,編譯沒有生成可執(zhí)行程序(如圖1.9所示)。3.程序執(zhí)行當源程序編譯成功之后,即生成了相應(yīng)的可執(zhí)行文件,選取菜單項【運行】→【運行】,可運行該程序。此時,運行的是編譯生成的可執(zhí)行文件,而不是源程序文件。這時將彈出Windows控制臺窗口,顯示運行結(jié)果。1.3變量與賦值【例1.2】使用C語言編寫程序,實現(xiàn)兩個整數(shù)的加法運算,并將結(jié)果顯示在屏幕上。程序第一行的預處理指令引入標準輸入/輸出函數(shù)庫,因此在程序中可以直接使用printf(?)標準輸出函數(shù)。在主函數(shù)main(?)中,定義了三個變量,名稱分別是a、b、sum。所謂變量,就是程序中用來存放數(shù)據(jù)的對象,在程序運行期間其值可以改變。每一個變量都應(yīng)該有一個名字,即變量名,便于在程序設(shè)計過程中使用。C語言規(guī)定所有變量在使用前必須先定義,包括定義變量的數(shù)據(jù)類型和變量名。通常,變量的定義會放在函數(shù)的開始部分、其他可執(zhí)行語句之前。C語言的變量除了可以定義為整型外,還可以定義為其他類型。不同的數(shù)據(jù)類型,對應(yīng)的存儲空間不同,存儲的數(shù)據(jù)也不同。在定義變量的時候,需要遵從C語言的語法規(guī)則:變量的定義至少應(yīng)包含變量的數(shù)據(jù)類型與變量名,即也可以通過逗號間隔,定義同一類型的多個變量:根據(jù)上述規(guī)則,例1.2中的三個變量可以分別定義,如下:由于這三個變量均為整型變量,也可以定義為變量必須先定義后使用,如果變量在使用之前沒有定義,則在對程序進行編譯時,編譯器會返回錯誤信息,指出該變量在使用前沒有定義。C語言強制要求變量在使用之前被定義,可以起到以下作用:
(1)如果在定義變量時明確指定了數(shù)據(jù)類型,則程序在編譯時就能為該變量分配相應(yīng)的存儲空間,并檢查該變量的使用是否正確。(2)在定義變量時,除了指定數(shù)據(jù)類型,還需要為變量命名,如例1.2中的變量名a、b和sum。為變量命名就好像為飯店的每一個包廂指定名稱一樣,便于程序設(shè)計過程中對其進行操作。C語言規(guī)定變量的命名需要遵循一定的規(guī)則:①變量名只能由字母、數(shù)字或下劃線組成;②變量名的第一個字符只能是下劃線或者字母。此外,C語言對字母的大小寫敏感,即認為大寫字母與小寫字母是兩個不同的字符。因此在上述變量名中,firstName與FirstName是兩個不同的變量名。除了上述兩項規(guī)則以外,C語言的相關(guān)標準并沒有規(guī)定變量名的長度,以及如何給變量命名,因此變量名的選擇相對來說是自由的。而且C語言也沒有限定變量名的長度,理論上講,變量名可以無限長。但是為了程序書寫的便利以及閱讀的方便,變量名應(yīng)控制在有限長度內(nèi),并且變量的名字應(yīng)該有一定的含意(與英文含意相對應(yīng))。變量必須先定義后使用,但是變量也不能重復定義,因為在編譯時會根據(jù)變量的類型進行空間分配,如果變量重復定義,則編譯器會給出錯誤信息。在變量被定義以后即可以按照其數(shù)據(jù)類型來使用。變量可以在使用的時候賦值,也可以在定義的時候賦值。在定義的同時對變量進行賦值稱作變量的初始化。如果變量在定義之后、使用之前沒有賦值,變量中所存儲的數(shù)據(jù)不確定,則編譯程序時并不會出錯,但是程序執(zhí)行的結(jié)果會出錯。1.4輸入與輸出在例1.2的程序中,對變量a和b分別賦值23與24,那么該程序只能實現(xiàn)對整數(shù)23與24的求和運算。如果我們想要實現(xiàn)對任意兩個整數(shù)的求和計算,則需要將程序做適當?shù)男薷?,如下例?!纠?.3】編寫程序,實現(xiàn)對任意兩個整數(shù)的求和運算。對例1.3程序編譯成功之后,運行該程序,Windows的控制臺第一行顯示結(jié)果如圖1.11所示。通過鍵盤輸入數(shù)字23之后按回車鍵,則顯示結(jié)果如圖1.12所示。通過鍵盤輸入數(shù)字24之后按回車鍵,則程序計算出兩個整數(shù)的和。在程序執(zhí)行的過程中實現(xiàn)了簡單的人機交互,按照程序執(zhí)行過程中對數(shù)據(jù)類型的要求,通過鍵盤分別輸入兩個整數(shù),從而實現(xiàn)了對任意兩個整數(shù)的求和計算。在例1.3中,使用了前面提到的標準輸出函數(shù)printf,給用戶進行提示,并且使用了一個新的函數(shù)scanf,用于獲取從鍵盤輸入的信息。函數(shù)scanf與函數(shù)printf一樣,都被定義在了標準輸入/輸出函數(shù)庫<stdio.h>中。因此,通過程序的預處理指令“#include<stdio.h>”,即可在程序中使用這兩個函數(shù)。在例1.3中,函數(shù)scanf通過逗號分隔開兩個參數(shù),分別是“%d”和“&a”。第一個參數(shù),我們在例1.2中的函數(shù)printf中也用到了,該參數(shù)是格式控制字符串,指出程序希望接收的輸入數(shù)據(jù)。字符串“%d”中,字符“d”指出該數(shù)據(jù)應(yīng)該是十進制的整型數(shù)據(jù)(字母d即decimal的首字母),“%”是一個特定的字符,指出其后緊跟格式控制符。函數(shù)的第二個參數(shù)“&a”中的字符“a”對應(yīng)著前面定義的整型變量a,而符號“&”表示該變量的地址,又稱作取地址運算符,表明了通過該語句輸入的數(shù)據(jù)要存放到變量a中。符號“&”是函數(shù)scanf要求使用的,函數(shù)printf并不需要。例1.3中的標準輸出函數(shù)printf有兩種形式,即無格式輸出和有格式輸出,分別為和無格式輸出時,只有一個參數(shù),該參數(shù)被雙引號括起來。程序執(zhí)行時將按照雙引號內(nèi)的字符串原樣顯示,即顯示有格式輸出時,函數(shù)printf有兩個參數(shù),第一個參數(shù)為格式控制字符串,雙引號內(nèi)的字符串將按照順序輸出,但是遇到格式控制符“%d”時,將使用第二個參數(shù),即變量sum中的數(shù)據(jù)(假設(shè)為47)對格式控制符進行替換,從而輸出函數(shù)scanf與printf的一般形式分別為其中,變量列表即用逗號分隔的一個或多個變量;而格式控制字符串中,需要有對應(yīng)數(shù)目的格式控制符。注意,函數(shù)scanf中變量列表的每一個變量前都需要有地址符號“&”。而函數(shù)printf正如前面所述,可以只有一個參數(shù),即省略參數(shù)變量列表。1.5流程控制例1.3中實現(xiàn)了最簡單的人機交互,即根據(jù)程序的提示和要求通過鍵盤輸入兩個整數(shù),然后程序計算出兩個整數(shù)的和?,F(xiàn)在我們希望程序能夠根據(jù)計算的結(jié)果,指出結(jié)果是大于0、等于0還是小于0。因此在源程序代碼中,需要引入能夠根據(jù)結(jié)果進行判斷的語句?!纠?.4】編寫程序,由鍵盤輸入兩個整數(shù),求和并判斷結(jié)果是大于0還是小于0。程序編譯成功后,執(zhí)行該程序,并根據(jù)屏幕提示分別輸入第一個整數(shù)25和第二個整數(shù)-30,如圖1.14所示。在程序編譯成功而開始執(zhí)行時,首先提示輸入第一個整數(shù),通過鍵盤輸入25后按回車鍵,將數(shù)值25賦給整型變量a;接著程序提示輸入第二個整數(shù),通過鍵盤輸入?-30后按回車鍵,將數(shù)值?-30賦給整型變量b。然后,程序計算變量a與變量b的和并賦值給整型變量sum。到目前為止,程序中的語句按照它們在源代碼中的順序一句一句地被執(zhí)行。這就是順序結(jié)構(gòu)。然而在執(zhí)行求和語句之后,需要根據(jù)結(jié)果進行判斷,不同的結(jié)果將顯示輸出不同的內(nèi)容。選擇結(jié)構(gòu)就是為了完成類似的任務(wù)而產(chǎn)生的,在源程序中通過if語句來判斷結(jié)果并根據(jù)結(jié)果輸出相應(yīng)的內(nèi)容。對于例1.4中的if語句:可以理解為,當程序按順序執(zhí)行到if語句時,判斷變量sum是否大于0,如果成立,則輸出“結(jié)果大于0”。在例題中,整數(shù)a+b的結(jié)果為?-5,不滿足if語句的判斷條件,因此程序?qū)⒉粓?zhí)行緊跟著if的語句,而是執(zhí)行下一條if語句。同理,若該判斷條件也不成立,則程序繼續(xù)執(zhí)行下一條判斷語句。因為sum的值為?-5,小于0,if語句的條件滿足,所以程序執(zhí)行緊跟著該if語句的輸出語句,顯示“結(jié)果小于0”。if語句的出現(xiàn),為程序的執(zhí)行增添了多種可能性。在需要進行判斷的場合,均可以根據(jù)需要使用if語句。圖1.15的流程圖簡單示意了基于判斷的選擇語句。if語句的一般形式為程序執(zhí)行到if語句時,首先計算條件判斷表達式的結(jié)果。如果該條件成立,則執(zhí)行緊跟著if的語句,否則不執(zhí)行該語句。如果條件成立,有多個操作語句需要執(zhí)行,可以使用“{”和“}”將條件成立時需執(zhí)行的語句括起來。1.6函數(shù)如果我們繼續(xù)將例題的功能復雜化,要求可以判斷從鍵盤輸入的兩個數(shù)據(jù)的大小,則根據(jù)上一節(jié)的內(nèi)容,我們可以很容易地將例1.4修改為例1.5?!纠?.5】由鍵盤輸入兩個整數(shù),判斷結(jié)果是大于0還是小于0,并判斷哪個數(shù)字較大。在分析題目的要求以及程序時,可以看到程序已經(jīng)具備了兩個基本功能:(1)根據(jù)求和結(jié)果,輸出不同的內(nèi)容。(2)根據(jù)輸入數(shù)據(jù)大小,輸出較大的數(shù)據(jù)。功能的不斷增加,使主程序本身的功能變得模糊。如果能夠?qū)⒊绦虻拇a根據(jù)功能的不同分別組織起來,程序在閱讀及編寫上將會變得條理清晰。C語言程序設(shè)計的基本單位就是函數(shù),將復雜功能通過函數(shù)的形式封裝起來,可以重復使用,而通過函數(shù)調(diào)用語句,就可以完成相應(yīng)的復雜功能。因此根據(jù)例1.5的要求,采用函數(shù)調(diào)用形式將其改寫為例1.6?!纠?.6】由鍵盤輸入兩個整數(shù),判斷結(jié)果是大于0還是小于0,并判斷哪個數(shù)字較大。從程序源代碼中可以看到整個程序由三部分組成,我們用結(jié)構(gòu)圖簡化為圖1.16。正如前面所述,主函數(shù)main是C語言程序中必不可少的函數(shù),程序從主函數(shù)開始執(zhí)行,一般也在主函數(shù)結(jié)束運行。通過函數(shù)調(diào)用的形式將不同的功能模塊組合在一起,便于程序代碼的編寫、閱讀以及管理。函數(shù)的重復調(diào)用,也可以減少重復編寫代碼的工作量。主函數(shù)的起始部分:對程序后面使用到的函數(shù)進行了聲明,正如前面提到的C語言對變量要求先定義后使用,對函數(shù)也有同樣的要求。在本例中,因為函數(shù)定義在了主函數(shù)的后面,而主函數(shù)中又需要使用這兩個函數(shù),因此在主函數(shù)的開始部分,對兩個函數(shù)進行聲明以便在程序中使用。如果兩個函數(shù)的定義部分寫在了主函數(shù)之前,則主函數(shù)中的聲明部分可以省略。編寫函數(shù)的過程也就是定義函數(shù)的過程。函數(shù)定義的基本格式為函數(shù)的定義包含了函數(shù)頭和函數(shù)體兩部分。函數(shù)頭定義函數(shù)的名字和參數(shù)。函數(shù)體則定義該函數(shù)要完成的功能。函數(shù)的命名也遵循前面提到的與變量命名一致的規(guī)則,即函數(shù)名只能由字母、數(shù)字、下劃線組成,并且首字符只能是字母或下劃線。函數(shù)的聲明則相對要簡單,只需要符合下面的格式即可:函數(shù)定義與聲明的不同是顯而易見的。函數(shù)的聲明有時也稱作是函數(shù)的原型。函數(shù)的定義、函數(shù)的聲明以及函數(shù)的調(diào)用三者應(yīng)一致,否則將導致編譯錯誤。通常一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度大學生實習實訓基地設(shè)備使用及維護合同3篇
- 2025年度房產(chǎn)中介服務(wù)與二手房買賣合同4篇
- 二零二五年度智能工廠自動化系統(tǒng)維護承包合同4篇
- 2024私人民間個人商業(yè)保險借款合同3篇
- 2025年個人汽車抵押貸款合同信息保密合同4篇
- 二零二五版大型露天礦承包經(jīng)營與安全生產(chǎn)管理合同3篇
- 二零二五版拌和站生產(chǎn)線自動化升級改造合同2篇
- 2025年度大型會議室場地租賃及網(wǎng)絡(luò)布線服務(wù)合同4篇
- 2025年度綜合交通樞紐承包工程合同4篇
- 二零二五年度農(nóng)產(chǎn)品保鮮儲藏技術(shù)研發(fā)與應(yīng)用合同4篇
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 小學道德與法治學科高級(一級)教師職稱考試試題(有答案)
- 申請使用物業(yè)專項維修資金征求業(yè)主意見表
- 河北省承德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 實用性閱讀與交流任務(wù)群設(shè)計思路與教學建議
- 應(yīng)急柜檢查表
- 通風設(shè)施標準
- 酒店市場營銷教案
- 房屋買賣合同簡單范本 房屋買賣合同簡易范本
- 無抽搐電休克治療規(guī)范
- 環(huán)保有限公司營銷策劃方案
評論
0/150
提交評論