C語言概述簡易教程_第1頁
C語言概述簡易教程_第2頁
C語言概述簡易教程_第3頁
C語言概述簡易教程_第4頁
已閱讀5頁,還剩106頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言概述簡易教程第一節(jié):c語言的產生及特點:C語言的產生C語言是國際上廣泛流行的、很有發(fā)展前途的計算機高級語言。它適合于作為系統(tǒng)描述語言,既用來寫系統(tǒng)軟件,也可用來寫應用軟件。c語言是第三代語言(面向過程的高級語言,第一代:機器語言;第二代:匯編語言)以前的操作系統(tǒng)等系統(tǒng)軟件主要是由匯編語言編寫的(包括UNIX操作系統(tǒng)在內)。由于匯編語言依賴于計算機硬件,程序的可讀性和可移植性都比較差。為了提高可讀性和可移植性,最好改用高級語言,但一般高級語言難以實現匯編語言的某些功能(匯編語言可以直接對硬件進行操作,例如,對內存地址的操作、位操作等)。人們設想能否找到ー種既具有一般髙級語言特性,又具有低級語言特性的語言,集它們的優(yōu)點于一身。于是,C語言就在這種情況下應運而生了。c語言是在B語言的基礎上發(fā)展起來的,它的根源可以追溯到ALGOL6001960年出現的ALG0L60是一種面向問題的高級語言,它離硬件比較遠,不宜用來編寫系統(tǒng)程序。1963年英國的劍橋大學推出了CPL(CombinedProgrammingLanguage)語言,CPL語言在ALG0L60的基礎上接近硬件一些,但規(guī)模比較大,難以實現。1967年英國劍橋大學的MatinRichards對CPL語言作了簡化,推出了BCPL(BasicCombinedProgrammingLanguage)語百。1970年美國貝爾實驗室的KenThompson以BCPし語言為基礎,又作了進ー步簡化,設計出了很簡單的而且很接近硬件的B語言(取BCPL的第一個字母),并用B語言寫了第一個UNIX操作系統(tǒng),在PDP-7上實現.1971年在PDP-11/20上實現了B語言,并寫了Unix操作系統(tǒng)。但B語言過于簡單,功能有限。1972年至1973年間,貝爾實驗室的D.M.Ritchie在B語言的基礎上設計出了C語言(取BCPL的第二個字母)。C語言既保持了BCPL和B語言的優(yōu)點(精練,接近硬件),又克服了它們的缺點(過于簡單,數據無類型等)。最初的C語言只是為描述和實現Unix操作系統(tǒng)提供ー種工作語言而設計的,1973年,K.Thompson和D.M.Ritchie兩大合作把UNIX的90%以上用C改寫(即UNIX第5版,原來的Unix操作系統(tǒng)是1969年由美國的貝爾實驗室的K.Thompson和D.M.Ritchie開發(fā)成功的,是用匯編語言寫的)。?后來,C語言多次作了改進,但主要還是在貝爾實驗室內部使用。直到1975年UNIX第6版公布后,C語言的突出優(yōu)點オ引起人們普遍注意。1977年出現了不依賴于具體機器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其它機器時所需做的丄作大大簡化了,這也推動了UNIX操作系統(tǒng)迅速地在各種機器上實現。例如,VAX等計算機系統(tǒng)都相繼開發(fā)了UNIXo隨著UNIX的日益廣泛使用,C語言也迅速得到推廣,C語言和UNIX可以說是ー對李生兄弟,在發(fā)展過程中相輔相成。1978年以后,C語言已先后移植到大、中、小、微型機上,已獨立于UNIX和PDP了。現在C語言已風靡全世界,成為世界上應用最廣泛的幾種計算機語言之一。?以1978年發(fā)表的UNIX第7版中的C編譯程序為基礎,BrianW.kernighan和DennisM.Ritchie(合稱K&R)合著了影響深遠的名著《TheCprogramminglanguage》,這本書中介紹的C語言成為后來廣泛使用的C語言版本的基礎,它被稱為標準C。1983年,美國國家標準化協會(ANSI)根據C語言問世以來各種版本對C的發(fā)展和擴充,制定了新的標準,稱為ANSIC。ANSIC比原來的標準C有了很大的發(fā)展。K&R在1988年修改了他們的經典著作《TheCProgrammingLanguage》,按照ANSIC標準重新寫了該書。1987年,ANSI又公布了新標準」87ANSIC,目前流行的C編譯系統(tǒng)都是以它為基礎的。本書的敘述基本上以87ANSIC為基礎。目前廣泛流行的各種版本C語言編譯系統(tǒng)雖然基本部分是相同的,但也有一些不同。在微型機上使用的有MicrosoftC,TurboC,QuickC等,它們的不同版本又略有差異,因此讀者應了解所用的計算機系統(tǒng)的C編譯的特點和規(guī)定(可以參閱有關手冊).?Java,C++等面向對象語言(第四代語言)是在C語言的發(fā)展。1.2:C語言的特點ー種語言之所以能存在和發(fā)展,并具有生命力,總是有其不同于(或優(yōu)于)其它語言的特點。c語言的主要特點如下。.語言簡潔、結構緊湊,使用方便、實用靈活。C語言ー共只有32個具有特定意義的關鍵字,9種控制語句,寬松的語法檢查,程序書寫形式自由,主要用小寫字母表示,壓縮了一切不必要的成分,比較符合人們的書寫習慣。.C語言是ー種模塊化程序設計語言。用c語言編寫的程序由函數組成,每個函數完成一個特定的任務,由函數作為模塊來實現程序的模塊化。由函數組成層次結構,程序由主函數開始,函數間可實現相互調用。?運算符豐富,數據處理能力強C的運算符包含的范圍很廣泛,共有34種運算符。C把括號、賦值、強制類型轉換等都作為運算符處理。從而使C的運算類型極其豐富,表達式類型多樣化,靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。4?數據類型豐富,具有現代化語言的各種數據結構c的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構(如鏈表、樹、棧等)的運算。c語言要求程序中使用的任何數據都必須指定為特定的類型,因此,它能滿足現代程序設計的要求。5?具有結構化的控制語句C語言是是結構化的理想語言,符合現代編程風格要求。它有9種控制語句,對程序的邏輯結構提供了很好的基礎。其程序結構清晰,層次分明,有利于采用自頂而下、逐步求精的程序設計方法。6。語法限制不大嚴格,程序設計自由度大.例如,對數組下標越界不作檢查,由程序編寫者自己保證程序的正確。對變量的類型使用比較靈活,例如,整型量與字符型數據以及邏輯型數據可以通用,一般的高級語言語法檢查比較嚴,能檢查出幾乎所有的語法錯誤。而c語言允許程序編寫者有較大的自由度,因此放寬了語法檢查。程序員應當仔細檢查程序,保證其正確,而不要過分依賴C編譯程序去查錯?!跋拗啤迸c“靈活”是ー對矛盾。限制嚴格,就失去靈活性;而強調靈活,就必然放松限制。ー個不熟練的人員,編ー個正確的C程序可能會比編ー個其它高級語言程序難ー些。也就是說,對用C語言的人,要求對程序設計更熟練一些。.C語言允許直接訪問物理地址能進行位(bit)操作,能實現匯編語言的大部分功能,可以宜接對硬件進行操作,因此C既具有高級語言的功能,又具有低級語言的許多功能,可用來寫系統(tǒng)軟件。c語言的這種雙重性,使它既是成功的系統(tǒng)描述語言,又是通用的程序設計語言。有人把c稱為“高級語言中的低級語言'’,也有人稱它為“中級語言”意為兼有高級和低級語言的特點。.生成目標代碼質量高,程序執(zhí)行效率高。一般只比匯編程序生成的目標代碼效率低10?20%。.用小寫字母書寫程序。C語言除宏定義所定義的宏名字采用大寫字母外,其它一般用小寫字符書寫。C語言把大、小寫字母視為不同的字符。.用C語言寫的程序可移植性好(與匯編語言比)??梢浦残约粗冈讴`種環(huán)境下可以運行的程序在另一種不同的環(huán)境下也可以運行。用匯編語言(低級語言)編寫的程序,完全依賴于計算機硬件,而c語言程序基本上不作修改就能用于各種型號的計算機和各種操作系統(tǒng)上。上面我們只介紹了C語言的最容易理解的?般特點,至于C語言內部的其它特點將結合以后各章的內容作介紹。由于C語言的這些優(yōu)點,使C語言應用面很廣。許多大的軟件都用C編寫,這主要是由于C的可移植性好和硬件控制能力高,表達和運算能力強。許多以前只能用匯編語言處理的問題現在可以改用C語言來處理了。C的以上特點,讀者現在也許還不能深刻理解,待學完c以后再回顧ー下,就會有比較深的體會。我們從應用的角度出發(fā)對C語言和其它高級語言作一簡單比較:從掌握語言的難易程度來看,C語言比其它語言難ー些,Basic是初學者人門的較好的語言,Fortran也比較好掌握。対科學計算多用Fortran或PL/1;對商業(yè)和管理等數據處理領域,用Cobol為宜,C雖然也可用于科學計算和管理領域,但并不理想,C的特長不在這里。對操作系統(tǒng)和系統(tǒng)實用程序以及需要對硬件進行操作的場臺,用C語言明顯地優(yōu)越于其它高級語言,有的大型應用軟件也用C編寫。從教學角度,由于Pascal是世界上第一個結構化語言而曾被認為是計算機專業(yè)的比較理想的教學語言,目前在“數據結構”等課程中一般用Pascal語言舉例,但Pascal語言難以推廣到各實際應用領域,到目前為止基本上只是教學語言,C語言也是理想的結構化語言,且描述能力強,同樣適于教學,而且“操作系統(tǒng)”課程多結合Unix講解,而Unix與c不可分,因此,C語言有可能取代Pascal而成為被廣泛使用的教學語言,而且C除了能用于教學外,還有廣泛的應用領域,因此更有生命力。Pasca!和其它高級語言的設什目標是通過嚴格的語法定義和檢查來保證程序的正確性,而C則是強調靈活性,使程序設計人員能有較大的自由度,以適應寬廣的應用面??傊?C語言對程序員要求較高。程序員使用C語言編寫程序會感到限制少、靈活性大,功能強,可以編寫出任何類型的程序?,F在,C語言已不僅用來編寫系統(tǒng)軟件,也用來編寫應用軟件。學習和使用C的人已越來越多。第二節(jié):簡單的C程序介紹學習ー種程序設計語言唯一的有效途徑就是用它編寫程序。下面幾個簡單的程序將帶你進入c的世界,開始我們的學習。幾個簡單的例子第一個程序總是輸出ー個字符串,這里,選擇著名的“Hello,world”程序,以表示對K&R的敬意。例1-1:main()(Printf("hello,world'n");)這個程序的運行結果是輸出字符串hello,world上面的程序稱C語言源程序,簡稱C程序。為了讓它運行,必須先找ー個編輯程序輸入它,然后編譯,裝入,最后執(zhí)行。本書所介紹的Turtle是ー個集程序編輯、編譯、鏈接、運行、調試為一體的C語言程序開發(fā)軟件??蓪Τ绦蜻M行全屏幕編輯??衫么翱诠δ苓M行編譯、鏈接、調試、運行、環(huán)境設置等工作。現在讓我們來看看程序本身.main是ー個函數名,表示“主函數”。ー個C程序,不管簡單或復雜,總是由?個或多個函數組成,由這些函數實現要做的操作。函數名可以按照你的喜好去取,但main是ー個特殊的名字。C程序總是從main函數開始執(zhí)行,這意味著,ー個程序必須在某個地方有一個main函數?;ɡㄌ枺ㄆ饦嬙旌瘮档恼Z句,稱函數體。函數體中只有一條函數調用語句Printf("hello,world\n")其功能是將雙引號‘“’中的內容輸出。Printf是C語言中的庫函數(其中f是format的縮寫,

