![C語言概述簡易教程_第1頁](http://file4.renrendoc.com/view/84a864a8a9ec6e535dbbcdc4d083baa2/84a864a8a9ec6e535dbbcdc4d083baa21.gif)
![C語言概述簡易教程_第2頁](http://file4.renrendoc.com/view/84a864a8a9ec6e535dbbcdc4d083baa2/84a864a8a9ec6e535dbbcdc4d083baa22.gif)
![C語言概述簡易教程_第3頁](http://file4.renrendoc.com/view/84a864a8a9ec6e535dbbcdc4d083baa2/84a864a8a9ec6e535dbbcdc4d083baa23.gif)
![C語言概述簡易教程_第4頁](http://file4.renrendoc.com/view/84a864a8a9ec6e535dbbcdc4d083baa2/84a864a8a9ec6e535dbbcdc4d083baa24.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言概述簡易教程第一節(jié):c語言的產(chǎn)生及特點(diǎn):C語言的產(chǎn)生C語言是國際上廣泛流行的、很有發(fā)展前途的計(jì)算機(jī)高級(jí)語言。它適合于作為系統(tǒng)描述語言,既用來寫系統(tǒng)軟件,也可用來寫應(yīng)用軟件。c語言是第三代語言(面向過程的高級(jí)語言,第一代:機(jī)器語言;第二代:匯編語言)以前的操作系統(tǒng)等系統(tǒng)軟件主要是由匯編語言編寫的(包括UNIX操作系統(tǒng)在內(nèi))。由于匯編語言依賴于計(jì)算機(jī)硬件,程序的可讀性和可移植性都比較差。為了提高可讀性和可移植性,最好改用高級(jí)語言,但一般高級(jí)語言難以實(shí)現(xiàn)匯編語言的某些功能(匯編語言可以直接對(duì)硬件進(jìn)行操作,例如,對(duì)內(nèi)存地址的操作、位操作等)。人們?cè)O(shè)想能否找到ー種既具有一般髙級(jí)語言特性,又具有低級(jí)語言特性的語言,集它們的優(yōu)點(diǎn)于一身。于是,C語言就在這種情況下應(yīng)運(yùn)而生了。c語言是在B語言的基礎(chǔ)上發(fā)展起來的,它的根源可以追溯到ALGOL6001960年出現(xiàn)的ALG0L60是一種面向問題的高級(jí)語言,它離硬件比較遠(yuǎn),不宜用來編寫系統(tǒng)程序。1963年英國的劍橋大學(xué)推出了CPL(CombinedProgrammingLanguage)語言,CPL語言在ALG0L60的基礎(chǔ)上接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)。1967年英國劍橋大學(xué)的MatinRichards對(duì)CPL語言作了簡化,推出了BCPL(BasicCombinedProgrammingLanguage)語百。1970年美國貝爾實(shí)驗(yàn)室的KenThompson以BCPし語言為基礎(chǔ),又作了進(jìn)ー步簡化,設(shè)計(jì)出了很簡單的而且很接近硬件的B語言(取BCPL的第一個(gè)字母),并用B語言寫了第一個(gè)UNIX操作系統(tǒng),在PDP-7上實(shí)現(xiàn).1971年在PDP-11/20上實(shí)現(xiàn)了B語言,并寫了Unix操作系統(tǒng)。但B語言過于簡單,功能有限。1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語言的基礎(chǔ)上設(shè)計(jì)出了C語言(取BCPL的第二個(gè)字母)。C語言既保持了BCPL和B語言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過于簡單,數(shù)據(jù)無類型等)。最初的C語言只是為描述和實(shí)現(xiàn)Unix操作系統(tǒng)提供ー種工作語言而設(shè)計(jì)的,1973年,K.Thompson和D.M.Ritchie兩大合作把UNIX的90%以上用C改寫(即UNIX第5版,原來的Unix操作系統(tǒng)是1969年由美國的貝爾實(shí)驗(yàn)室的K.Thompson和D.M.Ritchie開發(fā)成功的,是用匯編語言寫的)。?后來,C語言多次作了改進(jìn),但主要還是在貝爾實(shí)驗(yàn)室內(nèi)部使用。直到1975年UNIX第6版公布后,C語言的突出優(yōu)點(diǎn)オ引起人們普遍注意。1977年出現(xiàn)了不依賴于具體機(jī)器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其它機(jī)器時(shí)所需做的丄作大大簡化了,這也推動(dòng)了UNIX操作系統(tǒng)迅速地在各種機(jī)器上實(shí)現(xiàn)。例如,VAX等計(jì)算機(jī)系統(tǒng)都相繼開發(fā)了UNIXo隨著UNIX的日益廣泛使用,C語言也迅速得到推廣,C語言和UNIX可以說是ー對(duì)李生兄弟,在發(fā)展過程中相輔相成。1978年以后,C語言已先后移植到大、中、小、微型機(jī)上,已獨(dú)立于UNIX和PDP了?,F(xiàn)在C語言已風(fēng)靡全世界,成為世界上應(yīng)用最廣泛的幾種計(jì)算機(jī)語言之一。?以1978年發(fā)表的UNIX第7版中的C編譯程序?yàn)榛A(chǔ),BrianW.kernighan和DennisM.Ritchie(合稱K&R)合著了影響深遠(yuǎn)的名著《TheCprogramminglanguage》,這本書中介紹的C語言成為后來廣泛使用的C語言版本的基礎(chǔ),它被稱為標(biāo)準(zhǔn)C。1983年,美國國家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù)C語言問世以來各種版本對(duì)C的發(fā)展和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSIC。ANSIC比原來的標(biāo)準(zhǔn)C有了很大的發(fā)展。K&R在1988年修改了他們的經(jīng)典著作《TheCProgrammingLanguage》,按照ANSIC標(biāo)準(zhǔn)重新寫了該書。1987年,ANSI又公布了新標(biāo)準(zhǔn)」87ANSIC,目前流行的C編譯系統(tǒng)都是以它為基礎(chǔ)的。本書的敘述基本上以87ANSIC為基礎(chǔ)。目前廣泛流行的各種版本C語言編譯系統(tǒng)雖然基本部分是相同的,但也有一些不同。在微型機(jī)上使用的有MicrosoftC,TurboC,QuickC等,它們的不同版本又略有差異,因此讀者應(yīng)了解所用的計(jì)算機(jī)系統(tǒng)的C編譯的特點(diǎn)和規(guī)定(可以參閱有關(guān)手冊(cè)).?Java,C++等面向?qū)ο笳Z言(第四代語言)是在C語言的發(fā)展。1.2:C語言的特點(diǎn)ー種語言之所以能存在和發(fā)展,并具有生命力,總是有其不同于(或優(yōu)于)其它語言的特點(diǎn)。c語言的主要特點(diǎn)如下。.語言簡潔、結(jié)構(gòu)緊湊,使用方便、實(shí)用靈活。C語言ー共只有32個(gè)具有特定意義的關(guān)鍵字,9種控制語句,寬松的語法檢查,程序書寫形式自由,主要用小寫字母表示,壓縮了一切不必要的成分,比較符合人們的書寫習(xí)慣。.C語言是ー種模塊化程序設(shè)計(jì)語言。用c語言編寫的程序由函數(shù)組成,每個(gè)函數(shù)完成一個(gè)特定的任務(wù),由函數(shù)作為模塊來實(shí)現(xiàn)程序的模塊化。由函數(shù)組成層次結(jié)構(gòu),程序由主函數(shù)開始,函數(shù)間可實(shí)現(xiàn)相互調(diào)用。?運(yùn)算符豐富,數(shù)據(jù)處理能力強(qiáng)C的運(yùn)算符包含的范圍很廣泛,共有34種運(yùn)算符。C把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理。從而使C的運(yùn)算類型極其豐富,表達(dá)式類型多樣化,靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其它高級(jí)語言中難以實(shí)現(xiàn)的運(yùn)算。4?數(shù)據(jù)類型豐富,具有現(xiàn)代化語言的各種數(shù)據(jù)結(jié)構(gòu)c的數(shù)據(jù)類型有:整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運(yùn)算。c語言要求程序中使用的任何數(shù)據(jù)都必須指定為特定的類型,因此,它能滿足現(xiàn)代程序設(shè)計(jì)的要求。5?具有結(jié)構(gòu)化的控制語句C語言是是結(jié)構(gòu)化的理想語言,符合現(xiàn)代編程風(fēng)格要求。它有9種控制語句,對(duì)程序的邏輯結(jié)構(gòu)提供了很好的基礎(chǔ)。其程序結(jié)構(gòu)清晰,層次分明,有利于采用自頂而下、逐步求精的程序設(shè)計(jì)方法。6。語法限制不大嚴(yán)格,程序設(shè)計(jì)自由度大.例如,對(duì)數(shù)組下標(biāo)越界不作檢查,由程序編寫者自己保證程序的正確。對(duì)變量的類型使用比較靈活,例如,整型量與字符型數(shù)據(jù)以及邏輯型數(shù)據(jù)可以通用,一般的高級(jí)語言語法檢查比較嚴(yán),能檢查出幾乎所有的語法錯(cuò)誤。而c語言允許程序編寫者有較大的自由度,因此放寬了語法檢查。程序員應(yīng)當(dāng)仔細(xì)檢查程序,保證其正確,而不要過分依賴C編譯程序去查錯(cuò)?!跋拗啤迸c“靈活”是ー對(duì)矛盾。限制嚴(yán)格,就失去靈活性;而強(qiáng)調(diào)靈活,就必然放松限制。ー個(gè)不熟練的人員,編ー個(gè)正確的C程序可能會(huì)比編ー個(gè)其它高級(jí)語言程序難ー些。也就是說,對(duì)用C語言的人,要求對(duì)程序設(shè)計(jì)更熟練一些。.C語言允許直接訪問物理地址能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語言的大部分功能,可以宜接對(duì)硬件進(jìn)行操作,因此C既具有高級(jí)語言的功能,又具有低級(jí)語言的許多功能,可用來寫系統(tǒng)軟件。c語言的這種雙重性,使它既是成功的系統(tǒng)描述語言,又是通用的程序設(shè)計(jì)語言。有人把c稱為“高級(jí)語言中的低級(jí)語言'’,也有人稱它為“中級(jí)語言”意為兼有高級(jí)和低級(jí)語言的特點(diǎn)。.生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。一般只比匯編程序生成的目標(biāo)代碼效率低10?20%。.用小寫字母書寫程序。C語言除宏定義所定義的宏名字采用大寫字母外,其它一般用小寫字符書寫。C語言把大、小寫字母視為不同的字符。.用C語言寫的程序可移植性好(與匯編語言比)。可移植性即指在ー種環(huán)境下可以運(yùn)行的程序在另一種不同的環(huán)境下也可以運(yùn)行。用匯編語言(低級(jí)語言)編寫的程序,完全依賴于計(jì)算機(jī)硬件,而c語言程序基本上不作修改就能用于各種型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng)上。上面我們只介紹了C語言的最容易理解的?般特點(diǎn),至于C語言內(nèi)部的其它特點(diǎn)將結(jié)合以后各章的內(nèi)容作介紹。由于C語言的這些優(yōu)點(diǎn),使C語言應(yīng)用面很廣。許多大的軟件都用C編寫,這主要是由于C的可移植性好和硬件控制能力高,表達(dá)和運(yùn)算能力強(qiáng)。許多以前只能用匯編語言處理的問題現(xiàn)在可以改用C語言來處理了。C的以上特點(diǎn),讀者現(xiàn)在也許還不能深刻理解,待學(xué)完c以后再回顧ー下,就會(huì)有比較深的體會(huì)。我們從應(yīng)用的角度出發(fā)對(duì)C語言和其它高級(jí)語言作一簡單比較:從掌握語言的難易程度來看,C語言比其它語言難ー些,Basic是初學(xué)者人門的較好的語言,Fortran也比較好掌握。対科學(xué)計(jì)算多用Fortran或PL/1;對(duì)商業(yè)和管理等數(shù)據(jù)處理領(lǐng)域,用Cobol為宜,C雖然也可用于科學(xué)計(jì)算和管理領(lǐng)域,但并不理想,C的特長不在這里。對(duì)操作系統(tǒng)和系統(tǒng)實(shí)用程序以及需要對(duì)硬件進(jìn)行操作的場臺(tái),用C語言明顯地優(yōu)越于其它高級(jí)語言,有的大型應(yīng)用軟件也用C編寫。從教學(xué)角度,由于Pascal是世界上第一個(gè)結(jié)構(gòu)化語言而曾被認(rèn)為是計(jì)算機(jī)專業(yè)的比較理想的教學(xué)語言,目前在“數(shù)據(jù)結(jié)構(gòu)”等課程中一般用Pascal語言舉例,但Pascal語言難以推廣到各實(shí)際應(yīng)用領(lǐng)域,到目前為止基本上只是教學(xué)語言,C語言也是理想的結(jié)構(gòu)化語言,且描述能力強(qiáng),同樣適于教學(xué),而且“操作系統(tǒng)”課程多結(jié)合Unix講解,而Unix與c不可分,因此,C語言有可能取代Pascal而成為被廣泛使用的教學(xué)語言,而且C除了能用于教學(xué)外,還有廣泛的應(yīng)用領(lǐng)域,因此更有生命力。Pasca!和其它高級(jí)語言的設(shè)什目標(biāo)是通過嚴(yán)格的語法定義和檢查來保證程序的正確性,而C則是強(qiáng)調(diào)靈活性,使程序設(shè)計(jì)人員能有較大的自由度,以適應(yīng)寬廣的應(yīng)用面??傊?C語言對(duì)程序員要求較高。程序員使用C語言編寫程序會(huì)感到限制少、靈活性大,功能強(qiáng),可以編寫出任何類型的程序。現(xiàn)在,C語言已不僅用來編寫系統(tǒng)軟件,也用來編寫應(yīng)用軟件。學(xué)習(xí)和使用C的人已越來越多。第二節(jié):簡單的C程序介紹學(xué)習(xí)ー種程序設(shè)計(jì)語言唯一的有效途徑就是用它編寫程序。下面幾個(gè)簡單的程序?qū)氵M(jìn)入c的世界,開始我們的學(xué)習(xí)。幾個(gè)簡單的例子第一個(gè)程序總是輸出ー個(gè)字符串,這里,選擇著名的“Hello,world”程序,以表示對(duì)K&R的敬意。例1-1:main()(Printf("hello,world'n");)這個(gè)程序的運(yùn)行結(jié)果是輸出字符串hello,world上面的程序稱C語言源程序,簡稱C程序。為了讓它運(yùn)行,必須先找ー個(gè)編輯程序輸入它,然后編譯,裝入,最后執(zhí)行。本書所介紹的Turtle是ー個(gè)集程序編輯、編譯、鏈接、運(yùn)行、調(diào)試為一體的C語言程序開發(fā)軟件??蓪?duì)程序進(jìn)行全屏幕編輯??衫么翱诠δ苓M(jìn)行編譯、鏈接、調(diào)試、運(yùn)行、環(huán)境設(shè)置等工作?,F(xiàn)在讓我們來看看程序本身.main是ー個(gè)函數(shù)名,表示“主函數(shù)”。ー個(gè)C程序,不管簡單或復(fù)雜,總是由?個(gè)或多個(gè)函數(shù)組成,由這些函數(shù)實(shí)現(xiàn)要做的操作。函數(shù)名可以按照你的喜好去取,但main是ー個(gè)特殊的名字。C程序總是從main函數(shù)開始執(zhí)行,這意味著,ー個(gè)程序必須在某個(gè)地方有一個(gè)main函數(shù)?;ɡㄌ?hào){}括起構(gòu)造函數(shù)的語句,稱函數(shù)體。函數(shù)體中只有一條函數(shù)調(diào)用語句Printf("hello,world\n")其功能是將雙引號(hào)‘“’中的內(nèi)容輸出。Printf是C語言中的庫函數(shù)(其中f是format的縮寫,
即格式化的意思),它來自計(jì)算機(jī)廠家提供的輸入輸出庫,你可以直接去調(diào)用它。雙引號(hào)中的內(nèi)容是調(diào)用Printf時(shí)提供的參數(shù),表示為ー個(gè)字符串。字符串中的ヽn是C語言中的換行字符,在輸出時(shí),它將終端的光標(biāo)移動(dòng)到下一行的開始。如果不使用\n,輸出時(shí)就會(huì)發(fā)現(xiàn),光標(biāo)停在輸出字符串的后面。Printf不提供自動(dòng)換行的功能,每當(dāng)在程序中需要執(zhí)行換行操作時(shí),都必須寫出\n。例如,我們把例1-1改寫一下main()(primf("hello,");printfC4worldM);)執(zhí)行結(jié)果也是ー?樣的。如果要將程序改成main()(printf(t4hello,\nM);printf("woiid\n");}你會(huì)發(fā)現(xiàn)輸出變?yōu)?hello,world在這里我們可以看到,C語言傾向于把怎樣處理的權(quán)利交給程序員。printf語句的最后跟著一個(gè)分號(hào)‘';",它表明一個(gè)語句的結(jié)束。例1.2源程序如下:/?求兩個(gè)整數(shù)之和?//?主函數(shù)/?主函數(shù)?//?主函數(shù)體的開始,用花括號(hào){表示*//?定義a1b,s為整形變量?//?賦值語句?//?輸出s的值?//?主函數(shù)體的結(jié)束,用花括號(hào)}表示*/(Inta,b,sum;a=12;b=34;sum=a+b;Printf("sumis%d\n”,sum);)說明:本程序的功能是求兩整數(shù)之和。(1)程序中的"/* */”表示注釋符號(hào),在注釋符號(hào)中間是注釋內(nèi)容,該內(nèi)容可以由任意字符構(gòu)成,系統(tǒng)不執(zhí)行注釋內(nèi)容。注釋的作用是給程序員閱讀程度帶來方便,程序中加上注釋是程序員必須養(yǎng)成的良好習(xí)慣。注釋可以加在程序中的任何位置。注釋可以是任意ー串字符,但不能再含有/**/,也就是說注釋是不能嵌套的(也沒有必要)。這里的注釋是用漢字給出的,你的計(jì)算機(jī)可能每裝漢字,可用英文或漢語拼音來寫注釋。本書中采用漢字注釋完全是為了閱讀的方便。(2)程序的第2行main。表示主函數(shù),每ー個(gè)C語言程序都必須有一個(gè)main。函數(shù)。函數(shù)體由一對(duì)花括號(hào){}括起來。(3)程序的第4行是變量定義部分,這里我們用int定義a、b和sum為整形。C語言規(guī)定使
用任何變量之前都要先定義。ー個(gè)語句結(jié)束,用匕”來結(jié)尾。(4)程序的第5、6、7行是三個(gè)賦值語句,“i’是賦值運(yùn)算符,它的作用是把其右邊表達(dá)式的值賦給左邊的變量,這里是把值!2賦給變量a,把值34賦給變量b,把a(bǔ)+b的結(jié)果賦給變量sum..(5)程序的第8行是輸出語句,其中的‘'sumis”和“\n”我們已經(jīng)熟悉,''%d”是ー個(gè)輸出轉(zhuǎn)換說明,意思是:輸出時(shí)用?個(gè)整形值來代替它,表示輸出的數(shù)據(jù)類型為十進(jìn)制整形類型,這里這個(gè)整形值是變量sum的值,于是本程序的輸出結(jié)果為:例1.3:計(jì)算例1.3:計(jì)算n!。程序如下:Main{}/?主函數(shù)?//?主函數(shù)體的開始,用花括號(hào){表示*//*定義變量類型語句?//*數(shù)據(jù)輸入語句*/Scanf("/*數(shù)據(jù)輸入語句*/While(i<=n)/?主函數(shù)體的結(jié)束,用花括號(hào)}表示*/說明:程序的第5行中的scanf是c輸入輸出庫中提供的輸入函數(shù)它要求按照轉(zhuǎn)換字符(這里是%d,表示輸入的數(shù)據(jù)類型為十進(jìn)制整形類型。)將相應(yīng)類型的數(shù)據(jù)輸入到指定變量的存儲(chǔ)單元中去,其中表示取地址,是“地址運(yùn)算符”,如&x表示x在內(nèi)存中的地址。整個(gè)語句的作用是,接受用戶從鍵盤上輸入的整形數(shù)n的數(shù)值,輸入到n所標(biāo)志的存儲(chǔ)單元中。實(shí)驗(yàn)1TurboC運(yùn)行環(huán)境與C程序運(yùn)行初步ー、實(shí)驗(yàn)?zāi)康?掌握啟動(dòng)TurboC的方法,熟悉TurboC的窗ロ,學(xué)會(huì)使用基本的菜單命令和操作鍵。.掌握編輯、編譯、連接和運(yùn)行一個(gè)C程序的基本方法,初步了解C語言的基本特點(diǎn)和程序結(jié)構(gòu)。二、實(shí)驗(yàn)內(nèi)容說明:①假設(shè)TurboC已經(jīng)安裝在C盤TC子目錄中。②在進(jìn)行本實(shí)驗(yàn)的操作之前應(yīng)該結(jié)合學(xué)習(xí)本書附錄A的內(nèi)容,熟悉TurboC的環(huán)境,了解各項(xiàng)菜單操作命令的基本功能。.掌握啟動(dòng)TurboC的一般方法。(1)雙擊桌面TurboC快捷方式圖標(biāo)(如果存在)。(2)打開資源管理器窗ロ,找到TC子文件夾,雙擊其中的TC.EXE文件。(3)在MS-DOS方式下,輸入如下DOS命令:C:\W1NDOWS>CD\TC/ (進(jìn)入TC子目錄)C:\TC>TCZ (運(yùn)行Turbo〇說明:帶下劃線的字符是用戶輸入的命令字符,/表示按回車鍵。TurboC啟動(dòng)后出現(xiàn)如圖實(shí)驗(yàn)1.1所示的運(yùn)行窗口。TurboC操作界面.熟悉TurboC的基本操作。TurboC主菜單的命令包括:File、Edit,Run、Compile,Project,Options,Debug,Break/watch,分別表示文件、編輯、運(yùn)行、編譯,工程,選項(xiàng),調(diào)試,斷點(diǎn)/監(jiān)視功能。除了Editタト,其他命令項(xiàng)都有下拉子菜單,包含若干操作子命令項(xiàng)。(2)按F10鍵激活主菜單,用ー,—?光標(biāo)鍵選擇各主菜單項(xiàng)(或按住Alt鍵,再按菜單項(xiàng)的開頭字母選擇菜單項(xiàng),例如按住Alt鍵再按F鍵打開File文件子菜單:按住Alt鍵再按E鍵進(jìn)入編輯狀態(tài)),觀察各子菜單,了解主要菜單命令的功能,如New,Load,Save,Writeto,Run,UserScreen,CompiletoOBJ等。 4i(3)選擇某個(gè)主菜單項(xiàng)并按回車鍵后,顯示對(duì)應(yīng)的下拉子菜単。使用!,1光標(biāo)鍵選中子菜單命令,按回車鍵之后,有些菜單命令可直接執(zhí)行,有些命令還需要輸入信息,或還包含下級(jí)子菜單,需要進(jìn)ー步選擇。(4)按Esc鍵關(guān)閉主菜單或下拉子菜單。.輸入并運(yùn)行ー個(gè)簡單C程序。(1)建立并輸入源程序。打開File菜單(按Alt+F組合鍵),選擇Load命令并按回車鍵(或按F3鍵),輸入被編輯的文件名(允許指定文件所在盤和路徑,如e:\sy」或a:\sy_l),按回車鍵后,在編輯窗口輸入教材例1.1程序(注意觀察輸入過程中狀態(tài)行Line和Col后面數(shù)字的變化):Main(){floata,b;/?定義4b為單精度實(shí)型變量?/a=5.2b=a*aprintf("b=%f\n”,b);)解釋:在c語言中實(shí)型變量分為單精度(float)和雙精度(double)兩類。實(shí)型變量的定義舉例如下:floata,b;/?定義&b為單精度實(shí)型變量?/doublex,y;/*定義x,y為雙精度實(shí)型變量?/'%f’的作用是以小數(shù)形式輸出實(shí)數(shù)(輸出6位小數(shù)),ー個(gè)格式說明必須由一個(gè)“%”開頭,后面跟ー個(gè)類型字符?!痋rf是普通字符,作用就是換行。說明:①也可以使用File菜單的New命令新建文件,此時(shí)將建立一個(gè)名為NONAME.C的新文件。②輸入過程中可以隨時(shí)使用編輯鍵對(duì)光標(biāo)所在處的文本進(jìn)行插入、刪除等修改操作。附錄B列出常用的編輯鍵。(2)保存文件(或稱文件存盤)。選擇File菜單的Save命令(或按F2鍵),將文本保存到磁盤中。注意:①如果是保存用New命令建立的NONAME.C文件,保存時(shí)會(huì)出現(xiàn)所示保存對(duì)話框,此時(shí)可輸入新文件名來代替系統(tǒng)默認(rèn)文件名NONAME.C,按回車鍵后進(jìn)行文件的保存。②如果保存NONAME.C文件時(shí)未出現(xiàn)保存對(duì)話框,則應(yīng)該將文件改名保存到A盤或E盤用戶指定文件夾內(nèi)。操作方法是:按Alt+F組合鍵打開文件菜單,選擇Writeto命令,然后輸入新文件名e:\sy_l或a:\sy_l,之后按回車鍵。(3)編譯、連接并運(yùn)行程序。選擇Run菜單的Run命令(或按Ctrl+F9組合鍵),編譯、連接并運(yùn)行程序。如果出現(xiàn)錯(cuò)誤,會(huì)彈出編譯、連接信息框,并在Message窗口區(qū)顯示出錯(cuò)信息。此時(shí)需要檢查并修改程序,之后再次按Ctrl+F9組合鍵運(yùn)行程序。附錄C列出編譯常見的出錯(cuò)信息。(4)査看運(yùn)行結(jié)果。選擇Run菜單的Userscreen命令(或按Alt+F5組合鍵),切換到用戶屏幕,觀察程序運(yùn)行結(jié)果,顯示的運(yùn)行結(jié)果為:b=27.039997.輸入并運(yùn)行一個(gè)新的C程序。(1)再次打開File菜單,選擇Load命令(或New命令)并按回車鍵(注意:若原編譯文件尚未存盤,此時(shí)會(huì)出現(xiàn)對(duì)話框提示保存文件)。當(dāng)出現(xiàn)空白的編輯窗口時(shí),輸入以下新的程序:main(){floatr,area;r=2.5area=3.14*r*r;printf(44area=%f\n,,,area);)(2)按前面所述步驟將該程序保存為sy_2.c文件。之后再編譯、連接和運(yùn)行程序,觀察運(yùn)行結(jié)果。這是ー個(gè)求半徑為2.5的圓面積的程序,程序的運(yùn)行結(jié)果為:Area=19.625000(3)將程序中匚2.5改為r=3.28(或其他數(shù)),再次編譯、連接和運(yùn)行程序并觀察運(yùn)行結(jié)果。1.3下面給出幾個(gè)結(jié)構(gòu)完整的C語言程序。例1-1:首先給出ー個(gè)最簡単且完整的c語言程序。/*examplel-l*/#include<stdio.h>main())運(yùn)行結(jié)果:Hello,C!程序中main()表示主函數(shù),是C語言程序必須有的一個(gè)函數(shù)。由花括號(hào){}括起來的部分是函數(shù)體,函數(shù)體用來規(guī)定該函數(shù)所要完成的工作,它由一些語句組成,每個(gè)語句都以分號(hào)‘‘;"結(jié)束。本例中函數(shù)體內(nèi)只有一個(gè)輸出語句,Printf()是輸出函數(shù)調(diào)用,它調(diào)用系統(tǒng)標(biāo)準(zhǔn)輸入輸出函數(shù)庫中的Printf函數(shù)。雙引號(hào)內(nèi)的字符串照原樣輸出,\n是換行符,即在輸出字符串后回車換行。語句最后有一個(gè)分號(hào)“;”。程序開頭出現(xiàn)的“include<stdio.h>"是一條編譯預(yù)處理命令,它的作用是編譯之前將尖括號(hào)0括起來的文件內(nèi)容放到該命令的位置,有關(guān)這方面的知識(shí)后面章節(jié)要詳細(xì)介紹。例1-2:用C語言編寫程序,要求輸入圓半徑值,計(jì)算圓面積并輸出。/"example1-2*/#include<stdio.h>#definePI3.14159main() /?計(jì)算圓的面積*/{intr;floats;printf(“請(qǐng)輸入圓的半徑值:");scanf("%d”,&r); /*輸入圓的半徑值?/s=PI*r*r;printf(“該圓面積=%f\n”,s); /?輸出圓面積值?/}這個(gè)程序比上例稍長ー些,但仍是ー個(gè)很簡單的程序。程序第4、9、11行/*和?/中間的內(nèi)容是注釋,簡要說明了該程序或語句在做什么。為便于理解,我們用漢字表示注釋,當(dāng)然也可用英語或拼音作注釋。在/?和*/之間的字符,對(duì)編譯和運(yùn)行不起作用,只是為了使程序更易理解。第2、3行都是編譯預(yù)處理命令,其中第一條使用同上例,后一條的作用是在編譯前將程序中所有的PI都用3.14159替換,在C語言程序中,凡是前面帶#號(hào)的,都是編譯預(yù)處理命令。該程序的函數(shù)體由若干語句組成,每個(gè)語句都以“;”結(jié)束。函數(shù)體中第1、2句為變量說明,分別說明r為整形變量,s為實(shí)型變量。第3條語句為printf函數(shù)調(diào)用,在屏幕上顯示“請(qǐng)輸入圓的半徑值:”,用來提示用戶準(zhǔn)備輸入數(shù)據(jù)。第4條語句為scanf函數(shù)調(diào)用,它的作用是等待用戶從鍵盤上輸入數(shù)據(jù),&r中的“&”含義為“取地址”,即將數(shù)值輸入到變量r的地址所標(biāo)識(shí)的內(nèi)存單元中,也就是輸入給r。&r前面的“%d”是輸入格式符,用來說明輸入時(shí)數(shù)據(jù)的類型,“%d”表示輸入十進(jìn)制整數(shù)。第5條是賦值語句,用來計(jì)算賦值號(hào)“=”右邊表達(dá)式的值,即圓面積的值,并賦給變量s。最后一句為printf函數(shù)調(diào)用,雙引號(hào)內(nèi)的字符串“該圓面積=%1Xガ’,在輸出時(shí)其中的“%f”表示將變量s按規(guī)定的實(shí)型數(shù)據(jù)格式輸出,“該圓面積=”照原樣輸出。程序的運(yùn)行結(jié)果如下:請(qǐng)輸入圓的半徑值:1<CR>該圓面積=3.141590例1-3編寫一個(gè)程序,輸入兩個(gè)數(shù),求其中較大的數(shù)。/*examplel-3*/#include<stdio.h>Intmax(intx,inty)/?被調(diào)用函數(shù)?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的值返回調(diào)用處?//?主函數(shù)?//*輸入兩個(gè)整數(shù)?//?調(diào)用max函數(shù)?/本程序包含兩個(gè)函數(shù):主函數(shù)main()和被調(diào)用函數(shù)max〇。max函數(shù)的作用是將x,y中較大的數(shù)和值賦給z,并通過return語句將z的值返回到主函數(shù)main中的調(diào)用處。x、y是兩個(gè)形式參數(shù),它們的值由主調(diào)函數(shù)中對(duì)應(yīng)的實(shí)際參數(shù)a,b的值傳過來。Main函數(shù)體中第三行為調(diào)用max函數(shù),調(diào)用時(shí)將實(shí)在參數(shù)a和b的值分別傳給max函數(shù)中對(duì)應(yīng)的形式參數(shù)x和y,在執(zhí)行max函數(shù)后,得到ー個(gè)返回值,即max函數(shù)中變量z的值,把這個(gè)值賦給變量c,然后輸出c的值。程序運(yùn)行結(jié)果如下:6/ (從鍵盤上輸入4、6給a、b)max=6 (輸出c的值)本例中用到了函數(shù)定義、函數(shù)調(diào)用、形參和實(shí)參等概念,在后面有關(guān)章節(jié)中要作詳細(xì)的討論。這里僅僅是使讀者對(duì)C語言程序的組成和形式有一個(gè)初步的了解。通過上面幾個(gè)例子,可以看出:ー個(gè)C語言程序可以由多個(gè)函數(shù)組成,但必須包含且只能包含一個(gè)主函數(shù)main0。函數(shù)是組成C語言程序的基本單位。一個(gè)函數(shù)由函數(shù)頭和函數(shù)體兩部分組成。函數(shù)頭定義了函數(shù)名、函數(shù)類型、函數(shù)形式參數(shù)名及其類型。例如上面例子屮max函數(shù)的函數(shù)頭Intmax(intx,inty)定義了函數(shù)的名字為max,函數(shù)的類型為int,函數(shù)的形式參數(shù)為x和y,它們的類型為int。這里有必要說明一下,早期的C語言版本與ANSIC在函數(shù)定義上有區(qū)別,如上例,舊版本寫法為intmax(x,y)intx,y;參數(shù)在圓括號(hào)內(nèi)命名,參數(shù)類型在函數(shù)體左花括號(hào)前說明。函數(shù)體,即函數(shù)頭下面花括號(hào){}內(nèi)的部分。函數(shù)體定義了該函數(shù)所要實(shí)現(xiàn)的功能。函數(shù)體一般包括:?變量說明。如例1-3中main函數(shù)中的“inta,b,c”.?執(zhí)行部分。由若干語句組成,每個(gè)語句都以“;"結(jié)束。ー個(gè)C程序中函數(shù)出現(xiàn)的次序可以是任意的,但總是從main函數(shù)開始執(zhí)行。4)前面帶有“#”的語句,如#include、#define等都是編譯預(yù)處理命令。5)C語言程序書寫格式比較自由,一行可有多個(gè)語句,ー個(gè)語句也可寫成多行(但不能將一個(gè)單詞分開)。為了提高程序的可讀性,往往以縮進(jìn)寫法來體現(xiàn)語句的層次。第二章:C語言程序設(shè)計(jì)初步知識(shí):預(yù)備知識(shí)——進(jìn)位計(jì)數(shù)制進(jìn)位計(jì)數(shù)制的三要素:數(shù)位、基數(shù)、位權(quán)數(shù)位:數(shù)碼在ー個(gè)數(shù)中所處的位置。(2)基數(shù):ー個(gè)計(jì)數(shù)制所包含的數(shù)字符號(hào)的個(gè)數(shù)稱為該數(shù)制的基數(shù)。用「表示。例如任意ー個(gè)十進(jìn)制數(shù)可用0,1,2,……9.十個(gè)數(shù)字來表示,它的基數(shù)!同理,二進(jìn)制數(shù)可用0,1兩個(gè)數(shù)字來表示,它的基數(shù)匸2,八進(jìn)制數(shù)可用0,1,…7ハ個(gè)數(shù)字來表示,它的基數(shù)48,十六進(jìn)制數(shù)可用。,1,2,-9,A、B、C、D、E、F等16個(gè)不同的數(shù)碼符號(hào)表示,其基數(shù)=16。其中A、B、C、D、E、F分別表示數(shù)碼10,11,12,13,14,15〇(3)位權(quán):數(shù)制中,每個(gè)數(shù)位上的數(shù)碼所代表的數(shù)值的大小等于在這個(gè)數(shù)位上的數(shù)碼乘上一個(gè)固定的數(shù)值,這個(gè)固定的數(shù)值就是這種進(jìn)位數(shù)制中該位上的位權(quán)。例如,二進(jìn)制第2位的位權(quán)為2,第3位的位權(quán)為4。一般情況下,對(duì)于N進(jìn)制數(shù),整數(shù)部分第i位的位權(quán)為Ni“,而小數(shù)部分第j位的位權(quán)為N-Jo例如十進(jìn)制數(shù)5555.555可表示為:5555.555=5X103+5X102+5X1O'+5X100+5X10'+5X!〇々+5X1O'3可以看出,各種進(jìn)位計(jì)數(shù)制中的權(quán)的值恰好是基數(shù)的某次累。因此,對(duì)任何ー種進(jìn)位計(jì)數(shù)制表示的數(shù)都可以寫出按其權(quán)展開的多項(xiàng)式之和,任意ー個(gè)r進(jìn)制數(shù)N可表示為-kN=2DiXr1I=m-1式中Di為該數(shù)列采用的基本數(shù)符,ア是權(quán),r是基數(shù),不同的基數(shù),表示不同的進(jìn)制數(shù)。常用的計(jì)數(shù)制有二進(jìn)位計(jì)數(shù)制、ハ進(jìn)位計(jì)數(shù)制、十進(jìn)制計(jì)數(shù)制和十六進(jìn)位計(jì)數(shù)制。一般我們用〇x表示不同進(jìn)制的數(shù)。例如:十進(jìn)制用〇K)表示,二進(jìn)制用〇2表示。在計(jì)算機(jī)中,一般在數(shù)字的后面,用特定字母表示該數(shù)的進(jìn)制,其中:B——二進(jìn)制 D——十進(jìn)制(D可省略)〇ーハ進(jìn)制 H——十六進(jìn)制。例如:1010B表示二進(jìn)制數(shù)1010;AE05H表示十六進(jìn)制數(shù)AE05下表所示的是計(jì)算機(jī)中常用的幾種進(jìn)位數(shù)制。表:計(jì)算機(jī)中常用的幾種進(jìn)制數(shù)的表示進(jìn)位制二進(jìn)制八進(jìn)制十進(jìn)制十六進(jìn)制規(guī)則逢二進(jìn)ー逢ハ進(jìn)ー逢十進(jìn)ー逢十六進(jìn)ー基數(shù)R=2R=8R=10R=16數(shù)符0,10,1,-70,1,-90,L-9,A、B、C、D>E、F權(quán)2'8'10,16,形式表示B〇DH不同進(jìn)制之間的轉(zhuǎn)換1.r進(jìn)制與十進(jìn)制-kN=2DiXr1I=m-1上式本身就提供了將r進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的方法。例如吧二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制的方法是將二進(jìn)制數(shù)按權(quán)展開求和即可。Egl:把二進(jìn)制數(shù)11010轉(zhuǎn)換成相應(yīng)的十進(jìn)制數(shù)。
(11010)B=1X24+1X23+0X22+1X2'+0X20=(26)DEg2:把二進(jìn)制數(shù)10010.101轉(zhuǎn)換成相應(yīng)的十進(jìn)制數(shù)。(100110.101)b=1X25+1X22+1X21+1X21+1X23=(38.625)d練習(xí):把(10110011.101)2轉(zhuǎn)換成十進(jìn)制數(shù)。(10110011.101)f=lX27+lX2s+lX24+lX21++lX20+lX2',+lX23=(179.625)io同理,非十進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的方法是把各個(gè)非十進(jìn)制數(shù)按權(quán)展開求和即可。如把二進(jìn)制數(shù)(或ハ進(jìn)制數(shù)或十六進(jìn)制數(shù))寫成2(或8或16)的各次事之和的形式,然后再計(jì)算其結(jié)果。Egl:將十六進(jìn)制數(shù)2BA轉(zhuǎn)換成十進(jìn)制數(shù)。2BAH=2X162+11X16'+1OX16°=512+176+10=678D2.十進(jìn)制與r進(jìn)制整數(shù)部分和小數(shù)部分的轉(zhuǎn)換方法是不相同的,下面分別加以介紹(1)整數(shù)部分的轉(zhuǎn)換:把ー個(gè)十進(jìn)制的整數(shù)不斷除以所需要的基數(shù)r,取其系數(shù)(除r取余法),就能夠轉(zhuǎn)換成以r為基數(shù)的數(shù)。并注意第一位系數(shù)是低位,最后一位系數(shù)是高位。例如:把ー個(gè)十進(jìn)制整數(shù)轉(zhuǎn)換成相應(yīng)的二進(jìn)制整數(shù)的方法是采用“除2取余”法。具體步驟是?把,卜進(jìn)制整數(shù)除以2得一商數(shù)和一余數(shù):再將所得的商除以2,得到ー個(gè)新的商數(shù)和余數(shù);這樣不斷地用2去除所得的商數(shù),直到商等于〇為止,第一次得到的余數(shù)為最低有效位,最后一次得到的余數(shù)為最高有效位,因此將所得的余數(shù)反向讀數(shù),就是這個(gè)數(shù)的二進(jìn)制表示。Eg:把十進(jìn)制數(shù)25轉(zhuǎn)換成二進(jìn)制數(shù)。如下所示:2| 25 余數(shù)2 12 1? 最低位TOC\o"1-5"\h\z2|6 02|3 02|j 10 1?最高位所以(25)D=(11001)B練習(xí):.將十進(jìn)制整數(shù)215轉(zhuǎn)換成二進(jìn)制整數(shù)余數(shù)1余數(shù)1? 最低位1101011< 最高位2 1072|_53 2 |26 2 |13 2|_6 2|_J 2b 0所以215D=11010111B
2.將十進(jìn)制數(shù)(253)地轉(zhuǎn)換成二進(jìn)制整數(shù)2253余數(shù)21261? 最低位26302131 12115 12 712|312L 10 1? 最咼位所以(253)io=(11111101)2用類似于將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法可將十進(jìn)制整數(shù)轉(zhuǎn)換成十六進(jìn)制整數(shù),只是所使用的除數(shù)以16去代2而已。(2)小數(shù)部分的轉(zhuǎn)換:要將一個(gè)十進(jìn)制小數(shù)轉(zhuǎn)換成r進(jìn)制小數(shù)時(shí),可將十進(jìn)制小數(shù)不斷地乘以r,并取整,這稱為乘r取整法。例如:將十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù)是將十進(jìn)制小數(shù)連續(xù)乘以2,然后選取進(jìn)位整數(shù),直到滿足要求為止。簡稱“乘2取整法”。Eg:將十進(jìn)制小數(shù)(0.6875)K1轉(zhuǎn)換成二進(jìn)制小數(shù)。方法如下:0.6875X2 1.3750 整數(shù)=1? 最高位0.3750X2 0.7500 整數(shù)=00.7500X21.5000整數(shù)=10.5000X2 1.0000 整數(shù)=1< 最低位將十進(jìn)制小數(shù)0.6875連續(xù)乘以2,把每次所進(jìn)位的整數(shù),按從上往下的順序?qū)懗觯谑?0.6875)io=(0.1011)2練習(xí):將十進(jìn)制小數(shù)0.3125轉(zhuǎn)換成相應(yīng)的二進(jìn)制小數(shù)。0.3125X2 0.6250 整數(shù)=0? 最高位0.6250X21.2500 整數(shù)=10.2500X20.5000 整數(shù)=00.5000X21.0000 整數(shù)=1< 最低位所以(0.3125)d=(0.0101)B同理,學(xué)會(huì)了十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù)的方法以后,那么,對(duì)于十進(jìn)制小數(shù)轉(zhuǎn)換成ハ進(jìn)制小數(shù)或十六進(jìn)制小數(shù)的運(yùn)算就變得很簡單了。十進(jìn)制小數(shù)轉(zhuǎn)換成ハ進(jìn)制小數(shù)的方法是“乘8取整數(shù)”十進(jìn)制小數(shù)轉(zhuǎn)換成十六進(jìn)制小數(shù)的方法是“乘16取整數(shù)”。如果十進(jìn)制數(shù)包含整數(shù)和小數(shù)兩部分,則必須將十進(jìn)制小數(shù)點(diǎn)兩邊的整數(shù)和小數(shù)部分分開,分別完成相應(yīng)轉(zhuǎn)換,然后,再把r進(jìn)制整數(shù)和小數(shù)部分組合在ー起。例如:將十進(jìn)制數(shù)25.3125轉(zhuǎn)換成二進(jìn)制數(shù),只要將上例整數(shù)和小數(shù)部分組合在一起即可。即:(25.3125)d=(11001.0101)BEg:將十進(jìn)制數(shù)193.12轉(zhuǎn)換成ハ進(jìn)制數(shù)。8丨193 余數(shù)8|24 I? 最低位8[_3_ 00 3^ 最高位0.12X8 整數(shù)0.96 04 最高位X87.68 7X85.44 5-4 最低位所以(193.12)d-(301.075)〇3.非十進(jìn)制數(shù)間的轉(zhuǎn)換。通常兩個(gè)非十進(jìn)制數(shù)之間的轉(zhuǎn)換方法是采用上述兩種方法的組合,即先將被轉(zhuǎn)換數(shù)轉(zhuǎn)換為相應(yīng)的十進(jìn)制數(shù),然后再將十進(jìn)制數(shù)轉(zhuǎn)換為其他進(jìn)制數(shù)。由于二進(jìn)制、ハ進(jìn)制和十六進(jìn)制之間存在特殊關(guān)系,即8'=23,16'=2\因此轉(zhuǎn)換方法就比較容易。在解題中用“8421”法通常比較簡單。ー、二進(jìn)制數(shù)與八進(jìn)制數(shù)之間的轉(zhuǎn)換(1)二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)由于二進(jìn)制數(shù)和八進(jìn)制數(shù)之間存在特殊對(duì)應(yīng)關(guān)系,即8^23。因此,轉(zhuǎn)換方法比較容易,具體轉(zhuǎn)換方法是:將二進(jìn)制數(shù)從小數(shù)點(diǎn)開始,整數(shù)部分從右向左3位ー組,小數(shù)部分從左向右3位ー組,不足三位用〇不足,然后利用8421碼的方法求對(duì)應(yīng)的八進(jìn)制數(shù)即可。例:將(10110101110.1001)2轉(zhuǎn)換為ハ進(jìn)制數(shù)的方法如下:010' 110'101'110.100'100TOC\o"1-5"\h\z2 6 5 6 4 4于是,(10110101110.1001)2=(2656.44)8練習(xí):將二進(jìn)制數(shù)(10100161.01011101)b轉(zhuǎn)換成八進(jìn)制數(shù)。010' loo' 101.01〇' nr 010I I - I I2 4 52 7 2所以(10100101.1011101)B=(245.272)〇(2)ハ進(jìn)制轉(zhuǎn)換成二進(jìn)制數(shù)將ハ進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制的過程與二進(jìn)制轉(zhuǎn)換成ハ進(jìn)制的過程正好相反,即以小數(shù)點(diǎn)為界,向左或向右每一位八進(jìn)制數(shù)用相應(yīng)的三位二進(jìn)制數(shù)取代,然后將其連在ー起即可。例如:將(5237.420)8轉(zhuǎn)換成二進(jìn)制數(shù)的方法如下:TOC\o"1-5"\h\z5 2 3 7.4 2 0+▼ ▼ ▼▼ + ▼101 010 011 111100 010 000于是:(5237.420)8=(101010011111.100010000)2練習(xí):將ハ進(jìn)制數(shù)6154轉(zhuǎn)換成二進(jìn)制數(shù)TOC\o"1-5"\h\z6 15 4.v t ▼ ▼110 001 101 100則(6154)8=(110001101100)2二、二進(jìn)制數(shù)與十六進(jìn)制數(shù)之間的轉(zhuǎn)換(1)二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)二進(jìn)制數(shù)的每四位,剛好對(duì)應(yīng)于十六進(jìn)制數(shù)的一位(16124)。其轉(zhuǎn)換方法是,將二進(jìn)制數(shù)從小數(shù)點(diǎn)開始,整數(shù)部分從右向左4位ー組,小數(shù)部分從左向右4位ー組,不足四位用〇補(bǔ)足,每組對(duì)應(yīng)一位十六進(jìn)制數(shù)即可得到十六進(jìn)制數(shù)。例:將二進(jìn)制數(shù)(101001010111.110110101)2轉(zhuǎn)換為十六進(jìn)制數(shù)。TOC\o"1-5"\h\z1010 0101 0111.1101 1010 1000f ▼ ▼ ▼ ▼ ▼A 5 7 D A 8于是:(101001010111.110110101)2=(A57.DA8),練習(xí):將二進(jìn)制數(shù)1001.1010110轉(zhuǎn)換成十六進(jìn)制數(shù)1001. 1010 1100(最低位不足四位時(shí)補(bǔ)〇)9AC于是:(1001.1010110)2=(9.AC)16(2)十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)以小數(shù)點(diǎn)為界,向左或向右每一位十六進(jìn)制數(shù)用相應(yīng)的四位二進(jìn)制數(shù)取代,然后將其連在ー起即可。例:將(3CB.12)|6轉(zhuǎn)換成二進(jìn)制數(shù)3CB.1 20011 1100 1011 0001 0010于是(3CD.12)16=(1111001011.00010010)練習(xí):.將十六進(jìn)制數(shù)9B28轉(zhuǎn)換成二進(jìn)制數(shù)。TOC\o"1-5"\h\z9B 2 81001 1011 0010 1000于是(9B28)16=(!〇〇1101100101000)2.將2AFH轉(zhuǎn)換成二進(jìn)制數(shù)因?yàn)? AF0010 1010 1111故得結(jié)果:2AFH=1010101111B三、ハ進(jìn)制與十六進(jìn)制數(shù)的相互轉(zhuǎn)換ハ進(jìn)制數(shù)與十六進(jìn)制數(shù)之間不能直接轉(zhuǎn)換,它們之間可通過二進(jìn)制間接來實(shí)現(xiàn)轉(zhuǎn)換。例:將ハ進(jìn)制數(shù)457轉(zhuǎn)換成十六進(jìn)制數(shù)。(457)8=(100101111)2=(12F)|6練習(xí):將十六進(jìn)制數(shù)3C45轉(zhuǎn)換成八進(jìn)制數(shù)。(3C45)|6=(0011110001000101)2=(036105)8C的基本字符與詞匯ー個(gè)c語言程序好比ー篇英語文章,它的各種語言成分,如表達(dá)式、語句等都是由一些基本字符和詞匯按照嚴(yán)密的語法規(guī)則構(gòu)成的。這些基本字符和詞匯是語言最基本的語法單位。2.2.1C語言的字符集各種程序設(shè)計(jì)語言都規(guī)定了允許使用的字符集,以便處理系統(tǒng)能正確識(shí)別它們。C語言中使用的合法字符有:字母和數(shù)字小寫字母:4b,c…z大寫字母:ABC-Z數(shù)字:012-9特殊字符+=-_()*#&%$!10A'ソ、?{}ロ~空白字符包括空格、換行符和制表符。以上字符的集合就是C語言的合法字符集。C語言程序所用的全部字符都在這個(gè)字符集中。2.2.2詞匯單詞是由字符組成的,單詞的集合稱為詞匯。C語言的詞匯包括標(biāo)志符、保留字、運(yùn)算符和分隔符等。標(biāo)識(shí)符C語言的標(biāo)志符是由字母、數(shù)字和ド劃線組成的字符序列。它的第一個(gè)字符必須是字母或下劃線。根據(jù)上述規(guī)則,下面的標(biāo)志符是合法的:a,x1,_font,b4c,High,_x_y下面則是不合法的標(biāo)識(shí)符:5a,#mod,B,b+c,.obj在C語言的標(biāo)識(shí)符中,大寫字母和小寫字母是有區(qū)別的,如ABC,Abe和abc分別表示了三個(gè)不同的標(biāo)識(shí)符。這一點(diǎn)與其他高級(jí)語言有區(qū)別,使用時(shí)應(yīng)注意。對(duì)于標(biāo)識(shí)符的長度,C語言本身未作限制,取決于編譯系統(tǒng),-一般編譯系統(tǒng)規(guī)定前8個(gè)字符有效,如果長于8個(gè)字符,多余的將不被識(shí)別,這樣,只要兩個(gè)標(biāo)識(shí)符前8個(gè)字符相同,系統(tǒng)就認(rèn)為它們是同一個(gè)標(biāo)識(shí)符。但也有的編譯系統(tǒng)允許使用長達(dá)31個(gè)字符的標(biāo)識(shí)符。標(biāo)識(shí)符是用來為常量、變量、數(shù)組、函數(shù)及類型等取名的。使用標(biāo)識(shí)符時(shí),一方面要取得盡量有意義,做到“見名知義”,如円、name、count,max等,以利于閱讀和理解;另一方面要避免在書寫時(shí)引起混淆,如字母“〇”和數(shù)字“〇”,字母"I”和數(shù)字“1”,字母“Z”和數(shù)字“2”,減號(hào)“-”和下劃線“一”等都易混淆,使用時(shí)要小心。再有,不能把保留字用作ー一般的標(biāo)識(shí)符,因?yàn)楸A糇衷贑語言中有專門的含義。保留字保留字又稱關(guān)鍵字,是語言中具有特定含義的ー些單詞,對(duì)保留字不能重新定義,也不能用作一般的標(biāo)識(shí)符。C語言有如下保留字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructwitchtypedefunionunsignedvoid volatilewhile其中,sizeof是一個(gè)運(yùn)算符,其他都用作類型說明和基本控制結(jié)構(gòu)的標(biāo)記。以后章節(jié)會(huì)ーー講述,這里要求讀者對(duì)上述保留字不要隨意使用。運(yùn)算符運(yùn)算符是用來表示某種運(yùn)算的符號(hào),多數(shù)運(yùn)算符由一個(gè)字符組成,也有的由多個(gè)字符組成。C語言中運(yùn)算符種類繁多,優(yōu)先級(jí)復(fù)雜,另外還有結(jié)合性問題。C語言有44個(gè)運(yùn)算符,15種優(yōu)先級(jí)和2種結(jié)合性,在以后章節(jié)中要ーー介紹.分隔符分隔符是用來分隔變量、數(shù)據(jù)、表達(dá)式等多個(gè)單詞的符號(hào)。C語言中常用的分隔符是空格、逗號(hào)和換行符等。數(shù)據(jù)類型、運(yùn)算符及表達(dá)式數(shù)據(jù)類型是高級(jí)程序設(shè)計(jì)語言中最重要的概念之一。凡是數(shù)據(jù)都必須有類型,變量在使用之前必須先進(jìn)行類型說明,這是兩條必須遵循的規(guī)則。下面介紹c語言的基本數(shù)據(jù)類型、運(yùn)算符及表達(dá)式,它們是c語言的基礎(chǔ)。數(shù)據(jù)和數(shù)據(jù)類型數(shù)據(jù)是程序的必要組成部分,也是程序的處理對(duì)象。數(shù)據(jù)有常量和變量之分,常量是指程序運(yùn)行過程中,其值保持不變的量;而變量則是指程序運(yùn)行過程中,其值可以改變的量。每個(gè)數(shù)據(jù)對(duì)象,不管是常量還是變量,都必須有確定的類型,這是因?yàn)閿?shù)據(jù)類型規(guī)定了ー個(gè)數(shù)據(jù)的可能取值范圍、在內(nèi)存中的存儲(chǔ)方式以及它所能進(jìn)行的運(yùn)算。對(duì)于常量來說,它的類型是由常量本身隱含確定的,這在下ー節(jié)要作詳細(xì)介紹。對(duì)變量來說,它的類型就要用專門的類型說明語句加以說明。下圖給出了C語言的各種數(shù)據(jù)類型。’整型(int)字符型(char)C基本類型< 「單精度型(float)實(shí)型(浮點(diǎn)型)ヽ、雙精度型(double)し枚舉類型(enum)數(shù)據(jù)類型\ r數(shù)組類型構(gòu)造類型J結(jié)構(gòu)體類型(struct)ー共用體類型(union)指針類型ゝ空類型(void)本章我們將介紹C語言的基本數(shù)據(jù)類型,其他類型留待后面章節(jié)討論。常量C語言中的常量有三類:數(shù)、字符和字符串。由于它們本身已隱含了數(shù)據(jù)類型,所以使用時(shí)不必事先進(jìn)行類型說明就可宜接使用。整形常量整形常量簡稱整數(shù),c語言中整形常量可以用三種數(shù)制來表示:十進(jìn)制整數(shù)用我們習(xí)慣的十進(jìn)制整數(shù)形式給出。如:127,0,-12,+5等,其每個(gè)數(shù)字位可以是0?9。ハ進(jìn)制整數(shù)是用。(數(shù)字0)開頭的ハ進(jìn)制數(shù)字串。如:十進(jìn)制數(shù)的127,用ハ進(jìn)制表示為〇177。ハ進(jìn)制數(shù)中的每個(gè)數(shù)字位只能使用數(shù)字0?7。十六進(jìn)制整數(shù)是以0X(數(shù)字0與字母X,X大小寫均可)開頭的十六進(jìn)制字符串。入口:十進(jìn)制數(shù)127I用十六進(jìn)制表示為0X7F。十六進(jìn)制數(shù)的每個(gè)數(shù)字位可以是〇?9,A?F,其中A?F表示十進(jìn)制數(shù)10?15。C語言中,整數(shù)的取值范圍通常由機(jī)器的字長決定。例如字長為16位的計(jì)算機(jī),一個(gè)整數(shù)用兩個(gè)字節(jié)存儲(chǔ),因此十進(jìn)制數(shù)的表示范圍為ー32768?32767,如果是無符號(hào)整數(shù),其表示范圍為0?65535,若超過這個(gè)范圍,C語言提供了一種長整型,用來擴(kuò)大整數(shù)的取值范圍。長整數(shù)是一般整數(shù)的兩倍長(4個(gè)字節(jié)),其取值范圍為ー2147483648?2147483647,無符號(hào)長整型數(shù)取值范圍為0?4294967295。C語言中,在整數(shù)的末尾加上字母1或L,就成了長整數(shù),如:128L,123456L。十進(jìn)制、ハ進(jìn)制、十六進(jìn)制常量用于不同場合,通常設(shè)計(jì)應(yīng)用程序大多用十進(jìn)制數(shù),當(dāng)描述系統(tǒng)程序時(shí),有時(shí)要用ハ進(jìn)制數(shù)或十六進(jìn)制數(shù)。23.2.2實(shí)型常量實(shí)型常量又稱浮點(diǎn)數(shù)或?qū)崝?shù)。C語言中,實(shí)數(shù)只用十進(jìn)制形式.它有兩種表示方法,即小數(shù)形式和指數(shù)形式.小數(shù)形式:由數(shù)字、小數(shù)點(diǎn)和可能的正負(fù)號(hào)組成。例如:3.1416,-12.76,0.12,.12,12.,12.0都是C語言合法的實(shí)數(shù)。指數(shù)形式:由尾數(shù)部分、字母e或E和指數(shù)部分組成。如十進(jìn)制數(shù)320000.0用指數(shù)法可表示為3.2e5,其中3.2稱為尾數(shù),5為指數(shù),e也可用E表示。又如,-0.00123可表示為-1.23E-3o需要注意,用指數(shù)形式表示實(shí)數(shù),字母e或E之前(即尾數(shù)部分)必須有數(shù)字,e后的指數(shù)部分必須是整數(shù),如e-5、7.2e2.5都是不合法的實(shí)數(shù)。在一般計(jì)算機(jī)系統(tǒng)中,ー個(gè)實(shí)數(shù)在內(nèi)存中占4個(gè)字節(jié),雙精度實(shí)數(shù)占8個(gè)字節(jié)。實(shí)數(shù)取值的絕對(duì)值范圍約為IO。8?103、具有6?7位十進(jìn)制有效數(shù)字,雙精度實(shí)數(shù)具有15?16位十進(jìn)制有效數(shù)字。23.23字符常量C語言中的字符型常量是用ー對(duì)單引號(hào)括起來的一個(gè)字符,如‘a(chǎn)’、‘*’、’5’等都是合法的字符常量。C語言的ー個(gè)字符常量占據(jù)一個(gè)字節(jié)的存儲(chǔ)空間,在該字節(jié)中存放的并不是字符本身,而是該字符所在機(jī)器采用的字符集中的代碼,也就是ー個(gè)整數(shù)值。大多數(shù)系統(tǒng)采用ASCII代碼字符集,在這種情況下,'a'的ASCII代碼值為97,'O'的代碼值為48。由于字符常量存儲(chǔ)的是ー個(gè)整數(shù),因此它可以像整數(shù)一樣參加數(shù)值運(yùn)算。在C程序中,字符常量通常用于字符之間的比較。C語言還使用ー種特殊形式的字符常量,這就是以反斜杠“ヽ”開頭的轉(zhuǎn)義字符序列。轉(zhuǎn)義字符常用來表示ASCII字符集內(nèi)的控制代碼。例如前面我們用“ヽn”表示換行,\n實(shí)際上是ー個(gè)字符,它的ASCII碼值為10.常見的轉(zhuǎn)義字符如下表所示.表轉(zhuǎn)義字符字符形式功能\n換行\(zhòng)t橫向跳格(即跳到下ー個(gè)輸出區(qū))\v豎向跳格\b退格\r回車\f走紙換頁\\反斜杠字符”ヽ’單引號(hào)(撇號(hào))字符\dddI到3位ハ進(jìn)制數(shù)所代表的字符\xhh!到2位十六進(jìn)制數(shù)所代表的字符2.324字符串常量字符串是用雙引號(hào)括起來的字符序列.如‘'China”就是ー個(gè)字符串,雙引號(hào)僅作定界符使用,不屬于字符串本身.C語言中,字符串在內(nèi)存中存儲(chǔ)時(shí),系統(tǒng)自動(dòng)地在字符串的末尾加ASCII代碼值為0的字符,用以表示該字符串的結(jié)束.因此,長度為n個(gè)字節(jié)的字符串,實(shí)際上占據(jù)了n+!個(gè)字節(jié)的存儲(chǔ)空間.例如,字符串常量''CHINA”有5個(gè)字節(jié),占據(jù)了6個(gè)字節(jié)的存儲(chǔ)空間,其存儲(chǔ)形式如下圖所示.CHINA\()圖:字符串常量實(shí)際上,上圖中的字母應(yīng)當(dāng)用對(duì)應(yīng)的ASCI!碼表示,這里為了方便,直接用字符表示。另外,我們也不難理解字符'a'和字符串“a”的區(qū)別,它們除了表示形式上由區(qū)別外,在內(nèi)存中的存儲(chǔ)形式也是不同的,如下圖所示。a\0a)'a,的存儲(chǔ)表示 b)“a”的存儲(chǔ)表示23.2.5符號(hào)常量C語言中,常量也可用ー個(gè)標(biāo)識(shí)符來命名,這就是符號(hào)常量。為了與一般變量相區(qū)分,符號(hào)常量習(xí)慣上用大寫字母表示。符號(hào)常量在使用前必須先定義,其定義的一般形式如下:#define符號(hào)常量名常量例如:#definePI3.1415926定義了一個(gè)符號(hào)常量PI,這樣凡在程序中出現(xiàn)PI,都表示3.1415926。PI是ー個(gè)常量,在程序中只能被引用,不能被修改。用符號(hào)常量代替常量,使程序更清晰易讀,同時(shí)使程序更易修改,保證對(duì)常量修改的一致性。最后要注意,定義符號(hào)常量的#define行不能以分號(hào)結(jié)束,這有別于一般的語句。關(guān)于#define的詳細(xì)討論將在以后章節(jié)中進(jìn)行。233變量上面討論的是常量,常量本身隱含著它的類型,所以在使用前無須作類型說明,就可直接引用。而變量是用標(biāo)識(shí)符來表示的,在使用之前,必須進(jìn)行類型說明。變量說明的?般形式如下:類型名 變量名!,變量名2,-,變量名n;C語言中,最基本的類型有整形、實(shí)型和字符型,相應(yīng)的變量就有整形變量、實(shí)型變量和字符型變量。整形變量整形變量用來存放整形數(shù)據(jù),用保留字int說明。如:inti,j,k;說明了i,j,k三個(gè)整形變量。C語言在int性的基礎(chǔ)上,通過在int前加上修飾符,又?jǐn)U展成一些新的整數(shù)類型。修飾符有l(wèi)ong(長型)、short(短型)、unsigned(無符號(hào)型)等。整形變量加上修飾符后,其取值范圍有所變化,以16位機(jī)為例,下表給出了各種形式整型變量的取值范圍。表整型變量的取值范圍類型所占位數(shù)取值范圍int16■32768?32767short16-32768?32767long32-2147483648-2147483647unsigned16〇?65535unsignedshort16〇?65535Unsignedlong32〇?4294967295實(shí)型變量實(shí)型變量也稱浮點(diǎn)型變量。按其能夠表示的數(shù)的精度,又可分為單精度實(shí)型變量和雙精度實(shí)型變量。單精度實(shí)型變量用保留字float說明。如:floatfl,f2;fl,f2被說明為單精度實(shí)型變量。雙精度實(shí)型變量用保留字double說明。如:doubledl,d2;dl,d2被說明為雙精度實(shí)型變量。一般來說,ー個(gè)float型變量占據(jù)4個(gè)字節(jié)存儲(chǔ)空間,ー個(gè)double型變量占據(jù)8個(gè)字節(jié)存儲(chǔ)空間。兩者之間的差異,體現(xiàn)在所能表示的數(shù)的精度上,前者十進(jìn)制有效位為6?7位,而后者達(dá)15?16位。如果float型所提供的精度不能滿足要求時(shí),就可以考慮使用double型。字符型變量字符型變量用來存放一個(gè)單個(gè)字符,由保留字char說明。如:charcl,c2;cl、c2被說明成字符型變量。ー個(gè)字符型變量占據(jù)?個(gè)字節(jié)存儲(chǔ)空間,只能存放ー個(gè)字符。字符變量存放的是字符的ASCII碼,實(shí)質(zhì)上是一個(gè)整數(shù)型,因此在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被說明為字符型變量,但在下一行卻將整數(shù)97、98分別賦給cl、c2.它們的作用就相當(dāng)于下面的兩個(gè)賦值語句:cl='a';c2='b';因?yàn)椁购停琤,的ASCII碼分別為97和98。函數(shù)體中第三行輸出兩個(gè)字符,“%c”為輸出字符格式,所以程序輸出:a,b字符型數(shù)據(jù)也可用整數(shù)形式輸出,如第四行,“%d”為輸岀整數(shù)格式,所以程序輸出:97,982.3.4賦值與算術(shù)運(yùn)算C語言的運(yùn)算符很多,運(yùn)算范圍很廣,本節(jié)先介紹最常用的賦值運(yùn)算與算術(shù)運(yùn)算。賦值運(yùn)算、在C語言中,賦值也被認(rèn)為是ー種運(yùn)算。由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為賦值表達(dá)式。其形式如下:變量=表達(dá)式式? 是賦值運(yùn)算符。它的作用是將賦值運(yùn)算符右邊表達(dá)式的值賦給左邊變量。如:x=a+5是ー個(gè)賦值表達(dá)式,它將a+5的值賦給變量X。上述一般形式的賦值表達(dá)式中,賦值號(hào)右邊的表達(dá)式又可以是一個(gè)賦值表達(dá)式。例如:a=(b=10)括號(hào)內(nèi)的b=10是ー個(gè)賦值表達(dá)式,它的值等于10,因此a=(b=IO),相當(dāng)于a=10。賦值運(yùn)算符是按“自右至左”的結(jié)合順序,因此b=10外面的括號(hào)可以不要,即可寫成:a=b=10需要注意的是,賦值運(yùn)算符“二”與數(shù)學(xué)中的“相等”概念不同,它表示把表達(dá)式的值送到變量所代表的存儲(chǔ)單元中,因此賦值運(yùn)算符左邊只能是變量,而不能是常量或表達(dá)式,如5二a、a+b=c,都是不合法的。二元算術(shù)運(yùn)算.二元算術(shù)運(yùn)算符C語言提供了5個(gè)二元算術(shù)運(yùn)算符,二元算術(shù)運(yùn)算是兩個(gè)運(yùn)算量之間的運(yùn)算。二元算術(shù)運(yùn)算符及運(yùn)算功能見下表(設(shè)運(yùn)算量為a和b)。表:二元算術(shù)運(yùn)算符運(yùn)算符名稱運(yùn)算功能*乘求a與b之積/除求a除以b之商%取余求a除以b之余數(shù)+加求a與b之和-減求a與b之差符號(hào)“*”表示乘,不能用數(shù)學(xué)上習(xí)慣用的“X”或“表示乘。例如,a*b不能寫成ab、aXb和a?b。符號(hào)“/”表示除,當(dāng)除數(shù)和被除數(shù)都是整型數(shù)時(shí),其商也是整型數(shù),如10/3的結(jié)果為3。求余運(yùn)算符“%”只能用于整型數(shù),它的作用是取兩個(gè)整型數(shù)相除的余數(shù),如5%3的結(jié)果為2。以上?、/、%、+、一都是二元運(yùn)算符,即在它們參與運(yùn)算時(shí),左右各需要一個(gè)運(yùn)算量。而“+”、"一”既是二元運(yùn)算符,又是一元運(yùn)算符,作一元運(yùn)算時(shí)后面跟ー個(gè)運(yùn)算量,“-”的結(jié)果是取運(yùn)算量的負(fù)值,''+”的結(jié)果是運(yùn)算量本身。.算術(shù)表達(dá)式C的算術(shù)表達(dá)式由算術(shù)運(yùn)算符、運(yùn)算對(duì)象(常量、變量、函數(shù)等)和圓括號(hào)組成,最簡單的表達(dá)式是ー個(gè)常量或一個(gè)變量。作為一般情況,ー個(gè)表達(dá)式可以有多個(gè)運(yùn)算符,如:-a/(b+5)T0%7*'c'這時(shí)運(yùn)算就有先后,這種先后次序稱為運(yùn)算符的優(yōu)先級(jí),例如,?、/、%運(yùn)算符的優(yōu)先級(jí)高于+、ー運(yùn)算符優(yōu)先級(jí)(作為一元運(yùn)算符,正負(fù)號(hào)運(yùn)算符的優(yōu)先級(jí)高于*、Z)<■C語言還規(guī)定了運(yùn)算符的結(jié)合性,所謂結(jié)合性是指當(dāng)ー個(gè)運(yùn)算對(duì)象兩側(cè)運(yùn)算符的優(yōu)先級(jí)相同時(shí),進(jìn)行運(yùn)算的結(jié)合方向,C語言中二元算術(shù)運(yùn)算符的結(jié)合方向?yàn)樽宰笾劣?即運(yùn)算對(duì)象先于左邊運(yùn)算符結(jié)合。下圖給出了C語言中基本算術(shù)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。高 〇- (求負(fù)從右向左結(jié)合). ?/% (從左向右結(jié)合)低+- (加減從左向右結(jié)合)圖:運(yùn)算符的優(yōu)先級(jí)和結(jié)合性了解了算術(shù)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,我們可以看看上述表達(dá)式的求值過程。①求(b+5)的值:②求-a的值;③求②/①的值;④求10%7的值;⑤求④*‘c'的值;⑥求③-⑤的值。23.4.3自加、自減運(yùn)算自加運(yùn)算符++和自減運(yùn)算符ー是C語言特有的兩個(gè)運(yùn)算符。這兩個(gè)運(yùn)算符都只有一個(gè)運(yùn)算對(duì)象,而且必須是整型或字符型變量,它們的作用是將變量加1或減1后,將運(yùn)算結(jié)果再賦給該變量,見下表的說明。表自加、自減運(yùn)算符運(yùn)算符名稱運(yùn)算功能++加1a++、++a一等:イ介J'a=a+l—減「aー、—a等價(jià)于a=a-l下面詳細(xì)介紹++運(yùn)算符(ー運(yùn)算符與其類似)。++運(yùn)算符可作用在ー個(gè)變量的前面,如++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的值在運(yùn)算后都為10。顯然對(duì)a來說,上述兩語句的運(yùn)算結(jié)果是一致的,而對(duì)x來說就不同了。需要強(qiáng)調(diào)的是,自加、自減運(yùn)算符只能作用于變量,不能作用與常量或表達(dá)式,如++5、(i+j)一都是錯(cuò)誤的。合理地使用自加、自減運(yùn)算符,對(duì)于編寫高質(zhì)量的C程序是很有用的,它們常用于數(shù)組下標(biāo)的變化、循環(huán)語句中循環(huán)變量自加(減)1以及指針設(shè)置等。23.4.4復(fù)合賦值運(yùn)算C語言的賦值運(yùn)算符,除了基本的賦值符“=”外,為了簡化程序和提高編譯效率,可以在復(fù)制副“=”之前加上其他運(yùn)算符,以構(gòu)成復(fù)合賦值運(yùn)算符,見下表的說明。表:復(fù)合算術(shù)賦值運(yùn)算符運(yùn)算符名稱運(yùn)算功能+=加賦值a+=b等價(jià)a=a+b-=減賦值a-=b等價(jià)a=a-b*—乘賦值a*=b等價(jià)a=a*b/=除賦值a/=b等價(jià)a=a/b%=取余賦值a%=b等價(jià)a=a%b參加復(fù)合賦值運(yùn)算的兩個(gè)運(yùn)算量,先進(jìn)行相應(yīng)的運(yùn)算,然后將其運(yùn)算結(jié)果賦給第一個(gè)運(yùn)算量。復(fù)合賦值運(yùn)算的一般形式如下:變量0P=表達(dá)式其中,0卩=為復(fù)合賦值運(yùn)算符.大多數(shù)的二元運(yùn)算符都可以與賦值運(yùn)算符一起組成復(fù)合的賦值運(yùn)算符,如:+=,-=,*=,/=,%=下面是復(fù)合賦值運(yùn)算的例子:a+=3等價(jià)于a=a+3x*=y+3等價(jià)于x=x*(y+3)m%=3等價(jià)與m=m%323.5變量賦初值程序中常常需要對(duì)ー些變量設(shè)置初值,C語言允許在對(duì)變量進(jìn)行說明的同時(shí)為其賦初值,例如:inta=10;它表示說明整形變量a,同時(shí)將初值10賦給它。同樣,下面的賦初值方式也是合法的:charc='a'; /?說明c為字符變量,初值為‘a(chǎn)'*/foatf=3.56; /?說明f為實(shí)型變量,初值為3.56*/floatx=2*3.14 /?初值可以是常量,也可以是常量表達(dá)式?/下面的語句為a,b,c三個(gè)整型變量都賦初值:inta=3,b=4,c=5也可以對(duì)其中一部分賦初值,如:floatx,y,z=2.5;表示x、y、z都是實(shí)型變量,但只對(duì)變量z賦以初值2.5。23.6類型轉(zhuǎn)換如果ー個(gè)運(yùn)算符兩邊的運(yùn)算量的類型不同,先要將它們轉(zhuǎn)換成相同的類型,然后才能進(jìn)行運(yùn)算。前面已經(jīng)談到,字符型數(shù)據(jù)是以系統(tǒng)中所使用的字符集代碼形式存儲(chǔ)的,它的存儲(chǔ)形式與整型數(shù)據(jù)相似,因此C語言允許字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以混合運(yùn)算。除此之外,不同類型的數(shù)據(jù)在進(jìn)行賦值和混合運(yùn)算時(shí)都需要進(jìn)行類型轉(zhuǎn)換。這種類型轉(zhuǎn)換有兩種方式:ー種是自動(dòng)類型轉(zhuǎn)換,另ー種是強(qiáng)制類型轉(zhuǎn)換。自動(dòng)類型轉(zhuǎn)換.賦值中的類型轉(zhuǎn)換當(dāng)賦值運(yùn)算符兩邊的運(yùn)算量類型不同時(shí),要進(jìn)行自動(dòng)類型轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則是:把賦值運(yùn)算符右邊表達(dá)式的類型轉(zhuǎn)換為左邊變量的類型。當(dāng)將實(shí)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),舍棄實(shí)型數(shù)的小數(shù)部分。如:i為整型變量,執(zhí)行i=4.52的結(jié)果是i的值為4。當(dāng)將整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值不變,但以實(shí)型數(shù)形式存放到實(shí)型變量中。.混合運(yùn)算中的類型轉(zhuǎn)換由于C語言允許整型、實(shí)型和字符型變量進(jìn)行混合運(yùn)算,所以下面的表達(dá)式是合法的:10+'a'+5.6*3運(yùn)算時(shí),C語言編譯系統(tǒng)自動(dòng)將運(yùn)算符兩邊的運(yùn)算量轉(zhuǎn)換成同一類型。轉(zhuǎn)換的規(guī)則是:1)float類型必須轉(zhuǎn)換成double類型,char,short類型必須轉(zhuǎn)換為int類型。2)參加運(yùn)算的各種變量都轉(zhuǎn)換為它們中數(shù)據(jù)長度長的數(shù)據(jù)類型。各種數(shù)據(jù)類型的數(shù)據(jù)長度為char<int<long<float<double,從左到右數(shù)據(jù)長度增加,所以左邊數(shù)據(jù)類型向右邊轉(zhuǎn)換。例如,char、int、float和double變量進(jìn)行運(yùn)算時(shí),都將轉(zhuǎn)換成double類型。2.362強(qiáng)制類型轉(zhuǎn)換上面的類型轉(zhuǎn)換是由編譯系統(tǒng)自動(dòng)進(jìn)行的。C語言還提供了強(qiáng)制類型轉(zhuǎn)換的機(jī)制.強(qiáng)制類型轉(zhuǎn)換的一般形式如下:(類型名)表達(dá)式其作用是把表達(dá)式的值轉(zhuǎn)換為類型名指定的類型.例如:(float)a/b是將a強(qiáng)制轉(zhuǎn)換成float型后,再進(jìn)行運(yùn)算;(char)(12.3+55)把67.3轉(zhuǎn)換成char型,該表達(dá)式的值為‘c'.需要注意的是,無論是自動(dòng)還是強(qiáng)制實(shí)現(xiàn)的類型轉(zhuǎn)換,僅僅是對(duì)變量或表達(dá)式的類型進(jìn)行臨時(shí)性的轉(zhuǎn)換,并未改變?cè)瓉碜兞炕虮磉_(dá)式的類型。第三章數(shù)據(jù)的輸入輸出數(shù)據(jù)的輸入輸出是ー個(gè)計(jì)算機(jī)程序應(yīng)具備的基本功能。沒有輸出的程序是沒有意義的,沒有輸入的程序是缺乏靈活性和通用性的。C語言本身沒有提供輸入輸出語句,而是在標(biāo)準(zhǔn)函數(shù)庫中定義了一些有用的輸入輸出函數(shù),程序的輸入輸出功能是通過調(diào)用這些庫函數(shù)來實(shí)現(xiàn)的。標(biāo)準(zhǔn)輸入輸出函數(shù)中有一些公用的信息寫在頭文件stdio.h中,因此要使用函數(shù)庫中的輸入輸出函數(shù),一般應(yīng)在程序開頭寫出如下命令:#include<stdio.h>以便把stdio.h文件包括到用戶的程序文件中來。本章將介紹幾個(gè)最基本最常用的輸入輸出函數(shù)。字符輸入輸出函數(shù)字符輸入輸出函數(shù)是以字符為單位完成輸入輸出過程的。字符輸入函數(shù)getchargetchar函數(shù)的功能是從標(biāo)準(zhǔn)輸入設(shè)備(通常是鍵盤)上輸入一個(gè)字符。當(dāng)程序執(zhí)行到getchar函數(shù)時(shí)將等待用戶從鍵盤上輸入ー個(gè)字符,并將這個(gè)字符作為函數(shù)結(jié)果值返回。getchar函數(shù)沒有參數(shù)。對(duì)字符輸入函數(shù)的使用,通常采用賦值的辦法。例如:charc;c=getchar();變量c就得到了輸入的字符。例:getchar函數(shù)的功能演示。/*example3-1*/#include<stdio.h>main()(charc;c=getchar();printf(<<%c\nM,c);)程序運(yùn)行時(shí),如從鍵盤輸入字符‘ポ:a/(輸入'a’后,按回車鍵)a (輸出變量c的值'a')字符輸出函數(shù)putcharputchar函數(shù)的功能是向標(biāo)準(zhǔn)輸出設(shè)備(通常是顯示屏)輸出ー個(gè)字符。它的調(diào)用形式如下:putchar(c);程序執(zhí)行該語句時(shí),將變量c中的字符輸出到顯示屏當(dāng)前光標(biāo)的位置上。例:從鍵盤上輸入ー個(gè)字符,并在顯示屏上輸出。/*example3.2*/#include<stdio.h>main()(charc;c=getchar();putchar(c);}putchar函數(shù)可以用來輸出字符變量的值,也可用來直接輸出ー個(gè)字符常量,如:putchar('a');將在顯示屏上輸出字符a。還可以輸出ー些特殊字符(控制字符),如:Putchar(t\n,);它的作用是輸出ー個(gè)“換行”字符。如下例所示。例:輸出特殊字符。/*example3-3*/#include<stdio.h>main(){chara,b;a='m';b='n';putchar(a);putchar(4\n,);putchar(b);}運(yùn)行結(jié)果:最后請(qǐng)注意,在使用getchar和putchar之前不要忘記在程序的前面寫上:#include<stdio.h>格式輸入輸出函數(shù)字符輸入輸出只能一次輸入或輸出ー個(gè)字符,不能輸入輸出其他類型的數(shù)據(jù)。格式輸入輸出函數(shù)是具有格式控制的函數(shù),它們可以用來輸入輸出C語言的標(biāo)準(zhǔn)類型的數(shù)據(jù),而且可以同時(shí)輸入或輸出多個(gè)同類型或不同類型的數(shù)據(jù)。格式輸出函數(shù)printfprintf函數(shù)在前面例子中已經(jīng)多次使用,這里詳細(xì)介紹它的使用方法。函數(shù)printf的作用是將輸出項(xiàng)按指定的格式輸出到標(biāo)準(zhǔn)輸出設(shè)備上(通常是顯示屏)。調(diào)用printf函數(shù)的ー般形式如下:printf(格式控制字符串,輸出表);.格式控制字符串格式控制字符串通常是由一對(duì)雙引號(hào)括起來的字符串常量。它包括兩方面的內(nèi)容:格式說明它由字符“%”和格式字符組成,如%d、%f、%c等,它們規(guī)定了輸出項(xiàng)的輸出格式。常用的格式說明中的格式字符及含義歸納于下表3-1。表3-1printf格式字符格式字符說明d以帶符號(hào)的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號(hào))〇以ハ進(jìn)制無符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符〇)X以十六進(jìn)制無符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符Ox)U以無符號(hào)十進(jìn)制形式輸出整數(shù)C以字符形式輸出,只輸出ー個(gè)字符S輸出字符串f以小數(shù)形式輸出單ー、雙精度數(shù),隱含輸出6位小數(shù)e以標(biāo)準(zhǔn)指數(shù)形式輸出單、雙精度數(shù),數(shù)字部分小數(shù)位數(shù)為6位g選用%f或%e格式中輸出寬帶較短的一種格式,不輸出無意義的0普通字符格式控制字符串中的普通字符是需要照原樣輸出的字符,可起提示作用。出表輸出表是需要輸出的ー些數(shù)據(jù)項(xiàng),可以是常量、變量或表達(dá)式,這些數(shù)據(jù)項(xiàng)應(yīng)當(dāng)與格式控制字符串中的格式說明ーー對(duì)應(yīng),如果輸出表中有多個(gè)數(shù)據(jù)項(xiàng),則它們之間應(yīng)用逗號(hào)隔開。圖3-1是printf函數(shù)的參數(shù)說明。照原樣輸出換行符圖printf函數(shù)的參數(shù)說明如果圖中i的值為10,f的值為2.5,則圖中語句輸出結(jié)果為1=10,F=2.500000在使用printf函數(shù)時(shí)應(yīng)注意:(1) 格式控制字符串中每ー個(gè)格式說明,都必須與輸出表中某ー數(shù)據(jù)項(xiàng)相對(duì)應(yīng),即它們的個(gè)數(shù)應(yīng)相等,類型應(yīng)一致。如卜.述語句中的%d與i對(duì)應(yīng),%f與f對(duì)應(yīng)。(2)格式控制字符串中除了格式說明之外的字符都為普通字符,均應(yīng)照原樣輸出。如上述語句中的“1="、“F=”。(3) 在格式控制字符串內(nèi)可以包含轉(zhuǎn)義字符,如“'n"、“\t”、“\b”等。3.常用格式字符的用法d格式符以十進(jìn)制形式輸出整數(shù)。%d,按整型數(shù)據(jù)的實(shí)際長度輸出。%md,m為一整數(shù),按m指定的字段寬度輸出,若數(shù)據(jù)的實(shí)際長度小于m,輸岀時(shí)向右對(duì)齊,左端補(bǔ)以空格;如大于m,則按實(shí)際長度輸出。例如:printf(,,%d,%4d,%4d,,,a,b,c);若a=12,b=123,c=12345,則輸出結(jié)果:12,123,12345%ld,輸出長整型數(shù)據(jù),如:longa=123456;printfC4%ldM,a);因?yàn)閍的取值范圍超出了整型數(shù)據(jù)的取值范圍,若用%d輸出就會(huì)發(fā)生錯(cuò)誤。對(duì)長整型數(shù)也可指定字段寬度,如將上面printf函數(shù)中的“%Id”改為“%81d”,則輸出結(jié)果為UU123456在大多數(shù)系統(tǒng)中,int型數(shù)據(jù)用%d或%Id格式輸出皆可。c格式符用來輸出ー個(gè)字符。%mc,m為指定輸出字段的寬度,若m>l,則輸出時(shí)向右對(duì)齊,左邊補(bǔ)以空格。ー個(gè)整數(shù)只要它的值在〇?255范圍內(nèi),也可用字符形式輸出:反之,ー個(gè)字符數(shù)據(jù)也能用整型格式輸出。例34c格式的輸出。/*example3-4*/#include<stdio.h>main(){charc='a';intn=98;printf(''%c%4d%4c%4d,,,c,c,n,n);}運(yùn)行結(jié)果:a97b98s格式符用來輸出ー個(gè)字符串。%s,按字符串的原樣輸出。%ms,輸出指定寬度為m的字符串,若實(shí)際串長大于m,則按實(shí)際串長輸出;若實(shí)際串長小于m,輸出時(shí)字符串向右對(duì)齊,左端補(bǔ)以空格。%-ms,m的意義同上,如字符串長度小于m,則字符串向左對(duì)齊,右端補(bǔ)以空格。%m.ns,輸出指定寬度為m,從s左端取出n個(gè)字符輸出。若n<m,則左邊補(bǔ)足空格;若n>m,按n個(gè)字符輸出。%-m.ns類似,所不同的是當(dāng)n<m時(shí)右端補(bǔ)足空格。例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);}運(yùn)行結(jié)果:ChinaChinaL-lUChinaChinaロUChf格式符用來輸出實(shí)型數(shù),以小數(shù)形式輸出。%f,按系統(tǒng)規(guī)定的格式輸出實(shí)型數(shù),使整數(shù)部分全部輸出,小數(shù)部分取6位。應(yīng)當(dāng)注意,并非全部數(shù)字都是有效數(shù)字,單精度實(shí)型數(shù)有效位為7位,雙精度實(shí)型數(shù)有效位為16位。%m.nf(或%指定寬度為m(包含小數(shù)點(diǎn)),保留n位小數(shù),若實(shí)際長度小于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度直播平臺(tái)虛擬禮物開發(fā)與交易服務(wù)合同范本
- 2025年度源代碼保密協(xié)議書-新能源技術(shù)研發(fā)合作專用版
- 2025年度證券投資財(cái)務(wù)規(guī)劃與咨詢協(xié)議
- 2025年度房產(chǎn)維修基金管理服務(wù)合同-@-1
- 2025年度廢棄塑料回收利用技術(shù)研發(fā)協(xié)議
- 預(yù)見行業(yè)變化的應(yīng)對(duì)計(jì)劃
- 開展生物學(xué)科研討會(huì)的計(jì)劃
- 教學(xué)日常檢查與評(píng)估機(jī)制計(jì)劃
- 患者膳食管理經(jīng)驗(yàn)與總結(jié)計(jì)劃
- 協(xié)助學(xué)生進(jìn)行自我評(píng)估的計(jì)劃
- 七年級(jí)數(shù)學(xué)新北師大版(2024)下冊(cè)第一章《整式的乘除》單元檢測(cè)習(xí)題(含簡單答案)
- 2024年財(cái)政部會(huì)計(jì)法律法規(guī)答題活動(dòng)題目及答案一
- 中小學(xué)教師家訪記錄表內(nèi)容(18張)8
- 定向鉆出入土點(diǎn)平面布置圖(可編輯)
- JJF-1356-2012重點(diǎn)用能單位能源計(jì)量審查規(guī)范釋文
- Unit 1 Lesson 1語法-過去完成時(shí)態(tài)-高中英語北師大版必修第一冊(cè)
- 小學(xué)語文人教四年級(jí)上冊(cè)(統(tǒng)編2023年更新)第四單元-教學(xué)設(shè)計(jì)《神話中的“偷竊者”》
- 班組培訓(xùn)教材
- 變應(yīng)性真菌性鼻竇炎的影像表現(xiàn)
- 鋼棧橋設(shè)計(jì)計(jì)算書
- 貿(mào)易術(shù)語案例討論題匯總
評(píng)論
0/150
提交評(píng)論