C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程第1章課件_第1頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程第1章課件_第2頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程第1章課件_第3頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程第1章課件_第4頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程第1章課件_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第一章初步認(rèn)識(shí)C語(yǔ)言C語(yǔ)言是最通用和流行的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言之一。在操作系統(tǒng)和系統(tǒng)實(shí)用程序以及需要對(duì)硬件進(jìn)行操作的環(huán)境中,C語(yǔ)言明顯優(yōu)于其他高級(jí)語(yǔ)言,很多大型應(yīng)用軟件都是用C語(yǔ)言編寫(xiě)的。C語(yǔ)言是1972年由美國(guó)的DennisRitchie設(shè)計(jì)發(fā)明的,并首次在UNIX操作系統(tǒng)的DECPDP-11計(jì)算機(jī)上使用。它由早期的編程語(yǔ)言BCPL(BasicCombindProgrammingLanguage)發(fā)展演變而來(lái)。C語(yǔ)言從誕生到現(xiàn)在已有40多年的歷史,仍以其緊湊的代碼、靈活的表達(dá)方式、高效的運(yùn)行效率、強(qiáng)大的功能,以及可直接操作計(jì)算機(jī)硬件等特點(diǎn),深受廣大開(kāi)發(fā)人員和編程愛(ài)好者的喜愛(ài)。在使用C語(yǔ)言開(kāi)發(fā)具體項(xiàng)目之前,需要先了解一些關(guān)于C語(yǔ)言以及C語(yǔ)言程序的相關(guān)知識(shí)。通過(guò)對(duì)本章的學(xué)習(xí),能夠?qū)語(yǔ)言的產(chǎn)生和發(fā)展、C語(yǔ)言的特點(diǎn)、C語(yǔ)言的編程風(fēng)格等有一定的認(rèn)識(shí)。通過(guò)每一個(gè)任務(wù)的實(shí)現(xiàn),了解C語(yǔ)言的運(yùn)行環(huán)境和C語(yǔ)言程序的編寫(xiě)和執(zhí)行過(guò)程,掌握用C語(yǔ)言解決問(wèn)題的過(guò)程。任務(wù)1.1學(xué)生信息管理系統(tǒng)之菜單設(shè)計(jì)任務(wù)目標(biāo)掌握C語(yǔ)言的基本知識(shí),包括C語(yǔ)言的發(fā)展歷史、C語(yǔ)言的基本特點(diǎn)和C語(yǔ)言的結(jié)構(gòu)特點(diǎn)等。比較C語(yǔ)言和其他語(yǔ)句之間的區(qū)別。熟悉C語(yǔ)言的開(kāi)發(fā)集成環(huán)境,學(xué)會(huì)初步創(chuàng)建、編寫(xiě)、編譯和執(zhí)行一個(gè)C語(yǔ)言程序。掌握C語(yǔ)言的輸入和輸出函數(shù)的用法。實(shí)現(xiàn)學(xué)生管理系統(tǒng)菜單設(shè)計(jì)。1978年BrianW.Kernighian和DennisM.Ritchie出版了名著《TheCProgrammingLanguage》,對(duì)C語(yǔ)言的流行起到了很大的推動(dòng)作用。1988年,隨著微型計(jì)算機(jī)的日益普及,出現(xiàn)了許多C語(yǔ)言版本。由于沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),使得這些C語(yǔ)言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國(guó)國(guó)家標(biāo)準(zhǔn)研究所(ANSI)為C語(yǔ)言制定了一套ANSI標(biāo)準(zhǔn)。C語(yǔ)言發(fā)展迅速,而且成為最受歡迎的語(yǔ)言之一,主要因?yàn)樗哂袕?qiáng)大的功能。許多著名的系統(tǒng)軟件,如DBASEⅢPLUS、DBASEⅣ都是由C語(yǔ)言編寫(xiě)的。用C語(yǔ)言加上一些匯編語(yǔ)言子程序,就更能顯示C語(yǔ)言的優(yōu)勢(shì)了,如PC-DOS、WORDSTAR等就是用這種方法編寫(xiě)的。2.C語(yǔ)言的特點(diǎn)C語(yǔ)言既有高級(jí)語(yǔ)言的特點(diǎn),又具有匯編語(yǔ)言的特點(diǎn)。它可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言,編寫(xiě)系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語(yǔ)言,編寫(xiě)不依賴計(jì)算機(jī)硬件的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開(kāi)發(fā)上,就連各類(lèi)科研都需要用到C語(yǔ)言。它適于編寫(xiě)系統(tǒng)軟件、三維、二維圖形和動(dòng)畫(huà),具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開(kāi)發(fā)。如今,越來(lái)越多的人在學(xué)習(xí)C語(yǔ)言,使用C語(yǔ)言,用C語(yǔ)言開(kāi)發(fā)各個(gè)領(lǐng)域中的應(yīng)用軟件。C語(yǔ)言生命力之所以強(qiáng),是因?yàn)槠渚哂胁煌谄渌Z(yǔ)言的特點(diǎn)。其主要特點(diǎn)如下。(1)簡(jiǎn)潔緊湊、靈活方便。C語(yǔ)言一共只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,程序書(shū)寫(xiě)自由,主要用小寫(xiě)字母表示。它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái)。C語(yǔ)言可以像匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元。(2)運(yùn)算符豐富。C語(yǔ)言的運(yùn)算符包含的范圍很廣泛,共有34個(gè)運(yùn)算符。C語(yǔ)言把括號(hào)、賦值、強(qiáng)制類(lèi)型轉(zhuǎn)換等都作為運(yùn)算符處理。從而使C的運(yùn)算類(lèi)型極其豐富,表達(dá)式類(lèi)型多樣化,靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其他高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。(3)數(shù)據(jù)結(jié)構(gòu)豐富。C語(yǔ)言的數(shù)據(jù)類(lèi)型有:整型、實(shí)型、字符型、數(shù)組類(lèi)型、指針類(lèi)型、結(jié)構(gòu)體類(lèi)型、共用體類(lèi)型等。能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)類(lèi)型的運(yùn)算。并引入了指針概念,使程序效率更高。另外,C語(yǔ)言具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動(dòng)器,且計(jì)算功能、邏輯判斷功能強(qiáng)大。(4)C語(yǔ)言是結(jié)構(gòu)式語(yǔ)言。結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?,便于使用、維護(hù)以及調(diào)試。C語(yǔ)言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便地調(diào)用,并具有多種循環(huán)、條件語(yǔ)句控制程序流向,從而使程序完全結(jié)構(gòu)化。(5)語(yǔ)法限制不太嚴(yán)格、程序設(shè)計(jì)自由度大。一般的高級(jí)語(yǔ)言語(yǔ)法檢查比較嚴(yán),能夠檢查出幾乎所有的語(yǔ)法錯(cuò)誤。而C語(yǔ)言允許程序編寫(xiě)者有較大的自由度。(6)允許直接訪問(wèn)物理地址,可以直接對(duì)硬件進(jìn)行操作。C語(yǔ)言允許直接訪問(wèn)物理地址,可以直接對(duì)硬件進(jìn)行操作。因此既具有高級(jí)語(yǔ)言的功能,又具有低級(jí)語(yǔ)言的許多功能,能夠像匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元,可以用來(lái)寫(xiě)系統(tǒng)軟件。(7)C語(yǔ)言程序生成代碼質(zhì)量高,程序執(zhí)行效率高。一般只比匯編程序生成的目標(biāo)代碼效率低10%~20%。(8)C語(yǔ)言適用范圍大,可移植性好。C語(yǔ)言有一個(gè)突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機(jī)型。代碼中的“include<stdio.h>”為文件包含命令,其意義為將<>或“”內(nèi)指定的文件包含到本程序中,成為本程序的一部分。被包含的文件通常是由系統(tǒng)提供的,其擴(kuò)展名為.h,因此也稱為頭文件或首部文件。C語(yǔ)言的頭文件中包括了各個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù)的函數(shù)原型,并有對(duì)應(yīng)的函數(shù)實(shí)現(xiàn)。程序中調(diào)用一個(gè)庫(kù)函數(shù)時(shí),都必須包含該函數(shù)原型所在的頭文件。在本案例中,使用了一個(gè)庫(kù)函數(shù)——prtinf,即標(biāo)準(zhǔn)輸出函數(shù)。其所在的頭文件名為stdio.h文件,因此在程序的主函數(shù)前用include命令包含了stdio.h文件。因?yàn)樵诔绦蛑惺褂昧藀rintf()函數(shù),該函數(shù)為stdio.h中定義的標(biāo)準(zhǔn)輸出函數(shù),為了使用printf()函數(shù),需要將包含該函數(shù)相關(guān)信息的頭文件stdio.h包含到本文件中?!癷nta,b,c”的作用為聲明三個(gè)int,即整數(shù)類(lèi)型的變量,變量名分別為a、b、c,這三個(gè)變量的取值只能為整數(shù)?!?/”和“/*…*/”均用來(lái)表示注釋?!?/”用來(lái)作單行注釋,其后面本行內(nèi)的內(nèi)容為注釋信息。“/*…*/”用作多行注釋,“/*”和“*/”之間的內(nèi)容均為注釋信息,可有多行。注釋是給閱讀程序的人看的,用來(lái)輔助理解程序,在編譯和運(yùn)行階段不起作用,注釋信息可以添加在任何位置?!癱=a+b”用來(lái)實(shí)現(xiàn)加法運(yùn)算,表示將a和b的值相加,再賦值給b?!皃rintf("%d\n",c)”用來(lái)輸出。“%d”表示輸出的信息為十進(jìn)制整數(shù),“\n”為換行符,在信息輸出后,屏幕上閃爍的光標(biāo)將會(huì)顯示在該輸出的下一行。mian函數(shù)是主函數(shù)的函數(shù)名,表示這是一個(gè)主函數(shù)。在主函數(shù)main()中可以調(diào)用的函數(shù)包括標(biāo)準(zhǔn)庫(kù)和自定義函數(shù)。由上述例子可以看出,C語(yǔ)言結(jié)構(gòu)和書(shū)寫(xiě)特點(diǎn)如下:C語(yǔ)言是由函數(shù)組成的。一個(gè)函數(shù)有一些語(yǔ)句組成,共同實(shí)現(xiàn)某一功能。在以后的案例中我們會(huì)看到每一個(gè)函數(shù)均可被其他函數(shù)調(diào)用,也可調(diào)用其他函數(shù),main函數(shù)除外:main函數(shù)不能被其他函數(shù)調(diào)用。C程序可以有若干個(gè)函數(shù)組成,但是其中必須有一個(gè)且只能有一個(gè)是main()。程序的執(zhí)行必須從主函數(shù)main()開(kāi)始,在主函數(shù)main()中結(jié)束。C語(yǔ)言程序書(shū)寫(xiě)自由,一行內(nèi)可以寫(xiě)一條或多條語(yǔ)句,一條語(yǔ)句也可以寫(xiě)在多行。用{}括起來(lái)的部分,通常表示程序的某一種層次結(jié)構(gòu)。一般情況下,左右花括號(hào)各占一行,并上下對(duì)齊,便于檢查花括號(hào)的成對(duì)性。C語(yǔ)言程序是區(qū)分大小寫(xiě)的,如輸入Printf則程序會(huì)報(bào)錯(cuò)。程序的書(shū)寫(xiě)根據(jù)從屬關(guān)系采用縮進(jìn)的格式,可使程序的層次結(jié)構(gòu)更加清晰,從而提高程序的可讀性。同一層次要左右對(duì)齊,第一層次的語(yǔ)句或說(shuō)明要比高一層次的語(yǔ)句縮進(jìn)若干個(gè)字符,這樣程序?qū)哟谓Y(jié)構(gòu)更加清晰。C語(yǔ)言中每一條語(yǔ)句和數(shù)據(jù)定義都必須以“;”結(jié)束。C語(yǔ)言用“//”或“/*…*/”來(lái)表示注釋。編碼過(guò)程中配合良好的注釋,可增加程序的可讀性和可維護(hù)性。對(duì)于C程序的書(shū)寫(xiě)格式,讀者可從后面的程序中逐漸體會(huì),編碼時(shí)遵循以上規(guī)則,以形成良好的編程風(fēng)格。1.1.2C語(yǔ)言與其他語(yǔ)言1.C到C++計(jì)算機(jī)誕生初期,人們要使用計(jì)算機(jī)必須用機(jī)器語(yǔ)言或匯編語(yǔ)言編寫(xiě)程序。世界上第一種計(jì)算機(jī)高級(jí)語(yǔ)言誕生于1954年,它是FORTRAN語(yǔ)言。先后出現(xiàn)了多種計(jì)算機(jī)高級(jí)語(yǔ)言。其中使用最廣泛、影響最大的當(dāng)推Basic語(yǔ)言和C語(yǔ)言。C語(yǔ)言最初不是為初學(xué)者設(shè)計(jì)的,而是為計(jì)算機(jī)專業(yè)人員設(shè)計(jì)的。大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語(yǔ)言編寫(xiě)的。但是隨著軟件規(guī)模的增大,用C語(yǔ)言編寫(xiě)程序漸漸顯得有些吃力了。C++是由AT&TBell(貝爾)實(shí)驗(yàn)室的BjarneStroustrup博士及其同事于20世紀(jì)80年代初在C語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)成功的。C++保留了C語(yǔ)言原有的所有優(yōu)點(diǎn),增加了面向?qū)ο蟮臋C(jī)制。C++是由C發(fā)展而來(lái)的,與C兼容。用C語(yǔ)言寫(xiě)的程序基本上可以不加修改地用于C++。從C++的名字可以看出它是C的超越和集中。C++既可用于面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),是一種功能強(qiáng)大的混合型程序設(shè)計(jì)語(yǔ)言。C是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過(guò)程(事務(wù))控制)。而對(duì)于C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域,這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程(事務(wù))控制。所以C與C++的最大區(qū)別在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤霸O(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中”,而就語(yǔ)言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了?錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒(méi)有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫(xiě)出非常好的東西。語(yǔ)言本身而言,C是C++的子集,那么這是什么樣的一個(gè)子集?從上文可以看出,C實(shí)現(xiàn)了C++中過(guò)程化控制及其他相關(guān)功能,而在C++中的C,相對(duì)于原來(lái)的C還有所加強(qiáng),引入了重載、內(nèi)聯(lián)函數(shù)、異常處理等內(nèi)容,C++更是拓展了面向?qū)ο笤O(shè)計(jì)的內(nèi)容,如類(lèi)、繼承、虛函數(shù)、模板和包容器類(lèi)等。

