




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一章緒論清華大學(xué)鄭莉C++語言程序設(shè)計1第一章緒論清華大學(xué)鄭莉C++語言程序設(shè)計1本章主要內(nèi)容計算機程序設(shè)計語言的發(fā)展面向?qū)ο蟮姆椒嫦驅(qū)ο蟮能浖_發(fā)信息的表示與存儲程序的開發(fā)過程2本章主要內(nèi)容計算機程序設(shè)計語言的發(fā)展2計算機程序計算機的工作是用程序來控制的程序是指令的集合。指令是計算機可以識別的命令。計算機語言的發(fā)展3計算機程序計算機的工作是用程序來控制的計算機語言的發(fā)展3機器語言與匯編語言由計算機硬件系統(tǒng)可以識別的二進制指令組成的語言稱為機器語言。計算機發(fā)展的初期,軟件工程師們只能用機器語言來編寫程序。這一階段,在人類的自然語言和計算機編程語言之間存在著巨大的鴻溝。匯編語言將機器指令映射為一些可以被人讀懂的助記符,如ADD、SUB等。此時編程語言與人類自然語言間的鴻溝略有縮小,但仍與人類的思維相差甚遠。因為它的抽象層次太低,程序員需要考慮大量的機器細節(jié)。計算機語言的發(fā)展4機器語言與匯編語言由計算機硬件系統(tǒng)可以識別的二進制指令組成的高級語言高級語言屏蔽了機器的細節(jié),提高了語言的抽象層次,程序中可以采用具有一定涵義的數(shù)據(jù)命名和容易理解的執(zhí)行語句。這使得在書寫程序時可以聯(lián)系到程序所描述的具體事物。計算機語言的發(fā)展5高級語言高級語言屏蔽了機器的細節(jié),提高了語言的抽象層次,程序面向?qū)ο蟮恼Z言出發(fā)點:更直接地描述客觀世界中存在的事物(對象)以及它們之間的關(guān)系。特點:是高級語言。將客觀事物看作具有屬性和行為的對象。通過抽象找出同一類對象的共同屬性和行為,形成類。通過類的繼承與多態(tài)實現(xiàn)代碼重用計算機語言的發(fā)展6面向?qū)ο蟮恼Z言出發(fā)點:計算機語言的發(fā)展6面向?qū)ο蟮恼Z言優(yōu)點:使程序能夠比較直接地反問題域的本來面目,軟件開發(fā)人員能夠利用人類認識事物所采用的一般思維方法來進行軟件開發(fā)。計算機語言的發(fā)展7面向?qū)ο蟮恼Z言優(yōu)點:計算機語言的發(fā)展7程序設(shè)計方法的發(fā)展歷程
——面向過程的程序設(shè)計方法程序的目的:用于數(shù)學(xué)計算主要工作:設(shè)計求解問題的過程缺點:對于龐大、復(fù)雜的程序難以開發(fā)和維護面向?qū)ο蟮姆椒?程序設(shè)計方法的發(fā)展歷程
——面向過程的程序設(shè)計程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法設(shè)計思路自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。程序結(jié)構(gòu):按功能劃分為若干個基本模塊,形成一個樹狀結(jié)構(gòu)。各模塊間的關(guān)系盡可能簡單,功能上相對獨立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成。其模塊化實現(xiàn)的具體方法是使用子程序。面向?qū)ο蟮姆椒?程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法設(shè)計程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法優(yōu)點:有效地將一個較復(fù)雜的程序系統(tǒng)設(shè)計任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護。面向?qū)ο蟮姆椒?0程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法優(yōu)點程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法缺點:可重用性差、數(shù)據(jù)安全性差、難以開發(fā)大型軟件和圖形界面的應(yīng)用軟件把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨立的實體。當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時,所有相關(guān)的處理過程都要進行相應(yīng)的修改。每一種相對于老問題的新方法都要帶來額外的開銷。圖形用戶界面的應(yīng)用程序,很難用過程來描述和實現(xiàn),開發(fā)和維護也都很困難。面向?qū)ο蟮姆椒?1程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法缺程序設(shè)計方法的發(fā)展歷程
——面向?qū)ο蟮姆椒▽?shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個相互依存、不可分離的整體——對象。對同類型對象抽象出其共性,形成類。類通過一個簡單的外部接口,與外界發(fā)生關(guān)系。對象與對象之間通過消息進行通訊。面向?qū)ο蟮姆椒?2程序設(shè)計方法的發(fā)展歷程
程序設(shè)計方法的發(fā)展歷程
——面向?qū)ο蟮姆椒▋?yōu)點:程序模塊間的關(guān)系更為簡單,程序模塊的獨立性、數(shù)據(jù)的安全性就有了良好的保障。通過繼承與多態(tài)性,可以大大提高程序的可重用性,使得軟件的開發(fā)和維護都更為方便。面向?qū)ο蟮姆椒?3程序設(shè)計方法的發(fā)展歷程
面向?qū)ο蟮幕靖拍?/p>
——對象一般意義上的對象:是現(xiàn)實世界中一個實際存在的事物??梢允怯行蔚模ū热缫惠v汽車),也可以是無形的(比如一項計劃)。是構(gòu)成世界的一個獨立單位,具有:靜態(tài)特征:可以用某種數(shù)據(jù)來描述動態(tài)特征:對象所表現(xiàn)的行為或具有的功能面向?qū)ο蟮姆椒?4面向?qū)ο蟮幕靖拍?/p>
面向?qū)ο蟮幕靖拍?/p>
——對象面向?qū)ο蠓椒ㄖ械膶ο螅菏窍到y(tǒng)中用來描述客觀事物的一個實體,它是用來構(gòu)成系統(tǒng)的一個基本單位。對象由一組屬性和一組行為構(gòu)成。屬性:用來描述對象靜態(tài)特征的數(shù)據(jù)項。行為:用來描述對象動態(tài)特征的操作序列。面向?qū)ο蟮姆椒?5面向?qū)ο蟮幕靖拍?/p>
面向?qū)ο蟮幕靖拍?/p>
——類分類——人類通常的思維方法分類所依據(jù)的原則——抽象忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。例如,石頭、樹木、汽車、房屋等都是人們在長期的生產(chǎn)和生活實踐中抽象出的概念。面向?qū)ο蟮姆椒?6面向?qū)ο蟮幕靖拍?/p>
面向?qū)ο蟮幕靖拍?/p>
——類面向?qū)ο蠓椒ㄖ械?類"具有相同屬性和服務(wù)的一組對象的集合為屬于該類的全部對象提供了抽象的描述,包括屬性和行為兩個主要部分。類與對象的關(guān)系:
猶如模具與鑄件之間的關(guān)系,一個屬于某類的對象稱為該類的一個實例。面向?qū)ο蟮姆椒?7面向?qū)ο蟮幕靖拍?/p>
面向?qū)ο蟮幕靖拍?/p>
——封裝把對象的屬性和服務(wù)結(jié)合成一個獨立的系統(tǒng)單元。盡可能隱蔽對象的內(nèi)部細節(jié)。對外形成一個邊界(或者說一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。面向?qū)ο蟮姆椒?8面向?qū)ο蟮幕靖拍?/p>
面向?qū)ο蟮幕靖拍?/p>
——繼承繼承對于軟件復(fù)用有著重要意義,是面向?qū)ο蠹夹g(shù)能夠提高軟件開發(fā)效率的重要原因之一。定義:特殊類的對象擁有其一般類的全部屬性與服務(wù),稱作特殊類對一般類的繼承。例如:將輪船作為一個一般類,客輪便是一個特殊類。面向?qū)ο蟮姆椒?9面向?qū)ο蟮幕靖拍?/p>
面向?qū)ο蟮幕靖拍?/p>
——多態(tài)性多態(tài)是指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個屬性或行為在一般類及其各個特殊類中具有不同的語義。例如:數(shù)的加法->實數(shù)的加法
->復(fù)數(shù)的加法面向?qū)ο蟮姆椒?0面向?qū)ο蟮幕靖拍?/p>
面向?qū)ο蟮能浖こ堂嫦驅(qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用。它包括:面向?qū)ο蟮姆治觯∣OA)面向?qū)ο蟮脑O(shè)計(OOD)面向?qū)ο蟮木幊蹋∣OP)面向?qū)ο蟮臏y試(OOT)面向?qū)ο蟮能浖S護(OOSM)面向?qū)ο蟮能浖_發(fā)21面向?qū)ο蟮能浖こ堂嫦驅(qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ滔到y(tǒng)分析系統(tǒng)分析階段應(yīng)該扼要精確地抽象出系統(tǒng)必須做什么,但是不關(guān)心如何去實現(xiàn)。面向?qū)ο蟮南到y(tǒng)分析,直接用問題域中客觀存在的事物建立模型中的對象,對單個事物及事物之間的關(guān)系,都保留他們的原貌,不做轉(zhuǎn)換,也不打破原有界限而重新組合,因此能夠很好地映射客觀事物。面向?qū)ο蟮能浖_發(fā)22系統(tǒng)分析系統(tǒng)分析階段應(yīng)該扼要精確地抽象出系統(tǒng)必須做什么,但是設(shè)計針對系統(tǒng)的一個具體實現(xiàn)運用面向?qū)ο蟮姆椒?。其中包括兩方面的工作:把OOA模型直接搬到OOD,作為OOD的一部分針對具體實現(xiàn)中的人機界面、數(shù)據(jù)存儲、任務(wù)管理等因素補充一些與實現(xiàn)有關(guān)的部分。面向?qū)ο蟮能浖_發(fā)23設(shè)計針對系統(tǒng)的一個具體實現(xiàn)運用面向?qū)ο蟮姆椒?。其中包括兩方面編程OOP工作就是用一種面向?qū)ο蟮木幊陶Z言把OOD模型中的每個成分書寫出來,是面向?qū)ο蟮能浖_發(fā)最終落實的重要階段。面向?qū)ο蟮能浖_發(fā)24編程OOP工作就是用一種面向?qū)ο蟮木幊陶Z言把OOD模型中的每測試測試的任務(wù)是發(fā)現(xiàn)軟件中的錯誤。在面向?qū)ο蟮能浖y試中繼續(xù)運用面向?qū)ο蟮母拍钆c原則來組織測試,以對象的類作為基本測試單位,可以更準確的發(fā)現(xiàn)程序錯誤并提高測試效率。面向?qū)ο蟮能浖_發(fā)25測試測試的任務(wù)是發(fā)現(xiàn)軟件中的錯誤。面向?qū)ο蟮能浖_發(fā)25維護將軟件交付使用后,工作并沒有完結(jié),還要根據(jù)軟件的運行情況和用戶的需求,不斷改進系統(tǒng)。使用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件,其程序與問題域是一致的,因此,在維護階段運用面向?qū)ο蟮姆椒梢源蟠筇岣哕浖S護的效率。面向?qū)ο蟮能浖_發(fā)26維護將軟件交付使用后,工作并沒有完結(jié),還要根據(jù)軟件的運行情況信息的表示和存儲信息的分類計算機的數(shù)字系統(tǒng)程序設(shè)計中常用的數(shù)制不同進位計數(shù)制間的轉(zhuǎn)換信息的存儲單位二進制數(shù)的編碼表示小數(shù)的表示方法非數(shù)值信息的表示27信息的表示和存儲信息的分類27信息的分類 ┌指令 ┌控制信息 ┤ │ └控制字信息 ┤ │ ┌定點數(shù) │ ┌數(shù)值信息 ┤ └數(shù)據(jù)信息 ┤ └浮點數(shù) │ ┌字符數(shù)據(jù) └非數(shù)值信息 ┤ └邏輯數(shù)據(jù)信息的表示與存儲28信息的分類信息的表示與存儲28計算機的數(shù)字系統(tǒng)計算機采用的是二進制數(shù)字系統(tǒng)。基本符號:0、1進位原則:逢二進一優(yōu)點:易于物理實現(xiàn)二進制數(shù)運算簡單機器可靠性高通用性強缺點:對人來說可讀性差信息的表示與存儲29計算機的數(shù)字系統(tǒng)計算機采用的是二進制數(shù)字系統(tǒng)。信息的表示與存程序設(shè)計中常用的數(shù)制信息的表示與存儲30程序設(shè)計中常用的數(shù)制信息的表示與存儲30不同進位計數(shù)制間的轉(zhuǎn)換
——R進制→十進制各位數(shù)字與它的權(quán)相乘,其積相加。例如:(11111111.11)2=1*27+1*26+1*25+1*24
+1*23+1*22+1*21+1*20+1*2-1+1*2-2
=(255.75)10(3506.2)8=3*83+5*82+0*81+6*80+2*8-1
=(1862.25)10(0.2A)16=2*16-1+10*16-2=(0.1640625)10信息的表示與存儲31不同進位計數(shù)制間的轉(zhuǎn)換
——不同進位計數(shù)制間的轉(zhuǎn)換
——十進制→R進制十進制整數(shù)轉(zhuǎn)換成R進制的整數(shù)“除R取余”法,例如:268余數(shù)234┄┄┄┄┄┄┄┄┄┄┄┄0低位217┄┄┄┄┄┄┄┄┄┄┄028┄┄┄┄┄┄┄┄┄┄┄124┄┄┄┄┄┄┄┄┄┄022┄┄┄┄┄┄┄┄┄┄021┄┄┄┄┄┄┄┄┄00┄┄┄┄┄┄┄┄┄1高位所以6810=10001002信息的表示與存儲32不同進位計數(shù)制間的轉(zhuǎn)換
——不同進位計數(shù)制間的轉(zhuǎn)換
——十進制→R進制十進制小數(shù)轉(zhuǎn)換成R進制小數(shù)“乘R取整”法,例如:高位0.3125×2=0.6250.625×2=1.250.25×2=0.50.5×2=1.0所以0.312510=0.01012
信息的表示與存儲33不同進位計數(shù)制間的轉(zhuǎn)換
——不同進位計數(shù)制間的轉(zhuǎn)換
——二、八、十六進制的相互轉(zhuǎn)換每位八進制數(shù)相當(dāng)于三位二進制數(shù)每位十六進制數(shù)相當(dāng)于四位二進制數(shù)(1011010.10)2=(001
011
010.100)2
=(132.4)8(1011010.10)2=(0101
1010.1000)2
=(5A.8)16(F7)16=(1111
0111)2=(11110111)2信息的表示與存儲34不同進位計數(shù)制間的轉(zhuǎn)換
——二、八、十六進制的相互轉(zhuǎn)換每位八信息的存儲單位位(bit):度量數(shù)據(jù)的最小單位,表示一位二進制信息。字節(jié)(byte):由八位二進制數(shù)字組成(1byte=8bit)。K字節(jié)1K=1024byteM字節(jié)1M=1024KG字節(jié)1G=1024M信息的表示與存儲35信息的存儲單位位(bit):度量數(shù)據(jù)的最小單位,表示一位二進二進制數(shù)的編碼表示:原碼"符號──絕對值表示"的編碼例如:X=+0101011[X]原=00101011X=-0101011[X]原=10101011符號位缺點:零的表示不唯一:
[+0]原=000...0[-0]原=100...0進行四則運算時,符號位需單獨處
理,且運算規(guī)則復(fù)雜。信息的表示與存儲36二進制數(shù)的編碼表示:原碼"符號──絕對值表示"的編碼信息的表二進制數(shù)的編碼表示:反碼正數(shù)的反碼與原碼表示相同。負數(shù)的反碼與原碼有如下關(guān)系:符號位相同(仍用1表示),其余各位取反(0變1,1變0)。例如:
X=-1100110[X]原=11100110[X]反=10011001
X=+0000000[X]原=00000000[X]反=00000000反碼中零的表示也不唯一X=-0000000[X]原=10000000[X]反=11111111反碼只是求補碼的中間碼信息的表示與存儲37二進制數(shù)的編碼表示:反碼正數(shù)的反碼與原碼表示相同。信息的表示二進制數(shù)的編碼表示:補碼模數(shù):n位整數(shù)(包括一位符號位),則它的模數(shù)為2n。
n位小數(shù),小數(shù)點前一位為符號位,則它的模數(shù)為2。補數(shù):一個數(shù)減去另一個數(shù),或者說一個數(shù)加上一個負數(shù),等于第一個數(shù)加上第二個數(shù)的補數(shù)。例:8+(-2)=8+10(mod12)一個二進制負數(shù)可用其模數(shù)與真值做
加法(模減去該數(shù)的絕對值)求得其補
碼。信息的表示與存儲38二進制數(shù)的編碼表示:補碼模數(shù):信息的表示與存儲38二進制數(shù)的編碼表示:補碼計算機中的補碼表示法負數(shù)的補碼由該數(shù)反碼的末位加1求得對補碼再求補即得到原碼補碼運算規(guī)則符號位可作為數(shù)值參加運算減法運算可轉(zhuǎn)換為加法運算:加上一個負數(shù)等于加上該數(shù)的補碼補碼運算的結(jié)果仍為補碼運算結(jié)果溢出:負數(shù)之和得正數(shù),或正數(shù)之和得負數(shù)信息的表示與存儲39二進制數(shù)的編碼表示:補碼計算機中的補碼表示法信息的表示與存儲小數(shù)的表示方法計算機中通常采用浮點方式表示小數(shù)
一個數(shù)N用浮點形式表示可以寫成:
N=M×2E
E表示2的冪,稱為數(shù)N的階碼。階碼確定了數(shù)N的小數(shù)點的位置,其位數(shù)反映了該浮點數(shù)所表示的數(shù)的范圍。M表示數(shù)N的全部有效數(shù)字,稱為數(shù)N的尾數(shù)。其位數(shù)反映了數(shù)據(jù)的精度。信息的表示與存儲40小數(shù)的表示方法計算機中通常采用浮點方式表示小數(shù)
一個數(shù)N非數(shù)值信息的表示西文字符:ASCII碼:用7位二進制數(shù)表示一個字符,最多可以表示27=128個字符EBCDIC碼:用8位二進制數(shù)表示一個字符,最多可以表示28=256個字符漢字:應(yīng)用較為廣泛的是"國家標(biāo)準信息交換用漢字編碼"(GB2312-80標(biāo)準),簡稱國標(biāo)碼。是二字節(jié)碼,用二個七位二進制數(shù)編碼表示一個漢字。信息的表示與存儲41非數(shù)值信息的表示西文字符:信息的表示與存儲41基本術(shù)語源程序:用源語言寫的,有待翻譯的程序目標(biāo)程序:也稱為"結(jié)果程序",是源程序通過翻譯程序加工以后所生成的程序。翻譯程序:是指一個把源程序翻譯成等價的目標(biāo)程序的程序。程序的開發(fā)過程42基本術(shù)語源程序:程序的開發(fā)過程42基本術(shù)語
——三種不同類型的翻譯程序匯編程序:其任務(wù)是把用匯編語言寫成的源程序,翻譯成機器語言形式的目標(biāo)程序。編譯程序:若源程序是用高級程序設(shè)計語言所寫,經(jīng)翻譯程序加工生成目標(biāo)程序,那么,該翻譯程序就稱為"編譯程序"。程序的開發(fā)過程43基本術(shù)語
——三種不同類型的翻譯程序匯編程序:基本術(shù)語
——三種不同類型的翻譯程序解釋程序:這也是一種翻譯程序,同樣是將高級語言源程序翻譯成機器指令。它與編譯程序不同點就在于:它是邊翻譯邊執(zhí)行的,即輸入一句、翻譯一句、執(zhí)行一句,直至將整個源程序翻譯并執(zhí)行完畢。程序的開發(fā)過程44基本術(shù)語
——三種不同類型的翻譯程序解釋程序:程序的開發(fā)過程編輯將源程序輸入到計算機中,生成后綴為cpp的磁盤文件。編譯將程序的源代碼轉(zhuǎn)換為機器語言代碼。連接將多個源程序文件以及庫中的某些文件連在一起,生成一個后綴為exe的可執(zhí)行文件。運行調(diào)試程序的開發(fā)過程45程序的開發(fā)過程編輯程序的開發(fā)過程45第二章C++簡單程序設(shè)計清華大學(xué)鄭莉C++語言程序設(shè)計46第二章C++簡單程序設(shè)計清華大學(xué)鄭莉C++語言程本章主要內(nèi)容C++語言概述基本數(shù)據(jù)類型和表達式數(shù)據(jù)的輸入與輸出算法的基本控制結(jié)構(gòu)自定義數(shù)據(jù)類型47本章主要內(nèi)容C++語言概述47C++語言的產(chǎn)生C++是從C語言發(fā)展演變而來的,首先是一個更好的C引入了類的機制,最初的C++被稱為“帶類的C”1983年正式取名為C++從1989年開始C++語言的標(biāo)準化工作于1994年制定了ANSIC++標(biāo)準草案于1998年11月被國際標(biāo)準化組織(ISO)批準為國際標(biāo)準,成為目前的C++C++語言概述48C++語言的產(chǎn)生C++是從C語言發(fā)展演變而來的,首先是一個更C++的特點全面兼容C它保持了C的簡潔、高效和接近匯編語言等特點對C的類型系統(tǒng)進行了改革和擴充C++也支持面向過程的程序設(shè)計,不是一個純正的面向?qū)ο蟮恼Z言支持面向?qū)ο蟮姆椒–++語言概述49C++的特點全面兼容CC++語言概述49C++程序?qū)嵗?-1//2_1.cpp#include<iostream>usingnamespacestd;voidmain(void){cout<<"Hello!\n";cout<<"Welcometoc++!\n";}運行結(jié)果:Hello!Welcometoc++!C++語言概述50C++程序?qū)嵗?-1//2_1.cppC++語言概述50C++字符集大小寫的英文字母:A~Z,a~z數(shù)字字符:0~9特殊字符:空格 ! # % ^ & *
_(下劃線) + = - ~ < > / \ ' " ; . , () [] {}C++語言概述51C++字符集大小寫的英文字母:A~Z,a~zC++語言概述5詞法記號關(guān)鍵字
C++預(yù)定義的單詞標(biāo)識符
程序員聲明的單詞,它命名程序正文中的一些實體文字
在程序中直接使用符號表示的數(shù)據(jù)操作符
用于實現(xiàn)各種運算的符號分隔符
(){},:;
用于分隔各個詞法記號或程序正文空白符 空格、制表符(TAB鍵產(chǎn)生的字符)、換行符(Enter鍵所產(chǎn)生的字符)和注釋的總稱C++語言概述52詞法記號關(guān)鍵字 C++預(yù)定義的單詞C++語言概述52標(biāo)識符的構(gòu)成規(guī)則以大寫字母、小寫字母或下劃線(_)開始??梢杂梢源髮懽帜?、小寫字母、下劃線(_)或數(shù)字0~9組成。大寫字母和小寫字母代表不同的標(biāo)識符。C++語言概述53標(biāo)識符的構(gòu)成規(guī)則以大寫字母、小寫字母或下劃線(_)開始。C+數(shù)據(jù)類型
——常量與變量#include<iostream>usingnamespacestd;voidmain(void){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}常量變量變量先聲明后使用符號常量Page54基本數(shù)據(jù)類型和表達式54數(shù)據(jù)類型
——常量與變量#includ#include<iostream>usingnamespacestd;voidmain(void){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}數(shù)據(jù)類型
——整型數(shù)據(jù)整型常量shortunsignedshort2字節(jié)int、unsignedint
4字節(jié)longunsignedlong4字節(jié)整型變量整型變量聲明基本數(shù)據(jù)類型和表達式55#include<iostream>數(shù)據(jù)類型
數(shù)據(jù)類型
—整型數(shù)據(jù)及取值范圍類型 說明符 位數(shù) 數(shù)值范圍 短整 short 16 -32768~32767基本 int 32 -231~(231-1)長整 long 32 -231~(231-1)無符號
unsignedshort 16 0~65535
unsigned[int] 32 0~(232-1)
unsignedlong 32 0~(232-1) 基本數(shù)據(jù)類型和表達式56數(shù)據(jù)類型
—整型數(shù)據(jù)及取值范圍類型 說明符 位數(shù) #include<iostream>usingnamespacestd;voidmain(void){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}
數(shù)據(jù)類型
——實型數(shù)據(jù)實型常量float4字節(jié)3.4×10±387位有效數(shù)字double8字節(jié)1.7×10±30815位有效數(shù)字longdouble
8字節(jié)
1.7×10±30815位有效數(shù)字實型變量缺省為double型后綴F(或f)
為float型后綴L(或l)
為longdouble
型基本數(shù)據(jù)類型和表達式57#include<iostream>數(shù)據(jù)類型
數(shù)據(jù)類型
——字符型數(shù)據(jù)(一)字符常量單引號括起來的一個字符,如:'a','D','?','$'字符變量用來存放字符常量
例:charc1,c2;
c1='a';
c2='A';字符數(shù)據(jù)在內(nèi)存中的存儲形式以ASCII碼存儲,占1字節(jié),用7個二進制位Page58基本數(shù)據(jù)類型和表達式58數(shù)據(jù)類型
——字符型數(shù)據(jù)(一)字符常量P字符數(shù)據(jù)的使用方法字符數(shù)據(jù)和整型數(shù)據(jù)之間可以運算。字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。字符串常量例:"CHINA"
"a"
'a'所以:charc;
c="a";CHINA\0a
\0aPage59
數(shù)據(jù)類型
——字符型數(shù)據(jù)(二)基本數(shù)據(jù)類型和表達式59字符數(shù)據(jù)的使用方法CHINA\0a\0a數(shù)據(jù)類型
——布爾型數(shù)據(jù)布爾型變量的說明:
例:boolflag;布爾型數(shù)據(jù)的取值:
只有false和true兩個值基本數(shù)據(jù)類型和表達式60數(shù)據(jù)類型
——布爾型數(shù)據(jù)布爾型變數(shù)據(jù)類型
——變量初始化例:
inta=3;
doublef=3.56;
charc='a';
intc(5);Page61基本數(shù)據(jù)類型和表達式61數(shù)據(jù)類型
——變量初始化例:
i數(shù)據(jù)類型
—混合運算時的類型轉(zhuǎn)換不同類型數(shù)據(jù)進行混合運算時,C++編譯器會自動進行類型轉(zhuǎn)換。為了避免不同的數(shù)據(jù)類型在運算中出現(xiàn)類型問題,應(yīng)盡量使用同種類型數(shù)據(jù)。可以采用強制類型轉(zhuǎn)換:例如:
floatc;
inta,b;
c=float(a)/float(b);或c=(float)a/(float)b;
基本數(shù)據(jù)類型和表達式62數(shù)據(jù)類型
—混合運算時的類型轉(zhuǎn)換不同類型數(shù)據(jù)進行混合變量的存儲類型auto屬于一時性存儲,其存儲空間可以被若干變量多次覆蓋使用。register存放在通用寄存器中。extern在所有函數(shù)和程序段中都可引用。static在內(nèi)存中是以固定地址存放的,在整個程序運行期間都有效。基本數(shù)據(jù)類型和表達式63變量的存儲類型auto基本數(shù)據(jù)類型和表達式63算術(shù)運算符與算術(shù)表達式基本算術(shù)運算符+-*/(若整數(shù)相除,結(jié)果取整)%(取余,操作數(shù)為整數(shù))優(yōu)先級與結(jié)合性先乘除,后加減,同級自左至右++,--(自增、自減)例:i++;--j;Page64基本數(shù)據(jù)類型和表達式64算術(shù)運算符與算術(shù)表達式基本算術(shù)運算符Page64基本數(shù)據(jù)類賦值運算符和賦值表達式
簡單的賦值運算符"="舉例
n=n+5表達式的類型
等號左邊對象的類型表達式的值
等號左邊對象被賦值后的值Page65基本數(shù)據(jù)類型和表達式65賦值運算符和賦值表達式
簡單的賦值運算符"="舉例賦值運算符和賦值表達式
復(fù)合的賦值運算符有10種復(fù)合運算符:
+=,-=,*=,/=,%=,
<<=,>>=,&=,^=,|=例
a+=3等價于a=a+3
x*=y+8等價于x=x*(y+8)基本數(shù)據(jù)類型和表達式66賦值運算符和賦值表達式
復(fù)合的賦值運算符有1賦值運算符和賦值表達式
——賦值表達式舉例a=5 表達式值為5a=b=c=5
表達式值為5,a,b,c均為5a=5+(c=6)
表達式值為11,a為11,c為6a=(b=4)+(c=6)
表達式值為10,a為10,b為4,c為6a=(b=10)/(c=2)
表達式值為5,a為5,b為10,c為2a+=a-=a*a相當(dāng)于
a=a+(a=a-a*a)Page67基本數(shù)據(jù)類型和表達式67賦值運算符和賦值表達式
——賦值表達式舉例a=逗號運算和逗號表達式格式表達式1,表達式2求解順序及結(jié)果先求解1,再求解2,最終結(jié)果為表達式2的值例a=3*5,a*4最終結(jié)果為60Page68基本數(shù)據(jù)類型和表達式68逗號運算和逗號表達式格式Page68基本數(shù)據(jù)類型和表達式6關(guān)系運算與關(guān)系表達式關(guān)系運算是比較簡單的一種邏輯運算,優(yōu)先次序為:
<<=>>===!=
優(yōu)先級相同(高)優(yōu)先級相同(低)關(guān)系表達式是一種最簡單的邏輯表達式其結(jié)果類型為bool,值只能為true或false。例如:a>b,c<=a+b,x+y==3基本數(shù)據(jù)類型和表達式69關(guān)系運算與關(guān)系表達式關(guān)系運算是比較簡單的一種邏輯運算,優(yōu)先次邏輯運算與邏輯表達式邏輯運算符
!(非)&&(與)||(或)
優(yōu)先次序:高→低邏輯表達式
例如:(a>b)&&(x>y)
其結(jié)果類型為bool,值只能為true或false基本數(shù)據(jù)類型和表達式70邏輯運算與邏輯表達式邏輯運算符
條件運算符與條件表達式一般形式表達式1?表達式2:表達式3表達式1必須是bool類型執(zhí)行順序先求解表達式1,若表達式1的值為true,則求解表達式2,表達式2的值為最終結(jié)果若表達式1的值為false,則求解表達式3,表達式3的值為最終結(jié)果例:x=a>b?a:b;基本數(shù)據(jù)類型和表達式71條件運算符與條件表達式一般形式基本數(shù)據(jù)類型和表達式71條件運算符與條件表達式注意:條件運算符優(yōu)級高于賦值運算符,低于邏輯運算符表達式2、3的類型可以不同,條件表達式的最終類型為2和3中較高的類型。例:x=a>b?a:b;基本數(shù)據(jù)類型和表達式①②72條件運算符與條件表達式注意:基本數(shù)據(jù)類型和表達式①②72sizeof運算符語法形式
sizeof(類型名)
或sizeof(表達式)結(jié)果值:
“類型名”所指定的類型或“表達式”的結(jié)果類型所占的字節(jié)數(shù)。例:sizeof(short)sizeof(x)基本數(shù)據(jù)類型和表達式73sizeof運算符語法形式
sizeof(類型名)
或位運算——按位與(&)運算規(guī)則將兩個運算量的每一個位進行邏輯與操作舉例:計算3&53:000000115:(&)000001013&5:00000001用途:將某一位置0,其它位不變。例如:
將char型變量a的最低位置0:
a=a&0376;取指定位。
例如:有charc;inta;
取出a的低字節(jié),置于c中:c=a&0377;基本數(shù)據(jù)類型和表達式74位運算——按位與(&)運算規(guī)則基本數(shù)據(jù)類型和表達式74位運算——按位或(|)運算規(guī)則將兩個運算量的每一個位進行邏輯或操作舉例:計算3|53:000000115:(|)000001013|5:00000111用途:將某些位置1,其它位不變。
例如:將int型變量a的低字節(jié)置1:
a=a|0xff;基本數(shù)據(jù)類型和表達式75位運算——按位或(|)運算規(guī)則基本數(shù)據(jù)類型和表達式75位運算——按位異或(^)運算規(guī)則兩個操作數(shù)進行異或:
若對應(yīng)位相同,則結(jié)果該位為0,
若對應(yīng)位不同,則結(jié)果該位為1,舉例:計算071^052071: 00111001052:(^)00101010071^052: 00010011基本數(shù)據(jù)類型和表達式76位運算——按位異或(^)運算規(guī)則基本數(shù)據(jù)類型和表達式76位運算——按位異或(^)用途:使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反)例如:要使01111010低四位翻轉(zhuǎn): 01111010(^) 00001111 01110101基本數(shù)據(jù)類型和表達式77位運算——按位異或(^)用途:基本數(shù)據(jù)類型和表達式77位運算——取反(~)單目運算符,對一個二進制數(shù)按位取反。例:025:0000000000010101~025:1111111111101010基本數(shù)據(jù)類型和表達式78位運算——取反(~)單目運算符,對一個二進制數(shù)按位取反?;疚贿\算——移位左移運算(<<)左移后,低位補0,高位舍棄。右移運算(>>)右移后,低位:舍棄
高位:無符號數(shù):補0有符號數(shù):補“符號位”基本數(shù)據(jù)類型和表達式79位運算——移位左移運算(<<)基本數(shù)據(jù)類型和表達式79運算符優(yōu)先級括號++,--,sizeof*,/,%+,-==,!=位運算&&||?:賦值運算逗號運算低高基本數(shù)據(jù)類型和表達式80運算符優(yōu)先級括號低高基本數(shù)據(jù)類型和表達式80混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
——隱含轉(zhuǎn)換一些二元運算符(算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符和賦值運算符)要求兩個操作數(shù)的類型一致。在算術(shù)運算和關(guān)系運算中如果參與運算的操作數(shù)類型不一致,編譯系統(tǒng)會自動對數(shù)據(jù)進行轉(zhuǎn)換(即隱含轉(zhuǎn)換),基本原則是將低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)。
charshortintunsignedlongunsignedlongfloatdouble
低高基本數(shù)據(jù)類型和表達式81混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
——隱含轉(zhuǎn)換當(dāng)參與運算的操作數(shù)必須是bool型時,如果操作數(shù)是其它類型,編譯系統(tǒng)會自動將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。位運算的操作數(shù)必須是整數(shù),當(dāng)二元位運算的操作數(shù)是不同類型的整數(shù)時,也會自動進行類型轉(zhuǎn)換,賦值運算要求左值與右值的類型相同,若類型不同,編譯系統(tǒng)會自動將右值轉(zhuǎn)換為左值的類型?;緮?shù)據(jù)類型和表達式82混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
——強制類型轉(zhuǎn)換語法形式:類型說明符(表達式)或(類型說明符)表達式強制類型轉(zhuǎn)換的作用是將表達式的結(jié)果類型轉(zhuǎn)換為類型說明符所指定的類型?;緮?shù)據(jù)類型和表達式83混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
語句聲明語句表達式語句選擇語句循環(huán)語句跳轉(zhuǎn)語句復(fù)合語句標(biāo)號語句
84語句聲明語句84表達式語句格式:表達式;表達式語句與表達式的區(qū)別:表達式可以包含在其它表達式中,而語句不可。例:if((a=b)>0)t=a;不可寫為:if((a=b;)>0)t=a;語句85表達式語句格式:語句85復(fù)合語句將多個語句用一對大括號包圍,便構(gòu)成一個復(fù)合語句例如{ sum=sum+i; i++;} 語句86復(fù)合語句將多個語句用一對大括號包圍,便構(gòu)成一個復(fù)合語句語簡單的輸入、輸出向標(biāo)準輸出設(shè)備(顯示器)輸出例:intx;cout<<“x=“<<x;從標(biāo)準輸入設(shè)備(鍵盤)輸入例:intx;cin>>x;87簡單的輸入、輸出向標(biāo)準輸出設(shè)備(顯示器)輸出87順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)算法的基本控制結(jié)構(gòu)88順序結(jié)構(gòu)算法的基本控制結(jié)構(gòu)88如何解決分支問題?例2-2輸入一個年份,判斷是否閏年。算法的基本控制結(jié)構(gòu)89如何解決分支問題?例2-2算法的基本控制結(jié)構(gòu)89#include<iostream>usingnamespacestd;voidmain(void){ intyear;boolIsLeapYear;cout<<"Entertheyear:";cin>>year; IsLeapYear=((year%4==0&&
year%100!=0)||(year%400==0));
if(IsLeapYear)
cout<<year<<"isaleapyear"
<<endl;
else
cout<<year<<"isnotaleapyear"
<<endl;}9090#include<iostream>9090運行結(jié)果:Entertheyear:20002000isaleapyear9191運行結(jié)果:9191if(表達式)語句例:if(x>y)cout<<x;if(表達式)語句1else語句2例:if(x>y)cout<<x;elsecout<<y;if(表達式1)語句1
elseif(表達式2)語句2
elseif(表達式3)語句3
…
else語句nif語句
——三種形式算法的基本控制結(jié)構(gòu)92if(表達式)語句if語句
如何解決多分問題?例2-3輸入兩個整數(shù),比較兩個數(shù)的大小。算法的基本控制結(jié)構(gòu)93如何解決多分問題?例2-3算法的基本控制結(jié)構(gòu)93#include<iostream>usingnamespacestd;voidmain(){intx,y;cout<<"Enterxandy:";cin>>x>>y;if(x!=y)if(x>y)cout<<"x>y"<<endl;elsecout<<"x<y"<<endl;elsecout<<"x=y"<<endl;}9494#include<iostream>9494運行結(jié)果1:Enterxandy:58x<y運行結(jié)果2:Enterxandy:88x=y運行結(jié)果3:Enterxandy:128x>y9595運行結(jié)果1:9595一般形式if()if()語句1else語句2elseif()語句3else語句4注意語句1、2、3、4可以是復(fù)合語句,每層的if與else配對,或用{}來確定層次關(guān)系。if語句
——嵌套算法的基本控制結(jié)構(gòu)96一般形式if語句
——嵌套算法的基本特殊的多分支結(jié)構(gòu)例2-4輸入一個0~6的整數(shù),轉(zhuǎn)換成星期輸出。算法的基本控制結(jié)構(gòu)97特殊的多分支結(jié)構(gòu)例2-4算法的基本控制結(jié)構(gòu)97#include<iostream>usingnamespacestd;voidmain(void){ intday; cin>>day; switch(day) { case0: cout<<"Sunday"<<endl;break; case1: cout<<"Monday"<<endl;break; case2: cout<<"Tuesday"<<endl;break; case3:cout<<"Wednesday"<<endl;break; case4: cout<<"Thursday"<<endl;break; case5: cout<<"Friday"<<endl;break; case6: cout<<"Saturday"<<endl;break; default:
cout<<"DayoutofrangeSunday..Saturday"<<endl; break; }}9898#include<iostream>9898一般形式switch(表達式){case常量表達式1:語句1case常量表達式2:語句2┆case常量表達式n:語句ndefault:語句n+1}switch語句執(zhí)行順序以case中的常量表達式值為入口標(biāo)號,由此開始順序執(zhí)行。因此,每個case分支最后應(yīng)該加break語句。每個常量表達式的值不能相同,次序不影響執(zhí)行結(jié)果。可以是多個語句,但不必用{}??梢允钦?、字符型、枚舉型算法的基本控制結(jié)構(gòu)99一般形式switch語句執(zhí)行順序每個常量表達式的值不能相同使用switch語句應(yīng)注意的問題case分支可包含多個語句,且不用{}。表達式、判斷值都是int型或char型。若干分支執(zhí)行內(nèi)容相同可共用一組語句。算法的基本控制結(jié)構(gòu)100使用switch語句應(yīng)注意的問題case分支可包含多個語句,如何有效地完成重復(fù)工作例2-5求自然數(shù)1~10之和分析:本題需要用累加算法,累加過程是一個循環(huán)過程,可以用while語句實現(xiàn)。算法的基本控制結(jié)構(gòu)101如何有效地完成重復(fù)工作例2-5算法的基本控制結(jié)構(gòu)101#include<iostream>usingnamespacestd;voidmain(){inti(1),sum(0);
while(i<=10)
{sum+=i;//相當(dāng)于sum=sum+i;i++;
}cout<<"sum="<<sum
<<endl;}運行結(jié)果:sum=55102102#include<iostream>運行結(jié)果:102102while語句形式while(表達式)語句
可以是復(fù)合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先判斷表達式的值,為true時,再執(zhí)行語句。算法的基本控制結(jié)構(gòu)103while語句形式可以是復(fù)合語句,其中必須含有改變條件表達先執(zhí)行循環(huán)體,后判斷條件的情況例2-6輸入一個整數(shù),將各位數(shù)字反轉(zhuǎn)后輸出。算法的基本控制結(jié)構(gòu)104先執(zhí)行循環(huán)體,后判斷條件的情況例2-6算法的基本控制結(jié)構(gòu)10#include<iostream>usingnamespacestd;voidmain(void){ intn,right_digit,newnum=0; cout<<"Enterthenumber:"; cin>>n;
cout<<"Thenumberinreverseorderis";
do { right_digit=n%10; cout<<right_digit; n/=10;//相當(dāng)于n=n/10
} while(n!=0);cout<<endl; }105105#include<iostream>105105運行結(jié)果:Enterthenumber:365Thenumberinreverseorderis563106106運行結(jié)果:106106do-while語句一般形式do語句while(表達式)可以是復(fù)合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先執(zhí)行循環(huán)體語句,后判斷條件。
表達式為true時,繼續(xù)執(zhí)行循環(huán)體與while語句的比較:While語句執(zhí)行順序
先判斷表達式的值,為true時,再執(zhí)行語句算法的基本控制結(jié)構(gòu)107do-while語句一般形式可以是復(fù)合語句,其中必須含有改對比下列程序:程序1:#include<iostream>usingnamespacestd;voidmain(){inti,sum(0);cin>>i;while(i<=10){sum+=i;i++;}cout<<"sum="<<sum<<endl;}算法的基本控制結(jié)構(gòu)程序2:#include<iostream>usingnamespacestd;voidmain(){inti,sum(0);cin>>i;do{sum+=i;i++;}while(i<=10);cout<<"sum="<<sum<<endl;}108108對比下列程序:程序1:算法的基本控制結(jié)構(gòu)程序2:10810for語句語法形式for(表達式1;表達式2;表達式3)語句
循環(huán)前先求解為true時執(zhí)行循環(huán)體每次執(zhí)行完循環(huán)體后求解算法的基本控制結(jié)構(gòu)109for語句語法形式循環(huán)前先求解為true時執(zhí)行循環(huán)體每次執(zhí)例2-8輸入一個整數(shù),求出它的所有因子。算法的基本控制結(jié)構(gòu)110例2-8輸入一個整數(shù),求出它的所有因子。算法的基本控制結(jié)構(gòu)1#include<iostream>usingnamespacestd;voidmain(void){ intn,k; cout<<"Enterapositiveinteger:"; cin>>n; cout<<"Number"<<n<<"Factors"; for(k=1;k<=n;k++) if(n%k==0) cout<<k<<"";cout<<endl;}111111#include<iostream>111111運行結(jié)果1:Enterapositiveinteger:36Number36Factors123469121836運行結(jié)果2:Enterapositiveinteger:7Number7Factors17112112運行結(jié)果1:112112例2-9編寫程序輸出以下圖案*************************算法的基本控制結(jié)構(gòu)113例2-9編寫程序輸出以下圖案#include<iostream>usingnamespacestd;voidmain(){inti,j,n=4;for(i=1;i<=n;i++)//輸出前4行圖案{for(j=1;j<=30;j++)cout<<'';//在圖案左側(cè)空30列for(j=1;j<=8-2*i;j++)cout<<'';for(j=1;j<=2*i-1;j++)cout<<'*';cout<<endl;}114114#include<iostream>114114for(i=1;i<=n-1;i++)//輸出后3行圖案{for(j=1;j<=30;j++)cout<<'';//在圖案左側(cè)空30列for(j=1;j<=7-2*i;j++)cout<<'*';cout<<endl;}}115115for(i=1;i<=n-1;i++)//輸出后3循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)相互嵌套#include<iostream>usingnamespacestd;voidmain(){ intn; for(n=100;n<=200;n++) {if(n%3!=0) cout<<n; }}算法的基本控制結(jié)構(gòu)116循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)相互嵌套#include<iostream例2-10讀入一系列整數(shù),統(tǒng)計出正整數(shù)個數(shù)i和負整數(shù)個數(shù)j,讀入0則結(jié)束。分析:需要讀入一系列整數(shù),但是整數(shù)個數(shù)不定,要在每次讀入之后進行判斷,因此使用while循環(huán)最為合適。循環(huán)控制條件應(yīng)該是n!=0。由于要判斷數(shù)的正負并分別進行統(tǒng)計,所以需要在循環(huán)內(nèi)部嵌入選擇結(jié)構(gòu)。算法的基本控制結(jié)構(gòu)117例2-10讀入一系列整數(shù),統(tǒng)計出正整數(shù)個數(shù)i和負整數(shù)個數(shù)j,#include<iostream>usingnamespacestd;voidmain(){inti=0,j=0,n;cout<<"請輸入若干整數(shù)(輸入0則結(jié)束):";cin>>n;while(n!=0){if(n>0)i++;if(n<0)j++;cin>>n;}cout<<"正整數(shù)個數(shù):"<<i<<"負整數(shù)個數(shù):"<<j<<endl;}118118#include<iostream>118118break和continue語句break語句使程序從循環(huán)體和switch語句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語句。不宜用在別處。continue語句結(jié)束本次循環(huán),接著判斷是否執(zhí)行下一次循環(huán)。算法的基本控制結(jié)構(gòu)119break和continue語句break語句算法的基typedef語句為一個已有的數(shù)據(jù)類型另外命名語法形式typedef已有類型名新類型名表;例如typedefdoublearea,volume;typedefintnatural;naturali1,i2;areaa;volumev;自定義數(shù)據(jù)類型120typedef語句為一個已有的數(shù)據(jù)類型另外命名自定義數(shù)據(jù)類型枚舉類型—enum只要將需要的變量值一一列舉出來,便構(gòu)成了一個枚舉類型。枚舉類型的聲明形式如下:enum枚舉類型名{變量值列表};例如:enumweekday{sun,mon,tue,wed,thu,fri,sat};自定義數(shù)據(jù)類型121枚舉類型—enum只要將需要的變量值一一列舉出來,便構(gòu)成了一枚舉類型—enum枚舉類型應(yīng)用說明:對枚舉元素按常量處理,不能對它們賦值。例如,不能寫:sun=0;枚舉元素具有缺省值,它們依次為:0,1,2,。也可以在聲明時另行指定枚舉元素的值,如:enumweekday{sun=7,mon=1,tue,wed,thu,fri,sat};枚舉值可以進行關(guān)系運算。整數(shù)值不能直接賦給枚舉變量,如需
要將整數(shù)賦值給枚舉變量,應(yīng)進行強
制類型轉(zhuǎn)換。自定義數(shù)據(jù)類型122枚舉類型—enum枚舉類型應(yīng)用說明:自定義數(shù)據(jù)類型122例2-11設(shè)某次體育比賽的結(jié)果有四種可能:勝(win)、負(lose)、平局(tie)、比賽取消(cancel),編寫程序順序輸出這四種情況。分析:由于比賽結(jié)果只有四種可能,所以可以聲明一個枚舉類型,聲明一個枚舉類型的變量來存放比賽結(jié)果。自定義數(shù)據(jù)類型123例2-11設(shè)某次體育比賽的結(jié)果有四種可能:勝(win)、負#include<iostream>usingnamespacestd;enumgame_result{WIN,LOSE,TIE,CANCEL};intmain(){game_resultresult;enumgame_resultomit=CANCEL;intcount;for(count=WIN;count<=CANCEL;count++){result=(game_result)count;if(result==omit){cout<<"Thegamewascancelled\n";}else{cout<<"Thegamewasplayed";if(result==WIN)cout<<"andwewon!";if(result==LOSE)cout<<"andwelost.";cout<<"\n";}}return0;}124124#include<iostream>124124運行結(jié)果Thegamewasplayedandwewon!Thegamewasplayedandwelost.ThegamewasplayedThegamewascancelled125125運行結(jié)果125125結(jié)構(gòu)體——結(jié)構(gòu)的聲明結(jié)構(gòu)的概念結(jié)構(gòu)是由不同數(shù)據(jù)類型的數(shù)據(jù)組成的集合體。聲明結(jié)構(gòu)類型struct結(jié)構(gòu)名{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;:數(shù)據(jù)類型成員名n;};自定義數(shù)據(jù)類型126結(jié)構(gòu)體——結(jié)構(gòu)的聲明結(jié)構(gòu)的概念自定義數(shù)據(jù)類型126結(jié)構(gòu)體——結(jié)構(gòu)的聲明舉例:structstudent//學(xué)生信息結(jié)構(gòu)體{intnum;//學(xué)號charname[20];//姓名chargender;//性別intage;//年齡floatscore;//成績charaddr[30];//住址}自定義數(shù)據(jù)類型127結(jié)構(gòu)體——結(jié)構(gòu)的聲明舉例:自定義數(shù)據(jù)類型127結(jié)構(gòu)體——結(jié)構(gòu)變量說明變量說明形式結(jié)構(gòu)名結(jié)構(gòu)變量名;注意:結(jié)構(gòu)變量的存儲類型概念、它的壽命、可見性及使用范圍與普通變量完全一致。結(jié)構(gòu)變量說明在結(jié)構(gòu)類型聲明之后,二者也可同時進行。結(jié)構(gòu)變量占內(nèi)存大小可用sizeof運算求出:
sizeof(運算量)自定義數(shù)據(jù)類型128結(jié)構(gòu)體——結(jié)構(gòu)變量說明變量說明形式自定義數(shù)據(jù)類型128結(jié)構(gòu)體
——結(jié)構(gòu)變量的初始化和使用初始化說明結(jié)構(gòu)變量的同時可以直接設(shè)置初值。使用結(jié)構(gòu)體成員的引用形式:
結(jié)構(gòu)變量名.成員名自定義數(shù)據(jù)類型129結(jié)構(gòu)體
——結(jié)構(gòu)變量的初始化和使用初始化自定義數(shù)據(jù)類型129例2-12結(jié)構(gòu)體變量的初始化和使用#include<iostream>#include<iomanip>usingnamespacestd;structstudent//學(xué)生信息結(jié)構(gòu)體{intnum;//學(xué)號charname[20];//姓名chargender;//性別intage;//年齡}stu={97001,"LinLin",'F',19};voidmain(){cout<<setw(7)<<stu.num<<setw(20)<<
<<setw(3)<<stu.sex<<setw(3)<<stu.age;}自定義數(shù)據(jù)類型運行結(jié)果:
97001LinLinF19130例2-12結(jié)構(gòu)體變量的初始化和使用自定義數(shù)據(jù)類型運行結(jié)果:1聯(lián)合體聲明形式:union聯(lián)合名{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;:數(shù)據(jù)類型成員名n;};聯(lián)合體類型變量說明的語法形式聯(lián)合名聯(lián)合變量名;引用形式:聯(lián)合名.成員名自定義數(shù)據(jù)類型131聯(lián)合體聲明形式:自定義數(shù)據(jù)類型131例:unionuarea{charc_data;shorts_data;longl_data;}uareac_datal_datas_data聯(lián)合體自定義數(shù)據(jù)類型132例:unionuareauareac_datal_d無名聯(lián)合無名聯(lián)合沒有標(biāo)記名,只是聲明一個成員項的集合,這些成員項具有相同的內(nèi)存地址,可以由成員項的名字直接訪問。例:union{inti;floatf;}在程序中可以這樣使用:i=10;f=2.2;自定義數(shù)據(jù)類型133無名聯(lián)合無名聯(lián)合沒有標(biāo)記名,只是聲明一個成員項的集合,這些成第一章緒論清華大學(xué)鄭莉C++語言程序設(shè)計134第一章緒論清華大學(xué)鄭莉C++語言程序設(shè)計1本章主要內(nèi)容計算機程序設(shè)計語言的發(fā)展面向?qū)ο蟮姆椒嫦驅(qū)ο蟮能浖_發(fā)信息的表示與存儲程序的開發(fā)過程135本章主要內(nèi)容計算機程序設(shè)計語言的發(fā)展2計算機程序計算機的工作是用程序來控制的程序是指令的集合。指令是計算機可以識別的命令。計算機語言的發(fā)展136計算機程序計算機的工作是用程序來控制的計算機語言的發(fā)展3機器語言與匯編語言由計算機硬件系統(tǒng)可以識別的二進制指令組成的語言稱為機器語言。計算機發(fā)展的初期,軟件工程師們只能用機器語言來編寫程序。這一階段,在人類的自然語言和計算機編程語言之間存在著巨大的鴻溝。匯編語言將機器指令映射為一些可以被人讀懂的助記符,如ADD、SUB等。此時編程語言與人類自然語言間的鴻溝略有縮小,但仍與人類的思維相差甚遠。因為它的抽象層次太低,程序員需要考慮大量的機器細節(jié)。計算機語言的發(fā)展137機器語言與匯編語言由計算機硬件系統(tǒng)可以識別的二進制指令組成的高級語言高級語言屏蔽了機器的細節(jié),提高了語言的抽象層次,程序中可以采用具有一定涵義的數(shù)據(jù)命名和容易理解的執(zhí)行語句。這使得在書寫程序時可以聯(lián)系到程序所描述的具體事物。計算機語言的發(fā)展138高級語言高級語言屏蔽了機器的細節(jié),提高了語言的抽象層次,程序面向?qū)ο蟮恼Z言出發(fā)點:更直接地描述客觀世界中存在的事物(對象)以及它們之間的關(guān)系。特點:是高級語言。將客觀事物看作具有屬性和行為的對象。通過抽象找出同一類對象的共同屬性和行為,形成類。通過類的繼承與多態(tài)實現(xiàn)代碼重用計算機語言的發(fā)展139面向?qū)ο蟮恼Z言出發(fā)點:計算機語言的發(fā)展6面向?qū)ο蟮恼Z言優(yōu)點:使程序能夠比較直接地反問題域的本來面目,軟件開發(fā)人員能夠利用人類認識事物所采用的一般思維方法來進行軟件開發(fā)。計算機語言的發(fā)展140面向?qū)ο蟮恼Z言優(yōu)點:計算機語言的發(fā)展7程序設(shè)計方法的發(fā)展歷程
——面向過程的程序設(shè)計方法程序的目的:用于數(shù)學(xué)計算主要工作:設(shè)計求解問題的過程缺點:對于龐大、復(fù)雜的程序難以開發(fā)和維護面向?qū)ο蟮姆椒?41程序設(shè)計方法的發(fā)展歷程
——面向過程的程序設(shè)計程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法設(shè)計思路自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。程序結(jié)構(gòu):按功能劃分為若干個基本模塊,形成一個樹狀結(jié)構(gòu)。各模塊間的關(guān)系盡可能簡單,功能上相對獨立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成。其模塊化實現(xiàn)的具體方法是使用子程序。面向?qū)ο蟮姆椒?42程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法設(shè)計程序設(shè)計方法的發(fā)展歷程
——面向過程的結(jié)構(gòu)化程序設(shè)計方法優(yōu)點:有效地將一個較復(fù)雜的程序系統(tǒng)設(shè)計任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護。
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 區(qū)域代理銷售合同范本專業(yè)版
- 工程質(zhì)量檢測服務(wù)合同書模板
- 2025年生命人壽定期存款合同
- 道路工程爆破施工合同
- 裝飾材料供應(yīng)合同
- 版辦公用房租賃合同范本
- 酒水供應(yīng)合同樣本一
- 【正版授權(quán)】 ISO/TS 8100-22:2024 EN Lifts for the transport of persons and goods - Part 22: Prerequisites for certification of lifts,model lifts,lift components and lift functions
- 2025年合同糾紛裁決指導(dǎo)
- 酒店安保服務(wù)合同樣本
- 《銷售人員的培訓(xùn)》課件
- 炎癥性腸病的自我管理
- 國防動員課件教學(xué)課件
- 特殊作業(yè)安全管理監(jiān)護人專項培訓(xùn)課件
- 自行車被盜案匯報課件
- 律師事務(wù)所案件管理手冊
- 簡單酒店裝修合同書范本(30篇)
- 《地理信息系統(tǒng)GIS》全套教學(xué)課件
- 技術(shù)序列學(xué)習(xí)地圖(2023年)
- 中國銀行(香港)有限公司招聘筆試真題2023
- 絕經(jīng)后無癥狀子宮內(nèi)膜增厚診療中國專家共識(2024年版)解讀
評論
0/150
提交評論