即格式化的意思),它來自計算機廠家提供的輸入輸出庫,你可以直接去調用它。雙引號中的內容是調用Printf時提供的參數,表示為ー個字符串。字符串中的ヽn是C語言中的換行字符,在輸出時,它將終端的光標移動到下一行的開始。如果不使用\n,輸出時就會發(fā)現,光標停在輸出字符串的后面。Printf不提供自動換行的功能,每當在程序中需要執(zhí)行換行操作時,都必須寫出\n。例如,我們把例1-1改寫一下main()(primf("hello,");printfC4worldM);)執(zhí)行結果也是ー?樣的。如果要將程序改成main()(printf(t4hello,\nM);printf("woiid\n");}你會發(fā)現輸出變?yōu)?hello,world在這里我們可以看到,C語言傾向于把怎樣處理的權利交給程序員。printf語句的最后跟著一個分號‘';",它表明一個語句的結束。例1.2源程序如下:/?求兩個整數之和?//?主函數/?主函數?//?主函數體的開始,用花括號{表示*//?定義a1b,s為整形變量?//?賦值語句?//?輸出s的值?//?主函數體的結束,用花括號}表示*/(Inta,b,sum;a=12;b=34;sum=a+b;Printf("sumis%d\n”,sum);)說明:本程序的功能是求兩整數之和。(1)程序中的"/* */”表示注釋符號,在注釋符號中間是注釋內容,該內容可以由任意字符構成,系統(tǒng)不執(zhí)行注釋內容。注釋的作用是給程序員閱讀程度帶來方便,程序中加上注釋是程序員必須養(yǎng)成的良好習慣。注釋可以加在程序中的任何位置。注釋可以是任意ー串字符,但不能再含有/**/,也就是說注釋是不能嵌套的(也沒有必要)。這里的注釋是用漢字給出的,你的計算機可能每裝漢字,可用英文或漢語拼音來寫注釋。本書中采用漢字注釋完全是為了閱讀的方便。(2)程序的第2行main。表示主函數,每ー個C語言程序都必須有一個main。函數。函數體由一對花括號{}括起來。(3)程序的第4行是變量定義部分,這里我們用int定義a、b和sum為整形。C語言規(guī)定使