所以相對(duì)于C,C++包含了更豐富的“設(shè)計(jì)”的概念,但C是C++的一個(gè)子集,也具有強(qiáng)大的功能,同樣值得學(xué)習(xí)。目前,Java主要用在Web開(kāi)發(fā),手機(jī)游戲及一些平臺(tái)游戲的開(kāi)發(fā),因?yàn)樗哂泻芎玫目缙脚_(tái)性,現(xiàn)在Java與Linux結(jié)合得非常好,在手機(jī)等各種電子產(chǎn)品上應(yīng)用非常廣泛。C語(yǔ)言現(xiàn)在主要用與系統(tǒng)開(kāi)發(fā),桌面應(yīng)用軟件的開(kāi)發(fā),更多的是用在游戲領(lǐng)域,當(dāng)然,只要你愿意,也可以開(kāi)發(fā)Web程序,但是在開(kāi)發(fā)難度上會(huì)增加不少。這些足以證明C語(yǔ)言是比Java更強(qiáng)大的語(yǔ)言,但是也比Java更加難以掌握,里面的指針是所有程序員都為之頭痛的,而繼承了C的所有優(yōu)點(diǎn)的Java語(yǔ)言則完全沒(méi)有這個(gè)問(wèn)題,可以說(shuō)Java是C語(yǔ)言的進(jìn)化版本之一,為什么是之一呢,因?yàn)檫€有C++,其實(shí)Java就是繼承了C/C++的優(yōu)點(diǎn)而產(chǎn)生的高級(jí)語(yǔ)言,它可以說(shuō)具有兩者的全部?jī)?yōu)點(diǎn),并剔除了其中不好的地方,但即使如此也不能否認(rèn)C/C++仍然具有強(qiáng)大的優(yōu)勢(shì),尤其是在系統(tǒng)程序的開(kāi)發(fā)上,這是Java無(wú)法比擬的。所以Java能做的C也可以做,而C能做的Java也可以做,只是兩者的側(cè)重點(diǎn)不一樣。3.C語(yǔ)言的缺點(diǎn)C語(yǔ)言的缺點(diǎn)主要是表現(xiàn)在數(shù)據(jù)的封裝性上,這一點(diǎn)使得C在數(shù)據(jù)的安全性上做的有很大缺陷,這也是C和C++的一大區(qū)別。C語(yǔ)言的語(yǔ)法限制不太嚴(yán)格,對(duì)變量的類(lèi)型約束不嚴(yán)格,影響程序的安全性,對(duì)數(shù)組下標(biāo)越界不做檢查等。從應(yīng)用的角度,C語(yǔ)言比其他高級(jí)語(yǔ)言較難掌握。指針是C語(yǔ)言的一大特色,可以說(shuō)C語(yǔ)言優(yōu)于其他高級(jí)語(yǔ)言的一個(gè)重要原因就是它有指針操作,可以直接進(jìn)行靠近硬件的操作,但是C的指針操作也給它帶來(lái)了很多不安全的因素。目前,C++在這方面做了很好的改進(jìn),在保留了指針操作的同時(shí)又增強(qiáng)了安全性。Java取消了指針操作,提高了安全性。1.1.3了解VisualC++6.0集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)環(huán)境(IntegratedDevelopingEnvironment,IDE)是一個(gè)綜合性的工具軟件,它把程序設(shè)計(jì)全過(guò)程所需要的各項(xiàng)功能集合在一起,為程序設(shè)計(jì)人員提供完整的服務(wù)。但集成開(kāi)發(fā)環(huán)境并不是把各種功能簡(jiǎn)單地拼接在一起,而是把它們有機(jī)地結(jié)合起來(lái),統(tǒng)一在一個(gè)圖形化操作界面下,為程序設(shè)計(jì)人員提供盡可能高效、便利的服務(wù)。C語(yǔ)言的開(kāi)發(fā)環(huán)境有很多,最流行的主要是TurboC系列和VisualC++6.0開(kāi)發(fā)環(huán)境。TurboC系列對(duì)幫助理解內(nèi)存溢出等概念比較方便;VisualC++6.0雖然常用來(lái)編寫(xiě)C++源程序,但它同時(shí)兼容C語(yǔ)言程序的開(kāi)發(fā),并且其編輯器除了具備一般文本編輯器的基本功能以外,還能根據(jù)C語(yǔ)言的語(yǔ)法規(guī)則,自動(dòng)識(shí)別程序文本中的不同成分,并且用不同的顏色加以區(qū)別,為使用者提供很好的提示作用。因此本書(shū)選擇VC++6.0作為C語(yǔ)言的開(kāi)發(fā)工具。2.創(chuàng)建C項(xiàng)目建立一個(gè)項(xiàng)目可以通過(guò)VC6.0的向?qū)瓿?。單擊主菜單中“文件”→“新建”命令,彈出如圖1-2所示的對(duì)話框。在“工程”選項(xiàng)中列出了16個(gè)可以建立的項(xiàng)目選項(xiàng),編寫(xiě)一般C語(yǔ)言程序時(shí)選擇“Win32ConsoleApplication”選項(xiàng),然后在右上側(cè)的“工程名稱”文本框中輸入項(xiàng)目名稱,“位置”中選擇項(xiàng)目要保存的路徑,單擊下方的“確定”按鈕即可進(jìn)入下一個(gè)界面。工程名稱可以由字母和數(shù)字組成,但是第一個(gè)字符必須是字母,下畫(huà)線也被認(rèn)為是字母。在如圖1-3所示界面中,顯示的是可以創(chuàng)建的應(yīng)用程序類(lèi)型。VC6.0中可以創(chuàng)建的程序類(lèi)型共有4種。在這里只需要選擇默認(rèn)的“一個(gè)空工程”選項(xiàng),單擊“完成”按鈕,VC6.0即可完成項(xiàng)目創(chuàng)建。項(xiàng)目創(chuàng)建完成后,VC6.0會(huì)自動(dòng)顯示創(chuàng)建的項(xiàng)目信息,如圖1-4所示。

