C語言項目開發(fā)教程_第1頁
C語言項目開發(fā)教程_第2頁
C語言項目開發(fā)教程_第3頁
C語言項目開發(fā)教程_第4頁
C語言項目開發(fā)教程_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學(xué)1C語言項目開發(fā)教程任務(wù)1.1學(xué)生信息管理系統(tǒng)之菜單設(shè)計任務(wù)目標(biāo)掌握C語言的基本知識,包括C語言的發(fā)展歷史、C語言的基本特點和C語言的結(jié)構(gòu)特點等。比較C語言和其他語句之間的區(qū)別。熟悉C語言的開發(fā)集成環(huán)境,學(xué)會初步創(chuàng)建、編寫、編譯和執(zhí)行一個C語言程序。掌握C語言的輸入和輸出函數(shù)的用法。實現(xiàn)學(xué)生管理系統(tǒng)菜單設(shè)計。第1頁/共65頁1.1.1C語言基本知識1.C語言發(fā)展歷史C語言的發(fā)展頗為有趣。它的原型ALGOL60語言出現(xiàn)于1960年,ALGOL60是一種面向問題的高級語言,它離硬件比較遠,不適宜編寫系統(tǒng)程序。1963年,劍橋大學(xué)將ALGOL60語言發(fā)展成為CPL(CombinedProgrammingLanguage)語言。CPL語言更接近硬件,但規(guī)模比較大,難以實現(xiàn)。1967年,劍橋大學(xué)的MatinRichards對CPL語言進行了簡化,于是產(chǎn)生了BCPL語言。1970年,美國貝爾實驗室的KenThompson將BCPL進行了修改,并為它起了一個有趣的名字“B語言”。意思是將BCPL語言煮干,提煉出它的精華。并且他用B語言寫了第一個UNIX操作系統(tǒng)。而在1973年,B語言也給人“煮”了一下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎(chǔ)上最終設(shè)計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。為了使UNIX操作系統(tǒng)推廣,1977年DennisM.Ritchie發(fā)表了不依賴于具體機器系統(tǒng)的C語言編譯文本——《可移植的C語言編譯程序》。第2頁/共65頁1978年BrianW.Kernighian和DennisM.Ritchie出版了名著《TheCProgrammingLanguage》,對C語言的流行起到了很大的推動作用。1988年,隨著微型計算機的日益普及,出現(xiàn)了許多C語言版本。由于沒有統(tǒng)一的標(biāo)準(zhǔn),使得這些C語言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國國家標(biāo)準(zhǔn)研究所(ANSI)為C語言制定了一套ANSI標(biāo)準(zhǔn)。C語言發(fā)展迅速,而且成為最受歡迎的語言之一,主要因為它具有強大的功能。許多著名的系統(tǒng)軟件,如DBASEⅢPLUS、DBASEⅣ都是由C語言編寫的。用C語言加上一些匯編語言子程序,就更能顯示C語言的優(yōu)勢了,如PC-DOS、WORDSTAR等就是用這種方法編寫的。第3頁/共65頁2.C語言的特點C語言既有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統(tǒng)設(shè)計語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計語言,編寫不依賴計算機硬件的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,就連各類科研都需要用到C語言。它適于編寫系統(tǒng)軟件、三維、二維圖形和動畫,具體應(yīng)用比如單片機以及嵌入式系統(tǒng)開發(fā)。如今,越來越多的人在學(xué)習(xí)C語言,使用C語言,用C語言開發(fā)各個領(lǐng)域中的應(yīng)用軟件。C語言生命力之所以強,是因為其具有不同于其他語言的特點。其主要特點如下。(1)簡潔緊湊、靈活方便。C語言一共只有32個關(guān)鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實用性結(jié)合起來。C語言可以像匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元。(2)運算符豐富。C語言的運算符包含的范圍很廣泛,共有34個運算符。C語言把括號、賦值、強制類型轉(zhuǎn)換等都作為運算符處理。從而使C的運算類型極其豐富,表達式類型多樣化,靈活使用各種運算符可以實現(xiàn)在其他高級語言中難以實現(xiàn)的運算。第4頁/共65頁(3)數(shù)據(jù)結(jié)構(gòu)豐富。C語言的數(shù)據(jù)類型有:整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實現(xiàn)各種復(fù)雜的數(shù)據(jù)類型的運算。并引入了指針概念,使程序效率更高。另外,C語言具有強大的圖形功能,支持多種顯示器和驅(qū)動器,且計算功能、邏輯判斷功能強大。(4)C語言是結(jié)構(gòu)式語言。結(jié)構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?,便于使用、維護以及調(diào)試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便地調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。(5)語法限制不太嚴(yán)格、程序設(shè)計自由度大。一般的高級語言語法檢查比較嚴(yán),能夠檢查出幾乎所有的語法錯誤。而C語言允許程序編寫者有較大的自由度。(6)允許直接訪問物理地址,可以直接對硬件進行操作。C語言允許直接訪問物理地址,可以直接對硬件進行操作。因此既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元,可以用來寫系統(tǒng)軟件。(7)C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高。一般只比匯編程序生成的目標(biāo)代碼效率低10%~20%。(8)C語言適用范圍大,可移植性好。C語言有一個突出的優(yōu)點就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機型。第5頁/共65頁3.C語言的結(jié)構(gòu)特點先看下面的案例,通過案例來了解C程序的結(jié)構(gòu)特點?!景咐?-1】求兩個數(shù)之和。源程序如下:#include<stdio.h> /*將stdio.h文件包含在本程序中*/voidmain() //主函數(shù){ //函數(shù)體開始