用任何變量之前都要先定義。ー個語句結束,用匕”來結尾。(4)程序的第5、6、7行是三個賦值語句,“i’是賦值運算符,它的作用是把其右邊表達式的值賦給左邊的變量,這里是把值!2賦給變量a,把值34賦給變量b,把a+b的結果賦給變量sum..(5)程序的第8行是輸出語句,其中的‘'sumis”和“\n”我們已經熟悉,''%d”是ー個輸出轉換說明,意思是:輸出時用?個整形值來代替它,表示輸出的數據類型為十進制整形類型,這里這個整形值是變量sum的值,于是本程序的輸出結果為:例1.3:計算例1.3:計算n!。程序如下:Main{}/?主函數?//?主函數體的開始,用花括號{表示*//*定義變量類型語句?//*數據輸入語句*/Scanf("/*數據輸入語句*/While(i<=n)/?主函數體的結束,用花括號}表示*/說明:程序的第5行中的scanf是c輸入輸出庫中提供的輸入函數它要求按照轉換字符(這里是%d,表示輸入的數據類型為十進制整形類型。)將相應類型的數據輸入到指定變量的存儲單元中去,其中表示取地址,是“地址運算符”,如&x表示x在內存中的地址。整個語句的作用是,接受用戶從鍵盤上輸入的整形數n的數值,輸入到n所標志的存儲單元中。實驗1TurboC運行環(huán)境與C程序運行初步ー、實驗目的.掌握啟動TurboC的方法,熟悉TurboC的窗ロ,學會使用基本的菜單命令和操作鍵。.掌握編輯、編譯、連接和運行一個C程序的基本方法,初步了解C語言的基本特點和程序結構。二、實驗內容說明:①假設TurboC已經安裝在C盤TC子目錄中。②在進行本實驗的操作之前應該結合學習本書附錄A的內容,熟悉TurboC的環(huán)境,了解各項菜單操作命令的基本功能。.掌握啟動TurboC的一般方法。(1)雙擊桌面TurboC快捷方式圖標(如果存在)。(2)打開資源管理器窗ロ,找到TC子文件夾,雙擊其中的TC.EXE文件。(3)在MS-DOS方式下,輸入如下DOS命令:C:\W1NDOWS>CD\TC/ (進入TC子目錄)C:\TC>TCZ (運行Turbo〇說明:帶下劃線的字符是用戶輸入的命令字符,/表示按回車鍵。TurboC啟動后出現如圖實驗1.1所示的運行窗口。TurboC操作界面.熟悉TurboC的基本操作。TurboC主菜單的命令包括:File、Edit,Run、Compile,Project,Options,Debug,Break/watch,分別表示文件、編輯、運行、編譯,工程,選項,調試,斷點/監(jiān)視功能。除了Editタト,其他命令項都有下拉子菜單,包含若干操作子命令項。(2)按F10鍵激活主菜單,用ー,—?光標鍵選擇各主菜單項(或按住Alt鍵,再按菜單項的開頭字母選擇菜單項,例如按住Alt鍵再按F鍵打開File文件子菜單:按住Alt鍵再按E鍵進入編輯狀態(tài)),觀察各子菜單,了解主要菜單命令的功能,如New,Load,Save,Writeto,Run,UserScreen,CompiletoOBJ等。 4i(3)選擇某個主菜單項并按回車鍵后,顯示對應的下拉子菜単。使用!,1光標鍵選中子菜單命令,按回車鍵之后,有些菜單命令可直接執(zhí)行,有些命令還需要輸入信息,或還包含下級子菜單,需要進ー步選擇。(4)按Esc鍵關閉主菜單或下拉子菜單。.輸入并運行ー個簡單C程序。(1)建立并輸入源程序。打開File菜單(按Alt+F組合鍵),選擇Load命令并按回車鍵(或按F3鍵),輸入被編輯的文件名(允許指定文件所在盤和路徑,如e:\sy」或a:\sy_l),按回車鍵后,在編輯窗口輸入教材例1.1程序(注意觀察輸入過程中狀態(tài)行Line和Col后面數字的變化):Main(){floata,b;/?定義4b為單精度實型變量?/a=5.2b=a*aprintf("b=%f\n”,b);)解釋:在c語言中實型變量分為單精度(float)和雙精度(double)兩類。實型變量的定義舉例如下:floata,b;/?定義&b為單精度實型變量?/doublex,y;/*定義x,y為雙精度實型變量?/'%f’的作用是以小數形式輸出實數(輸出6位小數),ー個格式說明必須由一個“%”開頭,后面跟ー個類型字符?!痋rf是普通字符,作用就是換行。說明:①也可以使用File菜單的New命令新建文件,此時將建立一個名為NONAME.C的新文件。②輸入過程中可以隨時使用編輯鍵對光標所在處的文本進行插入、刪除等修改操作。附錄B列出常用的編輯鍵。(2)保存文件(或稱文件存盤)。選擇File菜單的Save命令(或按F2鍵),將文本保存到磁盤中。注意:①如果是保存用New命令建立的NONAME.C文件,保存時會出現所示保存對話框,此時可輸入新文件名來代替系統(tǒng)默認文件名NONAME.C,按回車鍵后進行文件的保存。②如果保存NONAME.C文件時未出現保存對話框,則應該將文件改名保存到A盤或E盤用戶指定文件夾內。操作方法是:按Alt+F組合鍵打開文件菜單,選擇Writeto命令,然后輸入新文件名e:\sy_l或a:\sy_l,之后按回車鍵。(3)編譯、連接并運行程序。選擇Run菜單的Run命令(或按Ctrl+F9組合鍵),編譯、連接并運行程序。如果出現錯誤,會彈出編譯、連接信息框,并在Message窗口區(qū)顯示出錯信息。此時需要檢查并修改程序,之后再次按Ctrl+F9組合鍵運行程序。附錄C列出編譯常見的出錯信息。(4)査看運行結果。選擇Run菜單的Userscreen命令(或按Alt+F5組合鍵),切換到用戶屏幕,觀察程序運行結果,顯示的運行結果為:b=27.039997.輸入并運行一個新的C程序。(1)再次打開File菜單,選擇Load命令(或New命令)并按回車鍵(注意:若原編譯文件尚未存盤,此時會出現對話框提示保存文件)。當出現空白的編輯窗口時,輸入以下新的程序:main(){floatr,area;r=2.5area=3.14*r*r;printf(44area=%f\n,,,area);)(2)按前面所述步驟將該程序保存為sy_2.c文件。之后再編譯、連接和運行程序,觀察運行結果。這是ー個求半徑為2.5的圓面積的程序,程序的運行結果為:Area=19.625000(3)將程序中匚2.5改為r=3.28(或其他數),再次編譯、連接和運行程序并觀察運行結果。1.3下面給出幾個結構完整的C語言程序。例1-1:首先給出ー個最簡単且完整的c語言程序。/*examplel-l*/#include<stdio.h>main())運行結果:Hello,C!程序中main()表示主函數,是C語言程序必須有的一個函數。由花括號{}括起來的部分是函數體,函數體用來規(guī)定該函數所要完成的工作,它由一些語句組成,每個語句都以分號‘‘;"結束。本例中函數體內只有一個輸出語句,Printf()是輸出函數調用,它調用系統(tǒng)標準輸入輸出函數庫中的Printf函數。雙引號內的字符串照原樣輸出,\n是換行符,即在輸出字符串后回車換行。語句最后有一個分號“;”。程序開頭出現的“include<stdio.h>"是一條編譯預處理命令,它的作用是編譯之前將尖括號0括起來的文件內容放到該命令的位置,有關這方面的知識后面章節(jié)要詳細介紹。例1-2:用C語言編寫程序,要求輸入圓半徑值,計算圓面積并輸出。/"example1-2*/#include<stdio.h>#definePI3.14159main() /?計算圓的面積*/{intr;floats;printf(“請輸入圓的半徑值:");scanf("%d”,&r); /*輸入圓的半徑值?/s=PI*r*r;printf(“該圓面積=%f\n”,s); /?輸出圓面積值?/}這個程序比上例稍長ー些,但仍是ー個很簡單的程序。程序第4、9、11行/*和?/中間的內容是注釋,簡要說明了該程序或語句在做什么。為便于理解,我們用漢字表示注釋,當然也可用英語或拼音作注釋。在/?和*/之間的字符,對編譯和運行不起作用,只是為了使程序更易理解。第2、3行都是編譯預處理命令,其中第一條使用同上例,后一條的作用是在編譯前將程序中所有的PI都用3.14159替換,在C語言程序中,凡是前面帶#號的,都是編譯預處理命令。該程序的函數體由若干語句組成,每個語句都以“;”結束。函數體中第1、2句為變量說明,分別說明r為整形變量,s為實型變量。第3條語句為printf函數調用,在屏幕上顯示“請輸入圓的半徑值:”,用來提示用戶準備輸入數據。第4條語句為scanf函數調用,它的作用是等待用戶從鍵盤上輸入數據,&r中的“&”含義為“取地址”,即將數值輸入到變量r的地址所標識的內存單元中,也就是輸入給r。&r前面的“%d”是輸入格式符,用來說明輸入時數據的類型,“%d”表示輸入十進制整數。第5條是賦值語句,用來計算賦值號“=”右邊表達式的值,即圓面積的值,并賦給變量s。最后一句為printf函數調用,雙引號內的字符串“該圓面積=%1Xガ’,在輸出時其中的“%f”表示將變量s按規(guī)定的實型數據格式輸出,“該圓面積=”照原樣輸出。程序的運行結果如下:請輸入圓的半徑值:1<CR>該圓面積=3.141590例1-3編寫一個程序,輸入兩個數,求其中較大的數。/*examplel-3*/#include<stdio.h>Intmax(intx,inty)/?被調用函數?Intmax(intx,inty)intz;if(x>y)z=x;intz;if(x>y)z=x;Elsez=y;return(z);)main()(Inta,b,c;scanf("%d,%d”,&a,&b);C=max(a,b);printf(44max=%d\n,,,c);/?將z的值返回調用處?//?主函數?//*輸入兩個整數?//?調用max函數?/本程序包含兩個函數:主函數main()和被調用函數max〇。max函數的作用是將x,y中較大的數和值賦給z,并通過return語句將z的值返回到主函數main中的調用處。x、y是兩個形式參數,它們的值由主調函數中對應的實際參數a,b的值傳過來。Main函數體中第三行為調用max函數,調用時將實在參數a和b的值分別傳給max函數中對應的形式參數x和y,在執(zhí)行max函數后,得到ー個返回值,即max函數中變量z的值,把這個值賦給變量c,然后輸出c的值。程序運行結果如下:6/ (從鍵盤上輸入4、6給a、b)max=6 (輸出c的值)本例中用到了函數定義、函數調用、形參和實參等概念,在后面有關章節(jié)中要作詳細的討論。這里僅僅是使讀者對C語言程序的組成和形式有一個初步的了解。通過上面幾個例子,可以看出:ー個C語言程序可以由多個函數組成,但必須包含且只能包含一個主函數main0。函數是組成C語言程序的基本單位。一個函數由函數頭和函數體兩部分組成。函數頭定義了函數名、函數類型、函數形式參數名及其類型。例如上面例子屮max函數的函數頭Intmax(intx,inty)定義了函數的名字為max,函數的類型為int,函數的形式參數為x和y,它們的類型為int。這里有必要說明一下,早期的C語言版本與ANSIC在函數定義上有區(qū)別,如上例,舊版本寫法為intmax(x,y)intx,y;參數在圓括號內命名,參數類型在函數體左花括號前說明。函數體,即函數頭下面花括號{}內的部分。函數體定義了該函數所要實現的功能。函數體一般包括:?變量說明。如例1-3中main函數中的“inta,b,c”.?執(zhí)行部分。由若干語句組成,每個語句都以“;"結束。ー個C程序中函數出現的次序可以是任意的,但總是從main函數開始執(zhí)行。4)前面帶有“#”的語句,如#include、#define等都是編譯預處理命令。5)C語言程序書寫格式比較自由,一行可有多個語句,ー個語句也可寫成多行(但不能將一個單詞分開)。為了提高程序的可讀性,往往以縮進寫法來體現語句的層次。第二章:C語言程序設計初步知識:預備知識——進位計數制進位計數制的三要素:數位、基數、位權數位:數碼在ー個數中所處的位置。(2)基數:ー個計數制所包含的數字符號的個數稱為該數制的基數。用「表示。例如任意ー個十進制數可用0,1,2,……9.十個數字來表示,它的基數!同理,二進制數可用0,1兩個數字來表示,它的基數匸2,八進制數可用0,1,…7ハ個數字來表示,它的基數48,十六進制數可用。,1,2,-9,A、B、C、D、E、F等16個不同的數碼符號表示,其基數=16。其中A、B、C、D、E、F分別表示數碼10,11,12,13,14,15〇(3)位權:數制中,每個數位上的數碼所代表的數值的大小等于在這個數位上的數碼乘上一個固定的數值,這個固定的數值就是這種進位數制中該位上的位權。例如,二進制第2位的位權為2,第3位的位權為4。一般情況下,對于N進制數,整數部分第i位的位權為Ni“,而小數部分第j位的位權為N-Jo例如十進制數5555.555可表示為:5555.555=5X103+5X102+5X1O'+5X100+5X10'+5X!〇々+5X1O'3可以看出,各種進位計數制中的權的值恰好是基數的某次累。因此,對任何ー種進位計數制表示的數都可以寫出按其權展開的多項式之和,任意ー個r進制數N可表示為-kN=2DiXr1I=m-1式中Di為該數列采用的基本數符,ア是權,r是基數,不同的基數,表示不同的進制數。常用的計數制有二進位計數制、ハ進位計數制、十進制計數制和十六進位計數制。一般我們用〇x表示不同進制的數。例如:十進制用〇K)表示,二進制用〇2表示。在計算機中,一般在數字的后面,用特定字母表示該數的進制,其中:B——二進制 D——十進制(D可省略)〇ーハ進制 H——十六進制。例如:1010B表示二進制數1010;AE05H表示十六進制數AE05下表所示的是計算機中常用的幾種進位數制。表:計算機中常用的幾種進制數的表示進位制二進制八進制十進制十六進制規(guī)則逢二進ー逢ハ進ー逢十進ー逢十六進ー基數R=2R=8R=10R=16數符0,10,1,-70,1,-90,L-9,A、B、C、D>E、F權2'8'10,16,形式表示B〇DH不同進制之間的轉換1.r進制與十進制-kN=2DiXr1I=m-1上式本身就提供了將r進制數轉換為十進制數的方法。例如吧二進制數轉換為十進制的方法是將二進制數按權展開求和即可。Egl:把二進制數11010轉換成相應的十進制數。