圖1-3控制臺(tái)程序類(lèi)型對(duì)話框

圖1-4項(xiàng)目創(chuàng)建完成對(duì)話框3.創(chuàng)建和編輯C文件單擊“文件”→“新建”菜單命令打開(kāi)文件創(chuàng)建對(duì)話框,向所創(chuàng)建的項(xiàng)目中添加源文件。在“文件”選項(xiàng)卡中,列出了可以創(chuàng)建的文件類(lèi)型,如圖1-5所示。圖1-5創(chuàng)建的項(xiàng)目文件和本課程有關(guān)的文件類(lèi)型為“C/C++HeaderFile”和“C++SourceFile”,分別用來(lái)創(chuàng)建頭文件和源文件。選擇“C++SourceFile”選項(xiàng),勾選“添加到工程”復(fù)選框,這時(shí)項(xiàng)目名稱文本框中會(huì)默認(rèn)顯示當(dāng)前項(xiàng)目名稱,在“文件名”文本框中輸入源文件名,“位置”中會(huì)默認(rèn)顯示項(xiàng)目所在位置。單擊“確定”按鈕完成新建文件。5.運(yùn)行程序在正確的編譯和鏈接以后,可通過(guò)“組建”→“執(zhí)行”命令執(zhí)行程序,也可以在圖1-7所示的快速工具欄中單擊“執(zhí)行”按鈕執(zhí)行程序??焖俟ぞ邫谥械?個(gè)按鈕為“執(zhí)行”按鈕,在編譯鏈接后可單擊該按鈕執(zhí)行程序。也可直接單擊“執(zhí)行”按鈕,此時(shí)會(huì)自動(dòng)進(jìn)行編譯和鏈接操作。程序每次修改之后都必須重新進(jìn)行編譯鏈接才能執(zhí)行。圖1-7編譯和鏈接過(guò)程若程序執(zhí)行成功,屏幕上將會(huì)輸出執(zhí)行結(jié)果,并提示信息:Pressanykeytocontinue。此時(shí)按下任意鍵,系統(tǒng)都會(huì)返回VC6.0主窗口??蓤?zhí)行文件存放在創(chuàng)建工程時(shí)指定的子目錄debug中。圖1-7程序執(zhí)行結(jié)果如圖1-8所示。圖1-8程序運(yùn)行結(jié)果若程序執(zhí)行有誤,用戶需要返回編輯狀態(tài)修改源程序并重新進(jìn)行編譯、鏈接和運(yùn)行。1.1.4數(shù)據(jù)的輸入和輸出沒(méi)有輸出的程序的數(shù)據(jù)處理和計(jì)算結(jié)果無(wú)法展示給用戶,是沒(méi)有價(jià)值的;而如果沒(méi)有輸入操作,則無(wú)法對(duì)目標(biāo)數(shù)據(jù)進(jìn)行處理,或者只能將數(shù)據(jù)寫(xiě)在程序中,無(wú)法對(duì)不同的數(shù)據(jù)進(jìn)行處理,每次更換數(shù)據(jù)都需要更改程序和重新編譯。所以,數(shù)據(jù)的輸入和輸出是一項(xiàng)很重要的操作。C語(yǔ)言本身沒(méi)有提供輸入和輸出語(yǔ)句,輸入和輸出操作是由scanf和printf等庫(kù)函數(shù)來(lái)完成的。程序在調(diào)用這些函數(shù)時(shí),必須在源文件的開(kāi)始處加上頭文件的包含命令。其格式如下:#include<庫(kù)函數(shù)頭文件名>或#include”庫(kù)函數(shù)頭文件名”C語(yǔ)言提供了多種輸入和輸出格式,使其操作靈活、多樣,且功能強(qiáng)大。1.字符輸出函數(shù)putchar()在C語(yǔ)言中,char為字符類(lèi)型,一個(gè)char類(lèi)型的數(shù)據(jù)表示一個(gè)單一的字符。字符輸出函數(shù)putchar()的功能為將一個(gè)字符輸出到屏幕上。其一般格式為:putchar(要輸出的字符)其中參數(shù)ch為要輸出的字符,執(zhí)行成功時(shí)返回輸出字符(即ch),錯(cuò)誤時(shí)將返回EOF。所在的頭文件為stdio.h。putchar的用法見(jiàn)案例1-2?!景咐?-2】putchar的用法。源程序如下:#include<stdio.h>voidmain(){ charc1='G',c2='o',c3='d',c4='m',c5='r'; putchar(c1);putchar(c2);putchar(c2); putchar(c3);putchar('\t');//'\t'表示空格 putchar(c4),putchar(c2),putchar(c5); putchar('n');putchar('i');putchar('n');putchar('g'); putchar('\n');//'\n'表示換行}該程序的運(yùn)行結(jié)果如下:Goodmorning【案例1-3】輸出整型變量的值。源程序如下:#include<stdio.h>voidmain(){ inta=13,b=27; printf("%d%d\n",a,b); printf("a=%d,b=%d\n",a,b); printf("a+b=%d\n",a+b);}程序運(yùn)行結(jié)果如下:1327a=13,b=27a+b=40printf("a+b=%d\n",a+b);中,"a+b"=為普通字符,直接輸出,"%d"對(duì)應(yīng)后面"a+b",被替換成"a+b"的和。而"c"的值為1.3,但是因?yàn)槠漭敵龈袷揭鬄檎麛?shù),則只輸出"c"的整數(shù)部分,即輸出為"c=1"。printf函數(shù)常用的格式說(shuō)明符如表1-1所示。表1-1printf函數(shù)格式說(shuō)明符格式轉(zhuǎn)換符 含義 舉例 結(jié)果%d 以十進(jìn)制形式輸出一個(gè)整型數(shù)據(jù) intx=10;printf("%d",x); 10%o 以八進(jìn)制形式輸出一個(gè)無(wú)符號(hào)整型數(shù)據(jù) intx=10;printf("%o",x); 12%x或%X 以十六進(jìn)制形式輸出一個(gè)無(wú)符號(hào)整型數(shù)據(jù) intx=10;printf("%x",x); a%u 以十進(jìn)制形式輸出一個(gè)無(wú)符號(hào)整型數(shù)據(jù) intx=10;printf("%u",x); 10%f 以十進(jìn)制形式輸出一個(gè)浮點(diǎn)型數(shù)據(jù) floatf=-12.3;printf("%f",f); -12.300000%e或%E 以指數(shù)形式輸出一個(gè)浮點(diǎn)型數(shù)據(jù) floatf=12.3;printf("%e",f); 1.230000e+001%c 輸出一個(gè)字符型數(shù)據(jù) charc='c';printf("%c",c); c%s 輸出一個(gè)字符串 chars="Hello!";printf("%s",s); Hello!另外,在格式說(shuō)明中,可以在%和上述格式字符間插入以下幾種修飾符,用來(lái)表示數(shù)據(jù)的輸出寬度,修飾符的用法如表1-2所示。表1-2printf修飾符用法格式 說(shuō)明l 可加在格式符d、o、x、u前面,如%ld,表示長(zhǎng)整型m m表示一個(gè)正整數(shù),指定數(shù)據(jù)輸出寬度n n表示一個(gè)正整數(shù),對(duì)于實(shí)數(shù),表示輸出n位小數(shù);對(duì)于字符串,表示截取的字符個(gè)數(shù)- 輸出的內(nèi)容左對(duì)齊【案例1-4】修飾符的用法。源程序如下:#include<stdio.h>voidmain(){ inta=123;floatf=123.456; printf("%8d,%2d\n",a,a); printf("a=%d,a=%-6d,a=%6d\n",a,a,a); printf("%f,%8f,%8.1f,%.2f,%.2e\n",f,f,f,f,f);}程序的運(yùn)行結(jié)果如下:

123,123a=123,a=123,a=123123.456001,123.456001,123.5,123.46,123e+002“%5.4s”表示截取字符串中前4位,并以5個(gè)字符寬度顯示在屏幕上?!皃rintf("Nicetomeetyou!\n")”為printf最簡(jiǎn)單的用法,沒(méi)有用到任何格式控制說(shuō)明和變量,直接將字符串顯示在屏幕上。轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線“\”開(kāi)頭,后面跟一個(gè)或幾個(gè)字符。轉(zhuǎn)義字符有特殊的含義,不同于普通的字符,所以稱為轉(zhuǎn)義字符。例如,最常用的轉(zhuǎn)義字符“\n”,其意義為“回車(chē)換行”。轉(zhuǎn)義字符主要用來(lái)表示那些不用于一般字符,而且不便于表示的控制代碼。因?yàn)椤癨”為轉(zhuǎn)義字符的標(biāo)志,所以每當(dāng)“\”出現(xiàn)時(shí),編譯器將自動(dòng)把其和后面的字符連接起來(lái)讀取其含義,而編程人員想要輸出“\”字符時(shí)便無(wú)法完成。所以用“\\”的形式來(lái)表示輸出“\”。如在案例1-5中,“\t\\\n”表示先輸出一個(gè)空格,然后輸出一個(gè)字符“\”,再轉(zhuǎn)到下一行。常用的轉(zhuǎn)義字符及其含義如表1-3所示。表1-3常用的轉(zhuǎn)義符及其含義轉(zhuǎn)義符 含義\t 空格,跳到下一個(gè)tab位置\n 換行,將但前位置移到下一行開(kāi)頭\b 退格,將當(dāng)前位置移到前一列開(kāi)頭\r 回車(chē),將當(dāng)前位置移到本行開(kāi)頭\f 換頁(yè),將當(dāng)前位置移到下頁(yè)開(kāi)頭\\ 反斜線字符“\”\’ 單引號(hào)\” 雙引號(hào)\a 響鈴\ddd 1到3位八進(jìn)制數(shù)所代表的字符\xhh 1到2位十六進(jìn)制數(shù)所代表的字符【案例1-6】打印一個(gè)金字塔。源程序如下:#include<stdio.h>voidmain(){ printf("*\n"); printf("***\n"); printf("*****\n"); printf("*******\n"); printf("*********\n"); printf("***********\n"); printf("*************\n"); printf("***************\n"); printf("*****************\n"); printf("*******************\n");}該程序的輸出結(jié)果如下:

****************************************************************************************************通過(guò)空格和換行等控制字符顯示的位置,可以在屏幕上打印很多圖形,讀者可自己進(jìn)行嘗試。3.字符輸入函數(shù)getchar()字符輸如函數(shù)getchar()的功能為讀取屏幕上的一個(gè)字符,所在頭文件也是stdio.h。getchar運(yùn)行時(shí)會(huì)暫停,等待用戶的輸入,且接收用戶輸入時(shí)必須按Enter鍵結(jié)束,然后取走所輸入字符的第一個(gè)字符。字符輸入函數(shù)每執(zhí)行一次就從屏幕上讀取一個(gè)字符,可將這個(gè)字符賦值給一個(gè)變量?!景咐?-7】字符輸入函數(shù)的用法。源程序如下:#include<stdio.h>voidmain(){ charc1,c2; printf("請(qǐng)輸入第一個(gè)字符:"); c1=getchar(); printf("您輸入的第一個(gè)字符為%c\n",c1); printf("請(qǐng)輸入第二個(gè)字符:"); c2=getchar(); printf("您輸入的第二個(gè)字符為"); putchar(c2); printf("\n");}程序運(yùn)行結(jié)果如下:請(qǐng)輸入第一個(gè)字符:a您輸入的第一個(gè)字符為a請(qǐng)輸入第二個(gè)字符:您輸入的第二個(gè)字符為在程序中輸入字符a,然后按Enter鍵,程序的輸出如案例1-7運(yùn)行結(jié)果所示。每當(dāng)按下Enter鍵時(shí),向鍵盤(pán)緩沖區(qū)發(fā)去一個(gè)“回車(chē)”(\r)和一個(gè)“換行”(\n),“\r”將光標(biāo)移動(dòng)到本行行首,“\n”將光標(biāo)移動(dòng)到下一行。這時(shí)緩沖區(qū)中有3個(gè)字符:“a\r\n”。第一個(gè)getchar函數(shù)讀取第一字符a賦值給c1,并將回車(chē)符“\r”從緩沖區(qū)中去掉,但是留下了“\n”,于是第二個(gè)getchar將“\n”賦值該給c2。要解決這個(gè)問(wèn)題,可以在兩個(gè)scanf()函數(shù)之后加入語(yǔ)句fflush(stdin),其作用為清除緩沖區(qū),這時(shí)可輸入第二個(gè)字符作為c2。如將案例1-7更改如下:#include<stdio.h>voidmain(){charc1,c2;printf("請(qǐng)輸入第一個(gè)字符:");c1=getchar();printf("您輸入的第一個(gè)字符為%c\n",c1);fflush(stdin);printf("請(qǐng)輸入第二個(gè)字符:");c2=getchar();printf("您輸入的第二個(gè)字符為");putchar(c2);printf("\n");}則程序的運(yùn)行結(jié)果如下:請(qǐng)輸入第一個(gè)字符:a您輸入的第一個(gè)字符為a請(qǐng)輸入第二個(gè)字符:b您輸入的第二個(gè)字符為b注意,只有在讀取的數(shù)據(jù)為字符或字符串類(lèi)型時(shí),才會(huì)發(fā)生上述問(wèn)題,其他情況下均不需要情況緩沖區(qū),這是因?yàn)樵谧x取其他類(lèi)型(如整型)的數(shù)據(jù)時(shí),會(huì)跳過(guò)空白字符(空格、制表符和換行符)直到遇到一個(gè)非空白字符。另外,getche()和getch()也是字符輸入函數(shù),其所在的頭文件均為conio.h。4.格式輸入函數(shù)scanf()scanf()函數(shù)的作用為按照用戶指定的格式從鍵盤(pán)上把數(shù)據(jù)輸入到指定的變量中,所在包為stdio.h。scanf的一般格式為:scanf("格式控制串",地址表列);scanf接受用戶輸入時(shí)可以空格、制表符和換行符結(jié)束。格式控制串的使用規(guī)則和printf相同,但是輸入時(shí)不能規(guī)定精度,如“sacnf(“7.3f”,&f)”是非法的。用&表示某變量所在的內(nèi)存單元地址,所讀入的數(shù)據(jù)要賦值給某變量,即保存到該變量所在的地址,用“&變量名”表示?!景咐?-8】讀取數(shù)據(jù)。源程序如下:#include<stdio.h>voidmain(){ intn; charc1,c2,c3,c4; printf("Pleaseenteroneinteger:"); scanf("%d",&n); fflush(stdin);//清空緩沖區(qū) printf("Pleaseenterfourcharacters:"); scanf("%c%c%c%c",&c1,&c2,&c3,&c4); printf("Youhaveentered%dand%c%c%c%c\n",n,c1,c2,c3,c4);}程序運(yùn)行結(jié)果如下:Pleaseenteroneinteger:4Pleaseinterfourcharacters:abcdYouhaveentered4andabcd運(yùn)行以上程序時(shí),在輸入“abcd”時(shí)不能添加空格,否而程序會(huì)將空格讀取并賦值給指定的變量。【案例1-9】含有附加控制符的數(shù)據(jù)輸入。源程序如下:#include<stdio.h>voidmain(){ intn1,n2,n3; printf("請(qǐng)輸入三個(gè)整數(shù):"); scanf("%d%d%d",&n1,&n2,&n3); printf("n1=%d,n2=%d,n3=%d\n",n1,n2,n3); printf("請(qǐng)輸入三個(gè)整數(shù):"); scanf("%2d%3d%4d",&n1,&n2,&n3); printf("n1=%d,n2=%d,n3=%d\n",n1,n2,n3); printf("請(qǐng)輸入三個(gè)整數(shù):"); scanf("%d,%d,%d",&n1,&n2,&n3); printf("n1=%d,n2=%d,n3=%d\n",n1,n2,n3);}程序輸出結(jié)果如下:請(qǐng)輸入三個(gè)整數(shù):123n1=1,n2=2,n3=3請(qǐng)輸入三個(gè)整數(shù):123456n1=12,n2=345,n3=6請(qǐng)輸入三個(gè)整數(shù):1,23,345n1=1,n2=23,n3=456第一次輸入時(shí)按順序輸入三個(gè)整數(shù)數(shù)據(jù),之間以空格表示一個(gè)數(shù)據(jù)輸入結(jié)束,分別將三個(gè)整數(shù)賦值給n1、n2和n3。第二次輸入時(shí),scanf函數(shù)中的整型變量根據(jù)格式項(xiàng)中指定的列寬來(lái)分隔數(shù)據(jù)。在輸入123456后,系統(tǒng)將前兩個(gè)寬度數(shù)據(jù)12賦值給n1,中間三個(gè)寬度數(shù)據(jù)345賦值給n2,最后只剩下一個(gè)寬度數(shù)據(jù),小于指定寬度,此時(shí)只需將剩余數(shù)據(jù)全部賦值給n3即可。如最后剩余數(shù)據(jù)寬度大于指定寬度,也只截取指定寬度數(shù)據(jù)。第三次輸入時(shí),scanf函數(shù)格式控制串“%d,%d,%d”中含“,”,則在輸入數(shù)據(jù)時(shí)也必須在數(shù)據(jù)之間添加逗號(hào),否則會(huì)顯示輸入錯(cuò)誤。1.1.5任務(wù)實(shí)現(xiàn)1.問(wèn)題描述學(xué)生成績(jī)管理是學(xué)校教學(xué)管理中十分重要又相當(dāng)復(fù)雜的管理工作之一。為了保證學(xué)校的信息流暢、工作高效,有必要設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng)。學(xué)生成績(jī)管理系統(tǒng)完成一系列的功能,包括:錄入學(xué)生信息、顯示學(xué)生信息、查詢學(xué)生信息、修改學(xué)生信息、學(xué)生成績(jī)排序等。在這里要實(shí)現(xiàn)的功能為打印學(xué)生成績(jī)管理系統(tǒng)菜單。在菜單項(xiàng)中應(yīng)列出所有的功能選項(xiàng),以供用戶選擇。在用戶選擇特定的選項(xiàng)后,進(jìn)入該功能。2.要點(diǎn)解析程序的主要功能為顯示歡迎信息并列出學(xué)生管理系統(tǒng)的主要功能供用戶選擇。主要功能包括:(1)添加學(xué)生信息。(2)查找學(xué)生信息。(3)刪除學(xué)生信息。(4)修改學(xué)生信息。(5)學(xué)生成績(jī)排序。(6)統(tǒng)計(jì)學(xué)生成績(jī)信息。(7)保存數(shù)據(jù)到文件。(8)讀取所有學(xué)生信息。3.程序?qū)崿F(xiàn)通過(guò)對(duì)上述知識(shí)的了解,便可以嘗試實(shí)現(xiàn)“學(xué)生成績(jī)管理系統(tǒng)菜單設(shè)計(jì)”任務(wù)。任務(wù)一的源程序如下:#include<stdio.h>#include<conio.h>#include<string.h>//以下為自定義函數(shù)聲明語(yǔ)句voidchoose(); //選擇功能函數(shù)voidinsert(); //插入學(xué)生成績(jī)信息voidsearch(); //查找學(xué)生成績(jī)信息voiddel(); //刪除學(xué)生成績(jī)信息voidmodify(); //修改學(xué)生成績(jī)信息voidorder(); //按平均分成績(jī)排序voidtotal(); //學(xué)生成績(jī)信息統(tǒng)計(jì)voidwrite(); //將學(xué)生成績(jī)信息保存在文件中voidread(); //從文件中讀取所有學(xué)生成績(jī)信息voidmain()/*主函數(shù)*/{ printf("\n\n"); printf("\t\t|---------------------STUDENT------------------|\n"); printf("\t\t|\t1.添加學(xué)生信息|\n");printf("\t\t|\t2.查找學(xué)生信息|\n"); printf("\t\t|\t3.刪除學(xué)生信息|\n"); printf("\t\t|\t4.修改學(xué)生信息|\n"); printf("\t\t|\t5.學(xué)生成績(jī)排序|\n"); printf("\t\t|\t6.統(tǒng)計(jì)學(xué)生成績(jī)信息|\n"); printf("\t\t|\t7.保存數(shù)據(jù)到文件|\n"); printf("\t\t|\t8.讀取所有學(xué)生信息|\n"); printf("\t\t|\t0.退出系統(tǒng)|\n"); printf("\t\t|----------------------------------------------|\n\n"); printf("choose(0-7):"); choose();//通過(guò)用戶輸入選擇相應(yīng)的功能實(shí)現(xiàn)}程序運(yùn)行結(jié)果如圖1-9所示。圖1-9運(yùn)行結(jié)果任務(wù)1.2雞兔同籠問(wèn)題任務(wù)目標(biāo)了解C語(yǔ)言中的基本數(shù)據(jù)類(lèi)型。掌握數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換方法。了解常量和變量的概念,掌握變量定義的方法。掌握C語(yǔ)言中運(yùn)算符和表達(dá)式的概念,掌握幾種表達(dá)式的含義和用法。實(shí)現(xiàn)雞兔同籠問(wèn)題程序1.2.1基本數(shù)據(jù)類(lèi)型計(jì)算機(jī)語(yǔ)言中的數(shù)據(jù)類(lèi)型是為了高效處理不同數(shù)據(jù)而引入的一個(gè)概念,通過(guò)數(shù)據(jù)類(lèi)型把不同特征的數(shù)據(jù)以及這些數(shù)據(jù)的處理方法封裝在一起,既便于對(duì)信息的處理,也便于計(jì)算機(jī)硬件的實(shí)現(xiàn)。例如,C語(yǔ)言中有整數(shù)類(lèi)型、浮點(diǎn)類(lèi)型、字符類(lèi)型等基本數(shù)據(jù)類(lèi)型,另外,還提供了自定義數(shù)據(jù)類(lèi)型。下面具體講解每一種基本數(shù)據(jù)類(lèi)型。1.整數(shù)類(lèi)型整數(shù)類(lèi)型也稱為整型,用來(lái)存放整數(shù)數(shù)據(jù),如1、21、-4、0等,在C語(yǔ)言中用關(guān)鍵字int來(lái)表示。整型數(shù)據(jù)可以為十進(jìn)制、八進(jìn)制(以0開(kāi)頭)或十六進(jìn)制(以0x開(kāi)頭)。根據(jù)所占內(nèi)存空間大小的不同,整型數(shù)據(jù)又可以分為三種:整型,以int表示;短整型,以shortint表示,簡(jiǎn)寫(xiě)為short;長(zhǎng)整型,以longint表示,簡(jiǎn)寫(xiě)為long。int、short和long具體長(zhǎng)度和系統(tǒng)及編譯器有關(guān)。除上述三種類(lèi)型以外,整型數(shù)據(jù)還可以分為有符號(hào)整數(shù)(用signed表示,通??梢院雎裕┖蜔o(wú)符號(hào)整數(shù)(用unsigned表示)。有符號(hào)整數(shù)存儲(chǔ)時(shí)一般用最高位作為符號(hào)位,0為正數(shù),1為負(fù)數(shù)。無(wú)符號(hào)整數(shù)只能表示正數(shù)。2.浮點(diǎn)類(lèi)型浮點(diǎn)類(lèi)型用來(lái)存放小數(shù)或者超出整數(shù)范圍的數(shù)值。浮點(diǎn)類(lèi)型分為單精度型和雙精度型兩種:?jiǎn)尉刃陀藐P(guān)鍵字float來(lái)表示,有4字節(jié);雙精度型用關(guān)鍵字double表示,需要8字節(jié)存放。標(biāo)準(zhǔn)格式的浮點(diǎn)數(shù)在存儲(chǔ)時(shí)可分為三個(gè)部分:符號(hào)位、指數(shù)位、尾數(shù)位。為了統(tǒng)一表示,尾數(shù)位應(yīng)該小于1。由于浮點(diǎn)類(lèi)型提供的有效數(shù)據(jù)個(gè)數(shù)總是有限的,在有效位以外的數(shù)字將會(huì)被舍去?!景咐?-10】浮點(diǎn)類(lèi)型。源程序如下:#include<stdio.h>voidmain(){ doubled; floatf; d=123456789123.45; printf("d=%f\n",d); f=123456789123.45; printf("f=%f\n",f);}程序運(yùn)行結(jié)果如下:d=123456789123.450000f=123456790528.000000double所能表示的數(shù)據(jù)長(zhǎng)度大于float,所以程序中對(duì)同樣的數(shù)據(jù),double類(lèi)型可以完整地記錄所有有效位,而float只能記錄前7位有效數(shù)據(jù),后面的數(shù)據(jù)沒(méi)有意義,幾乎不起作用。3.字符類(lèi)型字符類(lèi)型數(shù)據(jù)如字母A~Z、數(shù)字、符號(hào)、換行符、空格等,C語(yǔ)言中用char表示字符類(lèi)型數(shù)據(jù)。在計(jì)算機(jī)中,字符是以ASCII碼的形式存儲(chǔ)的,每個(gè)字符都有對(duì)應(yīng)的ASCII碼。例如,大寫(xiě)字母A對(duì)應(yīng)的ASCII碼值為65,即一個(gè)整數(shù)。因此,字符類(lèi)型和整型關(guān)系非常密切,可以把字符類(lèi)型看作為特殊的整型?!景咐?-11】查看字符對(duì)應(yīng)ASCII。源程序如下:#include<stdio.h>voidmain(){ charc1='A',c2='Z',c3='a',c4='z'; intn1=33,n2=40,n3=53,n4=63; printf("A———%dZ———%d\n",c1,c2); printf("a———%dz———%d\n",c3,c4); printf("33———%c40———%c\n",n1,n2); printf("53———%c64———%c\n",n3,n4);}程序運(yùn)行結(jié)果如下:A---65Z---90a---97z---12233---!40---<53---564---?從程序運(yùn)行結(jié)果中可以看出,A和Z對(duì)應(yīng)的ASCII碼分別為65和90;ASCII碼中33對(duì)應(yīng)的符合為!,64對(duì)應(yīng)的字符為?。4.?dāng)?shù)據(jù)類(lèi)型轉(zhuǎn)換數(shù)據(jù)類(lèi)型轉(zhuǎn)換分類(lèi)自動(dòng)轉(zhuǎn)換和強(qiáng)制類(lèi)型轉(zhuǎn)換。自動(dòng)轉(zhuǎn)換發(fā)生在參與運(yùn)算的多個(gè)操作數(shù)類(lèi)型不一致時(shí),則先轉(zhuǎn)換成同一類(lèi)型,再進(jìn)行計(jì)算,如加法操作中兩個(gè)操作數(shù)分別為int類(lèi)型和float類(lèi)型,則都先轉(zhuǎn)換為float類(lèi)型,再進(jìn)行計(jì)算,計(jì)算結(jié)果為float類(lèi)型。自動(dòng)類(lèi)型轉(zhuǎn)換的規(guī)則如下:double、float→long→unsigned→int→char、short自動(dòng)類(lèi)型轉(zhuǎn)換由機(jī)器自動(dòng)完成,并且不會(huì)丟失數(shù)據(jù)。強(qiáng)制類(lèi)型轉(zhuǎn)換是通過(guò)類(lèi)型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的。其一般形式為:(類(lèi)型說(shuō)明符)(表達(dá)式)其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類(lèi)型說(shuō)明符所表示的類(lèi)型。例如:floata=5.432;intb=(int)a;則把a(bǔ)轉(zhuǎn)換成整型1.2.2常量和變量每個(gè)C程序中處理的數(shù)據(jù),無(wú)論哪種數(shù)據(jù)類(lèi)型,都是以常量和變量的形式出現(xiàn)的。在程序中,常量是可以不經(jīng)說(shuō)明而直接引用,而變量是必須先定義后使用的。1.常量常量為程序執(zhí)行過(guò)程中值保持不變的量。C語(yǔ)言中常量可以分為兩種:直接常量和符號(hào)常量。直接常量為直接以數(shù)據(jù)形式表現(xiàn)的常量,也稱為常數(shù)。直接常量根據(jù)類(lèi)型又可以分為4種:整型常量、實(shí)型常量、字符常量和字符串常量。整型常量有3種表現(xiàn)形式:十進(jìn)制整數(shù),如0、23、-23等;八進(jìn)制整數(shù),以數(shù)字0開(kāi)頭,如012、-034、0567等;十六進(jìn)制整數(shù),以0x開(kāi)頭,如0x123、0xa3等。實(shí)型常量有兩種表現(xiàn)形式:由數(shù)字和小數(shù)點(diǎn)組成的實(shí)型數(shù)據(jù),如12.34,-567.08等;以指數(shù)形式表示的實(shí)型數(shù)據(jù),如12.3e4,表示12.3*1000,e后面必須為整數(shù)。字符常量指單一的字符數(shù)據(jù),一般由單引號(hào)引起來(lái),如'a'、'!'、'\n'、'4'等。任意數(shù)字均可被定義為字符常量,但定義為字符常量以后為字符類(lèi)型,不能參與數(shù)字計(jì)算。字符串常量為一串字符,由雙引號(hào)引起來(lái),如"hello"、"12345"等。字符常量'a'和字符串常量"a"是不同的,因?yàn)檫M(jìn)算計(jì)在存儲(chǔ)時(shí),會(huì)自動(dòng)在字符串的結(jié)尾添加'\0'表示字符串的結(jié)束,所以"a"實(shí)際上由'a'和'\0'兩個(gè)字符組成。符合常量為用符合表示數(shù)據(jù)的常量。符號(hào)常量在使用前必須先定義,通常用大寫(xiě)字母來(lái)定義符合常量。符合常量一旦定義好之后不能在程序執(zhí)行過(guò)程中修改其值。符合常量定義格式為:#define常量名常量值【案例1-12】符號(hào)常量的使用。源程序如下:#include<stdio.h>#definePI3.14voidmain(){

