




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
計算機程序設(shè)計基礎(chǔ)(C語言)1編輯版計算機程序設(shè)計基礎(chǔ)(C語言)1編輯版
1.課堂要求很嚴(yán)格。2.多聽,適時做筆記。3.上課不能講閑話。4.課后認(rèn)真完成作業(yè)、實驗報告。5.有問題,及時與老師聯(lián)系。教學(xué)要求2編輯版1.課堂要求很嚴(yán)格。教學(xué)要求2編輯版選用教材與參考書主教科書
顧治華、陳天煌等
《C語言程序設(shè)計》
機械工業(yè)出版社
2007.2參考教材顧治華、陳天煌等《C語言程序設(shè)計實驗指導(dǎo)》
機械工業(yè)出版社2007.2參考書譚浩強《C語言程序設(shè)計》清華大學(xué)出版社3編輯版選用教材與參考書主教科書顧治華、陳天煌等《C語言程序課程內(nèi)容第一章C語言程序設(shè)計概述
第二章算法及算法設(shè)計簡介
第三章數(shù)據(jù)描述與基本操作第四章選擇結(jié)構(gòu)程序設(shè)計
第五章循環(huán)結(jié)構(gòu)程序設(shè)計
第六章數(shù)組與指針第七章函數(shù)與模塊化程序設(shè)計方法4編輯版課程內(nèi)容第一章C語言程序設(shè)計概述4編輯版第一章
C語言程序設(shè)計概述5編輯版第一章
C語言程序設(shè)計概述5編輯版1.1程序設(shè)計的概念1.2C語言的產(chǎn)生及發(fā)展1.3簡單C程序介紹1.4
C程序的上機步驟1.5C語言的基本語法和基本結(jié)構(gòu)1.6本章要點小結(jié)6編輯版1.1程序設(shè)計的概念6編輯版1.1程序設(shè)計的概念1.1.1程序設(shè)計語言1.1.2程序設(shè)計的概念7編輯版1.1程序設(shè)計的概念1.1.1程序設(shè)計語言7編輯版計算機計算機是用來延伸人的能力的工具,需要人來駕馭我們的職責(zé)是讓非計算機專業(yè)的人更容易駕馭它完成這一目標(biāo)的主要手段之一就是
“編程(Programming)”8編輯版計算機計算機是用來延伸人的能力的工具,需要人來駕馭8編輯版計算機基本工作過程整個過程的執(zhí)行者是硬件,但硬件是受軟件控制的編程,就是編寫軟件,使硬件按照人的意圖工作9編輯版計算機基本工作過程整個過程的執(zhí)行者是硬件,但硬件是受軟件控制計算機基本工作過程輸入/輸出設(shè)備存儲器運算器控制器源程序和輸入數(shù)據(jù)輸出結(jié)果取出數(shù)據(jù)存入數(shù)據(jù)操作命令存取命令取出程序指令輸入輸出命令計算結(jié)果CPU“馮·諾依曼機”結(jié)構(gòu)大腦眼/耳/口程序和數(shù)據(jù)硬盤CPU內(nèi)存執(zhí)行結(jié)果10編輯版計算機基本工作過程存儲器運算器控制器源程序輸出結(jié)果取出數(shù)據(jù)存軟件的形成軟件(Software)的形成程序員(Programmer)編寫程序源代碼(SourceCode)編譯器(Compiler)把源代碼轉(zhuǎn)換為可被計算機理解的機器代碼(MachineCode)并把機器代碼以可執(zhí)行文件(ExecutableFile)的形式保存在磁盤上11編輯版軟件的形成軟件(Software)的形成11編輯版機器語言匯編語言高級語言面向過程面向?qū)ο驝PU指令系統(tǒng),由0、1序列構(gòu)成的指令碼組成如:10000000加
10010000減用助記符號描述的指令系統(tǒng)如ADDA,B面向機器的語言程序設(shè)計是數(shù)據(jù)被加工的過程客觀世界可以分類,對象是類的實例對象是數(shù)據(jù)和方法的封裝對象間通過發(fā)送和接受消息發(fā)生聯(lián)系程序設(shè)計關(guān)鍵是定義類,并由類派生對象1.1.1程序設(shè)計語言12編輯版機器語言匯編語言高級語言面向過程面向?qū)ο驝PU指令系統(tǒng),由0程序設(shè)計語言的故事計算機為什么用二進制呢?為什么不用我們?nèi)粘J煜さ氖M制呢?二進制在在電器元件中容易實現(xiàn)計算機進行二進制運算比進行十進制運算要簡單得多13編輯版程序設(shè)計語言的故事計算機為什么用二進制呢?13編輯版程序設(shè)計語言的故事機器語言編寫的1+1程序匯編語言(AssembleLanguage)編寫的1+1程序101110000000000100000000000001010000000100000000MOVAX,1ADDAX,114編輯版程序設(shè)計語言的故事機器語言編寫的1+1程序10111000M程序設(shè)計語言的故事BASIC語言編寫的1+1程序C語言編寫的1+1程序PRINT1+1#include<stdio.h>main(){ printf("%d\n",1+1);}15編輯版程序設(shè)計語言的故事BASIC語言編寫的1+1程序PRINT5254565860626466687072747678808284868890929496AdaALGOL60ALGOL68PascalModula-2CPLBCPLBCC++JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula67Smalltalk80BASICANSI-BASICQBASICVBFORTRAN9016編輯版5254565860626466687072747678801.1.2程序設(shè)計的概念程序設(shè)計就是用計算機語言來編寫程序的過程。什么是程序?著名計算機科學(xué)家沃思提出有名的公式:算法+數(shù)據(jù)結(jié)構(gòu)=程序17編輯版1.1.2程序設(shè)計的概念程序設(shè)計就是用計算機語言來編寫程算法即問題的求解過程、計算機的工作步驟。數(shù)據(jù)結(jié)構(gòu)即對參與運算的數(shù)據(jù)怎樣進行合理的組織、安排,以提高程序運行的效率和求解的精確性。程序的兩大要素:數(shù)據(jù)結(jié)構(gòu)、算法18編輯版算法即問題的求解過程、計算機的工作步驟。程序的兩大要素:數(shù)據(jù)1.2C語言的產(chǎn)生和發(fā)展1.2.1C語言的產(chǎn)生1.2.2C語言的發(fā)展1.2.3C語言的特點19編輯版1.2C語言的產(chǎn)生和發(fā)展1.2.1C語言的產(chǎn)1.2.1C語言的產(chǎn)生一切從一個叫“SpaceTravel”的電子游戲開始的……KenThompson為了讓他的游戲能在PDP-7上運行,用匯編語言給PDP-7寫了一個操作系統(tǒng)—UNIX匯編太不好用了,Thompson需要高級語言試驗了一些高級語言,包括Fortran,都不理想他在BCPL基礎(chǔ)上,自己設(shè)計了一個B語言UNIX開始發(fā)展,B也不夠用了DennisRitchie加入,把B改造成C開始用C重寫UNIX20編輯版1.2.1C語言的產(chǎn)生一切從一個叫“SpaceT1.2.2C語言的發(fā)展C語言發(fā)展過程產(chǎn)生過程時間:1972~1973地點:美國貝爾實驗室目的:UNIX操作系統(tǒng)設(shè)計人:Ken.Thompson和Dennis.M.RitchieC標(biāo)準(zhǔn)標(biāo)準(zhǔn)C:K&R合著《TheCProgrammingLanguage》ANSIC:1983年87ANSIC:1987年1990年國際標(biāo)準(zhǔn)的ANSIC21編輯版1.2.2C語言的發(fā)展C語言發(fā)展過程21編輯版Ritchie和Thompson在開發(fā)UNIX22編輯版Ritchie和Thompson在開發(fā)UNIX22編輯版接受美國國家技術(shù)勛章23編輯版接受美國國家技術(shù)勛章23編輯版C語言的祖師爺DennisM.Ritchie24編輯版C語言的祖師爺DennisM.Ritchie24編輯版Ritchie漫畫像
25編輯版Ritchie漫畫像
25編輯版C語言本身既有一般高級語言的特點,又由低級語言(匯編語言)的特點。C語言是一種結(jié)構(gòu)化的程序設(shè)計語言,它具有實現(xiàn)順序、分支、循環(huán)三種基本結(jié)構(gòu)化控制的語句。C語言簡潔,緊湊,使用方便靈活。只有32個保留字,9種控制語句,書寫形式自由。數(shù)據(jù)類型豐富。有整型、實型、字符型、數(shù)組型、指針型、結(jié)構(gòu)體型、共用體型和枚舉型等。1.2.3C語言的特點26編輯版C語言本身既有一般高級語言的特點,又由低級語言(匯編語言)的5、運算功能強。有32種運算符,包括了算術(shù)運算、關(guān)系運算、邏輯運算、位運算、指針運算等。6、目標(biāo)代碼質(zhì)量高,運行速度快。7、可移植性強。8、語法限制不太嚴(yán)格,程序設(shè)計自由度大。1.2.3C語言的特點27編輯版5、運算功能強。有32種運算符,包括了算術(shù)運算、關(guān)系運算、邏C語言是編譯型語言
一種編譯語言對應(yīng)一種編譯器按照該語言的語法編寫程序源代碼,把自己的思想融入到代碼中編譯器讀入源代碼,把程序員的意圖轉(zhuǎn)換成可執(zhí)行程序,供他人使用28編輯版C語言是編譯型語言一種編譯語言對應(yīng)一種編譯器28編輯版C語言與計算機系統(tǒng)層次關(guān)系29編輯版C語言與計算機系統(tǒng)層次關(guān)系29編輯版1.3簡單C程序介紹30編輯版1.3簡單C程序介紹30編輯版C程序格式和結(jié)構(gòu)特點第一個程序Hello,World!/*example1.1ThefirstCProgram*/#include<stdio.h>main(){printf(“Hello,World!”);}注釋編譯預(yù)處理函數(shù)語句輸出:Hello,World!31編輯版C程序格式和結(jié)構(gòu)特點第一個程序Hello,World!注/*example1.2calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;
sum=add(a,b);printf(”sum=%d\n",sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}運行結(jié)果:sum=34語句預(yù)處理命令注釋主函數(shù)子函數(shù)32編輯版/*example1.2calculat格式特點習(xí)慣用小寫字母,大小寫敏感不使用行號,無程序行概念可使用空行和空格常用鋸齒形書寫格式main(){
……………….………………
…………..…………..
……………….
………………………….
……………….………………..}main(){
inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}優(yōu)秀程序員的素質(zhì)之一:使用TAB縮進{}對齊有足夠的注釋有合適的空行33編輯版格式特點main()main()優(yōu)秀程序員的素質(zhì)之一:3結(jié)構(gòu)特點函數(shù)與主函數(shù)程序由一個或多個函數(shù)組成必須有且只能有一個主函數(shù)main()程序執(zhí)行從main開始,在main中結(jié)束,其它函數(shù)通過嵌套調(diào)用得以執(zhí)行。程序語句C程序由語句組成用“;”作為語句終止符注釋/**/為注釋,不能嵌套不產(chǎn)生編譯代碼例:/*Thisisthemain/*ofexample1.1*/*/非法編譯預(yù)處理命令①函數(shù)首部:包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)名、參數(shù)類型。②函數(shù)體:聲明部分,執(zhí)行部分。34編輯版結(jié)構(gòu)特點例:/*Thisisthemain1.4C程序的上機步驟35編輯版1.4C程序的上機步驟35編輯版編輯鏈接編譯執(zhí)行程序代碼的錄入,生成源程序*.c語法分析查錯,翻譯生成目標(biāo)程序*.obj與其它目標(biāo)程序或庫鏈接裝配,生成可執(zhí)行程序*.exe開始編輯編譯
有錯?執(zhí)行連接結(jié)果正確結(jié)束可執(zhí)行目標(biāo)程序f.exe源程序f.c目標(biāo)程序f.obj庫函數(shù)和其他目標(biāo)程序YesNoYesNo36編輯版編輯鏈接編譯執(zhí)行程序代碼的錄入,語法分析查錯,翻譯與其它目標(biāo)1.5C語言的基本語法和結(jié)構(gòu)1.5.1C語言的基本語法1.5.2C語言的基本結(jié)構(gòu)37編輯版1.5C語言的基本語法和結(jié)構(gòu)1.5.1C語言1.5.1C語言的基本語法標(biāo)識符關(guān)鍵字運算符分隔符常量注釋符字符集38編輯版1.5.1C語言的基本語法標(biāo)識符38編輯版標(biāo)識符常量、變量、語句標(biāo)號以及自定義函數(shù)的名稱只能是字母、數(shù)字和下劃線組成的字符串,第一個字符必須是字母或下劃線標(biāo)準(zhǔn)C不限制標(biāo)識符長度,但一般不超過8字符標(biāo)識符大小寫有區(qū)別標(biāo)識符名最好能“顧名思義”39編輯版標(biāo)識符常量、變量、語句標(biāo)號以及自定義函數(shù)的名稱39編輯版32個關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile40編輯版32個關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義)40編輯版9種控制語句:if()~else~switch~case~for()~while()~do~while()continuebreakgotoreturn41編輯版9種控制語句:41編輯版34種運算符:算術(shù)運算符:+-*/%++--關(guān)系運算符:<<===>>=!=邏輯運算符:!&&||位運算符:<<>>~|^&賦值運算符:=及其擴展條件運算符:?:逗號運算符:,指針運算符:*&求字節(jié)數(shù):sizeof強制類型轉(zhuǎn)換:(類型)分量運算符:.->下標(biāo)運算符:[]其它:()-42編輯版34種運算符:42編輯版1.5.2C語言的基本結(jié)構(gòu)(1)順序結(jié)構(gòu)
ABab43編輯版1.5.2C語言的基本結(jié)構(gòu)(1)順序結(jié)構(gòu)ABab(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu)
此結(jié)構(gòu)中必包含一個判斷框。根據(jù)給定的條件P是否成立而選擇執(zhí)行A框或B框abBAp不成立成立44編輯版(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu)此結(jié)構(gòu)中必包含一個判斷框。根據(jù)
(3)
循環(huán)結(jié)構(gòu),它又稱為重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分的操作。又兩類循環(huán)結(jié)構(gòu):
a.當(dāng)型(while型)循環(huán)結(jié)構(gòu)ap1TFAbb.直到型(Until型)循環(huán)結(jié)構(gòu)
aATFbp245編輯版
(3)
循環(huán)結(jié)構(gòu),它又稱為重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分1.6本章要點小結(jié)程序設(shè)計的概念C語言的產(chǎn)生及發(fā)展C語言的特點C程序的介紹和上機步驟C語言的基本語法和結(jié)構(gòu)46編輯版1.6本章要點小結(jié)程序設(shè)計的概念46編輯版本章課堂練習(xí)
(1)以下說法中正確的是().A)C語言程序總是從第一個函數(shù)開始執(zhí)行
B)在C語言程序中,要調(diào)用的函數(shù)必須在main()函數(shù)中定義
C)C語言程序總是從main()函數(shù)開始執(zhí)行
D)C語言程序中的main()函數(shù)必須放在程序的開始部分47編輯版本章課堂練習(xí)(1)以下說法中正確的是().47編解答:C解釋:C語言程序總是從main()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時,亦即程序執(zhí)行完畢。除main函數(shù)外,其它函數(shù)都是在執(zhí)行main函數(shù)時被調(diào)用執(zhí)行的。在C語言中,函數(shù)不允許嵌套定義。習(xí)慣上,將主函數(shù)main()放在最前頭,但并不是必須的。48編輯版解答:C48編輯版(2).以下敘述不正確的是A)一個C源程序可由一個或多個函數(shù)組成B)一個C源程序必須包含一個main函數(shù)C)C程序的基本組成單位是函數(shù)
D)在C程序中,注釋說明只能位于一條語句的后面49編輯版(2).以下敘述不正確的是49編輯版解答:D解釋:
凡是用“/*”和“*/”括起來的文字,都是注釋。其出現(xiàn)的位置可以任意。50編輯版解答:D50編輯版(3).下列標(biāo)識符中,合法的變量名有:A)a.bB)$888C)A1D)
3x5651編輯版(3).下列標(biāo)識符中,合法的變量名有:51編輯版解答:C解釋:變量名只能由字母、數(shù)字和下劃線三種字符所組成,且第一個字符必須為字母或下劃線。C語言的關(guān)鍵字不能用作變量名。另外,C語言對英文字母的大小寫敏感,即同一字母的大小寫,被認(rèn)為是兩個不同的字符。習(xí)慣上,變量名和函數(shù)名中的英文字母用小寫,以增加可讀性。52編輯版解答:C52編輯版第二章程序的靈魂:算法53編輯版第二章程序的靈魂:算法53編輯版一個程序主要包括以下兩方面的信息:(1)對數(shù)據(jù)的描述。在程序中要指定用到哪些數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式這就是數(shù)據(jù)結(jié)構(gòu)(datastructure)(2)對操作的描述。即要求計算機進行操作的步驟也就是算法(algorithm)54編輯版一個程序主要包括以下兩方面的信息:54編輯版數(shù)據(jù)是操作的對象操作的目的是對數(shù)據(jù)進行加工處理,以得到期望的結(jié)果著名計算機科學(xué)家沃思(NikiklausWirth)提出一個公式:
算法
+數(shù)據(jù)結(jié)構(gòu)=程序55編輯版數(shù)據(jù)是操作的對象55編輯版一個程序除了算法和數(shù)據(jù)結(jié)構(gòu)這主要要素外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計方法進行程序設(shè)計,并且用某一種計算機語言表示算法、數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計方法和語言工具是一個程序設(shè)計人員應(yīng)具備的知識算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具和環(huán)境=程序56編輯版一個程序除了算法和數(shù)據(jù)結(jié)構(gòu)這主要要素外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序算法是解決“做什么”和“怎么做”的問題程序中的操作語句,是算法的體現(xiàn)不了解算法就談不上程序設(shè)計57編輯版算法是解決“做什么”和“怎么做”的問題57編輯版2.1算法的概念2.2算法的特性2.3算法的表示2.4結(jié)構(gòu)化程序設(shè)計方法58編輯版2.1算法的概念58編輯版2.1算法的概念廣義地說,為解決一個問題而采取的方法和步驟,就稱為“算法”對同一個問題,可以有不同的解題方法和步驟為了有效地進行解題,不僅需要保證算法正確,還要考慮算法的質(zhì)量,選擇合適的算法59編輯版2.1算法的概念廣義地說,為解決一個問題而采取的方法和步計算機算法可分為兩大類別:數(shù)值運算算法非數(shù)值運算算法數(shù)值運算的目的是求數(shù)值解非數(shù)值運算包括的面十分廣泛,最常見的是用于事務(wù)管理領(lǐng)域2.1算法的概念60編輯版計算機算法可分為兩大類別:2.1算法的概念60編輯版可以用最原始的方法進行:步驟1:先求1*2,得到結(jié)果2。步驟2:將步驟1得到的乘積2再乘以3,得到結(jié)果6。步驟3:將6再乘以4,得24。步驟4:將24再乘以5,得120。這就是最后的結(jié)果。例2.1求1×2×3×4×5×…×100太繁瑣例2.1求1×2×3×4×5簡單算法的舉例概念61編輯版可以用最原始的方法進行:例2.1求1×2×3×4×5×…改進的算法:設(shè)變量p為被乘數(shù)變量i為乘數(shù)用循環(huán)算法求結(jié)果求1×2×3×4×5簡單算法的舉例概念62編輯版改進的算法:求1×2×3×4×5簡單算法的舉例概念62編輯版S1:使p=1,或?qū)懗?pS2:使i=2,或?qū)懗?iS3:使p與i相乘,乘積仍放在變量p中,可表示為:p*ipS4:使i的值加1,即i+1iS5:如果i不大于5,返回重新執(zhí)行S3;否則,算法結(jié)束最后得到p的值就是
5!的值若是100,求什么?簡單算法的舉例概念63編輯版S1:使p=1,或?qū)懗?p若是100,求什么?簡單算法的舉
例2.2有50個學(xué)生,要求將成績在80-90分的學(xué)生的學(xué)號和成績輸出。用ni代表第i個學(xué)生學(xué)號,gi表示第i個學(xué)生成績S1:1iS2:如果90≥gi≥80,
則輸出ni和gi,否則不輸出S3:i+1iS4:如果i≤50,返回到步驟S2,繼續(xù)執(zhí)行,否則,算法結(jié)束64編輯版例2.2有50個學(xué)生,要求將成績在80-90分的學(xué)生的2.1算法的概念2.2算法的特性2.3算法的表示2.4結(jié)構(gòu)化程序設(shè)計方法65編輯版2.1算法的概念65編輯版一個有效算法應(yīng)該具有以下特點:(1)
有窮性。一個算法應(yīng)包含有限的操作步驟,而不能是無限的。(2)
確定性。算法中的每一個步驟都應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。2.2算法的特性66編輯版一個有效算法應(yīng)該具有以下特點:2.2算法的特性66編輯版一個有效算法應(yīng)該具有以下特點:(3)
有零個或多個輸入。所謂輸入是指在執(zhí)行算法時需要從外界取得必要的信息。(4)
有一個或多個輸出。算法的目的是為了求解,“解”就是輸出。沒有輸出的算法是沒有意義的。(5)
有效性。算法中的每一個步驟都應(yīng)當(dāng)能有效地執(zhí)行,并得到確定的結(jié)果。2.2算法的特性67編輯版一個有效算法應(yīng)該具有以下特點:2.2算法的特性67編輯版對于一般最終用戶來說:他們并不需要在處理每一個問題時都要自己設(shè)計算法和編寫程序可以使用別人已設(shè)計好的現(xiàn)成算法和程序只需根據(jù)已知算法的要求給予必要的輸入,就能得到輸出的結(jié)果輸入3個數(shù)黑箱子3個數(shù)中最大數(shù)求3個數(shù)的最大數(shù)2.2算法的特性68編輯版對于一般最終用戶來說:輸入3個數(shù)黑箱子3個數(shù)中最大數(shù)求3個數(shù)2.1算法的概念2.2算法的特性2.3算法的表示2.4結(jié)構(gòu)化程序設(shè)計方法69編輯版2.1算法的概念69編輯版常用的方法有:自然語言傳統(tǒng)流程圖結(jié)構(gòu)化流程圖偽代碼……2.3算法的表示70編輯版常用的方法有:2.3算法的表示70編輯版自然語言表示法2.1節(jié)例子介紹的算法是用自然語言表示的用自然語言表示通俗易懂,但文字冗長,容易出現(xiàn)歧義性用自然語言描述包含分支和循環(huán)的算法,不很方便除了很簡單的問題外,一般不用自然語言71編輯版自然語言表示法2.1節(jié)例子介紹的算法是用自然語言表示的71編傳統(tǒng)的程序流程圖用一些圖形符號形象直觀的表述算法,上表給出了ANSI規(guī)定的程序流程圖符號。流程圖是用一些圖框來表示各種操作用圖形表示算法,直觀形象,易于理解72編輯版?zhèn)鹘y(tǒng)的程序流程圖用一些圖形符號形象直觀的表述算法,上表給出了x≧0Y……N……一個入口兩個出口傳統(tǒng)的程序流程圖73編輯版x≧0Y……N……一個入口兩個出口傳統(tǒng)的程序流程圖73編輯版③①②①③②③位置不夠防止交叉?zhèn)鹘y(tǒng)的程序流程圖74編輯版③①②①③②③位置不夠防止交叉?zhèn)鹘y(tǒng)的程序流程圖74編輯版
例2.4將例2.1的算法用流程圖表示。
求1×2×3×4×5如果需要將最后結(jié)果輸出:1t輸出ti>5開始2it*iti+1i結(jié)束NY75編輯版例2.4將例2.1的算法用流程圖表示。1t輸出ti>通過以上幾個例子可以看出流程圖是表示算法的較好的工具一個流程圖包括以下幾部分:(1)表示相應(yīng)操作的框(2)帶箭頭的流程線(3)框內(nèi)外必要的文字說明流程線不要忘記畫箭頭,否則難以判定各框的執(zhí)行次序傳統(tǒng)的程序流程圖76編輯版通過以上幾個例子可以看出流程圖是表示算法的較好的工具傳統(tǒng)的程特點:繪制簡單,描述直觀,之前廣泛使用。缺點:程序流程圖不易表示算法或程序的層次結(jié)構(gòu)。用箭頭表示的控制流可能引起隨意的轉(zhuǎn)移控制??赡苷T使人們過早地考慮局部程序的控制結(jié)構(gòu)而忽視全局的程序結(jié)構(gòu)。不易表示數(shù)據(jù)結(jié)構(gòu)和程序模塊之間的關(guān)系。傳統(tǒng)的程序流程圖77編輯版特點:繪制簡單,描述直觀,之前廣泛使用。傳統(tǒng)的程序流程圖77N-S圖表示法
1973年美國學(xué)者I.Nassi和B.Shneiderman提出了一種新的流程圖形式。在這種流程圖中,完全去掉了帶箭頭的流程線。全部算法寫在一個矩形框內(nèi),在該框內(nèi)還可以包含其他的從屬于它的框。
這種流程圖又稱N—S結(jié)構(gòu)化流程圖(N和S是兩位美國學(xué)者的英文姓名的第一個字母)。這種流程圖適于結(jié)構(gòu)化程序設(shè)計,因此很受歡迎。78編輯版N-S圖表示法1973年美國學(xué)者I.Nassi和BN-S流程圖用以下的流程圖符號:ABABYNpA當(dāng)p1成立A直到p2成立順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)(當(dāng)型)循環(huán)結(jié)構(gòu)(直到型)N-S圖表示法
79編輯版N-S流程圖用以下的流程圖符號:ABABYNpA當(dāng)p1成立A用偽碼表示算法
偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法。它不用圖形符號,因此書寫方便,格式緊湊,也比較好懂,便于向計算機語言算法(即程序)過渡。
80編輯版用偽碼表示算法偽代碼是用介于自然語言和計算機語言BEGIN(算法開始)1=>iWhilei<=30{inputniandgii+1=>i}1=>iWhilei<=30{ifgi>=80andgi<=90printniandgii+1=>i}END(算法結(jié)束)
前例用偽代碼表示算法如下:81編輯版BEGIN(算法開始)前例用偽代碼表示算法如下:81編輯版用計算機語言表示算法
要完成一項工作,包括設(shè)計算法和實現(xiàn)算法兩個部分。設(shè)計算法的目的是為了實現(xiàn)算法。不僅要考慮如何設(shè)計一個算法,也要考慮如何實現(xiàn)一個算法。82編輯版用計算機語言表示算法要完成一項工作,包括設(shè)計算法和實現(xiàn)算法用C語言程序?qū)崿F(xiàn)前例如下#include<stdio.h>/*打印出50名同學(xué)中成績在80-90分者*/main(){
int
i,g[50],n[50];
for(i=0;i<50;i++)/*輸入50名同學(xué)的學(xué)號,成績*/scanf(“%d,%d”,&n[i],&g[i]);for(i=0;i<50;i++)/*輸出成績80-90分同學(xué)的學(xué)號,成績*/
if((g[i]>=80)&&(g[i]<=90))printf(“%6d,%3d\n”,n[i],g[i]);}fc1.c83編輯版用C語言程序?qū)崿F(xiàn)前例如下#include<stdio.h>2.1算法的概念2.2算法的特性2.3算法的表示2.4結(jié)構(gòu)化程序設(shè)計方法84編輯版2.1算法的概念84編輯版2.4結(jié)構(gòu)化程序設(shè)計方法簡介
荷蘭學(xué)者E.W.dijkctra提出了結(jié)構(gòu)化程序設(shè)計(structuredprogramming)的理論,成為70年代中期至90年代初的程序設(shè)計主流。結(jié)構(gòu)化程序設(shè)計方法提出了一些大家都要遵循的原則,這些原則歸納為32個字:自頂向下,逐步細(xì)化。模塊設(shè)計,結(jié)構(gòu)編碼。清晰第一,效率第二。書寫規(guī)范,縮進格式。85編輯版2.4結(jié)構(gòu)化程序設(shè)計方法簡介荷蘭學(xué)者E.W.dijkc順序、分支和循環(huán)三種基本結(jié)構(gòu)的共同特點:(1)只有一個入口。(2)只有一個出口。(3)結(jié)構(gòu)內(nèi)的每一部分都有機會被執(zhí)行到。也就是說,對每一個框來說,都有從入口到出口的路徑通過它。(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無終止的循環(huán))。86編輯版順序、分支和循環(huán)三種基本結(jié)構(gòu)的共同特點:(1)只有一個入結(jié)構(gòu)化程序
所謂結(jié)構(gòu)化程序,就是僅僅使用順序、選擇、循環(huán)等三種基本結(jié)構(gòu)所構(gòu)造的程序。
結(jié)構(gòu)化程序設(shè)計方法
結(jié)構(gòu)化程序設(shè)計方法的基本思想是,把一個復(fù)雜問題的求解過程分階段進行。每個階段的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。
87編輯版結(jié)構(gòu)化程序所謂結(jié)構(gòu)化程序,就是僅僅使用順序、選擇、結(jié)構(gòu)化程2.4本章要點小結(jié)
算法的概念算法的特性算法的表示結(jié)構(gòu)化程序設(shè)計方法88編輯版2.4本章要點小結(jié)算法的概念88編輯版第三章數(shù)據(jù)描述與
基本操作89編輯版第三章數(shù)據(jù)描述與
3.1基本數(shù)據(jù)類型3.2運算符和表達(dá)式3.3輸入輸出操作90編輯版3.1基本數(shù)據(jù)類型90編輯版3.1基本數(shù)據(jù)類型3.1.1C語言的數(shù)據(jù)類型3.1.2常量和變量3.1.3數(shù)據(jù)類型轉(zhuǎn)換91編輯版3.1基本數(shù)據(jù)類型3.1.1C語言的數(shù)據(jù)類型91編輯版3.1.1C語言的數(shù)據(jù)類型(一)什么是數(shù)據(jù)類型?(二)C語言的數(shù)據(jù)類型有哪些?92編輯版3.1.1C語言的數(shù)據(jù)類型(一)什么是數(shù)據(jù)類型?92編(一)什么是數(shù)據(jù)類型?數(shù)據(jù)結(jié)構(gòu)+算法=程序C語言中以“數(shù)據(jù)類型”形式存在對數(shù)據(jù)的描述對操作的描述93編輯版(一)什么是數(shù)據(jù)類型?數(shù)據(jù)結(jié)構(gòu)+算法=程序C語言中以對數(shù)據(jù)數(shù)據(jù)類型基本類型整型(有符號、無符號)字符型實型(浮點型)枚舉類型構(gòu)造類型數(shù)組類型結(jié)構(gòu)體類型共用體類型指針類型空類型單精度型雙精度型在程序中對用到的所有數(shù)據(jù)都必須指定其數(shù)據(jù)類型.?不同類型的數(shù)據(jù),所占內(nèi)存的字節(jié)數(shù)不同,對應(yīng)的操作也不相同。(二)C的數(shù)據(jù)類型94編輯版數(shù)據(jù)類型基本類型整型(有符號、無符號)構(gòu)造類型數(shù)組類型指針類整型數(shù)據(jù)1.整型數(shù)據(jù)的分類最基本的整型類型基本整型(int型):占2個或4個字節(jié)(32位編譯系統(tǒng))短整型(shortint):VC++6.0中占2個字節(jié)長整型(longint):VC++6.0中占4個字節(jié)雙長整型(longlongint):C99新增的,64位占8個字節(jié),VC++6.0中定義為_int6495編輯版整型數(shù)據(jù)1.整型數(shù)據(jù)的分類95編輯版2.整型變量的符號屬性整型變量的值的范圍包括負(fù)數(shù)到正數(shù)可以將變量定義為“無符號”類型擴充的整形類型:有符號基本整型
[signed]int;無符號基本整型
unsignedint;有符號短整型
[signed]short[int];無符號短整型
unsignedshort
[int];有符號長整型
[signed]long[int];無符號長整型
unsignedlong
[int];整型數(shù)據(jù)96編輯版2.整型變量的符號屬性整型數(shù)據(jù)96編輯版字符型數(shù)據(jù)字符是按其代碼(整數(shù))形式存儲的C99把字符型數(shù)據(jù)作為整數(shù)類型的一種字符型數(shù)據(jù)在使用上有自己的特點97編輯版字符型數(shù)據(jù)字符是按其代碼(整數(shù))形式存儲的97編輯版1.字符與字符代碼大多數(shù)系統(tǒng)采用ASCII字符集字母:A~Z,a~z數(shù)字:0~9專門符號:29個:!”#&‘()*等空格符:空格、水平制表符‘\t’、換行‘\n’等不能顯示的字符:空(null)字符(以‘\0’表示)、鳴鈴(以‘\a’表示)、退格(以‘\b’表示)、回車(以‘\r’表示)等字符型數(shù)據(jù)98編輯版1.字符與字符代碼字符型數(shù)據(jù)98編輯版字符’1’和整數(shù)1是不同的概念:字符’1’只是代表一個形狀為’1’的符號,在需要時按原樣輸出,在內(nèi)存中以ASCII碼形式存儲,占1個字節(jié)整數(shù)1是以整數(shù)存儲方式(二進制補碼方式)存儲的,占2個或4個字節(jié)字符型數(shù)據(jù)99編輯版字符’1’和整數(shù)1是不同的概念:字符型數(shù)據(jù)99編輯版2.字符變量用類型符char定義字符變量
charc=’?’;
系統(tǒng)把“?”的ASCII代碼63賦給變量cprintf(“%d%c\n”,c,c);輸出結(jié)果是:
63?字符型數(shù)據(jù)100編輯版2.字符變量字符型數(shù)據(jù)100編輯版浮點型數(shù)據(jù)浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù)float型(單精度浮點型)編譯系統(tǒng)為float型變量分配4個字節(jié)數(shù)值以規(guī)范化的二進制數(shù)指數(shù)形式存放
101編輯版浮點型數(shù)據(jù)浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù)101編輯版浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù)float型(單精度浮點型)double型(雙精度浮點型)編譯系統(tǒng)為double型變量分配8個字節(jié)15位有效數(shù)字浮點型數(shù)據(jù)102編輯版浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù)浮點型數(shù)據(jù)102編輯版幾種基本數(shù)據(jù)類型類型符號關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實型有無(signed)int32-2147483648~2147483647(signed)short16-32768~32767(signed)long32-2147483648~214748364732Unsignedint0~4294967295320~4294967295unsignedlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255說明:數(shù)據(jù)類型所占字節(jié)數(shù)隨編譯器不同而不同,上表以VC++6.0為例:103編輯版幾種基本數(shù)據(jù)類型類型符號關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型舉例:數(shù)據(jù)溢出(Overflow)的危害
一臺安裝了Windows?95/98的機器,如果連續(xù)運行49.7天,可能死機原因:
Windows自啟動時刻起,有一個計數(shù)器,記錄系統(tǒng)已經(jīng)運行了多少毫秒。這個計數(shù)器個unsignedlong
unsignedlong的最大值:4294967295
一天有24*60*60*1000=86400000毫秒
4294967295/86400000=49.71026961805……
當(dāng)49.7天的時候,此計數(shù)器會溢出,引起死機104編輯版舉例:數(shù)據(jù)溢出(Overflow)的危害一臺安裝了Wind(一)常量(二)變量3.1.2常量與變量105編輯版(一)常量3.1.2常量與變量105編輯版預(yù)備知識:bit,Byte,Word
bit,位
Byte,字節(jié)1B==8bWord,字1W==2BKilobyte(KB),1KB==1,024BMegabyte(MB),1MB==1,024KBGigabyte(GB),1GB==1,024MBTerabyte(TB)1TB==1,024GB106編輯版預(yù)備知識:bit,Byte,Wordbit,一個字節(jié)有多大?可以表示數(shù)字0~255
保存一個字符(英文字母、數(shù)字、符號),ASCII編碼兩個字節(jié)保存一個漢字107編輯版一個字節(jié)有多大?107編輯版預(yù)備知識:二進制世界上有(10)2種人,1種人懂二進制,1種人不懂二進制一個位有多大?只能是“0”或者“1”,這叫二進制二進制詮釋了計算機的哲學(xué)
種類眾多的復(fù)雜事物都是由若干種簡單事物構(gòu)成108編輯版預(yù)備知識:二進制世界上有(10)2種人,1種人懂二進制,1種1.常量:在程序運行過程中,其值不能被改變的量整型常量:如1000,12345,0,-345實型常量十進制小數(shù)形式:如0.34-56.790.0指數(shù)形式:如12.34e3(代表12.34103)字符常量:如’?’轉(zhuǎn)義字符:如’\n’字符串常量:如”boy”符號常量:#definePI3.14163.1.2常量與變量109編輯版1.常量:在程序運行過程中,其值不能被改變的量3.1.2常字符與字符串的區(qū)別有哪些?定界符不同:字符常量使用單引號,而字符串常量使用雙引號;長度不同:字符常量的長度固定為1,而字符串常量的長度,可以是0,也可以是某個整數(shù);存儲要求不同:字符常量存儲的是字符的ASCII碼值,而字符串常量,除了要存儲有效的字符外,還要存儲一個結(jié)束標(biāo)志’\0’。110編輯版字符與字符串的區(qū)別有哪些?定界符不同:字符常量使用單引號,而2.變量:在程序運行期間,變量的值是可以改變的變量必須先定義,后使用定義變量時指定該變量的名字和類型變量名和變量值是兩個不同的概念變量名實際上是以一個名字代表的一個存儲地址從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)3.1.2常量與變量111編輯版2.變量:在程序運行期間,變量的值是可以改變的3.1.2方式:1、定義變量的同時賦初值(也叫變量初始化)。格式:數(shù)據(jù)類型變量名[=初值][,變量名2[=初值2]……];2、通過一個賦值語句給變量賦初值。格式:
變量名=初值;變量賦初值出現(xiàn)在函數(shù)體的聲明部分出現(xiàn)在函數(shù)體的執(zhí)行部分inta,b=3;inta,b;b=3;112編輯版方式:變量賦初值出現(xiàn)在函數(shù)體出現(xiàn)在函數(shù)體inta,b=1、程序中用到的變量必須“先定義(declare),后使用”。2、C語言的關(guān)鍵字不能用作變量名。3、C語言對英文字母的大小寫敏感,即同一字母的大小寫,被認(rèn)為是兩個不同的字符。4、定義變量時,給幾個變量賦相同的初值,應(yīng)寫成:inta=3,b=3,c=3;
不能寫成:inta=b=c=3;×5、給變量賦值時,正常情況下應(yīng)給變量賦相同類型的數(shù)據(jù)。若給變量賦與其類型不同的數(shù)據(jù)時,需進行類型轉(zhuǎn)換。關(guān)于變量以及變量賦初值的幾點說明113編輯版1、程序中用到的變量必須“先定義(declare),后使用”變量——舉例#include<stdio.h>voidmain(){intstudent,age;intif=adrress=1;floatscore=90;
stadent=2;Age=20.7;printf("%d%d%d%f",if,student,age,score);}本程序中有幾處錯誤?undeclaredidentifier114編輯版變量——舉例#include<stdio.h>本程序中有變量使用要注意長度不要對變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然用sizeof獲得變量或者數(shù)據(jù)類型的長度程序在TurboC2.0和VisualC++6.0下的運行結(jié)果不同注意!#include<stdio.h>voidmain(){
printf("DatatypeNumberofbytes\n");
printf("-------------------------------\n");
printf("char%d\n",sizeof(char));
printf("int%d\n",sizeof(int));
printf("shortint%d\n",sizeof(short));
printf("longint%d\n",sizeof(long));
printf("float%d\n",sizeof(float));
printf("double%d\n",sizeof(double));}115編輯版變量使用要注意長度不要對變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然注意!3.1.3數(shù)據(jù)類型轉(zhuǎn)換(一)隱式轉(zhuǎn)換(自動轉(zhuǎn)換)(二)顯式轉(zhuǎn)換(強制轉(zhuǎn)換)116編輯版3.1.3數(shù)據(jù)類型轉(zhuǎn)換(一)隱式轉(zhuǎn)換(自動轉(zhuǎn)換)116編(一)隱式轉(zhuǎn)換(自動轉(zhuǎn)換)轉(zhuǎn)換發(fā)生條件運算轉(zhuǎn)換------不同類型數(shù)據(jù)混合運算時賦值轉(zhuǎn)換------把一個值賦給與其類型不同的變量時輸出轉(zhuǎn)換------輸出時轉(zhuǎn)換成指定的輸出格式函數(shù)調(diào)用轉(zhuǎn)換--實參與形參類型不一致時轉(zhuǎn)換先轉(zhuǎn)換、后運算117編輯版(一)隱式轉(zhuǎn)換(自動轉(zhuǎn)換)轉(zhuǎn)換發(fā)生條件運算轉(zhuǎn)換------不隱式轉(zhuǎn)換(自動轉(zhuǎn)換)同種數(shù)據(jù)類型的運算結(jié)果,還是該類型不同種數(shù)據(jù)類型的運算結(jié)果,是兩種類型中取值范圍更大的那種long
double>double>float=long>=int>=short>char把數(shù)據(jù)賦值給另外一種類型變量也會發(fā)生自動類型轉(zhuǎn)換從小到大,順利轉(zhuǎn)換從大到小,可能丟失信息(好的編譯器會發(fā)出警告)見教材28頁118編輯版隱式轉(zhuǎn)換(自動轉(zhuǎn)換)同種數(shù)據(jù)類型的運算結(jié)果,還是該類型見教材隱式轉(zhuǎn)換(自動轉(zhuǎn)換)不同類型數(shù)據(jù)間的混合運算:+、-、*、/運算的兩個數(shù)中有一個數(shù)為float或double型,結(jié)果是double型。系統(tǒng)將float型數(shù)據(jù)都先轉(zhuǎn)換為double型,然后進行運算;(2)如果int型與float或double型數(shù)據(jù)進行運算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然后進行運算,結(jié)果是double型;(3)字符型數(shù)據(jù)與整型數(shù)據(jù)進行運算,就是把字符的ASCII代碼與整型數(shù)據(jù)進行運算.119編輯版隱式轉(zhuǎn)換(自動轉(zhuǎn)換)不同類型數(shù)據(jù)間的混合運算:119編輯版inti;floatf;doubled;longe;……i=2;f=2.5;d=3.9;e=3;……10+‘a(chǎn)’+i*f-d/e1075.01.3112.0110.7intdoubledoubledoubledouble思考:根據(jù)已知變量定義及賦值語句,計算以下表達(dá)式的值,并說明每一步所得結(jié)果的數(shù)據(jù)類型。120編輯版inti;10+‘a(chǎn)’+i*f-d/e1075.01.3(二)顯式轉(zhuǎn)換(強制轉(zhuǎn)換)一般形式(要轉(zhuǎn)換成的數(shù)據(jù)類型)(被轉(zhuǎn)換的表達(dá)式)注:當(dāng)被轉(zhuǎn)換的表達(dá)式是一個簡單表達(dá)式時,外面的一對圓括號可以缺省。舉例floatx,y;x=2.3;y=4.5;
(int)(x+y)//6(int)(int)x+y//6.5(double)說明強制轉(zhuǎn)換得到的是所需類型的中間變量,原變量或表達(dá)式的類型不變。121編輯版(二)顯式轉(zhuǎn)換(強制轉(zhuǎn)換)一般形式(要轉(zhuǎn)換成的數(shù)據(jù)類型)(#include<stdio.h>voidmain(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d",x,i);}思考:以下程序的輸出結(jié)果是什么?x=3.600000,i=3程序運行結(jié)果:結(jié)論:較高類型向較低類型轉(zhuǎn)換時可能發(fā)生精度損失問題122編輯版#include<stdio.h>思考:以下程序的輸出結(jié)舉例:已知三角形的邊長a、b、c,求三角形周長的一半。#include<stdio.h>voidmain(){floata,b,c,s;a=3;b=4;c=5;s=1/2*
(a+b+c);printf("s=%8.2f",s);}s=0.00程序運行結(jié)果:?s=6.00程序運行結(jié)果:改為:1.0/2(1/2.0)或(float)1/2(1/(float)2)123編輯版舉例:已知三角形的邊長a、b、c,求三角形周長的一半。#inC運算符簡介算術(shù)運算符和算術(shù)表達(dá)式賦值運算符和賦值表達(dá)式逗號運算符和逗號表達(dá)式關(guān)系運算符和表達(dá)式邏輯運算符和表達(dá)式條件運算符與表達(dá)式3.2運算符與表達(dá)式124編輯版C運算符簡介3.2運算符與表達(dá)式124編輯版1、算術(shù)運算符
+-*/%2、關(guān)系運算符><==>=<=!=
3、邏輯運算符!&&||4、位運算符<<>>~|^&5、賦值運算符
=及其擴展賦值運算符6、條件運算符?:7、逗號運算符,8、指針運算符*&9、求字節(jié)數(shù)運算符sizeof10、強制類型轉(zhuǎn)換運算符(類型)11、分量運算符.12、下標(biāo)運算符[]13、其他如函數(shù)調(diào)用運算符()分類運算符詳見254頁!C運算符簡介125編輯版1、算術(shù)運算符
運算符必須有運算對象,分為3類:運算對象是一個的,則稱為單目運算運算對象是兩個的,則稱為雙目運算運算對象是三個的,則稱為三目運算C運算符簡介126編輯版運算符必須有運算對象,分為3類:C運算符簡介基本算術(shù)運算符+-*/%說明
例:
5/3=1
-5/3=-1模運算符或求余運算符算術(shù)表達(dá)式用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子。優(yōu)先級和結(jié)合性先乘除、后加減,有括號先算括號。自左至右常量、變量、函數(shù)等說明
兩個整數(shù)相除的結(jié)果為整數(shù),舍去小數(shù)部分。當(dāng)商為負(fù)數(shù)時,多采用“向零取整”的方法。求余運算的兩側(cè)均應(yīng)為整數(shù)
5%3=2例:
a*b/c-1.5+’a’
算術(shù)運算符和算術(shù)表達(dá)式如果一個運算符兩側(cè)的數(shù)據(jù)類型不同,先自動進行類型轉(zhuǎn)換,使二者具有同一類型,然后進行運算。127編輯版基本算術(shù)運算符+-*/%說明格式:前置:++i,--i(在使用i之前,使i的值加(減)1)后置:i++,i--(在使用i之后,使i的值加(減)1)自增、自減運算符作用:自增運算符(++)使單個變量的值增1;自減運算符(--)使單個變量的值減1。例1i=3;……A)j=++i;j=i++;j=-i++;i=i+1i=i-1?j,i
A)j=4i=4j=3i=4j=-3++和--結(jié)合方向是“自右至左”128編輯版格式:前置:++i,--i(在使用i之前,使i的(1)自增、自減運算是C語言特有的,常用于循環(huán)語句中,使循環(huán)控制變量加(或減)1,以及指針變量中,使指針指向下(或上)一個地址。(2)自增、自減運算符,不能用于常量和表達(dá)式。例如,5++、--(a+b)等都是非法的。(3)++和--的結(jié)合方向為自右至左。(P30)(4)如果對一個變量的自增/自減運算,單獨構(gòu)成語句,而不是作為表達(dá)式的一部分時,前置和后置運算效果一樣,都是使變量自加1。如i++;和++i;是一樣的,都是使i加1。(5)在表達(dá)式中,連續(xù)使用同一變量進行自增或自減運算時,很容易出錯,所以最好避免這種用法。說明129編輯版(1)自增、自減運算是C語言特有的,常用于循環(huán)語句中,使賦值運算符簡單賦值運算符:=復(fù)合賦值運算符:+=,-=,*=,/=,%=……
簡單賦值運算符的一般形式為:變量
=
表達(dá)式它的作用是將一個表達(dá)式的值賦給一個變量。
復(fù)合賦值運算的一般格式為:變量雙目運算符=
表達(dá)式└──┬──┘復(fù)合賦值運算符它等價于:變量=變量雙目運算符
(表達(dá)式)。只有當(dāng)表達(dá)式簡化為一個變量或一個常數(shù)時,兩邊的括號可以省略。賦值運算符和賦值表達(dá)式130編輯版賦值運算符簡單賦值運算符:=簡單賦值運算符的一般形式為:賦值表達(dá)式格式:<變量><賦值運算符><表達(dá)式>賦值表達(dá)式的值:被賦變量的值類型轉(zhuǎn)換轉(zhuǎn)換條件:當(dāng)賦值運算符兩側(cè)的數(shù)據(jù)類型不一致時轉(zhuǎn)換原則:轉(zhuǎn)換為被賦值變量的類型。131編輯版賦值表達(dá)式格式:<變量><賦值運算符><表達(dá)式>類注意:將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事但是,浮點數(shù)轉(zhuǎn)為整數(shù),會丟失小數(shù)部分,非四舍五入反之,轉(zhuǎn)換后的結(jié)果必然是錯誤的,具體結(jié)果與機器和實現(xiàn)方式有關(guān)。避免如此使用例1floata;intb;a=1.2;b=a*3;?b
b=3例2a=b=5;a=7+(b=8)?a,b
a=5;b=5a=15;b=8自右而左的結(jié)合性132編輯版注意:例1floata;intb;?bb=3例2算術(shù)自反賦值運算符
(1)運算規(guī)則
對象數(shù)名稱運算符運算規(guī)則運算對象運算結(jié)果結(jié)合性雙目加賦值減賦值乘賦值除賦值模賦值+=-=*=/=%=a+=b相當(dāng)于a=a+ba-=b相當(dāng)于a=a-ba*=b相當(dāng)于a=a*ba/=b相當(dāng)于a=a/ba%=b相當(dāng)于a=a%b數(shù)值型數(shù)值型自右向左整型整型133編輯版算術(shù)自反賦值運算符(1)運算規(guī)則對象數(shù)名稱運算符運逗號運算符,逗號表達(dá)式表達(dá)式1,表達(dá)式2,……,表達(dá)式n說明1、逗號表達(dá)式的求解過程為自左至右,依次計算各表達(dá)式的值,最后一個表達(dá)式的值即為整個逗號表達(dá)式的值;2、逗號運算符的優(yōu)先級最低。3、使用逗號表達(dá)式的目的通常是想分別得到各個表達(dá)式的值,而并非一定要得到整個表達(dá)式的值。4、常用于for循環(huán)語句中,除此以外很少使用。逗號運算符和逗號表達(dá)式134編輯版逗號運算符,逗號表達(dá)式表達(dá)式1,表達(dá)式2,……,表達(dá)例1a=3a=(3*5,a*4)?aa=12例2a=3a=3*5,a*4?aa=15表達(dá)式的值為60135編輯版例1a=3?aa=12例2a=3?aa=15135編關(guān)系運算符及其優(yōu)先次序關(guān)系運算符:用來對兩個數(shù)值進行比較的比較運算符C語言提供6種關(guān)系運算符:①<
(小于)②<=(小于或等于)③>
(大于)④>=(大于或等于)
⑤==(等于)⑥!=(不等于)優(yōu)先級相同
(高)優(yōu)先級相同
(低)136編輯版關(guān)系運算符及其優(yōu)先次序關(guān)系運算符:優(yōu)先級相同(高)優(yōu)先級相關(guān)系、算術(shù)、賦值運算符的優(yōu)先級算術(shù)運算符(高)賦值運算符(低)關(guān)系運算符關(guān)系運算符及其優(yōu)先次序137編輯版關(guān)系、算術(shù)、賦值運算符的優(yōu)先級算術(shù)運算符(高)賦c>a+b等效于
c>(a+b)a>b==c等效于
(a>b)==ca==b<c等效于
a==(b<c)a=b>c等效于
a=(b>c)關(guān)系運算符及其優(yōu)先次序138編輯版c>a+b等效于c>(a+b)關(guān)系運算符關(guān)系表達(dá)式關(guān)系表達(dá)式用關(guān)系運算符將兩個數(shù)值或數(shù)值表達(dá)式連接起來的式子關(guān)系表達(dá)式的值是一個邏輯值,即“真”或“假”在C的邏輯運算中,以“1”代表“真”,以“0”代表“假”139編輯版關(guān)系表達(dá)式關(guān)系表達(dá)式139編輯版關(guān)系運算注意:例若a=0;b=0.5;x=0.3;
則a<=x<=b的值為0例5>2>7>8在C中是允許的,值為0例‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10140編輯版關(guān)系運算注意:例若a=0;b=0.5;x=0.3;關(guān)系運算注意:例注意區(qū)分“=”與“==”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);例應(yīng)避免對實數(shù)作相等或不等的判斷如1.0/3.0*3.0==1.0結(jié)果為0141編輯版關(guān)系運算注意:例注意區(qū)分“=”與“==”例應(yīng)避邏輯運算符及其優(yōu)先次序3種邏輯運算符:&&(邏輯與)||(邏輯或)!(邏輯非)&&和||是雙目(元)運算符!是一目(元)運算符邏輯表達(dá)式用邏輯運算符將關(guān)系表達(dá)式或其他邏輯量連接起來的式子142編輯版邏輯運算符及其優(yōu)先次序3種邏輯運算符:142編輯版判斷年齡在13至17歲之內(nèi)?age>=13&&age<=17判斷年齡小于12或大于65?age<12||age>65邏輯運算符及其優(yōu)先次序143編輯版判斷年齡在13至17歲之內(nèi)?邏輯運算符及其優(yōu)先次序143編輯邏輯運算的真值表邏輯運算符及其優(yōu)先次序144編輯版邏輯運算的真值表邏輯運算符及其優(yōu)先次序144編輯版邏輯運算符的優(yōu)先次序!→&&→||(!為三者中最高)與其他運算符的優(yōu)先次序!(高)算術(shù)運算符關(guān)系運算符
&&和||賦值運算符(低)邏輯運算符及其優(yōu)先次序145編輯版邏輯運算符的優(yōu)先次序!邏輯表達(dá)式邏輯表達(dá)式的值應(yīng)該是邏輯量“真”或“假”編譯系統(tǒng)在表示邏輯運算結(jié)果時以數(shù)值1代表“真”,以0代表“假”但在判斷一個量是否為“真”時以0代表“假”,以非0代表“真”注意:將一個非零的數(shù)值認(rèn)作為“真”146編輯版邏輯表達(dá)式邏輯表達(dá)式的值應(yīng)該是邏輯量“真”或“假”146編輯(1)若a=4,則!a的值為0(2)若a=4,b=5,則a&&b的值為1(3)a和b值分別為4和5,則a||b的值為1(4)a和b值分別為4和5,則!a||b的值為1(5)4&&0||2的值為1邏輯表達(dá)式147編輯版(1)若a=4,則!a的值為0邏輯表達(dá)式147編輯版修改后的邏輯運算真值表邏輯表達(dá)式148編輯版修改后的邏輯運算真值表邏輯表達(dá)式148編輯版判別某一年是否閏年,用邏輯表達(dá)式表示閏年的條件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表達(dá)式值為1,則閏年;否則為非閏年邏輯表達(dá)式149編輯版判別某一年是否閏年,用邏輯表達(dá)式表示邏輯表達(dá)式149編輯版條件運算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件運算符150編輯版條件運算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為條件運算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件表達(dá)式151編輯版條件運算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2:
表達(dá)式3條件運算符和條件表達(dá)式條件運算符的執(zhí)行順序:求解表達(dá)式1若為非0(真)則求解表達(dá)式2,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC TS 7339:2024 EN Information technology - Cloud computing - Overview of platform capabilities type and platform as a service
- 【正版授權(quán)】 ISO 37111:2024 EN Sustainable cities and communities - Urban settlements - Guidance for a flexible approach to phased implementation of ISO 37101
- 2025年度大清包勞務(wù)合同(市政道路施工管理協(xié)議)
- 2025年度廢鐵進出口代理與運輸服務(wù)合同
- 2025年度科技展會場地布置及維護服務(wù)合同
- 2025年起動腳蹬桿項目建議書
- 2025年超低頻振動標(biāo)準(zhǔn)合作協(xié)議書
- 多元化教學(xué)方法實施方案計劃
- 倉庫工作總結(jié)計劃指引
- 社會媒體策略的實踐與回顧計劃
- 《中國—東盟自由貿(mào)易區(qū)概論》新版
- 青島版五四制五下數(shù)學(xué)課程綱要
- 稻盛和夫的哲學(xué)與阿米巴
- 冷庫驗證方案
- 行政事業(yè)單位會計實操
- 中國燃?xì)饨ㄔO(shè)工程竣工驗收暫行規(guī)定
- 春尺蠖測報辦法
- 降低鉆孔灌注樁混凝土充盈系數(shù)QC
- 巖海動測儀器及軟件使用說明1
- 家譜宗譜WORD模板
- 趣味歷史(課堂PPT)
評論
0/150
提交評論