(11010)B=1X24+1X23+0X22+1X2'+0X20=(26)DEg2:把二進制數10010.101轉換成相應的十進制數。(100110.101)b=1X25+1X22+1X21+1X21+1X23=(38.625)d練習:把(10110011.101)2轉換成十進制數。(10110011.101)f=lX27+lX2s+lX24+lX21++lX20+lX2',+lX23=(179.625)io同理,非十進制數轉換成十進制數的方法是把各個非十進制數按權展開求和即可。如把二進制數(或ハ進制數或十六進制數)寫成2(或8或16)的各次事之和的形式,然后再計算其結果。Egl:將十六進制數2BA轉換成十進制數。2BAH=2X162+11X16'+1OX16°=512+176+10=678D2.十進制與r進制整數部分和小數部分的轉換方法是不相同的,下面分別加以介紹(1)整數部分的轉換:把ー個十進制的整數不斷除以所需要的基數r,取其系數(除r取余法),就能夠轉換成以r為基數的數。并注意第一位系數是低位,最后一位系數是高位。例如:把ー個十進制整數轉換成相應的二進制整數的方法是采用“除2取余”法。具體步驟是?把,卜進制整數除以2得一商數和一余數:再將所得的商除以2,得到ー個新的商數和余數;這樣不斷地用2去除所得的商數,直到商等于〇為止,第一次得到的余數為最低有效位,最后一次得到的余數為最高有效位,因此將所得的余數反向讀數,就是這個數的二進制表示。Eg:把十進制數25轉換成二進制數。如下所示:2| 25 余數2 12 1? 最低位TOC\o"1-5"\h\z2|6 02|3 02|j 10 1?最高位所以(25)D=(11001)B練習:.將十進制整數215轉換成二進制整數余數1余數1? 最低位1101011< 最高位2 1072|_53 2 |26 2 |13 2|_6 2|_J 2b 0所以215D=11010111B