floatradius; //表示圓的半徑 floatarea; //表示圓的面積 printf("請(qǐng)輸入圓的半徑:"); scanf("%f",&radius); area=PI*radius*radius; printf("圓的半徑為%f\n圓的面積為%f\n",radius,area);}程序輸出結(jié)果如下:請(qǐng)輸入圓的半徑:10圓的半徑為10.000000圓的面積為314.0000002.變量變量是指在程序執(zhí)行期間值可以發(fā)生變化的量。變量代表內(nèi)存中具有特定屬性的內(nèi)存單元,用來(lái)存放程序執(zhí)行過(guò)程中的輸入數(shù)據(jù)、中間結(jié)果和最終結(jié)果。一個(gè)變量應(yīng)該有一個(gè)名字,映射到特定存儲(chǔ)單元,存儲(chǔ)單元內(nèi)存放變量值,如圖1-10所示。圖1-10變量的存儲(chǔ)變量名為變量標(biāo)識(shí)符,在編譯過(guò)程中通過(guò)變量名查找相應(yīng)的內(nèi)存單元,并從內(nèi)存單元中讀取數(shù)據(jù)。變量的命名必須符合一定的規(guī)范:變量名必須以字母打頭,名字中間只能由字母、數(shù)字和下畫(huà)線“_”組成;變量名的長(zhǎng)度不得超過(guò)255個(gè)字符;變量名在有效的范圍內(nèi)必須是唯一的。在C語(yǔ)言中,變量必須“先聲明、再使用”,在使用一個(gè)變量之前,必須先對(duì)它進(jìn)行定義:指定數(shù)據(jù)類(lèi)型和一個(gè)唯一的變量名。變量聲明格式如下:數(shù)據(jù)類(lèi)型符變量名;可以在一個(gè)變量類(lèi)型符后定義多個(gè)變量,變量間用逗號(hào)隔開(kāi),但最后一個(gè)變量后必須加“;”。在變量聲明的同時(shí)可以給變量賦值。如“inta”,表示定義一個(gè)類(lèi)型為整型的變量a;“charc='a'”;表示聲明一個(gè)類(lèi)型為字符型的變量c,同時(shí)給c賦值為字符a。1.2.3運(yùn)算符和表達(dá)式C語(yǔ)言中,對(duì)常量和變量的處理是通過(guò)不同的運(yùn)算來(lái)實(shí)現(xiàn)的,用來(lái)表示各種運(yùn)算的符合稱為運(yùn)算符,常量和變量通過(guò)運(yùn)算符組成C語(yǔ)言的表達(dá)式。C語(yǔ)言中運(yùn)算符的種類(lèi)很多,這里重點(diǎn)介紹算數(shù)運(yùn)算、賦值運(yùn)算和逗號(hào)運(yùn)算,以及相對(duì)應(yīng)的表達(dá)式。1.算術(shù)運(yùn)算和算術(shù)表達(dá)式算術(shù)運(yùn)算符可分為兩類(lèi):雙目運(yùn)算符需要兩個(gè)運(yùn)算對(duì)象,單目運(yùn)算符只需要一個(gè)運(yùn)算對(duì)象。運(yùn)算對(duì)象可以是常數(shù)、變量和函數(shù)等。C語(yǔ)言中提供了5個(gè)基本運(yùn)算符:加法運(yùn)算符“+”——雙目運(yùn)算符,求兩個(gè)數(shù)相加之和,如a+b、3+2等。減法運(yùn)算符“-”——可作為雙目運(yùn)算符,求兩個(gè)數(shù)相減的差,如a-b、5-4等;也可作單目運(yùn)算符,表示運(yùn)算對(duì)象取負(fù)數(shù),如-4、-a等。乘法運(yùn)算符“*”——雙目運(yùn)算符,取兩個(gè)數(shù)的乘積,如6*2、a*b等。除法運(yùn)算符“/”——雙目運(yùn)算符,求兩個(gè)數(shù)相除的商,如a/b、3/2等,0不能作為除數(shù)。如果兩個(gè)運(yùn)算對(duì)象都是整數(shù),則商也是整數(shù),得到的結(jié)果只取整數(shù)部分;如果有其中一個(gè)運(yùn)算對(duì)象是實(shí)數(shù),則計(jì)算結(jié)果也用實(shí)數(shù)表示。取模運(yùn)算符“%”——雙目運(yùn)算符,求兩個(gè)數(shù)相除的余數(shù),如5%3=2,其中兩個(gè)操作數(shù)都必須為整數(shù)。C語(yǔ)言中還提供了自增運(yùn)算符“++”和自減運(yùn)算符“--”,分別表示將操作對(duì)象加1或減1,然后存回到原操作對(duì)象中。這兩個(gè)運(yùn)算符都是單目運(yùn)算符,運(yùn)算對(duì)象只能是變量,且只能為整型或字符型。自增和自減操作符可以放在操作對(duì)象的前面,也可以放在操作對(duì)象的后面,其區(qū)別可看案例1-13?!景咐?-13】自增和自減操作符的使用。源程序如下:#include<stdio.h>voidmain(){ inta=3,b; b=++a; printf("a=%d,b=%d\n",a,b); b=a++; printf("a=%d,b=%d\n",a,b);}程序運(yùn)行結(jié)果如下:a=4,b=4a=5,b=5執(zhí)行“b=++a”時(shí),先對(duì)a進(jìn)行加1運(yùn)算,計(jì)算結(jié)果替換原來(lái)a的值,然后再將a的值賦給b,所以a=b=4;而執(zhí)行“b=a++”運(yùn)算時(shí),先將a的值賦給b,然后再對(duì)a進(jìn)行加1運(yùn)算,用運(yùn)算后的值替換原來(lái)a的值,所以此時(shí)a=5,b=4。自減運(yùn)算的使用方法同上。用算術(shù)運(yùn)算符和表達(dá)式將運(yùn)算對(duì)象連接起來(lái)的式子成為算術(shù)表達(dá)式,例如5+3、a++、(3+a)*b等,都是算數(shù)表達(dá)式。計(jì)算算術(shù)表達(dá)式時(shí)要注意運(yùn)算符的結(jié)合性和優(yōu)先級(jí),如從左到右運(yùn)算、先算括號(hào)里面的、先乘除后加減等。2.賦值運(yùn)算和賦值表達(dá)式賦值運(yùn)算用運(yùn)算符“=”表示,作用為將運(yùn)算符右邊的數(shù)據(jù),存放到左邊變量所在的內(nèi)存單元內(nèi)。含有賦值運(yùn)算符的表達(dá)式為賦值表達(dá)式。賦值運(yùn)算符左邊的操作對(duì)象必須為變量,右邊可以為常量、變量、函數(shù)等。賦值運(yùn)算符左右的操作對(duì)象必須是同一數(shù)據(jù)類(lèi)型,否則無(wú)法進(jìn)行操作。如果一個(gè)賦值語(yǔ)句中有多個(gè)賦值運(yùn)算符,則按照先右后左的順序進(jìn)行計(jì)算,如“a=b=3*2”,則先計(jì)算“b=3*2”的值,再把b的值賦給a。注意,“=”和“==”是兩個(gè)不同的操作符,“==”的作用為判斷兩個(gè)操作數(shù)是否相等,如“a==b”,該操作判斷a和b是否相等,相等則返回真1,否則返回0。除了簡(jiǎn)單的賦值運(yùn)算外,還可加上其他操作符構(gòu)成復(fù)合的賦值運(yùn)算,如賦值運(yùn)算表達(dá)式“a+=3”,表示a=a+3。同理,還有其他復(fù)合賦值運(yùn)算符-=、*=、/=、%=等?!景咐?-14】賦值表達(dá)式。源程序如下:#include<stdio.h>voidmain(){ inta=3; a+=3; a*=3; a+=a+=3; printf("a=%d\n",a);}請(qǐng)讀者自行分析該程序的運(yùn)行結(jié)果。3.逗號(hào)運(yùn)算和逗號(hào)運(yùn)算表達(dá)式逗號(hào)運(yùn)算符是把逗號(hào)“,”作為運(yùn)算符,利用逗號(hào)把多個(gè)表達(dá)式連接在一起。這樣構(gòu)成的表達(dá)式,為逗號(hào)表達(dá)式。運(yùn)算時(shí),用逗號(hào)分開(kāi)的表達(dá)式的值分別結(jié)算,但整個(gè)表達(dá)式的值是最后一個(gè)表達(dá)式的值。逗號(hào)表達(dá)式的格式為:表達(dá)式1,表達(dá)式2,…,表達(dá)式n;逗號(hào)運(yùn)算符的優(yōu)先級(jí)是最低的?!景咐?-15】逗號(hào)表達(dá)式。原程序如下:#include<stdio.h>voidmain(){ intx=2,y=5; inta,b,c; a=(y++,x+3); b=(x+3,y++,x++); c=(x++,y++,x+7); printf("a=%d,b=%d,c=%d\n",a,b,c);}程序運(yùn)行結(jié)果如下:a=5,b=2,c=11分析該程序的運(yùn)行結(jié)果:在“a=(y++,x+3)”中,將最后一個(gè)表達(dá)式“x+3”的值賦給a,得到a=5,此時(shí)x=2;“b=(x+3,y++,x++)”中,將最后一個(gè)表達(dá)式“x++”的值賦給b,“x++”為先賦值再加1,所以b=2,此時(shí)x=3;在“c=(x++,y++,x+7)”中,遵循從左到右的計(jì)算順序,先計(jì)算“x++”,得到x=4,然后再計(jì)算x+7后賦值給c,所以c=11。1.2.4任務(wù)實(shí)現(xiàn)1.問(wèn)題描述雞兔同籠問(wèn)題是一個(gè)有趣的數(shù)學(xué)問(wèn)題,問(wèn)題的描述是這樣的:一個(gè)籠子里面關(guān)了很多只雞和兔子(雞有2只腳,兔子有4只腳,沒(méi)有例外),已經(jīng)知道了籠子里面雞兔的總數(shù)為h和腳的總數(shù)為f,問(wèn)籠子里分別有多少只兔子和多少只雞。2.要點(diǎn)解析使用基本的數(shù)據(jù)運(yùn)算來(lái)解決這個(gè)問(wèn)題,有兩種解決思路。思路一每只兔子比雞多2只腳,如果先假設(shè)它們?nèi)请u,于是根據(jù)雞兔的總數(shù)就可以算出在假設(shè)下共有幾只腳,把這樣得到的腳數(shù)與題中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論