版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C/C++程序設(shè)計教程(上)
第1章
計算機程序設(shè)計與算法C/C++程序設(shè)計教程主要內(nèi)容有
l
程序設(shè)計語言l
程序設(shè)計過程l
程序設(shè)計算法l
自然語言描述計算機算法l
程序流程圖描述計算機算法l
N-S圖描述計算機算法l
用程序設(shè)計語言描述計算機算法
1.1程序設(shè)計學(xué)習(xí)程序設(shè)計并不是簡單地學(xué)習(xí)計算機語法標(biāo)準(zhǔn)或程序設(shè)計語言的本身,而是要學(xué)會怎么用計算機程序設(shè)計語言解決實際問題、提高工作效率和工作質(zhì)量。計算機技術(shù)應(yīng)用領(lǐng)域博大而廣泛,誰也不可能完全學(xué)會計算機技術(shù)的方方面面,這是因為計算機涉及到的領(lǐng)域太廣了,計算機技術(shù)的開展日新月異,即使學(xué)上很久我們也不可能完全學(xué)到頭,可以說學(xué)無止境。
1.1.1程序設(shè)計語言
〔1〕科學(xué)計算語言。用于科學(xué)計算,根底是數(shù)學(xué)模型,過程描述的是數(shù)值計算,如FORTRAN語言;〔2〕系統(tǒng)開發(fā)語言。用于編寫編譯程序、操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)DBMS等,如C語言;〔3〕實時處理語言。及時響應(yīng)環(huán)境信息,可以根據(jù)外部信號對不同的程序段進行并發(fā)控制執(zhí)行;如匯編語言〔4〕商用語言。主要用于商業(yè)處理、經(jīng)濟管理,根底為自然語言模型;如COBOL語言〔5〕人工智能描述語言。模擬人的思維推理過程,實現(xiàn)智能化控制等;〔6〕模擬建模語言。用于模擬實現(xiàn)客觀事物的開展與變化過程,以提前預(yù)測未來開展的結(jié)果;〔7〕網(wǎng)絡(luò)編程語言,在網(wǎng)絡(luò)技術(shù)根底上進入深層次的應(yīng)用研究與開發(fā)的語言,如Dephi適于網(wǎng)絡(luò)化環(huán)境的編程,而JAVA是一種-新型跨平臺分布式程序設(shè)計語言,語義標(biāo)準(zhǔn)與C語言相同等等,不再列舉。1.1.2程序設(shè)計過程
1.程序?qū)崿F(xiàn)過程程序設(shè)計是指我們使用一種計算機語言為實現(xiàn)解決實際問題的算法去設(shè)計編寫計算機程序的過程。計算機語言是人與計算機進行交流的媒介,通過語言編寫的程序,計算機就會準(zhǔn)確地按程序步驟執(zhí)行操作,計算機解決實際問題的一般過程如圖1.1所示:
2.程序設(shè)計的過程程序設(shè)計大致包含以下幾個步驟(1)分析問題程序設(shè)計首先要進行對問題的分析,明白我們要作什么,確定要使用的數(shù)學(xué)模型。(2)確定算法確定算法即確定解決問題時要執(zhí)行的一系列步驟。(3)算法描述算法描述就是使用計算機語言對算法予以描述。(4)確定程序設(shè)計語言由于不同的計算機程序設(shè)計語言有不同的特點,根據(jù)實際情況與需要選定好程序設(shè)計語言后,就可以用該語言編程實現(xiàn)以算法。(5)調(diào)試和運行程序
1.2程序設(shè)計算法計算機程序可以這樣表示程序=算法+數(shù)據(jù)結(jié)構(gòu)其中數(shù)據(jù)結(jié)構(gòu):對數(shù)據(jù)的描述,包括對數(shù)據(jù)類型的描述核對數(shù)據(jù)組織形式描述定義.算法:對操作過程的描述,即操作步驟的描述。如果考慮現(xiàn)代編程的工程化與多樣性,可以這樣表示:程序=數(shù)據(jù)結(jié)構(gòu)+算法+〔程序設(shè)計方法+編程工具+語言環(huán)境〕其中算法是關(guān)鍵,是實現(xiàn)程序設(shè)計的依據(jù)和根底,算法分析作的完整,作的精細(xì),才能有完整的程序設(shè)計,才可能對程序進行優(yōu)化,所以掌握算法至關(guān)重要。
1.3計算機算法的表示
1.3.1自然語言描述期末數(shù)學(xué)成績高于90分,英語成績高于95分,有很好的團隊協(xié)作精神的同學(xué),可以報名參加國際數(shù)學(xué)建模比賽?!灿泻芏喾N理解〕1.3計算機算法的表示
1.3.2程序流程圖描述
順序結(jié)構(gòu)條件判斷分支結(jié)構(gòu)循環(huán)控制結(jié)構(gòu)
圖1.4表示復(fù)雜的算法看似亂麻
1.3計算機算法的表示
1.3.3N-S圖描述
圖1.6N-S圖表示三種根本結(jié)構(gòu)1.4用程序設(shè)計語言描述1.機器語言(Machinelanguage)例如,計算表達(dá)式m÷n-z的值,并把結(jié)果值存到10010000號內(nèi)存單元。假設(shè)某計算機的取數(shù)操作碼為1000,除法操作碼為1010,減法操作碼為1001,傳送操作碼為0100,另外也知m、n、z中的三個數(shù)已分別存放在11110110、10101101、01010110號內(nèi)存單元。用機器語言可描述編寫如下程序:100011110110取出放在11110110內(nèi)存單元的值101010101101除法操作放在10101101內(nèi)存單元的值100101010110把結(jié)果值減去放在10101101內(nèi)存單元的值010010010000把最后結(jié)果值存到10010000號內(nèi)存單元
2.匯編語言(Assemblerlanguage)例如計算表達(dá)式m÷n-z值的程序可以寫成:LDAMDIVNSUBZMOVY使用這種語言計算機CPU不能直接識別,必須用事先存放在存儲器中的“翻譯程序〞,把匯編語言翻譯成機器語言,計算機指令系統(tǒng)才能識別和執(zhí)行,這個翻譯程序稱為編譯匯編程序,翻譯成機器語言描述的程序叫目標(biāo)程序。3.高級語言(High-levellanguage)不管使用機器語言還是使用匯編語言描述算法和編寫程序,都沒有擺脫計算機指令系統(tǒng)的束縛。到了1954年,出現(xiàn)了一種與具體計算機指令系統(tǒng)無關(guān)的語言,即高級語言。它與人們習(xí)慣使用的自然語言與數(shù)學(xué)語言非常接近,例如:y=2x2-x+1這樣一個數(shù)學(xué)式子用高級語言來寫,就寫成y=2*x*x-x+1根本上是原樣表達(dá),這樣描述程序算法顯然就得心應(yīng)手的多。高級語言的解釋過程如圖1.10所示。
高級語言的編譯過程如圖1.11所示。1.5算法舉例
算法步驟分析:S1:累加器變量sum賦初值0,即sum=0S2:計數(shù)器變量i賦初值1,即i=1S3:使累加器變量值sum加計數(shù)器變量值i,結(jié)果仍放在sum中,即sum=sum+i,此時sum值為sum=sum+i=0+1=1S4:使計數(shù)器變量i加1,結(jié)果仍放在i中,即i=i+1,此時i值為i=i+1=1+1=2S5:使累加器變量值sum加計數(shù)器變量值i,,結(jié)果仍放在sum中,即sum=sum+i,此時sum值為sum=sum+i=1+2=3S6:使i加1,結(jié)果仍放在i中,即i=i+1,此時i值為i=i+1=2+1=3S7:使sum加i,結(jié)果仍放在sum中,可表示為sum=sum+i,此時sum值為sum=sum+i=3+3=6S8:使i加1,結(jié)果仍放在i中,可表示為i=i+1,此時i值為i=i+1=3+1=4S9:使sum加i,結(jié)果仍放在sum中.,可表示為sum=sum+i,此時sum值為sum=sum+i=6+4=10……
程序流程圖如圖1.12所示,N-S圖如圖1.13所示。圖1.12累加運算程序流程圖圖1.13累加運算N-S圖
開始sum=0i=0sum=sum+ii=i+1i<=100打印NYC語言程序算法如下:
main(){inti=1,sum=0;/*定義變量及其數(shù)據(jù)類型*/while(i<=100)/*循環(huán)控制結(jié)構(gòu)*/ {sum+=i; i=i+1; }/*循環(huán)體結(jié)束*/printf("sum=%d\n",sum);/*輸出累加結(jié)果*/}程序算法不是唯一的,這個問題還有其它的算法
算法1:main(){floatsum=0;inti=1; loop:if(i<=100) {sum=sum+i; i=i+1; gotoloop;} printf("\n%f",sum);}
算法2:main(){floatsum=0;inti=1; while(i<=100) {sum=sum+i; i++;} printf("\n%f",sum);}
算法3:main(){inti=1,sum=0;do{sum=sum+i;i=i+1;}while(i<=100);printf("thesumis%d",sum);}以此類推可以很容易表示出計算之和的算法,當(dāng)分母大于100時程序結(jié)束,輸出計算結(jié)果。程序算法如下。
算法3的N-S圖如圖1.14所示。
圖1.14累加運算N-S圖
本章是計算機程序設(shè)計的根底,介紹了計算機程序設(shè)計語言的應(yīng)用特點和開展演變,特別介紹了程序設(shè)計過程以及程序設(shè)計算法,學(xué)要重點理解和掌握的是計算機算法的表示方法,列舉了用自然語言描述結(jié)局問題過程的特點與缺乏。作為一個程序設(shè)計人員,應(yīng)該熟悉并掌握比較常用的程序流程圖描述方法,以及N-S圖描述算法的根本技能,最終需要使用計算機語言,即程序設(shè)計語言描述并實現(xiàn)。本章通過算法舉例以訓(xùn)練引導(dǎo)讀者用計算機的思維表達(dá)解決問題的過程,以最終實現(xiàn)算法,這就是程序設(shè)計算法的根本。本章小結(jié)
1.6練習(xí)思考題
1.程序設(shè)計語言有哪些相同和不同之處,有哪些分類?2.試述程序?qū)崿F(xiàn)過程包括那幾方面?3.簡述程序設(shè)計包含那些步驟。4.什么是計算機程序設(shè)計算法?5.用那些方法表示計算機算法,各有哪些利弊?6.程序流程圖有哪些表示符號,你認(rèn)為有哪些優(yōu)缺點7.簡述N-S圖有什么特點。8.請用程序流程圖和N-S圖表示從鍵盤輸入兩個數(shù),用計算機判別其大小的算法。
第2章C語言程序設(shè)計概述C/C++程序設(shè)計教程主要內(nèi)容有
l
C語言的開展l
TurboC的集成環(huán)境l
TurboC的特點與配置要求l
TurboC的安裝與啟動l
TurboC的熱鍵l
C語言的程序組成l
C語言的標(biāo)識符l
語言的關(guān)鍵字
2.1C語言概述
C語言程序設(shè)計因其編譯效率高、功能強大、編寫風(fēng)格優(yōu)美流暢,廣為流行,C程序設(shè)計集算法實現(xiàn)與軟件系統(tǒng)開發(fā)成一體,廣泛應(yīng)用與軟硬件系統(tǒng)開發(fā)的各種領(lǐng)域,并得到長久廣泛地開展、應(yīng)用與普及。學(xué)習(xí)和掌握C程序設(shè)計是學(xué)習(xí)和掌握計算機技術(shù)與軟件系統(tǒng)開發(fā)的重要環(huán)節(jié),熟練掌握算法設(shè)計和編程技能是學(xué)習(xí)的重點。
2.1.1C語言的開展C語言是70年代貝爾實驗室〔BellLaboratories〕為描述UNIX操作系統(tǒng)和C編譯程序而開發(fā)的一種系統(tǒng)描述語言。C語言的出現(xiàn)于自于編寫計算機操作系統(tǒng)。1969年,美國貝爾實驗室的研究員KenThompson和DennisM.Ritchie開始用匯編語言編寫UNIX;1970年KenThompson為了提高UNIX的可讀性和可移植性,在BCPL語言的根底上,開發(fā)了B語言;1972年到1973年,在B語言的根底上設(shè)計開發(fā)出了C語言;1973年,K.Thompson和合作,把UNIX用C語言改寫了一遍,為UNIX的移植和開展奠定了根底;1978年,BrianW.Kernighan和合著了?TheCProgrammingLanguage?一書,被人們譽為標(biāo)準(zhǔn)版本。1982年,這本書被編譯成中文教材,從此,C語言以其獨特的優(yōu)點受到了國內(nèi)許多軟件工程人員的青睞,在當(dāng)時,對人們熟悉的FORTRAN、Pascal等語言產(chǎn)生了很大的沖擊;1987年,美國國家標(biāo)準(zhǔn)學(xué)會〔ANSI〕對C語言進行了標(biāo)準(zhǔn)并提出了美國國家標(biāo)準(zhǔn)C方案,得到了各國的成認(rèn)。本教程的C語言主要以BorlandInternational公司的TurboC編譯系統(tǒng)作試驗平臺。2.1.2C語言的特點
1.語言簡潔、緊湊,使用方便靈活。2.運算符豐富,便于各種運算方法的實現(xiàn)。3.?dāng)?shù)據(jù)類型豐富,具有很強的數(shù)據(jù)處理能力。4.是一種結(jié)構(gòu)化程序設(shè)計語言。5.便于模塊化軟件設(shè)計。6.語法限制上有較大的自由度,但對程序設(shè)計的熟練性要求較高。7.能夠直接訪問物理地址,并能直接驅(qū)動匯編語言。8.生成目標(biāo)代碼的質(zhì)量和程序執(zhí)行的效率相對較高。9.程序的可移植性相對較好。10.具有現(xiàn)代編程風(fēng)格,沿用開展性好。C語言程序的根本形式main(){函數(shù)局部變量定義執(zhí)行語句}f1([形式參數(shù)列表])[<形式參數(shù)定義>]{函數(shù)局部變量定義執(zhí)行語句}
……fn([形式參數(shù)列表])[<形式參數(shù)定義>]{函數(shù)局部變量定義;執(zhí)行語句;}2.2TurboC的集成環(huán)境
目前常用的C語言集成環(huán)境有數(shù)種,包括C++、VisualC、VisualC++等,一般教學(xué)或等級考試等提到C語言編譯系統(tǒng),主要指TurboC,本教材介紹的C語言集成環(huán)境主要以TurboC集成開發(fā)環(huán)境為實驗平臺,用以學(xué)習(xí)C程序設(shè)計算法與實現(xiàn)。在最后一章介紹C++程序設(shè)計技術(shù)。教材中的實例全部在TurboC2.0環(huán)境調(diào)試通過。2.2.1TurboC2.0的特點與配置要求
1.TurboC2.0的主要特點如下:〔1〕編輯、編譯、調(diào)試和運行一體化;〔2〕綜合調(diào)試程序具有單步執(zhí)行、單步跟蹤、斷點設(shè)置、表達(dá)式監(jiān)視和求值等功能;〔3〕支持獨立調(diào)試程序;〔4〕具有更快的編譯、鏈接程序和更快的內(nèi)存分配函數(shù)與串函數(shù);〔5〕擴展內(nèi)存標(biāo)準(zhǔn)用作編輯緩沖區(qū);〔6〕浮點運行速度快;〔7〕高級圖形庫中增加了許多新函數(shù),包括可安裝的驅(qū)動程序和字體;〔8〕支持命令行上的通配符*和?等;〔9〕能自動進行快速縮進和回退及優(yōu)化填充;〔10〕MAKE實用程序可以自動進行依賴關(guān)系檢查;〔11〕新增加了一些實用工具,如THELP.EXE、OBJXREF.EXE等。2.TurboC2.0的配置要求:對于現(xiàn)在絕大多數(shù)擁有個人電腦的來說,都能滿足TurboC2.0的配置要求。在Windows2000/XP操作系統(tǒng)中均可以運行。
1.TurboC2.0的安裝:Turboc2.0的版本有兩種編譯程序:綜合開發(fā)環(huán)境編譯程序TC和命令行編譯程序TCC。安裝方法有兩種:〔1〕使用拷貝命令,將必需的文件拷貝到工作軟盤或硬盤的TC子目錄下?!?〕利用安裝程序:使用INSTALL.EXE文件,按照提示進行下去,直到安裝完畢。2.TurboC2.0的啟動:安裝好TurboC2.0后,在TC目錄下運行TC或TCC就可以分別啟動集成開發(fā)環(huán)境或命令行編譯程序。在MS-DOS下或Windows98/2000/XP環(huán)境下進入TurboC。⑴在Windows98/2000/XP的MS-DOS命令提示符下啟動TurboC進入Windows98/2000/XP的行命令模式,在MS-DOS命令提示符下,進入TC安裝目錄,直接鍵入可執(zhí)行文件TC.EXE即可進入其集成環(huán)境。例如假使Turboc2.0安裝在C:驅(qū)動盤的TC2子目錄,即文件夾下,操作如下①首先轉(zhuǎn)入C:盤②再進入TC2子目錄C:/>CDTC2↙③直接輸入TC即可C:/TC2>TC↙⑵在Windows98/2000/XP視窗環(huán)境下啟動TurboC
2.2.2TurboC2.0的安裝與啟動
⑶路徑設(shè)置
第一次進入TurboC以后必須設(shè)置系統(tǒng)相應(yīng)路經(jīng),才能保證以后正確編譯和執(zhí)行C程序文件。首先確認(rèn)當(dāng)前Turboc2.0的安裝盤、安裝目錄、.obj目標(biāo)文件輸出目錄,再進行設(shè)置。
2.2.3TurboC的熱鍵TC啟動后,出現(xiàn)主屏幕和版本信息,按任意鍵版本信息消失之后就可以在編輯窗口進行C程序設(shè)計了。在TC的主菜單中,包含F(xiàn)ile、Edit、Run、Compile、Project、Option、Debug和Break/Watch8個菜單項選擇項,按F10鍵能夠激活它們,或同時按Alt加上每一菜單項選擇項的第一個字母快捷激活。TC的功能熱鍵表2.3C語言的程序結(jié)構(gòu)
C語言是由函數(shù)組成的,由必須要有的main()函數(shù),有用戶自己定義的函數(shù)、還有系統(tǒng)提供的標(biāo)準(zhǔn)的庫函數(shù),整個程序中函數(shù)定義不分主次,也沒有先后之分,包括main()函數(shù)。2.3.1C語言程序的組成例2.3在屏幕上輸出一行字符串"WelcometoStudyCProgramLanguage!"。main() {printf〔"WelcometoStudyCProgramLanguage!\n"〕;} 程序的運行結(jié)果將在屏幕上輸出:
WelcometoStudyCProgramLanguage!
通過這個例題,可以了解到: 1.任何一個C程序必須包含一個主函數(shù)main()〕,并且主函數(shù)是唯一的主程序入口函數(shù)。此處的主函數(shù)相當(dāng)于其他語言中的主程序。Main()在程序中的位置可以是任意的,不過,計算機總是從主函數(shù)處執(zhí)行一個用戶程序,main后面括號內(nèi),可以為空,如果需要,還可以包含適當(dāng)?shù)膮?shù)。2.花括號中的局部是函數(shù)體,主要由C語言的語句序列組成。每個語句后面要有一個分號,表示命令的結(jié)束,否那么編譯時出錯。3.每個C程序由一個主函數(shù)和零到假設(shè)干個函數(shù)組成,本例的程序包含一個主函數(shù)和一個函數(shù)printf()作為命令語句。初始說明局部初始說明局部的位置在主函數(shù)之前,一般包括:〔1〕包含文件〔又稱頭文件〕頭文件的格式為: #include<文件名>〔或"文件名"〕C環(huán)境為用戶提供了很多標(biāo)準(zhǔn)庫函數(shù),每一個庫函數(shù)都有自己的頭文件〔擴展名為.h〕。如果在程序設(shè)計時使用了庫函數(shù),那么必須在初始說明局部將該函數(shù)對應(yīng)的頭文件包含進去,否那么,程序會在編譯時報錯。〔2〕宏定義宏定義的位置可以在初始說明局部,也可以在程序的其他位置,其命令格式為: #define字符串常量使用宏定義替代一個字符串,可以減少程序中重復(fù)書寫過程。請看下面的宏定義: #definePI3.1415926使用宏名PI替代3.1415926,在程序中出現(xiàn)3.1415926的地方使用PI,就可以減小重點使用的工作量,而且不容易出錯。在修改常量時也很簡單,只要改變宏定義行就可以了。程序中用雙引號括起來的字符串內(nèi)的字符,不進行替換。如果宏定義在初始說明局部,它的作用域就是所在的源程序文件,也可以使用#undef命令終止宏定義的作用域。注意:包含文件和宏定義語句不是C語言命令語句,所以在書寫時后面不要加分號?!?〕全局變量說明有關(guān)全局變量的知識,請參閱本書第4章?!?〕用戶非整型函數(shù)說明用戶函數(shù)局部是為了使程序執(zhí)行特定的功能,由用戶自己設(shè)定的函數(shù)。2.3.2C語言的標(biāo)識符
是用戶因為某種需要而由用戶自己定義的變量、函數(shù)等作為字符標(biāo)識。函數(shù)標(biāo)識符和變量標(biāo)識符的命名類似,也要遵循一定的規(guī)那么:1.標(biāo)識符必須以字母或下劃線開始;2.標(biāo)識符有效長度為255個字符;3.能用作標(biāo)識符的字符有A~Z,a~z,0~9或_〔下劃線〕;4.不能使用關(guān)鍵字作標(biāo)識符;5.標(biāo)識符不能跨行書寫。注意:
1.為了便于讀、寫和記,標(biāo)識符的命名最好選擇能夠代表一定意義的單詞,如用day表示日期函數(shù)等;2.為了增強程序的可讀性,應(yīng)適當(dāng)?shù)厥褂孟聞澗€,如用load_num表示取數(shù)據(jù)等;3.盡量使用約定俗成的標(biāo)識符,如temp表示中間變量,x,y,z表示未知數(shù)等;4.標(biāo)識符的長度不要太長,以減少不必要的工作量。5.與變量名類似,標(biāo)識符的大小寫表示不同的含義,C語言一般習(xí)慣上變量名小寫,宏標(biāo)識符大寫,以示區(qū)別。
2.3.3C語言的關(guān)鍵字
2.6本章小節(jié)
本章從C語言的開展可以了解到C程序設(shè)計的特點與結(jié)構(gòu)的組成。介紹了TurboC的集成環(huán)境、TurboC2.0的特點與配置要求,以及可以靈活快速地使用TurboC集成開發(fā)環(huán)境所需要使用的快捷鍵。C語言程序設(shè)計首先要掌握C語言的程序結(jié)構(gòu)組成。熟練使用C語言的標(biāo)識符,熟悉C語言的保存字關(guān)鍵字等。對于初學(xué)者來說,本章應(yīng)當(dāng)重點掌握C語言結(jié)構(gòu)特點與編成環(huán)境的使用,以便為程序設(shè)計的學(xué)習(xí)打下根底。本章的知識點較多,只要掌握常用的根本知識就可以了。2.7練習(xí)思考題
1.C語言在算法實現(xiàn)方面有哪些特點?2.C語言在程序設(shè)計方面有哪些優(yōu)點?3.試舉出與C語言關(guān)系比較接近的其它編譯集成環(huán)境。4.從C程序設(shè)計編程的結(jié)構(gòu)風(fēng)格上看,主要的優(yōu)點有哪些?5.編寫一個簡單的C程序,熟悉上機實踐過程。輸出結(jié)果如下@#@#@#@#@#@#@#@#@#@Thisisatestprogrammer***************************
6.練習(xí)本章例題,熟悉程序調(diào)試過程。第3章C程序設(shè)計根底l
常量與變量l
數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)類型l
運算符的優(yōu)先級與結(jié)合性l
強制類型轉(zhuǎn)換運算l
算術(shù)運算符與算術(shù)表達(dá)式l
關(guān)系運算符與關(guān)系表達(dá)式l
邏輯運算符與邏輯表達(dá)式l
賦值運算符與賦值表達(dá)式l
逗號運算符和逗號表達(dá)式常用數(shù)學(xué)函數(shù)3.1常量與變量
常量和變量都表現(xiàn)為某一數(shù)據(jù)類型。而在C語言中,常量不需要類型說明,變量那么需要類型說明,即使用變量時需要“先定義,再使用〞。3.1常量與變量C語言提供了豐富的數(shù)據(jù)類型,這些數(shù)據(jù)類型歸納如下:
常量1.整型常量如:-7,45,6789,06789,0x6789,6789l等。2.實型常量如:2.34,2.34E-5等。4.字符串常量如:“m〞,“abc〞,“mmm〞等。5.控制字符用反斜扛“\〞和特定字符組合表示常量表3-1控制字符常量轉(zhuǎn)義字符表
常量6.符號常量符號常量的定義形式為:#define標(biāo)識符常量其中#define也是一條預(yù)處理命令〔預(yù)處理命令都以"#"開頭〕,稱為宏定義命令〔在后面預(yù)處理程序中將進一步介紹〕,其功能是把該標(biāo)識符定義為其后的常量值變量
1.變量說明在C程序設(shè)計中,使用變量時必須首先對它的數(shù)據(jù)類型進行說明,簡單的定義格式為:數(shù)據(jù)類型說明符變量名列表;或數(shù)據(jù)類型說明符變量名1[,變量名2,……];
變量2.變量初始化
初始化變量的簡單格式:
數(shù)據(jù)類型說明符變量名1=常量或表達(dá)式[,變量名2=常量或表達(dá)式,……];或變量名=常量或表達(dá)式;
變量3.變量與存儲器
圖3-2數(shù)據(jù)存儲格式3.2整型數(shù)據(jù)類型
數(shù)據(jù)類型與數(shù)據(jù)的存儲有關(guān),也與操作應(yīng)用有關(guān)。數(shù)據(jù)類型可以從不同的方面進行分類。按照數(shù)據(jù)的運算性質(zhì),可以分為整型數(shù)據(jù)類型、實型數(shù)據(jù)類型和字符型數(shù)據(jù)類型;數(shù)據(jù)類型從長度上分,有8位、16位、32位和64位;從數(shù)據(jù)的符號來分,有無符號數(shù)和有符號數(shù)等。
3.2.1
整型變量的分類
在C語言中,整型變量的根本類型為int,根據(jù)不同變量的取值范圍可以給它們加上不同的修飾符:1.根本型:類型說明符為int,在內(nèi)存中占2個字節(jié)。2.短整量:類型說明符為shortint或short。所占字節(jié)和取值范圍均與根本型相同。3.長整型:類型說明符為longint或long,在內(nèi)存中占4個字節(jié)。3.2.1
整型變量的分類表3-2列出了C語言中各類整型數(shù)據(jù)所分配的內(nèi)存字節(jié)數(shù)及數(shù)值的范圍。
例3.4帶符號的整型數(shù)據(jù)運算
main(){inta,b;a=32767;b=32767+1;printf(〞a=%d\n〞,a);printf(〞b=%d\n〞,b);}程序運行結(jié)果:a=32767b=-32768例3.4帶符號的整型數(shù)據(jù)運算
圖3-4變量a賦值32767后的存放情況圖3-3變量b賦值32767+1的存放情況數(shù)據(jù)溢出,但系統(tǒng)不會報錯。如圖3-3所示。
3.2.2整型變量的定義程序中用到的整型數(shù)據(jù)變量必須先定義,變量定義的一般形式為:整型類型說明符變量名1,變量名2,…;其中,整型類型說明符包括:short、long、int和unsignedshort、unsignedlong、unsignedint等。
例3.5整型變量的定義與使用。
main(){longx,y;inta,b,c,d;x=5;y=6;a=7;b=8;c=x+a;d=y+b;printf("c=x+a=%d,d=y+b=%d\n",c,d);}程序運行結(jié)果:c=x+a=12,d=y+b=14
3.2.3
整型常量的表示方法
1.十進制整常數(shù):十進制整常數(shù)沒有前綴。其數(shù)碼為0~9。
2.八進制整常數(shù):八進制整常數(shù)必須以0開頭,即以0作為八進制數(shù)的前綴。
3.十六進制整常數(shù):十六進制整常數(shù)的前綴為0X或0x。
3.2.4整型常量的分類
一個int型整數(shù),其值在-32768~32767,一個整型常量后加u或U后綴那么被認(rèn)為是unsigned類型,在內(nèi)存中按unsigned規(guī)定的方式存放。例如:十進制長整常數(shù):379L;八進制長整常數(shù):012L;十六進制長整常數(shù):0X15L。整型數(shù)據(jù)的應(yīng)用
整型數(shù)據(jù)是常用的一種數(shù)據(jù)類型,廣泛應(yīng)用在各種場合,有著各種實際用途。簡單歸納起來,主要表現(xiàn)在如下幾個方面:一般數(shù)值計算,主要是非浮點數(shù)或?qū)纫蟛桓叩囊恍?shù)值計算。表示計算機內(nèi)部數(shù)據(jù),如地址、指針等。表示字符編碼,如ASCII碼、漢字內(nèi)碼等。
3.3實型數(shù)據(jù)類型實型數(shù)據(jù)類型存儲長度比較長,還可以帶小數(shù)點進行計算,所以主要用于科學(xué)計算。實型數(shù)據(jù)類型還可以分為單精度、雙精度和和長雙精度,應(yīng)用時根據(jù)需要定義和使用。3.3.1
實型常量的表示方法
1.十進制數(shù)形式:由數(shù)碼0~9和小數(shù)點組成。2.指數(shù)形式:由十進制數(shù),加階碼標(biāo)志“e〞或“E〞以及階碼組成。一個實數(shù)可以有多種指數(shù)表示形式。3.3.2
實型變量
1.實型數(shù)據(jù)在內(nèi)存中的存放形式在計算機內(nèi)部實型數(shù)據(jù)都以指數(shù)形式存儲,一般占4個字節(jié)〔32位〕內(nèi)存空間,其中三個字節(jié)存放數(shù)字局部,一個字節(jié)存放指數(shù)局部,內(nèi)存存放形式:3.3.2
實型變量2.實型變量的分類實型變量分為單精度〔float型〕、雙精度〔double型〕和長雙精度〔longdouble型〕三類。3.3.2
實型變量3.實型數(shù)據(jù)的舍入誤差由于實型變量是由有限的存儲單元組成的,因此能提供的有效數(shù)字總是有限的。有效數(shù)字被舍去就會產(chǎn)生舍入誤差。
例2.8實型變量舍入誤差的檢驗
main(){floata,b;a=123456.789e5;b=a+20;printf("%f\n",a);printf("%f\n",b);}程運行結(jié)果:
3.3.3
實型數(shù)據(jù)的應(yīng)用
在使用實型數(shù)據(jù)時,選擇哪一種實型要根據(jù)所處理數(shù)據(jù)的取值范圍,計算要求的精度,或表達(dá)式結(jié)果的范圍確定。
例3.10各種數(shù)據(jù)的混合運算
3.4字符型數(shù)據(jù)類型
字符類型的數(shù)據(jù)以一個字節(jié)為單位存放。字符常量字符常量是用單引號括起來的一個字符。例如:'a'、'b'、'='、'+'、'?'都是合法字符常量。注意單引號只是字符常量和其他局部的分隔符,不是字符常量的一局部。3.4字符型數(shù)據(jù)類型字符變量
字符變量用來存儲字符常量,即單個字符。一個字符變量在內(nèi)存中占一個字節(jié)。
3.4.3
字符數(shù)據(jù)的使用方法每個字符變量被分配一個字節(jié)的內(nèi)存空間,字符值是以ASCII碼的形式存放在變量的內(nèi)存單元之中的。
3.4字符型數(shù)據(jù)類型3.4.4
字符串常量
字符串常量是由一對雙引號括起的字符序列。例如:“RED〞,“program〞,“1234〞等都是合法的字符串常量。字符常量占一個字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。字符串函數(shù)
幾個常用函數(shù):strcat(char*dest,constchar*src);strchr(constchar*str,intc);strcmp(constchar*s1,constchar*s2);strcpy(char*dest,constchar*src);strlen(constchar*s);
字符數(shù)據(jù)的應(yīng)用
例3.14大小寫字符轉(zhuǎn)換main(){inta,b;a=‘a(chǎn)’;b=‘b’;a=a-32;b=b-32;printf("%c,%c\n%d,%d\n",a,b,a,b);}程序運行結(jié)果:A,B65,663.5不同類型數(shù)據(jù)間的混合運算
不同類型的數(shù)據(jù)首先要轉(zhuǎn)換成同一類型,然后進行運算。因此,整型、實型、字符型數(shù)據(jù)間可以混合運算。例如:10+’a’+1.5-8765.1234*’b’3.6運算符與表達(dá)式
3.6.1運算符簡介
3.6運算符與表達(dá)式3.6.2運算符的優(yōu)先級與結(jié)合性
3.6運算符與表達(dá)式強制類型轉(zhuǎn)換運算強制類型轉(zhuǎn)換運算符是用類型轉(zhuǎn)換運算符將一個表達(dá)式轉(zhuǎn)換成所需類型。其一般形式為(類型名)表達(dá)式注意,表達(dá)式應(yīng)該用括號括起來。例如:(double)i將a轉(zhuǎn)換成double類型;(int)(a+b)將a+b的值轉(zhuǎn)換成整型;(float)(5%3)將5%3的值轉(zhuǎn)換成float型;
3.7算術(shù)運算符與算術(shù)表達(dá)式
1.根本算術(shù)運算符十:加法運算符,或正值運算符例如,3十5、+3、sqrt(4.56)+width。-:減法運算符,或負(fù)值運算符例如,5-2、-3、max(v,x)-34。*:乘法運算符例如,x*x、31.032*sqrt(r)、12*9。/:除法運算符例如,5/3、5./3、sin(x)/2.0、1.0/(x*x*x)\。%:模運算符,或稱求余運算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù)例如,8%5結(jié)果3,1%2結(jié)果0。3.7算術(shù)運算符與算術(shù)表達(dá)式2.自加與自減運算符
①前綴運算:++變量將變量的值加1。――變量將變量的值減1。例如,++i,--i使i的值加或減1②后綴運算:變量++將變量的值加1。變量――將變量的值減1。
例3.18自加運算。main(){inti=3;printf("%d\n〞,(i++)+(i++)+(i++));printf(“%d\n〞,i);}程序的運行結(jié)果是多少呢?有的系統(tǒng)按照自左而右順序求解括弧內(nèi)的運算,表達(dá)式的值相當(dāng)于3+4+5,即12,i的值為6。而另一些系統(tǒng)把3作為表達(dá)式中所有i的值,因此3個i相加,得到表達(dá)式的值為9。在求出整個表達(dá)式的值后再實現(xiàn)自加3次,i的值變?yōu)?。3.8關(guān)系運算符與關(guān)系表達(dá)式
1.關(guān)系運算符關(guān)系運算符的功能是判斷兩個運算對象值的大小,而得出判斷結(jié)果。關(guān)系運算符共有6種,見表3-4所示。
3.8關(guān)系運算符與關(guān)系表達(dá)式2.關(guān)系運算表達(dá)式用關(guān)系運算符將兩個表達(dá)式連接起來,就構(gòu)成了關(guān)系表達(dá)式。一般格式為:表達(dá)式1?關(guān)系運算符:表達(dá)式2
3.9邏輯運算符與邏輯表達(dá)式
1.邏輯運算符
3.9邏輯運算符與邏輯表達(dá)式2.邏輯表達(dá)式
3.9邏輯運算符與邏輯表達(dá)式邏輯與a&&b&&c表達(dá)式
3.9邏輯運算符與邏輯表達(dá)式(2)邏輯或a||b||c表達(dá)式
3.10賦值運算符與賦值表達(dá)式
1.賦值運算符
賦值運算符一般語法格式:變量=表達(dá)式2.不同數(shù)據(jù)類型的賦值處理如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時系統(tǒng)會自動進行類型轉(zhuǎn)換。3.10賦值運算符與賦值表達(dá)式3.復(fù)合的賦值運算符變量+=表達(dá)式等價干變量=量+表達(dá)式變量-=表達(dá)式等價干變量=量-表達(dá)式變量*=表達(dá)式等價干變量=量*表達(dá)式變量/=表達(dá)式等價干變量=量/表達(dá)式變量%=表達(dá)式等價干變量=量%表達(dá)式注意,如果賦值號右側(cè)是包含假設(shè)干項的表達(dá)式,那么相當(dāng)于它有括號。如:①x%=y+3②x%=〔y+3〕
③x=x%〔y+3〕〔不要錯寫成x=x%y+3〕4.賦值表達(dá)式
一般形式為變量OP表達(dá)式其中OP是賦值運算符,包括:=,+=,-=,*=,/=等。
如:a=(b=5)
3.11逗號運算符和逗號表達(dá)式一般形式為:表達(dá)式1,表達(dá)式2,……逗號表達(dá)式的求解過程是:先求解表達(dá)式1,再求解表達(dá)式2。整個逗號表達(dá)式的值是表達(dá)式2的值。例如,“3+5,6+8〞的值為14。3.12常用數(shù)學(xué)函數(shù)
使用數(shù)學(xué)函數(shù)必須include命令引入math.h文件,它通常放在程序的開始,即如下面的格式:#include<math.h>常用數(shù)學(xué)函數(shù)abs()求絕對值,用法:intabs(intx);labs()求絕對值,用法:longlabs(longx);fabs()求絕對值,用法:doublefabs(doublex);sin()計算sin(x)值,用法:doublesin(doublex);cos()計算cos(x)值,用法:doublecos(doublex);……3.13變量初始化
在C語言程序設(shè)計中,可以在定義變量的同時給變量賦初值,如:inti=6;floatf=3.12;charc=’a’;定義時也可以使被定義的變量的一局部賦初值,如:inta,b,c=8;3.14本章小節(jié)
本章是C語言程序設(shè)計的根底,內(nèi)容涉及到編程使用的根本概念和根底知識,使讀者對C語言的數(shù)據(jù)類型、運算符、表達(dá)式、不同數(shù)據(jù)類型之間的轉(zhuǎn)換等有了初步的了解,為進一步學(xué)習(xí)C語言打下了良好的根底。本章的知識點在于掌握C語言數(shù)據(jù)類型的定義和賦值方法,學(xué)會使用有關(guān)運算符及表達(dá)式。只有很好的掌握了C的數(shù)據(jù)類型、表達(dá)式運算,才能恰當(dāng)?shù)倪\用于C語言的程序設(shè)計之中。3.15思考練習(xí)題
一、思考題
二、選擇題
三、填空題
四、編程題
P64頁第4章
順序結(jié)構(gòu)程序設(shè)計
l
C語言的順序結(jié)構(gòu)l
根本順序結(jié)構(gòu)語句l
表達(dá)式和表達(dá)式語句l
根本輸入/輸出l
字符輸入函數(shù)l
字符輸出函數(shù)l
格式化輸入/輸出4.1順序結(jié)構(gòu)流程概述
4.1.1程序的順序結(jié)構(gòu)順序結(jié)構(gòu)是其中最根本最簡單的結(jié)構(gòu),構(gòu)成它的語句有:數(shù)據(jù)類型語句、表達(dá)式語句、賦值語句和函數(shù)調(diào)用語句等。在順序結(jié)構(gòu)程序中,語句被按順序執(zhí)行,程序結(jié)構(gòu)執(zhí)行順序如圖3.1所示。簡單順序結(jié)構(gòu):
#include<stdio.h>main(){變量定義;語句1;語句2;……;}例4.1編寫一個程序,用庫函數(shù)輸出字符OK!字樣。
#include"stdio.h"/*包含說明輸入/輸出標(biāo)準(zhǔn)庫函數(shù)的頭文件*/main(){chara,b,c;/*定義字符數(shù)據(jù)類型變量*/a='O'; /*對變量進行賦值*/b='K';c='!';putchar(a);putchar(b);/*調(diào)用函數(shù)輸出變量值*/putchar(c);/*調(diào)用函數(shù)輸出變量值*/}程序執(zhí)行完成后結(jié)果:OK!4.2根本順序結(jié)構(gòu)語句在C語言程序設(shè)計中,根本順序結(jié)構(gòu)語句是指能夠完成指定操作的根本語句,這些語句主要有賦值語句、空語句、復(fù)合語句和函數(shù)調(diào)用語句。表達(dá)式和表達(dá)式語句表達(dá)式是操作數(shù)的運算符的組合體,由運算符連接操作對象構(gòu)成的式子,它產(chǎn)生一個唯一的值。操作數(shù)〔又稱做操作對象〕可以是數(shù)值、字符、函數(shù),也可以是另一個表達(dá)式,但必須有值能夠參加運算。根據(jù)表達(dá)式結(jié)果的數(shù)據(jù)類型,有數(shù)值表達(dá)式如數(shù)學(xué)運算表達(dá)式;邏輯表達(dá)式如關(guān)系運算表達(dá)式、邏輯運算表達(dá)式、條件運算表達(dá)式等等。表達(dá)式可以構(gòu)成語句,一個表達(dá)式加一個分號〔“;〞〕就構(gòu)成了表達(dá)式語句。它的C語言格式:<表達(dá)式>;例如:1.0/2*(a+b+c);sqrt(s*(s-a)*(s-b)*(s-c));需要說明的是要注意表達(dá)式與表達(dá)式語句的區(qū)別。例如:a=54.2.2根本順序語句在C語言中,對變量賦值使用賦值語句,它是種使用十分普遍的語句。1.賦值語句賦值語句是由賦值表達(dá)式構(gòu)成的,是在賦值表達(dá)式后加上“;〞符號,它的C語言格式:<賦值表達(dá)式>;或者<變量名>=<表達(dá)式>;4.2.2根本順序語句2.空語句空語句也是一條有效的操作語句,空語句只有一個分號“;〞,構(gòu)成一條空命令語句。它的C語言格式:;空語句本身沒有實際功能,表示什么操作都不做。但也經(jīng)常用在一些特定的場合,比方空循環(huán),跳轉(zhuǎn)目標(biāo)點等,請看下面的程序代碼。4.2.2根本順序語句3.復(fù)合語句復(fù)合語句是用一對大括弧{}括起來的一組語句,有時侯也稱為“程序段〞,整體上是一條語句,稱為復(fù)合語句。在C語言中的格式:{語句1;語句2;……;}或{語句1;語句2;……;}4.2.2根本順序語句4.無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句可以用來控制程序的流程轉(zhuǎn)向,C語言中提供的無條件轉(zhuǎn)向語句是goto語句,程序設(shè)計中可以根據(jù)需要,在程序中指定標(biāo)號,作為goto語句的轉(zhuǎn)向入口,可以改變程序的操作順序。一般形式:goto語句標(biāo)號;其中語句標(biāo)號必須是在當(dāng)前程序中能找到的有效標(biāo)識。
4.2.2根本順序語句5.函數(shù)調(diào)用語句函數(shù)調(diào)用語句是一次函數(shù)調(diào)用加上分號“;〞構(gòu)成,在C語言中的一般格式:函數(shù)名稱〔參數(shù)〕;函數(shù)調(diào)用語句完成由函數(shù)確定的操作或計算,函數(shù)可以是系統(tǒng)庫函數(shù),也可以為自定義函數(shù)。例如:……getchar();……4.3輸入/輸出函數(shù)語句
與像Basic、Forth等高級語言不同,C語言不含有輸入輸出語句,它的輸入和輸出操作是通過專門的函數(shù)來完成。這些函數(shù)包含在C語言提供的系統(tǒng)函數(shù)庫中,使用時引入相應(yīng)的頭文件,然后就可以調(diào)用了。在計算機系統(tǒng)中提供根本輸入輸出的設(shè)備被稱做“標(biāo)準(zhǔn)輸入/輸出設(shè)備〞,如鍵盤、顯示系統(tǒng)等。C語言提供了一組標(biāo)準(zhǔn)輸入/輸出函數(shù),這些函數(shù)的說明及相關(guān)內(nèi)容包含在stdio.h頭文件內(nèi)。常用的輸入/輸出函數(shù)有:字符輸入函數(shù)
1.getchar()函數(shù)說明:intgetchar(void); 從標(biāo)準(zhǔn)的輸入設(shè)備,如鍵盤讀入一個字符,最簡單的方法是調(diào)用函數(shù)getchar(),該函數(shù)的功能是獲取一個鍵盤的輸入字符并返回ASCII碼值。
字符輸入函數(shù)2.getche()函數(shù)說明:intgetche(void);getche()函數(shù)的功能是從鍵盤有回顯地取一個字符。getche()使用直接視頻或BIOS,從鍵盤讀取一個字符,可以將它顯示到當(dāng)前文本窗口。
字符輸入函數(shù)3.gets()函數(shù)說明:char*gets(char*string);gets()函數(shù)的功能是從鍵盤讀入一個以換行符結(jié)尾的字符串到s,并用空字符〔\0〕代替s的換行符。gets允許輸入串中包含某種空白字符如空格、制表符等。如果調(diào)用成功,那么返回字符串參數(shù)s;如果遇到文件結(jié)束或出錯,將返回null。字符輸出函數(shù)
1.putchar()函數(shù)說明:intputchar(intch);putchar()函數(shù)的格式是putchar(c),功能是將字符c顯示在屏幕上。如果putchar()函數(shù)調(diào)用成功,那么返回字符c。字符輸出函數(shù)2.puts()函數(shù)說明:intputs(constchar*s);輸出字符串s到輸出設(shè)備。函數(shù)執(zhí)行成功那么輸出字符串在輸出設(shè)備,返回最后字符,否那么返回EOF。4.3.3格式化輸入/輸出字符輸入/輸出函數(shù)只能輸入或輸出字符或字符串,如果要輸入/輸出其他類型的數(shù)據(jù)如整數(shù)或浮點數(shù),就不能用這些函數(shù)。C語言系統(tǒng)函數(shù)庫提供的printf()和scanf()函數(shù)可以根據(jù)需要,按規(guī)定的數(shù)據(jù)類型輸入數(shù)據(jù)給變量,或?qū)⒆兞?、表達(dá)式的內(nèi)容輸出。在printf()和scanf()函數(shù)中,數(shù)據(jù)類型由通過一特定的格式字符串轉(zhuǎn)換,因此這兩個函數(shù)又稱為“格式化〞輸入/輸出函數(shù)。1.printf()——格式輸出函數(shù) C語言的格式輸出函數(shù)是printf(),前面用到過這個函數(shù)的一局部功能。這里再介紹一下。printf()函數(shù)的功能是產(chǎn)生格式化的輸出到標(biāo)準(zhǔn)輸出。函數(shù)說明:intprintf〔格式控制串,輸出參數(shù)表列〕;不同的轉(zhuǎn)換字符對應(yīng)不同的數(shù)據(jù)類型,常用的轉(zhuǎn)換字符及其含義請參閱表2.1。
2.scanf()——格式輸入函數(shù) scanf()與printf()函數(shù)類似,但scanf()是從標(biāo)準(zhǔn)輸入設(shè)備〔stdio〕接收數(shù)據(jù),并按指定格式要求轉(zhuǎn)換存入變量。它完成與printf()相反的轉(zhuǎn)換機制,函數(shù)說明:intintscanf〔格式控制串,地址表列〕;函數(shù)返回成功輸入的項數(shù)。格式控制中可以包含轉(zhuǎn)義字符。常用的轉(zhuǎn)義字符如表4.2所示。
不同的轉(zhuǎn)換字符對應(yīng)不同的輸入,其含義請參閱表4.3。
在%和格式符之間可以插入附加控制字符,如表4.4所示。
4.4順序結(jié)構(gòu)程序?qū)嵗?/p>
例4.16編寫計算整數(shù)n平方根程序,輸入一個整數(shù),輸出該數(shù)的平方根。分析:計算平方根可以直接應(yīng)用C運行庫提供的數(shù)學(xué)函數(shù)sqrt()。這里要求從鍵盤輸入數(shù)值數(shù)據(jù),并且是整數(shù)。由于沒有限制數(shù)據(jù)的范圍,因此按C語言可用最大范圍的整數(shù)類型和浮點數(shù)類型即long和double。
N-S流程圖:源程序:
#include<stdio.h>#include<math.h>main(){longx;doubley;printf("\n請輸入一個整數(shù):");scanf("%ld",&x);y=sqrt(x);printf("結(jié)果:整數(shù)%ld的平方根是%f",x,y);}第5章 選擇結(jié)構(gòu)程序設(shè)計
簡單if分支結(jié)構(gòu)if~else兩路分支結(jié)構(gòu)if~elseif~else多路分支結(jié)構(gòu)條件運算符與條件表達(dá)式switch-case開關(guān)語句選擇結(jié)構(gòu)的嵌套5.1if條件分支結(jié)構(gòu)
簡單if分支結(jié)構(gòu)if語句的簡單形式為: if(表達(dá)式) 語句
例5.1輸入兩個數(shù)分別賦給變量a和b,如果a的值大于b的值,那么交換兩個變量值。main() {floata,b,t; printf("\ninputtworealnumber:"); scanf("%f,%f",&a,&b); if(a>b) /*判斷a>b的值,如果為真,那么執(zhí)行下面的語句*/ {t=a;a=b;b=t;} printf("\na=%5.2f,b=%5.2f\n",a,b); }5.1.2if~else兩路分支結(jié)構(gòu)
if~else兩路分支結(jié)構(gòu)的if語句一般寫為:if(表達(dá)式)語句1;else語句2;5.1.3if~elseif~else多路分支結(jié)構(gòu)
if~elseif~else多路分支結(jié)構(gòu)的if語句一般寫為:if(表達(dá)式1)語句1;elseif(表達(dá)式2)
語句2;elseif(表達(dá)式3)
語句3; …… elseif(表達(dá)式n)
語句n; else
語句n
+1;if~elseif~else語句執(zhí)行過程
5.2條件運算符與條件表達(dá)式
條件運算符是一個三目運算符,即有三個參與運算的量。由條件運算符組成的表達(dá)式稱為條件表達(dá)式。其一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式35.3 switch-case開關(guān)語句switch-case語句又稱多分支選擇語句,它是另一種形式的多分支判斷。使用switch-case語句可以實現(xiàn)多分支選擇結(jié)構(gòu),其一般形式為:
switch(表達(dá)式){case常量表達(dá)式1:語句1;case常量表達(dá)式2:語句2;
case常量表達(dá)式n:語句n;[default: 語句n+1;]}圖5.9switch語句執(zhí)行過程
例5.6根據(jù)輸入的數(shù)字來輸出對應(yīng)的星期幾的英文單詞,如輸入“1〞,那么輸出“Monday〞。根據(jù)題意可使用一個多分支的程序結(jié)構(gòu)??梢援嫵銎淞鞒虉D5.10如下:5.4選擇結(jié)構(gòu)的嵌套
選擇結(jié)構(gòu)可以嵌套使用,如if~elseif~else結(jié)構(gòu)實際上就是if語句的嵌套形式。當(dāng)需要處理問題的判斷條件更為復(fù)雜時,可以用各種結(jié)構(gòu)形式的if語句中相互鑲嵌,可以是一個,也可以是多個if語句,形成相應(yīng)的層層嵌套,但注意嵌套關(guān)系不能交叉。
5.5選擇結(jié)構(gòu)程序應(yīng)用實例
程序一:使用if形式的if語句來實現(xiàn)選擇結(jié)構(gòu)。 main() {floatx,y; printf("inputx="); scanf("%f",&x); if(x<0)y=x-1; if(x==0)y=0; if(x>0)y=x+1; printf("x=%f,y=%f\n",x,y); }程序二:使用if~elseif~else形式的if語句來實現(xiàn)選擇結(jié)構(gòu),算法N-S圖如圖5.15所示。
源程序如下:
main() {floatx,y; printf("inputx="); scanf("%f",&x); if(x<0)y=x-1; elseif(x==0)y=0; elsey=x+1; printf("x=%f,y=%f\n",x,y); }程序三:使用嵌套的if語句來實現(xiàn)選擇結(jié)構(gòu),算法如圖5.16所示。
源程序如下: main() {floatx,y; printf("inputx="); scanf("%f",&x); if(x<=0) if(x==0)y=0; elsey=x+1; else y=x-1; printf("x=%f,y=%f\n",x,y); }例5.11試編程求一元二次方程ax2+bx+c=0的解。其算法N-S圖如圖5.18所示。源程序如下:#include"math.h"main(){floata,b,c,disc,x1,x2,realpart,imagpart;printf("Entera,b,c:\n");scanf("%f,%f,%f",&a,&b,&c);printf("theequation");if(fabs(a)<=1e-6&&fabs(b)<=1e-6)printf("isnotalegalequation\n");elseif(fabs(a)<=1e-6&&fabs(b)>1e-6) printf("hasoneroot:%8.4f\n",-c/b);else {disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("hastwoequalroots:%8.4f\n",-b/(2*a)); elseif(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); } else {realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("hascomplexroots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } }}5.6本章小節(jié)
條件分支結(jié)構(gòu)是程序設(shè)計流程控制的重要組成局部,其中簡單的if分支結(jié)構(gòu)可以實現(xiàn)一路流程的分支;if~else兩路分支結(jié)構(gòu)可以實現(xiàn)二選一分支;if~elseif~else多路分支結(jié)構(gòu)可以實現(xiàn)從多種情況條件中選擇一路執(zhí)行程序流程;條件運算符可以更加簡潔地實現(xiàn)條件分支運算;而switch-case開關(guān)語句能夠方便清晰地實現(xiàn)多項選擇一的程序流程執(zhí)行。各種選擇結(jié)構(gòu)相互之間,根據(jù)邏輯上的需要可以分層嵌套,但是要注意層層匹配,不能交叉。第6章
循環(huán)控制結(jié)構(gòu)程序設(shè)計l
當(dāng)型循環(huán)while結(jié)構(gòu)l
直到型循環(huán)do-while結(jié)構(gòu)l
for循環(huán)結(jié)構(gòu)l
break和continue語句l
循環(huán)嵌套6.1
while當(dāng)型循環(huán)結(jié)構(gòu)
while循環(huán)的結(jié)構(gòu)形式為while〔條件表達(dá)式〕循環(huán)體語句;while語句的一般形式可以表示為:while〔條件表達(dá)式〕{ 語句1; 語句2; …… 語句n;}N-S圖和程序流程圖如圖6.1所示。
例6.1編程實現(xiàn)求1+2+3+…+n之和編程實現(xiàn)求1+2+3+…+n之和,并當(dāng)求得的和第一次大于或等于100時,循環(huán)結(jié)束,輸出該和的值,以及相應(yīng)的循環(huán)次數(shù)n的值,N-S圖如圖6.2所示。
6.2
do-while直到型循環(huán)結(jié)構(gòu)
C程序設(shè)計中的直到型循環(huán)結(jié)構(gòu)使用do-while語句實現(xiàn)。do-while循環(huán)的一般形式為: do{語句 }while〔條件表達(dá)式〕;執(zhí)行過程如圖6.4所示
例6.5用do-while語句實現(xiàn)求從i加到100之和
6.3
for循環(huán)結(jié)構(gòu)
for循環(huán)結(jié)構(gòu)的根本形式為:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語句;
其中的表達(dá)式1一般用來初始化循環(huán)控制變量,表達(dá)式2為條件表達(dá)式,用來控制循環(huán)次數(shù),表達(dá)式3用來修改循環(huán)控制變量。for循環(huán)的執(zhí)行過程如圖6.7所示。
例6.9編程實現(xiàn)計算1+2+3+…+n6.4
break和continue語句
6.4.1break語句
6.4
break和continue語句6.4.2continue語句
6.5循環(huán)嵌套
3種循環(huán)結(jié)構(gòu)〔for、while和dowhile〕可以互相嵌套。如表6-1所示。6.6幾種循環(huán)結(jié)構(gòu)比較在使用循環(huán)結(jié)構(gòu)時還應(yīng)注意:1.三種循環(huán)結(jié)構(gòu)可以相互嵌套組成多重循環(huán)。循環(huán)之間可以并列,但不能交叉。2.可以用無條件轉(zhuǎn)移語句goto使程序流程從循環(huán)體內(nèi)跳轉(zhuǎn)出循環(huán)體外,但不能從循環(huán)體外轉(zhuǎn)向循環(huán)體內(nèi)。3.在循環(huán)程序中應(yīng)防止出現(xiàn)死循環(huán),即應(yīng)保證循環(huán)變量的值在運行過程中可以得到修改,以便循環(huán)條件最終為假,以結(jié)束循環(huán)。6.6循環(huán)結(jié)構(gòu)綜合實例
例6.9輸入一個數(shù)m,判其是否為“素數(shù)〞。事實上只要被從2~之間的整數(shù)除即可,如果均不能整除,即為素數(shù)。所以有程序算法流程圖,如圖6.12所示。源程序:#include"math.h"main(){intm,i,k;scanf("%d",&m);/*輸入一個整數(shù)m*/k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k+1)printf("%d是素數(shù)\n",m);elseprintf("%d不是素數(shù)\n",m);}例6.12利用循環(huán)嵌套輸出打印九九乘法表#include<stdio.h>main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++){if(j>i)break;printf(“%d〞,i*j);}printf(“\n〞);}其結(jié)果將打出三角形的九九乘法表,如圖6.14所示。6.8本章小結(jié)
C語言提供了三種循環(huán)控制結(jié)構(gòu),for、while和do-while循環(huán)結(jié)構(gòu),各有自己的使用特點。三種循環(huán)語句可以相互嵌套組成多重循環(huán)。循環(huán)之間可以并列但不能交叉??捎棉D(zhuǎn)移語句把流程轉(zhuǎn)出循環(huán)體外,但不能從外面轉(zhuǎn)向循環(huán)體內(nèi)。第7章數(shù)組與字符串l
一維數(shù)組的定義、引用及數(shù)組元素初始化l
多維數(shù)組的定義、引用及數(shù)組元素初始化l
字符數(shù)組的定義、引用及數(shù)組元素的初始化l
字符串?dāng)?shù)組的定義、引用及數(shù)組元素初始化l
常用字符串處理函數(shù)的使用7.1一維數(shù)組
7.1.1數(shù)組的根本特點數(shù)組是同一類型變量的有序集合,是一組變量,具有如下特點:1.數(shù)組中的各個元素數(shù)據(jù)類型相同。2.數(shù)組中的元素是按順序排列的,各個元素在數(shù)組中的位置由下標(biāo)確定的。C語言中的數(shù)組下標(biāo)必須為正整數(shù)、0或整數(shù)表達(dá)式。3.訪問數(shù)組中的具體某個元素,可以通過數(shù)組名及跟在后面方括號中的下標(biāo)來實現(xiàn)。4.數(shù)組可以有一個、二個或多個下標(biāo),分別對應(yīng)一維、二維或多維數(shù)組。7.1.1數(shù)組的根本特點數(shù)組是同一類型變量的有序集合,是一組變量,具有如下特點:1.數(shù)組中的各個元素數(shù)據(jù)類型相同。2.數(shù)組中的元素是按順序排列的,各個元素在數(shù)組中的位置由下標(biāo)確定的。C語言中的數(shù)組下標(biāo)必須為正整數(shù)、0或整數(shù)表達(dá)式。3.訪問數(shù)組中的具體某個元素,可以通過數(shù)組名及跟在后面方括號中的下標(biāo)來實現(xiàn)。4.數(shù)組可以有一個、二個或多個下標(biāo),分別對應(yīng)一維、二維或多維數(shù)組。
7.1.2一維數(shù)組的定義和引用
1.一維數(shù)組的定義在C語言中,使用數(shù)組必須先定義后使用。一維數(shù)組的定義形式為:類型說明符數(shù)組名[常量表達(dá)式];其中:(1)
類型說明符可以為任一種根本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。如int,char等。(2)
數(shù)組名是用戶定義的標(biāo)識符,應(yīng)該為合法的標(biāo)識符常量表達(dá)式的值表示數(shù)據(jù)元素個數(shù),也稱為數(shù)組的長度。7.1.2一維數(shù)組的定義和引用2.一維數(shù)組的引用數(shù)組元素的一般引用形式為:數(shù)組名[下標(biāo)]其中:下標(biāo)只能為整型常量或整型表達(dá)式。如果需要將數(shù)組中所有數(shù)組元素輸出,必須: for(j=0;j<10;j++)printf(“%d\t〞,a[j]);即采用循環(huán)來輸出各個數(shù)組元素的值。例7.1數(shù)組元素的引用
main(){inti,a[10];for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--)printf("%d",a[i]);}程序執(zhí)行結(jié)果為:
圖7-1數(shù)組元素的引用
7.1.3一維數(shù)組的初始化
一維數(shù)組初始化可以采用下面方式進行:inta[5]={1,2,3,4,5};即:將數(shù)組元素的初值依次放在一對花括弧內(nèi),各值之間用逗號間隔。編譯時,a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;說明:(1)
數(shù)組不初始化,其元素值為隨機數(shù)。(2)
可以只給局部元素賦初值。當(dāng){}中值的個數(shù)少于元素個數(shù)時,只給前面局部元素賦值。例7.2用數(shù)組求Fibonacci數(shù)列前20個數(shù)
#include<stdio.h>main(){inti; intf[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%12d",f[i]);}程序運行結(jié)果為:
7.1.4一維數(shù)組應(yīng)用實例
例7.3編寫程序?qū)崿F(xiàn)輸入N個整數(shù),輸出其中的最大值和最小值。
例7.4用冒泡法對10個數(shù)從小到大排序。
圖7.5冒泡法排序的流程圖
源程序如下:#include<stdio.h>main(){inta[11],i,j,t; printf("Input10numbers:\n"); for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n"); for(j=1;j<=9;j++) for(i=1;i<=10-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("Thesortednumbers:\n"); for(i=1;i<11;i++) printf("%d",a[i]);}
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大三(會計學(xué))財務(wù)管理學(xué)試題
- 2025年大學(xué)本科三年級(電影學(xué))電影史論基礎(chǔ)測試題及答案
- 2025年高職計算機網(wǎng)絡(luò)技術(shù)(網(wǎng)絡(luò)安全)試題及答案
- 2025年高職中醫(yī)學(xué)(中醫(yī)針灸)試題及答案
- 2025年中職安全工程技術(shù)(安全工程應(yīng)用)模擬試題
- 2025年高職第二學(xué)年(軟件技術(shù))Web前端開發(fā)測試題及答案
- 2025年大學(xué)(旅游管理)旅游經(jīng)濟學(xué)原理階段測試題及評分標(biāo)準(zhǔn)
- 2026年藥學(xué)(藥物研發(fā))專項測試題及答案
- 2025年大學(xué)舞蹈教學(xué)(舞蹈教學(xué)方法)試題及答案
- 印后制作員風(fēng)險評估評優(yōu)考核試卷含答案
- 商務(wù)泰語會話教程課件
- 套改士官申請書
- 2025年1月浙江省高考地理試卷(含答案)
- 電纜更換施工方案
- 風(fēng)箏制作教育課件
- 棄渣場使用規(guī)劃方案
- JCT 871-2023 鍍銀玻璃鏡 (正式版)
- 2024年廣東深圳市龍崗區(qū)南灣街道綜合網(wǎng)格員招聘筆試沖刺題(帶答案解析)
- 臨床研究數(shù)據(jù)清洗與質(zhì)量控制
- 基礎(chǔ)拓?fù)鋵W(xué)講義答案尤承業(yè)
- 淺析幼小銜接中大班幼兒時間觀念的培養(yǎng)對策 論文
評論
0/150
提交評論