2.將十進制數(253)地轉換成二進制整數2253余數21261? 最低位26302131 12115 12 712|312L 10 1? 最咼位所以(253)io=(11111101)2用類似于將十進制數轉換成二進制數的方法可將十進制整數轉換成十六進制整數,只是所使用的除數以16去代2而已。(2)小數部分的轉換:要將一個十進制小數轉換成r進制小數時,可將十進制小數不斷地乘以r,并取整,這稱為乘r取整法。例如:將十進制小數轉換成二進制小數是將十進制小數連續(xù)乘以2,然后選取進位整數,直到滿足要求為止。簡稱“乘2取整法”。Eg:將十進制小數(0.6875)K1轉換成二進制小數。方法如下:0.6875X2 1.3750 整數=1? 最高位0.3750X2 0.7500 整數=00.7500X21.5000整數=10.5000X2 1.0000 整數=1< 最低位將十進制小數0.6875連續(xù)乘以2,把每次所進位的整數,按從上往下的順序寫出,于是(0.6875)io=(0.1011)2練習:將十進制小數0.3125轉換成相應的二進制小數。0.3125X2 0.6250 整數=0? 最高位0.6250X21.2500 整數=10.2500X20.5000 整數=00.5000X21.0000 整數=1< 最低位所以(0.3125)d=(0.0101)B同理,學會了十進制小數轉換成二進制小數的方法以后,那么,對于十進制小數轉換成ハ進制小數或十六進制小數的運算就變得很簡單了。十進制小數轉換成ハ進制小數的方法是“乘8取整數”十進制小數轉換成十六進制小數的方法是“乘16取整數”。如果十進制數包含整數和小數兩部分,則必須將十進制小數點兩邊的整數和小數部分分開,分別完成相應轉換,然后,再把r進制整數和小數部分組合在ー起。例如:將十進制數25.3125轉換成二進制數,只要將上例整數和小數部分組合在一起即可。即:(25.3125)d=(11001.0101)BEg:將十進制數193.12轉換成ハ進制數。8丨193 余數8|24 I? 最低位8[_3_ 00 3^ 最高位0.12X8 整數0.96 04 最高位X87.68 7X85.44 5-4 最低位所以(193.12)d-(301.075)〇3.非十進制數間的轉換。通常兩個非十進制數之間的轉換方法是采用上述兩種方法的組合,即先將被轉換數轉換為相應的十進制數,然后再將十進制數轉換為其他進制數。由于二進制、ハ進制和十六進制之間存在特殊關系,即8'=23,16'=2\因此轉換方法就比較容易。在解題中用“8421”法通常比較簡單。ー、二進制數與八進制數之間的轉換(1)二進制數轉換成八進制數由于二進制數和八進制數之間存在特殊對應關系,即8^23。因此,轉換方法比較容易,具體轉換方法是:將二進制數從小數點開始,整數部分從右向左3位ー組,小數部分從左向右3位ー組,不足三位用〇不足,然后利用8421碼的方法求對應的八進制數即可。例:將(10110101110.1001)2轉換為ハ進制數的方法如下:010' 110'101'110.100'100TOC\o"1-5"\h\z2 6 5 6 4 4于是,(10110101110.1001)2=(2656.44)8練習:將二進制數(10100161.01011101)b轉換成八進制數。010' loo' 101.01〇' nr 010I I - I I2 4 52 7 2所以(10100101.1011101)B=(245.272)〇(2)ハ進制轉換成二進制數將ハ進制數轉換成二進制的過程與二進制轉換成ハ進制的過程正好相反,即以小數點為界,向左或向右每一位八進制數用相應的三位二進制數取代,然后將其連在ー起即可。例如:將(5237.420)8轉換成二進制數的方法如下:TOC\o"1-5"\h\z5 2 3 7.4 2 0+▼ ▼ ▼▼ + ▼101 010 011 111100 010 000于是:(5237.420)8=(101010011111.100010000)2練習:將ハ進制數6154轉換成二進制數TOC\o"1-5"\h\z6 15 4.v t ▼ ▼110 001 101 100則(6154)8=(110001101100)2二、二進制數與十六進制數之間的轉換(1)二進制數轉換成十六進制數二進制數的每四位,剛好對應于十六進制數的一位(16124)。其轉換方法是,將二進制數從小數點開始,整數部分從右向左4位ー組,小數部分從左向右4位ー組,不足四位用〇補足,每組對應一位十六進制數即可得到十六進制數。例:將二進制數(101001010111.110110101)2轉換為十六進制數。TOC\o"1-5"\h\z1010 0101 0111.1101 1010 1000f ▼ ▼ ▼ ▼ ▼A 5 7 D A 8于是:(101001010111.110110101)2=(A57.DA8),練習:將二進制數1001.1010110轉換成十六進制數1001. 1010 1100(最低位不足四位時補〇)9AC于是:(1001.1010110)2=(9.AC)16(2)十六進制數轉換成二進制數以小數點為界,向左或向右每一位十六進制數用相應的四位二進制數取代,然后將其連在ー起即可。例:將(3CB.12)|6轉換成二進制數3CB.1 20011 1100 1011 0001 0010于是(3CD.12)16=(1111001011.00010010)練習:.將十六進制數9B28轉換成二進制數。TOC\o"1-5"\h\z9B 2 81001 1011 0010 1000于是(9B28)16=(!〇〇1101100101000)2.將2AFH轉換成二進制數因為2 AF0010 1010 1111故得結果:2AFH=1010101111B三、ハ進制與十六進制數的相互轉換ハ進制數與十六進制數之間不能直接轉換,它們之間可通過二進制間接來實現轉換。例:將ハ進制數457轉換成十六進制數。(457)8=(100101111)2=(12F)|6練習:將十六進制數3C45轉換成八進制數。(3C45)|6=(0011110001000101)2=(036105)8C的基本字符與詞匯ー個c語言程序好比ー篇英語文章,它的各種語言成分,如表達式、語句等都是由一些基本字符和詞匯按照嚴密的語法規(guī)則構成的。這些基本字符和詞匯是語言最基本的語法單位。2.2.1C語言的字符集各種程序設計語言都規(guī)定了允許使用的字符集,以便處理系統(tǒng)能正確識別它們。C語言中使用的合法字符有:字母和數字小寫字母:4b,c…z大寫字母:ABC-Z數字:012-9特殊字符+=-_()*#&%$!10A'ソ、?{}ロ~空白字符包括空格、換行符和制表符。以上字符的集合就是C語言的合法字符集。C語言程序所用的全部字符都在這個字符集中。2.2.2詞匯單詞是由字符組成的,單詞的集合稱為詞匯。C語言的詞匯包括標志符、保留字、運算符和分隔符等。標識符C語言的標志符是由字母、數字和ド劃線組成的字符序列。它的第一個字符必須是字母或下劃線。根據上述規(guī)則,下面的標志符是合法的:a,x1,_font,b4c,High,_x_y下面則是不合法的標識符:5a,#mod,B,b+c,.obj在C語言的標識符中,大寫字母和小寫字母是有區(qū)別的,如ABC,Abe和abc分別表示了三個不同的標識符。這一點與其他高級語言有區(qū)別,使用時應注意。對于標識符的長度,C語言本身未作限制,取決于編譯系統(tǒng),-一般編譯系統(tǒng)規(guī)定前8個字符有效,如果長于8個字符,多余的將不被識別,這樣,只要兩個標識符前8個字符相同,系統(tǒng)就認為它們是同一個標識符。但也有的編譯系統(tǒng)允許使用長達31個字符的標識符。標識符是用來為常量、變量、數組、函數及類型等取名的。使用標識符時,一方面要取得盡量有意義,做到“見名知義”,如円、name、count,max等,以利于閱讀和理解;另一方面要避免在書寫時引起混淆,如字母“〇”和數字“〇”,字母"I”和數字“1”,字母“Z”和數字“2”,減號“-”和下劃線“一”等都易混淆,使用時要小心。再有,不能把保留字用作ー一般的標識符,因為保留字在C語言中有專門的含義。保留字保留字又稱關鍵字,是語言中具有特定含義的ー些單詞,對保留字不能重新定義,也不能用作一般的標識符。C語言有如下保留字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructwitchtypedefunionunsignedvoid volatilewhile其中,sizeof是一個運算符,其他都用作類型說明和基本控制結構的標記。以后章節(jié)會ーー講述,這里要求讀者對上述保留字不要隨意使用。運算符運算符是用來表示某種運算的符號,多數運算符由一個字符組成,也有的由多個字符組成。C語言中運算符種類繁多,優(yōu)先級復雜,另外還有結合性問題。C語言有44個運算符,15種優(yōu)先級和2種結合性,在以后章節(jié)中要ーー介紹.分隔符分隔符是用來分隔變量、數據、表達式等多個單詞的符號。C語言中常用的分隔符是空格、逗號和換行符等。數據類型、運算符及表達式數據類型是高級程序設計語言中最重要的概念之一。凡是數據都必須有類型,變量在使用之前必須先進行類型說明,這是兩條必須遵循的規(guī)則。下面介紹c語言的基本數據類型、運算符及表達式,它們是c語言的基礎。數據和數據類型數據是程序的必要組成部分,也是程序的處理對象。數據有常量和變量之分,常量是指程序運行過程中,其值保持不變的量;而變量則是指程序運行過程中,其值可以改變的量。每個數據對象,不管是常量還是變量,都必須有確定的類型,這是因為數據類型規(guī)定了ー個數據的可能取值范圍、在內存中的存儲方式以及它所能進行的運算。對于常量來說,它的類型是由常量本身隱含確定的,這在下ー節(jié)要作詳細介紹。對變量來說,它的類型就要用專門的類型說明語句加以說明。下圖給出了C語言的各種數據類型。’整型(int)字符型(char)C基本類型< 「單精度型(float)實型(浮點型)ヽ、雙精度型(double)し枚舉類型(enum)數據類型\ r數組類型構造類型J結構體類型(struct)ー共用體類型(union)指針類型ゝ空類型(void)本章我們將介紹C語言的基本數據類型,其他類型留待后面章節(jié)討論。常量C語言中的常量有三類:數、字符和字符串。由于它們本身已隱含了數據類型,所以使用時不必事先進行類型說明就可宜接使用。整形常量整形常量簡稱整數,c語言中整形常量可以用三種數制來表示:十進制整數用我們習慣的十進制整數形式給出。如:127,0,-12,+5等,其每個數字位可以是0?9。ハ進制整數是用。(數字0)開頭的ハ進制數字串。如:十進制數的127,用ハ進制表示為〇177。ハ進制數中的每個數字位只能使用數字0?7。十六進制整數是以0X(數字0與字母X,X大小寫均可)開頭的十六進制字符串。入口:十進制數127I用十六進制表示為0X7F。十六進制數的每個數字位可以是〇?9,A?F,其中A?F表示十進制數10?15。C語言中,整數的取值范圍通常由機器的字長決定。例如字長為16位的計算機,一個整數用兩個字節(jié)存儲,因此十進制數的表示范圍為ー32768?32767,如果是無符號整數,其表示范圍為0?65535,若超過這個范圍,C語言提供了一種長整型,用來擴大整數的取值范圍。長整數是一般整數的兩倍長(4個字節(jié)),其取值范圍為ー2147483648?2147483647,無符號長整型數取值范圍為0?4294967295。C語言中,在整數的末尾加上字母1或L,就成了長整數,如:128L,123456L。十進制、ハ進制、十六進制常量用于不同場合,通常設計應用程序大多用十進制數,當描述系統(tǒng)程序時,有時要用ハ進制數或十六進制數。23.2.2實型常量實型常量又稱浮點數或實數。C語言中,實數只用十進制形式.它有兩種表示方法,即小數形式和指數形式.小數形式:由數字、小數點和可能的正負號組成。例如:3.1416,-12.76,0.12,.12,12.,12.0都是C語言合法的實數。指數形式:由尾數部分、字母e或E和指數部分組成。如十進制數320000.0用指數法可表示為3.2e5,其中3.2稱為尾數,5為指數,e也可用E表示。又如,-0.00123可表示為-1.23E-3o需要注意,用指數形式表示實數,字母e或E之前(即尾數部分)必須有數字,e后的指數部分必須是整數,如e-5、7.2e2.5都是不合法的實數。在一般計算機系統(tǒng)中,ー個實數在內存中占4個字節(jié),雙精度實數占8個字節(jié)。實數取值的絕對值范圍約為IO。8?103、具有6?7位十進制有效數字,雙精度實數具有15?16位十進制有效數字。23.23字符常量C語言中的字符型常量是用ー對單引號括起來的一個字符,如‘a’、‘*’、’5’等都是合法的字符常量。C語言的ー個字符常量占據一個字節(jié)的存儲空間,在該字節(jié)中存放的并不是字符本身,而是該字符所在機器采用的字符集中的代碼,也就是ー個整數值。大多數系統(tǒng)采用ASCII代碼字符集,在這種情況下,'a'的ASCII代碼值為97,'O'的代碼值為48。由于字符常量存儲的是ー個整數,因此它可以像整數一樣參加數值運算。在C程序中,字符常量通常用于字符之間的比較。C語言還使用ー種特殊形式的字符常量,這就是以反斜杠“ヽ”開頭的轉義字符序列。轉義字符常用來表示ASCII字符集內的控制代碼。例如前面我們用“ヽn”表示換行,\n實際上是ー個字符,它的ASCII碼值為10.常見的轉義字符如下表所示.表轉義字符字符形式功能\n換行\(zhòng)t橫向跳格(即跳到下ー個輸出區(qū))\v豎向跳格\b退格\r回車\f走紙換頁\\反斜杠字符”ヽ’單引號(撇號)字符\dddI到3位ハ進制數所代表的字符\xhh!到2位十六進制數所代表的字符2.324字符串常量字符串是用雙引號括起來的字符序列.如‘'China”就是ー個字符串,雙引號僅作定界符使用,不屬于字符串本身.C語言中,字符串在內存中存儲時,系統(tǒng)自動地在字符串的末尾加ASCII代碼值為0的字符,用以表示該字符串的結束.因此,長度為n個字節(jié)的字符串,實際上占據了n+!個字節(jié)的存儲空間.例如,字符串常量''CHINA”有5個字節(jié),占據了6個字節(jié)的存儲空間,其存儲形式如下圖所示.CHINA\()圖:字符串常量實際上,上圖中的字母應當用對應的ASCI!碼表示,這里為了方便,直接用字符表示。另外,我們也不難理解字符'a'和字符串“a”的區(qū)別,它們除了表示形式上由區(qū)別外,在內存中的存儲形式也是不同的,如下圖所示。a\0a)'a,的存儲表示 b)“a”的存儲表示23.2.5符號常量C語言中,常量也可用ー個標識符來命名,這就是符號常量。為了與一般變量相區(qū)分,符號常量習慣上用大寫字母表示。符號常量在使用前必須先定義,其定義的一般形式如下:#define符號常量名常量例如:#definePI3.1415926定義了一個符號常量PI,這樣凡在程序中出現PI,都表示3.1415926。PI是ー個常量,在程序中只能被引用,不能被修改。用符號常量代替常量,使程序更清晰易讀,同時使程序更易修改,保證對常量修改的一致性。最后要注意,定義符號常量的#define行不能以分號結束,這有別于一般的語句。關于#define的詳細討論將在以后章節(jié)中進行。233變量上面討論的是常量,常量本身隱含著它的類型,所以在使用前無須作類型說明,就可直接引用。而變量是用標識符來表示的,在使用之前,必須進行類型說明。變量說明的?般形式如下:類型名 變量名!,變量名2,-,變量名n;C語言中,最基本的類型有整形、實型和字符型,相應的變量就有整形變量、實型變量和字符型變量。整形變量整形變量用來存放整形數據,用保留字int說明。如:inti,j,k;說明了i,j,k三個整形變量。C語言在int性的基礎上,通過在int前加上修飾符,又擴展成一些新的整數類型。修飾符有l(wèi)ong(長型)、short(短型)、unsigned(無符號型)等。整形變量加上修飾符后,其取值范圍有所變化,以16位機為例,下表給出了各種形式整型變量的取值范圍。表整型變量的取值范圍類型所占位數取值范圍int16■32768?32767short16-32768?32767long32-2147483648-2147483647unsigned16〇?65535unsignedshort16〇?65535Unsignedlong32〇?4294967295實型變量實型變量也稱浮點型變量。按其能夠表示的數的精度,又可分為單精度實型變量和雙精度實型變量。單精度實型變量用保留字float說明。如:floatfl,f2;fl,f2被說明為單精度實型變量。雙精度實型變量用保留字double說明。如:doubledl,d2;dl,d2被說明為雙精度實型變量。一般來說,ー個float型變量占據4個字節(jié)存儲空間,ー個double型變量占據8個字節(jié)存儲空間。兩者之間的差異,體現在所能表示的數的精度上,前者十進制有效位為6?7位,而后者達15?16位。如果float型所提供的精度不能滿足要求時,就可以考慮使用double型。字符型變量字符型變量用來存放一個單個字符,由保留字char說明。如:charcl,c2;cl、c2被說明成字符型變量。ー個字符型變量占據?個字節(jié)存儲空間,只能存放ー個字符。字符變量存放的是字符的ASCII碼,實質上是一個整數型,因此在C語言中字符型變量可以像整型變量一樣使用。例:/*example*/#include<stdio.h>main()charcl,c2;cl=97;c2=98;printf(ii%c,%c\n,,,cl,c2);printf(tt%d,%d\n,,,cl,c2);程序中cl,c2被說明為字符型變量,但在下一行卻將整數97、98分別賦給cl、c2.它們的作用就相當于下面的兩個賦值語句:cl='a';c2='b';因為す和,b,的ASCII碼分別為97和98。函數體中第三行輸出兩個字符,“%c”為輸出字符格式,所以程序輸出:a,b字符型數據也可用整數形式輸出,如第四行,“%d”為輸岀整數格式,所以程序輸出:97,982.3.4賦值與算術運算C語言的運算符很多,運算范圍很廣,本節(jié)先介紹最常用的賦值運算與算術運算。賦值運算、在C語言中,賦值也被認為是ー種運算。由賦值運算符將一個變量和一個表達式連接起來的式子稱為賦值表達式。其形式如下:變量=表達式式? 是賦值運算符。它的作用是將賦值運算符右邊表達式的值賦給左邊變量。如:x=a+5是ー個賦值表達式,它將a+5的值賦給變量X。上述一般形式的賦值表達式中,賦值號右邊的表達式又可以是一個賦值表達式。例如:a=(b=10)括號內的b=10是ー個賦值表達式,它的值等于10,因此a=(b=IO),相當于a=10。賦值運算符是按“自右至左”的結合順序,因此b=10外面的括號可以不要,即可寫成:a=b=10需要注意的是,賦值運算符“二”與數學中的“相等”概念不同,它表示把表達式的值送到變量所代表的存儲單元中,因此賦值運算符左邊只能是變量,而不能是常量或表達式,如5二a、a+b=c,都是不合法的。二元算術運算.二元算術運算符C語言提供了5個二元算術運算符,二元算術運算是兩個運算量之間的運算。二元算術運算符及運算功能見下表(設運算量為a和b)。表:二元算術運算符運算符名稱運算功能*乘求a與b之積/除求a除以b之商%取余求a除以b之余數+加求a與b之和-減求a與b之差符號“*”表示乘,不能用數學上習慣用的“X”或“表示乘。例如,a*b不能寫成ab、aXb和a?b。符號“/”表示除,當除數和被除數都是整型數時,其商也是整型數,如10/3的結果為3。求余運算符“%”只能用于整型數,它的作用是取兩個整型數相除的余數,如5%3的結果為2。以上?、/、%、+、一都是二元運算符,即在它們參與運算時,左右各需要一個運算量。而“+”、"一”既是二元運算符,又是一元運算符,作一元運算時后面跟ー個運算量,“-”的結果是取運算量的負值,''+”的結果是運算量本身。.算術表達式C的算術表達式由算術運算符、運算對象(常量、變量、函數等)和圓括號組成,最簡單的表達式是ー個常量或一個變量。作為一般情況,ー個表達式可以有多個運算符,如:-a/(b+5)T0%7*'c'這時運算就有先后,這種先后次序稱為運算符的優(yōu)先級,例如,?、/、%運算符的優(yōu)先級高于+、ー運算符優(yōu)先級(作為一元運算符,正負號運算符的優(yōu)先級高于*、Z)<■C語言還規(guī)定了運算符的結合性,所謂結合性是指當ー個運算對象兩側運算符的優(yōu)先級相同時,進行運算的結合方向,C語言中二元算術運算符的結合方向為自左至右,即運算對象先于左邊運算符結合。下圖給出了C語言中基本算術運算符的優(yōu)先級和結合性。高 〇- (求負從右向左結合). ?/% (從左向右結合)低+- (加減從左向右結合)圖:運算符的優(yōu)先級和結合性了解了算術運算符的優(yōu)先級和結合性,我們可以看看上述表達式的求值過程。①求(b+5)的值:②求-a的值;③求②/①的值;④求10%7的值;⑤求④*‘c'的值;⑥求③-⑤的值。23.4.3自加、自減運算自加運算符++和自減運算符ー是C語言特有的兩個運算符。這兩個運算符都只有一個運算對象,而且必須是整型或字符型變量,它們的作用是將變量加1或減1后,將運算結果再賦給該變量,見下表的說明。表自加、自減運算符運算符名稱運算功能++加1a++、++a一等:イ介J'a=a+l—減「aー、—a等價于a=a-l下面詳細介紹++運算符(ー運算符與其類似)。++運算符可作用在ー個變量的前面,如++a,也可以用在變量的后面,如a++o盡管++a、與a++都是使a的值增1,但它們的功能是有區(qū)別的;++a是在使用a的值之前就是a加1,而a++則是在其值被用過之后再加1。假定a的值為9,那么語句x=a++;置x的值為9?而x=++a;置x的值為10,但以上兩種情況a的值在運算后都為10。顯然對a來說,上述兩語句的運算結果是一致的,而對x來說就不同了。需要強調的是,自加、自減運算符只能作用于變量,不能作用與常量或表達式,如++5、(i+j)一都是錯誤的。合理地使用自加、自減運算符,對于編寫高質量的C程序是很有用的,它們常用于數組下標的變化、循環(huán)語句中循環(huán)變量自加(減)1以及指針設置等。23.4.4復合賦值運算C語言的賦值運算符,除了基本的賦值符“=”外,為了簡化程序和提高編譯效率,可以在復制副“=”之前加上其他運算符,以構成復合賦值運算符,見下表的說明。表:復合算術賦值運算符運算符名稱運算功能+=加賦值a+=b等價a=a+b-=減賦值a-=b等價a=a-b*—乘賦值a*=b等價a=a*b/=除賦值a/=b等價a=a/b%=取余賦值a%=b等價a=a%b參加復合賦值運算的兩個運算量,先進行相應的運算,然后將其運算結果賦給第一個運算量。復合賦值運算的一般形式如下:變量0P=表達式其中,0卩=為復合賦值運算符.大多數的二元運算符都可以與賦值運算符一起組成復合的賦值運算符,如:+=,-=,*=,/=,%=下面是復合賦值運算的例子:a+=3等價于a=a+3x*=y+3等價于x=x*(y+3)m%=3等價與m=m%323.5變量賦初值程序中常常需要對ー些變量設置初值,C語言允許在對變量進行說明的同時為其賦初值,例如:inta=10;它表示說明整形變量a,同時將初值10賦給它。同樣,下面的賦初值方式也是合法的:charc='a'; /?說明c為字符變量,初值為‘a'*/foatf=3.56; /?說明f為實型變量,初值為3.56*/floatx=2*3.14 /?初值可以是常量,也可以是常量表達式?/下面的語句為a,b,c三個整型變量都賦初值:inta=3,b=4,c=5也可以對其中一部分賦初值,如:floatx,y,z=2.5;表示x、y、z都是實型變量,但只對變量z賦以初值2.5。23.6類型轉換如果ー個運算符兩邊的運算量的類型不同,先要將它們轉換成相同的類型,然后才能進行運算。前面已經談到,字符型數據是以系統(tǒng)中所使用的字符集代碼形式存儲的,它的存儲形式與整型數據相似,因此C語言允許字符型數據和整型數據之間可以混合運算。除此之外,不同類型的數據在進行賦值和混合運算時都需要進行類型轉換。這種類型轉換有兩種方式:ー種是自動類型轉換,另ー種是強制類型轉換。自動類型轉換.賦值中的類型轉換當賦值運算符兩邊的運算量類型不同時,要進行自動類型轉換,轉換的規(guī)則是:把賦值運算符右邊表達式的類型轉換為左邊變量的類型。當將實型數據(包括單、雙精度)賦給整型變量時,舍棄實型數的小數部分。如:i為整型變量,執(zhí)行i=4.52的結果是i的值為4。當將整型數據賦給實型變量時,數值不變,但以實型數形式存放到實型變量中。.混合運算中的類型轉換由于C語言允許整型、實型和字符型變量進行混合運算,所以下面的表達式是合法的:10+'a'+5.6*3運算時,C語言編譯系統(tǒng)自動將運算符兩邊的運算量轉換成同一類型。轉換的規(guī)則是:1)float類型必須轉換成double類型,char,short類型必須轉換為int類型。2)參加運算的各種變量都轉換為它們中數據長度長的數據類型。各種數據類型的數據長度為char<int<long<float<double,從左到右數據長度增加,所以左邊數據類型向右邊轉換。例如,char、int、float和double變量進行運算時,都將轉換成double類型。2.362強制類型轉換上面的類型轉換是由編譯系統(tǒng)自動進行的。C語言還提供了強制類型轉換的機制.強制類型轉換的一般形式如下:(類型名)表達式其作用是把表達式的值轉換為類型名指定的類型.例如:(float)a/b是將a強制轉換成float型后,再進行運算;(char)(12.3+55)把67.3轉換成char型,該表達式的值為‘c'.需要注意的是,無論是自動還是強制實現的類型轉換,僅僅是對變量或表達式的類型進行臨時性的轉換,并未改變原來變量或表達式的類型。第三章數據的輸入輸出數據的輸入輸出是ー個計算機程序應具備的基本功能。沒有輸出的程序是沒有意義的,沒有輸入的程序是缺乏靈活性和通用性的。C語言本身沒有提供輸入輸出語句,而是在標準函數庫中定義了一些有用的輸入輸出函數,程序的輸入輸出功能是通過調用這些庫函數來實現的。標準輸入輸出函數中有一些公用的信息寫在頭文件stdio.h中,因此要使用函數庫中的輸入輸出函數,一般應在程序開頭寫出如下命令:#include<stdio.h>以便把stdio.h文件包括到用戶的程序文件中來。本章將介紹幾個最基本最常用的輸入輸出函數。字符輸入輸出函數字符輸入輸出函數是以字符為單位完成輸入輸出過程的。字符輸入函數getchargetchar函數的功能是從標準輸入設備(通常是鍵盤)上輸入一個字符。當程序執(zhí)行到getchar函數時將等待用戶從鍵盤上輸入ー個字符,并將這個字符作為函數結果值返回。getchar函數沒有參數。對字符輸入函數的使用,通常采用賦值的辦法。例如:charc;c=getchar();變量c就得到了輸入的字符。例:getchar函數的功能演示。/*example3-1*/#include<stdio.h>main()(charc;c=getchar();printf(<<%c\nM,c);)程序運行時,如從鍵盤輸入字符‘ポ:a/(輸入'a’后,按回車鍵)a (輸出變量c的值'a')字符輸出函數putcharputchar函數的功能是向標準輸出設備(通常是顯示屏)輸出ー個字符。它的調用形式如下:putchar(c);程序執(zhí)行該語句時,將變量c中的字符輸出到顯示屏當前光標的位置上。例:從鍵盤上輸入ー個字符,并在顯示屏上輸出。/*example3.2*/#include<stdio.h>main()(charc;c=getchar();putchar(c);}putchar函數可以用來輸出字符變量的值,也可用來直接輸出ー個字符常量,如:putchar('a');將在顯示屏上輸出字符a。還可以輸出ー些特殊字符(控制字符),如:Putchar(t\n,);它的作用是輸出ー個“換行”字符。如下例所示。例:輸出特殊字符。/*example3-3*/#include<stdio.h>main(){chara,b;a='m';b='n';putchar(a);putchar(4\n,);putchar(b);}運行結果:最后請注意,在使用getchar和putchar之前不要忘記在程序的前面寫上:#include<stdio.h>格式輸入輸出函數字符輸入輸出只能一次輸入或輸出ー個字符,不能輸入輸出其他類型的數據。格式輸入輸出函數是具有格式控制的函數,它們可以用來輸入輸出C語言的標準類型的數據,而且可以同時輸入或輸出多個同類型或不同類型的數據。格式輸出函數printfprintf函數在前面例子中已經多次使用,這里詳細介紹它的使用方法。函數printf的作用是將輸出項按指定的格式輸出到標準輸出設備上(通常是顯示屏)。調用printf函數的ー般形式如下:printf(格式控制字符串,輸出表);.格式控制字符串格式控制字符串通常是由一對雙引號括起來的字符串常量。它包括兩方面的內容:格式說明它由字符“%”和格式字符組成,如%d、%f、%c等,它們規(guī)定了輸出項的輸出格式。常用的格式說明中的格式字符及含義歸納于下表3-1。表3-1printf格式字符格式字符說明d以帶符號的十進制形式輸出整數(正數不輸出符號)〇以ハ進制無符號形式輸出整數(不輸出前導符〇)X以十六進制無符號形式輸出整數(不輸出前導符Ox)U以無符號十進制形式輸出整數C以字符形式輸出,只輸出ー個字符S輸出字符串f以小數形式輸出單ー、雙精度數,隱含輸出6位小數e以標準指數形式輸出單、雙精度數,數字部分小數位數為6位g選用%f或%e格式中輸出寬帶較短的一種格式,不輸出無意義的0普通字符格式控制字符串中的普通字符是需要照原樣輸出的字符,可起提示作用。出表輸出表是需要輸出的ー些數據項,可以是常量、變量或表達式,這些數據項應當與格式控制字符串中的格式說明ーー對應,如果輸出表中有多個數據項,則它們之間應用逗號隔開。圖3-1是printf函數的參數說明。照原樣輸出換行符圖printf函數的參數說明如果圖中i的值為10,f的值為2.5,則圖中語句輸出結果為1=10,F=2.500000在使用printf函數時應注意:(1) 格式控制字符串中每ー個格式說明,都必須與輸出表中某ー數據項相對應,即它們的個數應相等,類型應一致。如卜.述語句中的%d與i對應,%f與f對應。(2)格式控制字符串中除了格式說明之外的字符都為普通字符,均應照原樣輸出。如上述語句中的“1="、“F=”。(3) 在格式控制字符串內可以包含轉義字符,如“'n"、“\t”、“\b”等。3.常用格式字符的用法d格式符以十進制形式輸出整數。%d,按整型數據的實際長度輸出。%md,m為一整數,按m指定的字段寬度輸出,若數據的實際長度小于m,輸岀時向右對齊,左端補以空格;如大于m,則按實際長度輸出。例如:printf(,,%d,%4d,%4d,,,a,b,c);若a=12,b=123,c=12345,則輸出結果:12,123,12345%ld,輸出長整型數據,如:longa=123456;printfC4%ldM,a);因為a的取值范圍超出了整型數據的取值范圍,若用%d輸出就會發(fā)生錯誤。對長整型數也可指定字段寬度,如將上面printf函數中的“%Id”改為“%81d”,則輸出結果為UU123456在大多數系統(tǒng)中,int型數據用%d或%Id格式輸出皆可。c格式符用來輸出ー個字符。%mc,m為指定輸出字段的寬度,若m>l,則輸出時向右對齊,左邊補以空格。ー個整數只要它的值在〇?255范圍內,也可用字符形式輸出:反之,ー個字符數據也能用整型格式輸出。例34c格式的輸出。/*example3-4*/#include<stdio.h>main(){charc='a';intn=98;printf(''%c%4d%4c%4d,,,c,c,n,n);}運行結果:a97b98s格式符用來輸出ー個字符串。%s,按字符串的原樣輸出。%ms,輸出指定寬度為m的字符串,若實際串長大于m,則按實際串長輸出;若實際串長小于m,輸出時字符串向右對齊,左端補以空格。%-ms,m的意義同上,如字符串長度小于m,則字符串向左對齊,右端補以空格。%m.ns,輸出指定寬度為m,從s左端取出n個字符輸出。若n<m,則左邊補足空格;若n>m,按n個字符輸出。%-m.ns類似,所不同的是當n<m時右端補足空格。例3-5s格式的輸出。/*example3-5*/#include<stdio.h>main()(char*a;aゴChina”;printf(44%s\nM,a);printf(u%3s\nM,a);printf(44%7s\n,,,a);printf(44%-7s\n,\a);printf(44%7.2s\n,,,a);}運行結果:ChinaChinaL-lUChinaChinaロUChf格式符用來輸出實型數,以小數形式輸出。%f,按系統(tǒng)規(guī)定的格式輸出實型數,使整數部分全部輸出,小數部分取6位。應當注意,并非全部數字都是有效數字,單精度實型數有效位為7位,雙精度實型數有效位為16位。%m.nf(或%指定寬度為m(包含小數點),保留n位小數,若實際長度小于

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論