inta,b,c; //定義三個int類型的變量a,b,ca=3;b=2; //變量賦值

c=a+b; //將變量a和變量b的和賦給變量cprintf("%d\n",c); /*調(diào)用標(biāo)準(zhǔn)輸出函數(shù),按十進制整數(shù)形式輸出變量c*/} /*函數(shù)體結(jié)束*/該程序?qū)崿F(xiàn)的功能是求出整數(shù)數(shù)據(jù)a和b的和并輸出。其中a的值為3,b的值為2,將a和b的和賦值給c,然后輸出變量c的值。程序運行結(jié)果如下:5Pressanykeytocontinue第6頁/共65頁代碼中的“include<stdio.h>”為文件包含命令,其意義為將<>或“”內(nèi)指定的文件包含到本程序中,成為本程序的一部分。被包含的文件通常是由系統(tǒng)提供的,其擴展名為.h,因此也稱為頭文件或首部文件。C語言的頭文件中包括了各個標(biāo)準(zhǔn)庫函數(shù)的函數(shù)原型,并有對應(yīng)的函數(shù)實現(xiàn)。程序中調(diào)用一個庫函數(shù)時,都必須包含該函數(shù)原型所在的頭文件。在本案例中,使用了一個庫函數(shù)——prtinf,即標(biāo)準(zhǔn)輸出函數(shù)。其所在的頭文件名為stdio.h文件,因此在程序的主函數(shù)前用include命令包含了stdio.h文件。因為在程序中使用了printf()函數(shù),該函數(shù)為stdio.h中定義的標(biāo)準(zhǔn)輸出函數(shù),為了使用printf()函數(shù),需要將包含該函數(shù)相關(guān)信息的頭文件stdio.h包含到本文件中。“inta,b,c”的作用為聲明三個int,即整數(shù)類型的變量,變量名分別為a、b、c,這三個變量的取值只能為整數(shù)?!?/”和“/*…*/”均用來表示注釋?!?/”用來作單行注釋,其后面本行內(nèi)的內(nèi)容為注釋信息。“/*…*/”用作多行注釋,“/*”和“*/”之間的內(nèi)容均為注釋信息,可有多行。注釋是給閱讀程序的人看的,用來輔助理解程序,在編譯和運行階段不起作用,注釋信息可以添加在任何位置?!癱=a+b”用來實現(xiàn)加法運算,表示將a和b的值相加,再賦值給b。“printf("%d\n",c)”用來輸出。“%d”表示輸出的信息為十進制整數(shù),“\n”為換行符,在信息輸出后,屏幕上閃爍的光標(biāo)將會顯示在該輸出的下一行。mian函數(shù)是主函數(shù)的函數(shù)名,表示這是一個主函數(shù)。在主函數(shù)main()中可以調(diào)用的函數(shù)包括標(biāo)準(zhǔn)庫和自定義函數(shù)。第7頁/共65頁由上述例子可以看出,C語言結(jié)構(gòu)和書寫特點如下:C語言是由函數(shù)組成的。一個函數(shù)有一些語句組成,共同實現(xiàn)某一功能。在以后的案例中我們會看到每一個函數(shù)均可被其他函數(shù)調(diào)用,也可調(diào)用其他函數(shù),main函數(shù)除外:main函數(shù)不能被其他函數(shù)調(diào)用。C程序可以有若干個函數(shù)組成,但是其中必須有一個且只能有一個是main()。程序的執(zhí)行必須從主函數(shù)main()開始,在主函數(shù)main()中結(jié)束。C語言程序書寫自由,一行內(nèi)可以寫一條或多條語句,一條語句也可以寫在多行。用{}括起來的部分,通常表示程序的某一種層次結(jié)構(gòu)。一般情況下,左右花括號各占一行,并上下對齊,便于檢查花括號的成對性。C語言程序是區(qū)分大小寫的,如輸入Printf則程序會報錯。程序的書寫根據(jù)從屬關(guān)系采用縮進的格式,可使程序的層次結(jié)構(gòu)更加清晰,從而提高程序的可讀性。同一層次要左右對齊,第一層次的語句或說明要比高一層次的語句縮進若干個字符,這樣程序?qū)哟谓Y(jié)構(gòu)更加清晰。C語言中每一條語句和數(shù)據(jù)定義都必須以“;”結(jié)束。C語言用“//”或“/*…*/”來表示注釋。編碼過程中配合良好的注釋,可增加程序的可讀性和可維護性。對于C程序的書寫格式,讀者可從后面的程序中逐漸體會,編碼時遵循以上規(guī)則,以形成良好的編程風(fēng)格。第8頁/共65頁1.1.2C語言與其他語言1.C到C++計算機誕生初期,人們要使用計算機必須用機器語言或匯編語言編寫程序。世界上第一種計算機高級語言誕生于1954年,它是FORTRAN語言。先后出現(xiàn)了多種計算機高級語言。其中使用最廣泛、影響最大的當(dāng)推Basic語言和C語言。C語言最初不是為初學(xué)者設(shè)計的,而是為計算機專業(yè)人員設(shè)計的。大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語言編寫的。但是隨著軟件規(guī)模的增大,用C語言編寫程序漸漸顯得有些吃力了。C++是由AT&TBell(貝爾)實驗室的BjarneStroustrup博士及其同事于20世紀(jì)80年代初在C語言的基礎(chǔ)上開發(fā)成功的。C++保留了C語言原有的所有優(yōu)點,增加了面向?qū)ο蟮臋C制。C++是由C發(fā)展而來的,與C兼容。用C語言寫的程序基本上可以不加修改地用于C++。從C++的名字可以看出它是C的超越和集中。C++既可用于面向過程的結(jié)構(gòu)化程序設(shè)計,又可用于面向?qū)ο蟮某绦蛟O(shè)計,是一種功能強大的混合型程序設(shè)計語言。C是一個結(jié)構(gòu)化語言,它的重點在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進行運算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)。而對于C++,首要考慮的是如何構(gòu)造一個對象模型,讓這個模型能夠契合與之對應(yīng)的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“設(shè)計這個概念已經(jīng)被融入到C++之中”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了?錯!算法是程序設(shè)計的基礎(chǔ),好的設(shè)計如果沒有好的算法,一樣不行。而且,“C加上好的設(shè)計”也能寫出非常好的東西。語言本身而言,C是C++的子集,那么這是什么樣的一個子集?從上文可以看出,C實現(xiàn)了C++中過程化控制及其他相關(guān)功能,而在C++中的C,相對于原來的C還有所加強,引入了重載、內(nèi)聯(lián)函數(shù)、異常處理等內(nèi)容,C++更是拓展了面向?qū)ο笤O(shè)計的內(nèi)容,如類、繼承、虛函數(shù)、模板和包容器類等。

所以相對于C,C++包含了更豐富的“設(shè)計”的概念,但C是C++的一個子集,也具有強大的功能,同樣值得學(xué)習(xí)。第9頁/共65頁2.C語言到JavaJava是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,是由SunMicrosystems公司于1995年5月推出的Java程序設(shè)計語言和Java平臺(即JavaSE,JavaEE,JavaME)的總稱。Java技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。實際上,Java確實是從C語言和C++語言繼承了許多成份,甚至可以將Java看成是類C語言發(fā)展和衍生的產(chǎn)物。比如Java語言的變量聲明、操作符形式、參數(shù)傳遞、流程控制等方面和C語言,C++語言完全相同。Java與C的本質(zhì)區(qū)別是Java面向?qū)ο缶幊?,C是面向過程編程,這就使得Java具有重用的特性,在開發(fā)速度上比之C更快,但是在運行速度上卻是C更快,因為C屬于底層語言,它比Java更加親近機器,所以在許多系統(tǒng)開發(fā)上一般是用C語言,比如Windows系統(tǒng),Linux系統(tǒng),都是用C語言開發(fā)的。Java中對內(nèi)存的分配是動態(tài)的。它采用運算符new為每個對象分配內(nèi)存空間。而且,實際內(nèi)存還會隨程序運行情況而改變。程序運行中,Java系統(tǒng)自動對內(nèi)存進行掃描,對長期不用的空間作為“垃圾”進行收集,使得系統(tǒng)資源得到更充分地利用。按照這種機制,程序員不必關(guān)注內(nèi)存管理問題,這使Java程序的編寫變得簡單明了,并且避免了由于內(nèi)存管理方面的差錯而導(dǎo)致系統(tǒng)出問題。而C語言通過malloc()和free()這兩個庫函數(shù)來分別實現(xiàn)分配內(nèi)存和釋放內(nèi)存空間的,C++語言中則通過運算符operatornew和operatordelete來分配和釋放內(nèi)存。在C和C++中,程序員必須非常仔細地處理內(nèi)存的使用問題。一方面,如果對已釋放的內(nèi)存再作釋放或者對未曾分配的內(nèi)存作釋放,都會造成不可預(yù)料的后果;而另一方面,如果對長期不用的或不再使用的內(nèi)存不釋放,則會浪費系統(tǒng)資源,甚至因此造成資源枯竭。第10頁/共65頁目前,Java主要用在Web開發(fā),手機游戲及一些平臺游戲的開發(fā),因為它具有很好的跨平臺性,現(xiàn)在Java與Linux結(jié)合得非常好,在手機等各種電子產(chǎn)品上應(yīng)用非常廣泛。C語言現(xiàn)在主要用與系統(tǒng)開發(fā),桌面應(yīng)用軟件的開發(fā),更多的是用在游戲領(lǐng)域,當(dāng)然,只要你愿意,也可以開發(fā)Web程序,但是在開發(fā)難度上會增加不少。這些足以證明C語言是比Java更強大的語言,但是也比Java更加難以掌握,里面的指針是所有程序員都為之頭痛的,而繼承了C的所有優(yōu)點的Java語言則完全沒有這個問題,可以說Java是C語言的進化版本之一,為什么是之一呢,因為還有C++,其實Java就是繼承了C/C++的優(yōu)點而產(chǎn)生的高級語言,它可以說具有兩者的全部優(yōu)點,并剔除了其中不好的地方,但即使如此也不能否認(rèn)C/C++仍然具有強大的優(yōu)勢,尤其是在系統(tǒng)程序的開發(fā)上,這是Java無法比擬的。所以Java能做的C也可以做,而C能做的Java也可以做,只是兩者的側(cè)重點不一樣。第11頁/共65頁3.C語言的缺點C語言的缺點主要是表現(xiàn)在數(shù)據(jù)的封裝性上,這一點使得C在數(shù)據(jù)的安全性上做的有很大缺陷,這也是C和C++的一大區(qū)別。C語言的語法限制不太嚴(yán)格,對變量的類型約束不嚴(yán)格,影響程序的安全性,對數(shù)組下標(biāo)越界不做檢查等。從應(yīng)用的角度,C語言比其他高級語言較難掌握。指針是C語言的一大特色,可以說C語言優(yōu)于其他高級語言的一個重要原因就是它有指針操作,可以直接進行靠近硬件的操作,但是C的指針操作也給它帶來了很多不安全的因素。目前,C++在這方面做了很好的改進,在保留了指針操作的同時又增強了安全性。Java取消了指針操作,提高了安全性。第12頁/共65頁1.1.3了解VisualC++6.0集成開發(fā)環(huán)境集成開發(fā)環(huán)境(IntegratedDevelopingEnvironment,IDE)是一個綜合性的工具軟件,它把程序設(shè)計全過程所需要的各項功能集合在一起,為程序設(shè)計人員提供完整的服務(wù)。但集成開發(fā)環(huán)境并不是把各種功能簡單地拼接在一起,而是把它們有機地結(jié)合起來,統(tǒng)一在一個圖形化操作界面下,為程序設(shè)計人員提供盡可能高效、便利的服務(wù)。C語言的開發(fā)環(huán)境有很多,最流行的主要是TurboC系列和VisualC++6.0開發(fā)環(huán)境。TurboC系列對幫助理解內(nèi)存溢出等概念比較方便;VisualC++6.0雖然常用來編寫C++源程序,但它同時兼容C語言程序的開發(fā),并且其編輯器除了具備一般文本編輯器的基本功能以外,還能根據(jù)C語言的語法規(guī)則,自動識別程序文本中的不同成分,并且用不同的顏色加以區(qū)別,為使用者提供很好的提示作用。因此本書選擇VC++6.0作為C語言的開發(fā)工具。第13頁/共65頁1.VisualC++6.0開發(fā)環(huán)境VisualC++6.0,簡稱VC或者VC6.0,是微軟推出的一款C++編譯器,將“高級語言”翻譯為“機器語言(低級語言)”的程序。VisualC++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。VC6.0啟動后,即進入如圖1-1所示的主窗口程序。在VC6.0的主界面中,最頂部是菜單欄和工具欄,主菜單共有9個菜單項;主界面的左側(cè)是項目工作區(qū)窗口,用來顯示工作區(qū)的信息;右側(cè)是程序編輯窗口,用來輸入和編輯源代碼;下面是輸出窗口,用來顯示進行構(gòu)建或調(diào)試等工作時的狀態(tài)和數(shù)據(jù)信息;最底部是狀態(tài)欄。各個窗口可以任意顯示或隱藏。第14頁/共65頁2.創(chuàng)建C項目建立一個項目可以通過VC6.0的向?qū)瓿伞螕糁鞑藛沃小拔募薄靶陆ā泵?,彈出如圖1-2所示的對話框。在“工程”選項中列出了16個可以建立的項目選項,編寫一般C語言程序時選擇“Win32ConsoleApplication”選項,然后在右上側(cè)的“工程名稱”文本框中輸入項目名稱,“位置”中選擇項目要保存的路徑,單擊下方的“確定”按鈕即可進入下一個界面。工程名稱可以由字母和數(shù)字組成,但是第一個字符必須是字母,下畫線也被認(rèn)為是字母。在如圖1-3所示界面中,顯示的是可以創(chuàng)建的應(yīng)用程序類型。VC6.0中可以創(chuàng)建的程序類型共有4種。在這里只需要選擇默認(rèn)的“一個空工程”選項,單擊“完成”按鈕,VC6.0即可完成項目創(chuàng)建。項目創(chuàng)建完成后,VC6.0會自動顯示創(chuàng)建的項目信息,如圖1-4所示。第15頁/共65頁圖1-3控制臺程序類型對話框圖1-4項目創(chuàng)建完成對話框第16頁/共65頁3.創(chuàng)建和編輯C文件單擊“文件”→“新建”菜單命令打開文件創(chuàng)建對話框,向所創(chuàng)建的項目中添加源文件。在“文件”選項卡中,列出了可以創(chuàng)建的文件類型,如圖1-5所示。圖1-5創(chuàng)建的項目文件和本課程有關(guān)的文件類型為“C/C++HeaderFile”和“C++SourceFile”,分別用來創(chuàng)建頭文件和源文件。選擇“C++SourceFile”選項,勾選“添加到工程”復(fù)選框,這時項目名稱文本框中會默認(rèn)顯示當(dāng)前項目名稱,在“文件名”文本框中輸入源文件名,“位置”中會默認(rèn)顯示項目所在位置。單擊“確定”按鈕完成新建文件。第17頁/共65頁4.編譯代碼在編輯器中輸入代碼并保存,然后可以通過選擇主菜單中的“組建”→“編輯”命令進行編譯和鏈接,也可以通過工具欄中的工具快速完成構(gòu)建可執(zhí)行文件的過程。編輯快速工具欄如圖1-6所示。圖1-6編譯快速工具欄快速工具欄中第1個按鈕為編譯按鈕,通過編譯可以找出工程中的錯誤信息,提示編程人員進行修改;第2個按鈕為鏈接按鈕,編譯成功后可進行鏈接。在編譯的過程中,會在主界面下方的信息輸出窗口中顯示構(gòu)建過程信息,如編譯和鏈接過程的步驟、是否有錯等信息,如圖1-7所示。第18頁/共65頁5.運行程序在正確的編譯和鏈接以后,可通過“組建”→“執(zhí)行”命令執(zhí)行程序,也可以在圖1-7所示的快速工具欄中單擊“執(zhí)行”按鈕執(zhí)行程序??焖俟ぞ邫谥械?個按鈕為“執(zhí)行”按鈕,在編譯鏈接后可單擊該按鈕執(zhí)行程序。也可直接單擊“執(zhí)行”按鈕,此時會自動進行編譯和鏈接操作。程序每次修改之后都必須重新進行編譯鏈接才能執(zhí)行。圖1-7編譯和鏈接過程若程序執(zhí)行成功,屏幕上將會輸出執(zhí)行結(jié)果,并提示信息:Pressanykeytocontinue。此時按下任意鍵,系統(tǒng)都會返回VC6.0主窗口。可執(zhí)行文件存放在創(chuàng)建工程時指定的子目錄debug中。圖1-7程序執(zhí)行結(jié)果如圖1-8所示。圖1-8程序運行結(jié)果若程序執(zhí)行有誤,用戶需要返回編輯狀態(tài)修改源程序并重新進行編譯、鏈接和運行。第19頁/共65頁1.1.4數(shù)據(jù)的輸入和輸出沒有輸出的程序的數(shù)據(jù)處理和計算結(jié)果無法展示給用戶,是沒有價值的;而如果沒有輸入操作,則無法對目標(biāo)數(shù)據(jù)進行處理,或者只能將數(shù)據(jù)寫在程序中,無法對不同的數(shù)據(jù)進行處理,每次更換數(shù)據(jù)都需要更改程序和重新編譯。所以,數(shù)據(jù)的輸入和輸出是一項很重要的操作。C語言本身沒有提供輸入和輸出語句,輸入和輸出操作是由scanf和printf等庫函數(shù)來完成的。程序在調(diào)用這些函數(shù)時,必須在源文件的開始處加上頭文件的包含命令。其格式如下:#include<庫函數(shù)頭文件名>或#include”庫函數(shù)頭文件名”C語言提供了多種輸入和輸出格式,使其操作靈活、多樣,且功能強大。第20頁/共65頁1.字符輸出函數(shù)putchar()在C語言中,char為字符類型,一個char類型的數(shù)據(jù)表示一個單一的字符。字符輸出函數(shù)putchar()的功能為將一個字符輸出到屏幕上。其一般格式為:putchar(要輸出的字符)其中參數(shù)ch為要輸出的字符,執(zhí)行成功時返回輸出字符(即ch),錯誤時將返回EOF。所在的頭文件為stdio.h。putchar的用法見案例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'表示換行}該程序的運行結(jié)果如下:Goodmorning第21頁/共65頁2.標(biāo)準(zhǔn)格式輸出函數(shù)printf()printf()函數(shù)的作用為按用戶指定的格式,把指定的數(shù)據(jù)輸出到計算機系統(tǒng)默認(rèn)的輸出設(shè)備(一般為終端或顯示器)上。printf的一般格式為:printf("格式控制串",輸出項序列);格式控制串中包含兩種信息:格式控制說明和普通字符。格式控制說明是由“%”字符開始的,后面跟格式控制符,說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位等信息,其作用為按要求的格式將數(shù)據(jù)輸出,如“%d”,“%f”等;普通字符為要輸出的字符,如字母、符號、空格、換行等,運行時會在屏幕上原樣輸出,一般為提示作用。輸出項序列中各個輸出項用逗號隔開,輸出項可以為變量、表達式、字符等。格式控制說明和輸出項應(yīng)該在類型、個數(shù)、順序上保持一致,且從左到右一一對應(yīng)匹配。在輸出時,每個對應(yīng)輸出項的值替換格式控制說明所在的位置,顯示在屏幕上。第22頁/共65頁【案例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);}程序運行結(jié)果如下:1327a=13,b=27a+b=40printf("a+b=%d\n",a+b);中,"a+b"=為普通字符,直接輸出,"%d"對應(yīng)后面"a+b",被替換成"a+b"的和。而"c"的值為1.3,但是因為其輸出格式要求為整數(shù),則只輸出"c"的整數(shù)部分,即輸出為"c=1"。第23頁/共65頁printf函數(shù)常用的格式說明符如表1-1所示。表1-1printf函數(shù)格式說明符格式轉(zhuǎn)換符 含義 舉例 結(jié)果%d 以十進制形式輸出一個整型數(shù)據(jù) intx=10;printf("%d",x); 10%o 以八進制形式輸出一個無符號整型數(shù)據(jù) intx=10;printf("%o",x); 12%x或%X 以十六進制形式輸出一個無符號整型數(shù)據(jù) intx=10;printf("%x",x); a%u 以十進制形式輸出一個無符號整型數(shù)據(jù) intx=10;printf("%u",x); 10%f 以十進制形式輸出一個浮點型數(shù)據(jù) floatf=-12.3;printf("%f",f); -12.300000%e或%E 以指數(shù)形式輸出一個浮點型數(shù)據(jù) floatf=12.3;printf("%e",f); 1.230000e+001%c 輸出一個字符型數(shù)據(jù) charc='c';printf("%c",c); c%s 輸出一個字符串 chars="Hello!";printf("%s",s); Hello!另外,在格式說明中,可以在%和上述格式字符間插入以下幾種修飾符,用來表示數(shù)據(jù)的輸出寬度,修飾符的用法如表1-2所示。第24頁/共65頁表1-2printf修飾符用法格式 說明l 可加在格式符d、o、x、u前面,如%ld,表示長整型m m表示一個正整數(shù),指定數(shù)據(jù)輸出寬度n n表示一個正整數(shù),對于實數(shù),表示輸出n位小數(shù);對于字符串,表示截取的字符個數(shù)- 輸出的內(nèi)容左對齊【案例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);}程序的運行結(jié)果如下:

123,123a=123,a=123,a=123123.456001,123.456001,123.5,123.46,123e+002第25頁/共65頁該程序中“printf("%8d,%2d\n",a,a)”分別以8字符寬度和2字符寬度顯示整型變量a,且默認(rèn)輸出為右對齊。所以第一行輸出結(jié)果中先是5個空格,然后是a的值;而在指定的2字符寬度小于原整數(shù)的字符長度時,仍完整地顯示原整數(shù)變量?!?-6d”為以6個字符寬度顯示變量a,且采用左對齊的方式,通過比較“a=%-6d”和“a=%6d”的輸出結(jié)果可看出左對齊和右對齊的區(qū)別。“%8.1f”的作用為只顯示小數(shù)點后一位數(shù)據(jù),并采用四舍五入的方式截掉后面部分,所以顯示的值為123.5,按8字符寬度顯示?!?.2e”為采用指數(shù)形式顯示數(shù)據(jù),并且小數(shù)點之后取兩位有效數(shù)據(jù)。【案例1-5】字符和字符串的輸出。源程序如下:#include<stdio.h>voidmain(){ charc1='H',c2='e',c3='o'; printf("%3c%c%c%c%c\n",c1,c2,'l','l',c3); printf("\'%s\',%9s,%5.4s,%.3s,%.2s\t\\\n","Hello","Hello","Hello","Hello","Hello"); printf("Nicetomeetyou!\n");}程序運行結(jié)果如下:Hello'hello',Hello,Hell,Hel,He\Nicetomeetyou!第26頁/共65頁“%5.4s”表示截取字符串中前4位,并以5個字符寬度顯示在屏幕上。“printf("Nicetomeetyou!\n")”為printf最簡單的用法,沒有用到任何格式控制說明和變量,直接將字符串顯示在屏幕上。轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線“\”開頭,后面跟一個或幾個字符。轉(zhuǎn)義字符有特殊的含義,不同于普通的字符,所以稱為轉(zhuǎn)義字符。例如,最常用的轉(zhuǎn)義字符“\n”,其意義為“回車換行”。轉(zhuǎn)義字符主要用來表示那些不用于一般字符,而且不便于表示的控制代碼。因為“\”為轉(zhuǎn)義字符的標(biāo)志,所以每當(dāng)“\”出現(xiàn)時,編譯器將自動把其和后面的字符連接起來讀取其含義,而編程人員想要輸出“\”字符時便無法完成。所以用“\\”的形式來表示輸出“\”。如在案例1-5中,“\t\\\n”表示先輸出一個空格,然后輸出一個字符“\”,再轉(zhuǎn)到下一行。常用的轉(zhuǎn)義字符及其含義如表1-3所示。第27頁/共65頁表1-3常用的轉(zhuǎn)義符及其含義轉(zhuǎn)義符 含義\t 空格,跳到下一個tab位置\n 換行,將但前位置移到下一行開頭\b 退格,將當(dāng)前位置移到前一列開頭\r 回車,將當(dāng)前位置移到本行開頭\f 換頁,將當(dāng)前位置移到下頁開頭\\ 反斜線字符“\”\’ 單引號\” 雙引號\a 響鈴\ddd 1到3位八進制數(shù)所代表的字符\xhh 1到2位十六進制數(shù)所代表的字符第28頁/共65頁【案例1-6】打印一個金字塔。源程序如下:#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é)果如下:

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

floatradius; //表示圓的半徑

floatarea; //表示圓的面積

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

溫馨提示

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

評論

0/150

提交評論