版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第一章 緒論,清華大學(xué) 鄭 莉,C++語言程序設(shè)計,本章主要內(nèi)容,計算機(jī)程序設(shè)計語言的發(fā)展面向?qū)ο蟮姆椒嫦驅(qū)ο蟮能浖_發(fā)信息的表示與存儲程序的開發(fā)過程,計算機(jī)程序,計算機(jī)的工作是用程序來控制的程序是指令的集合。指令是計算機(jī)可以識別的命令。,計算機(jī)語言的發(fā)展,機(jī)器語言與匯編語言,由計算機(jī)硬件系統(tǒng)可以識別的二進(jìn)制指令組成的語言稱為機(jī)器語言。計算機(jī)發(fā)展的初期,軟件工程師們只能用機(jī)器語言來編寫程序。這一階段,在人類的自然語
2、言和計算機(jī)編程語言之間存在著巨大的鴻溝。匯編語言將機(jī)器指令映射為一些可以被人讀懂的助記符,如ADD、SUB等。此時編程語言與人類自然語言間的鴻溝略有縮小,但仍與人類的思維相差甚遠(yuǎn)。因為它的抽象層次太低,程序員需要考慮大量的機(jī)器細(xì)節(jié)。,計算機(jī)語言的發(fā)展,高級語言,高級語言屏蔽了機(jī)器的細(xì)節(jié),提高了語言的抽象層次,程序中可以采用具有一定涵義的數(shù)據(jù)命名和容易理解的執(zhí)行語句。這使得在書寫程序時可以聯(lián)系到程序所描述的具體事物。,計算機(jī)語言的發(fā)展
3、,面向?qū)ο蟮恼Z言,出發(fā)點(diǎn):更直接地描述客觀世界中存在的事物(對象)以及它們之間的關(guān)系。特點(diǎn):是高級語言。將客觀事物看作具有屬性和行為的對象。通過抽象找出同一類對象的共同屬性和行為,形成類。通過類的繼承與多態(tài)實現(xiàn)代碼重用,計算機(jī)語言的發(fā)展,面向?qū)ο蟮恼Z言,優(yōu)點(diǎn):使程序能夠比較直接地反問題域的本來面目,軟件開發(fā)人員能夠利用人類認(rèn)識事物所采用的一般思維方法來進(jìn)行軟件開發(fā)。,計算機(jī)語言的發(fā)展,程序設(shè)計方法的發(fā)展歷程
4、——面向過程的程序設(shè)計方法,程序的目的:用于數(shù)學(xué)計算主要工作:設(shè)計求解問題的過程缺點(diǎn):對于龐大、復(fù)雜的程序難以開發(fā)和維護(hù),面向?qū)ο蟮姆椒?程序設(shè)計方法的發(fā)展歷程——面向過程的結(jié)構(gòu)化程序設(shè)計方法,設(shè)計思路自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。程序結(jié)構(gòu):按功能劃分為若干個基本模塊,形成一個樹狀結(jié)構(gòu)。各模塊間的關(guān)系盡可能簡單,功能上相對獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成。其模塊化
5、實現(xiàn)的具體方法是使用子程序。,面向?qū)ο蟮姆椒?程序設(shè)計方法的發(fā)展歷程——面向過程的結(jié)構(gòu)化程序設(shè)計方法,優(yōu)點(diǎn):有效地將一個較復(fù)雜的程序系統(tǒng)設(shè)計任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護(hù)。,面向?qū)ο蟮姆椒?程序設(shè)計方法的發(fā)展歷程 ——面向過程的結(jié)構(gòu)化程序設(shè)計方法,缺點(diǎn):可重用性差、數(shù)據(jù)安全性差、難以開發(fā)大型軟件和圖形界面的應(yīng)用軟件把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨(dú)立的實體。當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時,所有相關(guān)的處理過程都要進(jìn)行相應(yīng)
6、的修改。每一種相對于老問題的新方法都要帶來額外的開銷。圖形用戶界面的應(yīng)用程序,很難用過程來描述和實現(xiàn),開發(fā)和維護(hù)也都很困難。,面向?qū)ο蟮姆椒?程序設(shè)計方法的發(fā)展歷程 ——面向?qū)ο蟮姆椒?將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個相互依存、不可分離的整體——對象。對同類型對象抽象出其共性,形成類。類通過一個簡單的外部接口,與外界發(fā)生關(guān)系。對象與對象之間通過消息進(jìn)行通訊。,面向?qū)ο?/p>
7、的方法,程序設(shè)計方法的發(fā)展歷程 ——面向?qū)ο蟮姆椒?優(yōu)點(diǎn):程序模塊間的關(guān)系更為簡單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好的保障。通過繼承與多態(tài)性,可以大大提高程序的可重用性,使得軟件的開發(fā)和維護(hù)都更為方便。,面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?——對象,一般意義上的對象:是現(xiàn)實世界中一個實際存在的事物。可以是有形的(比如一輛汽車)
8、,也可以是無形的(比如一項計劃)。是構(gòu)成世界的一個獨(dú)立單位,具有:靜態(tài)特征:可以用某種數(shù)據(jù)來描述動態(tài)特征:對象所表現(xiàn)的行為或具有的功能,面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?——對象,面向?qū)ο蠓椒ㄖ械膶ο螅菏窍到y(tǒng)中用來描述客觀事物的一個實體,它是用來構(gòu)成系統(tǒng)的一個基本單位。對象由一組屬性和一組行為構(gòu)成。屬性:用來描述對象靜態(tài)特征的數(shù)據(jù)項。行為:用來描述對象動態(tài)特征的操作序列。,面
9、向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?——類,分類——人類通常的思維方法分類所依據(jù)的原則——抽象忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。例如,石頭、樹木、汽車、房屋等都是人們在長期的生產(chǎn)和生活實踐中抽象出的概念。,面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?
10、 ——類,面向?qū)ο蠓椒ㄖ械?quot;類"具有相同屬性和服務(wù)的一組對象的集合為屬于該類的全部對象提供了抽象的描述,包括屬性和行為兩個主要部分。類與對象的關(guān)系:猶如模具與鑄件之間的關(guān)系,一個屬于某類的對象稱為該類的一個實例。,面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?——封裝,把對象的屬性和服務(wù)結(jié)合成一個獨(dú)立的系統(tǒng)單元。盡可能隱蔽對象的內(nèi)部細(xì)節(jié)。
11、對外形成一個邊界(或者說一道屏障),只保留有限的對外接口使之與外部發(fā)生聯(lián)系。,面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?——繼承,繼承對于軟件復(fù)用有著重要意義,是面向?qū)ο蠹夹g(shù)能夠提高軟件開發(fā)效率的重要原因之一。定義:特殊類的對象擁有其一般類的全部屬性與服務(wù),稱作特殊類對一般類的繼承。例如:將輪船作為一個一般類,客輪便是一個特殊類。,面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?
12、 ——多態(tài)性,多態(tài)是指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個屬性或行為在一般類及其各個特殊類中具有不同的語義。例如:數(shù)的加法->實數(shù)的加法 ->復(fù)數(shù)的加法,面向?qū)ο蟮姆椒?面向?qū)ο蟮能浖こ?面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用。它包括:面向?qū)ο蟮姆治觯∣OA)面向?qū)ο?/p>
13、的設(shè)計(OOD)面向?qū)ο蟮木幊蹋∣OP)面向?qū)ο蟮臏y試(OOT)面向?qū)ο蟮能浖S護(hù)(OOSM),面向?qū)ο蟮能浖_發(fā),系統(tǒng)分析,系統(tǒng)分析階段應(yīng)該扼要精確地抽象出系統(tǒng)必須做什么,但是不關(guān)心如何去實現(xiàn)。面向?qū)ο蟮南到y(tǒng)分析,直接用問題域中客觀存在的事物建立模型中的對象,對單個事物及事物之間的關(guān)系,都保留他們的原貌,不做轉(zhuǎn)換,也不打破原有界限而重新組合,因此能夠很好地映射客觀事物。,面向?qū)ο蟮能浖_發(fā),設(shè)計,針對系統(tǒng)的一個具體實現(xiàn)運(yùn)用面向
14、對象的方法。其中包括兩方面的工作:把OOA模型直接搬到OOD,作為OOD的一部分針對具體實現(xiàn)中的人機(jī)界面、數(shù)據(jù)存儲、任務(wù)管理等因素補(bǔ)充一些與實現(xiàn)有關(guān)的部分。,面向?qū)ο蟮能浖_發(fā),編程,OOP工作就是用一種面向?qū)ο蟮木幊陶Z言把OOD模型中的每個成分書寫出來,是面向?qū)ο蟮能浖_發(fā)最終落實的重要階段。,面向?qū)ο蟮能浖_發(fā),測試,測試的任務(wù)是發(fā)現(xiàn)軟件中的錯誤。在面向?qū)ο蟮能浖y試中繼續(xù)運(yùn)用面向?qū)ο蟮母拍钆c原則來組織測試,以對象的類作為基本
15、測試單位,可以更準(zhǔn)確的發(fā)現(xiàn)程序錯誤并提高測試效率。,面向?qū)ο蟮能浖_發(fā),維護(hù),將軟件交付使用后,工作并沒有完結(jié),還要根據(jù)軟件的運(yùn)行情況和用戶的需求,不斷改進(jìn)系統(tǒng)。使用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件,其程序與問題域是一致的,因此,在維護(hù)階段運(yùn)用面向?qū)ο蟮姆椒梢源蟠筇岣哕浖S護(hù)的效率。,面向?qū)ο蟮能浖_發(fā),信息的表示和存儲,信息的分類計算機(jī)的數(shù)字系統(tǒng)程序設(shè)計中常用的數(shù)制不同進(jìn)位計數(shù)制間的轉(zhuǎn)換信息的存儲單位二進(jìn)制數(shù)的編碼表示小數(shù)的表
16、示方法非數(shù)值信息的表示,信息的分類,┌ 指令 ┌控制信息┤ │ └ 控制字 信息┤ │ ┌ 定點(diǎn)數(shù) │ ┌ 數(shù)值信息┤ └數(shù)據(jù)信息┤ └ 浮點(diǎn)數(shù) │ ┌ 字符數(shù)據(jù) └
17、非數(shù)值信息┤ └ 邏輯數(shù)據(jù),信息的表示與存儲,計算機(jī)的數(shù)字系統(tǒng),計算機(jī)采用的是二進(jìn)制數(shù)字系統(tǒng)。基本符號:0、1進(jìn)位原則:逢二進(jìn)一優(yōu)點(diǎn):易于物理實現(xiàn)二進(jìn)制數(shù)運(yùn)算簡單機(jī)器可靠性高通用性強(qiáng)缺點(diǎn):對人來說可讀性差,信息的表示與存儲,程序設(shè)計中常用的數(shù)制,信息的表示與存儲,不同進(jìn)位計數(shù)制間的轉(zhuǎn)換 ——R 進(jìn)制→十進(jìn)制,各
18、位數(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,信息的表示與存
19、儲,不同進(jìn)位計數(shù)制間的轉(zhuǎn)換 ——十進(jìn)制→ R 進(jìn)制,十進(jìn)制整數(shù)轉(zhuǎn)換成R進(jìn)制的整數(shù)“除R取余”法,例如:2 68 余 數(shù) 2 34 ┄┄┄┄┄┄┄┄┄┄┄┄0 低位 2 17 ┄┄┄┄┄┄┄┄┄┄┄ 0 2 8 ┄┄┄┄┄┄┄┄┄┄┄ 1 2 4 ┄┄┄┄┄┄┄┄┄┄ 0 2 2 ┄┄┄┄┄┄┄┄┄
20、┄ 0 2 1 ┄┄┄┄┄┄┄┄┄ 0 0 ┄┄┄┄┄┄┄┄┄ 1 高位所以 6810=10001002,信息的表示與存儲,,不同進(jìn)位計數(shù)制間的轉(zhuǎn)換 ——十進(jìn)制→ R 進(jìn)制,十進(jìn)制小數(shù)轉(zhuǎn)換成R進(jìn)制小數(shù)“乘 R 取整”法,例如: 高位 0.3125×2 = 0 .625
21、 0.625 ×2 = 1 .25 0.25 ×2 = 0 .5 0.5 ×2 = 1 .0所以 0.312510 = 0.01012,信息的表示與存儲,不同進(jìn)位計數(shù)制間的轉(zhuǎn)換——二、八、十六進(jìn)制的相互轉(zhuǎn)換,每位八進(jìn)制數(shù)相當(dāng)于三位二進(jìn)制數(shù)每位十六進(jìn)制數(shù)相當(dāng)于四位二進(jìn)制數(shù)(1011010.10)2=(001 011 010 .100)2=(132.4)8(1011
22、010.10)2=(0101 1010 .1000)2=(5A.8)16(F7)16=(1111 0111)2=(11110111)2,信息的表示與存儲,信息的存儲單位,位(bit):度量數(shù)據(jù)的最小單位,表示一位二進(jìn)制信息。字節(jié)(byte):由八位二進(jìn)制數(shù)字組成(1 byte = 8 bit)。K 字節(jié) 1 K = 1024 byteM 字節(jié) 1 M = 1024 KG 字節(jié) 1 G = 102
23、4 M,信息的表示與存儲,二進(jìn)制數(shù)的編碼表示:原碼,"符號──絕對值表示"的編碼例如:X=+0101011 [X]原 = 0 0101011X=-0101011 [X]原 = 1 0101011 符號位缺點(diǎn):零的表示不唯一:[+0]原 =000...0 [-0]原 =100...0進(jìn)行四則運(yùn)算時,符號位需單獨(dú)處理,且運(yùn)算規(guī)則復(fù)雜。,信息
24、的表示與存儲,二進(jìn)制數(shù)的編碼表示:反碼,正數(shù)的反碼與原碼表示相同。負(fù)數(shù)的反碼與原碼有如下關(guān)系:符號位相同(仍用1表示),其余各位取反(0變1,1變0)。例如:X=-1100110 [X]原 =11100110 [X]反 =10011001X=+0000000 [X]原 =00000000 [X]反 =00000000反碼中零的表示也不唯一X=-0000000 [X]原 =10000000 [X]反 =11111111反碼只
25、是求補(bǔ)碼的中間碼,信息的表示與存儲,二進(jìn)制數(shù)的編碼表示:補(bǔ)碼,模數(shù):n位整數(shù)(包括一位符號位),則它的模數(shù)為 2n 。 n位小數(shù),小數(shù)點(diǎn)前一位為符號位,則它的模數(shù)為 2。補(bǔ)數(shù):一個數(shù)減去另一個數(shù),或者說一個數(shù)加上一個負(fù)數(shù),等于第一個數(shù)加上第二個數(shù)的補(bǔ)數(shù)。例:8+(-2)=8+10 ( mod 12 )一個二進(jìn)制負(fù)數(shù)可用其模數(shù)與真值做加法 (模減去該數(shù)的絕對值) 求得其補(bǔ)碼。,信息的表示與存儲,二進(jìn)制數(shù)的編碼表示:補(bǔ)碼,計算
26、機(jī)中的補(bǔ)碼表示法負(fù)數(shù)的補(bǔ)碼由該數(shù)反碼的末位加 1 求得對補(bǔ)碼再求補(bǔ)即得到原碼補(bǔ)碼運(yùn)算規(guī)則符號位可作為數(shù)值參加運(yùn)算減法運(yùn)算可轉(zhuǎn)換為加法運(yùn)算:加上一個負(fù)數(shù)等于加上該數(shù)的補(bǔ)碼補(bǔ)碼運(yùn)算的結(jié)果仍為補(bǔ)碼運(yùn)算結(jié)果溢出:負(fù)數(shù)之和得正數(shù),或正數(shù)之和得負(fù)數(shù),信息的表示與存儲,小數(shù)的表示方法,計算機(jī)中通常采用浮點(diǎn)方式表示小數(shù)一個數(shù) N 用浮點(diǎn)形式表示可以寫成: N=M×2E E表示2的冪
27、,稱為數(shù)N的階碼。階碼確定了數(shù)N的小數(shù)點(diǎn)的位置,其位數(shù)反映了該浮點(diǎn)數(shù)所表示的數(shù)的范圍。M表示數(shù)N的全部有效數(shù)字,稱為數(shù)N的尾數(shù)。其位數(shù)反映了數(shù)據(jù)的精度。,信息的表示與存儲,非數(shù)值信息的表示,西文字符:ASCII碼:用7位二進(jìn)制數(shù)表示一個字符,最多可以表示27=128個字符EBCDIC碼:用8位二進(jìn)制數(shù)表示一個字符,最多可以表示28=256個字符漢字:應(yīng)用較為廣泛的是"國家標(biāo)準(zhǔn)信息交換用漢字編碼"(GB231
28、2-80標(biāo)準(zhǔn)),簡稱國標(biāo)碼。是二字節(jié)碼,用二個七位二進(jìn)制數(shù)編碼表示一個漢字。,信息的表示與存儲,基本術(shù)語,源程序:用源語言寫的,有待翻譯的程序目標(biāo)程序:也稱為"結(jié)果程序",是源程序通過翻譯程序加工以后所生成的程序。翻譯程序:是指一個把源程序翻譯成等價的目標(biāo)程序的程序。,程序的開發(fā)過程,基本術(shù)語 ——三種不同類型的翻譯程序,匯編程序:其任務(wù)是把用匯編語言寫成的源程序,翻譯成機(jī)器語言形式的目標(biāo)程
29、序。編譯程序:若源程序是用高級程序設(shè)計語言所寫,經(jīng)翻譯程序加工生成目標(biāo)程序,那么,該翻譯程序就稱為"編譯程序"。,程序的開發(fā)過程,基本術(shù)語 ——三種不同類型的翻譯程序,解釋程序:這也是一種翻譯程序,同樣是將高級語言源程序翻譯成機(jī)器指令。它與編譯程序不同點(diǎn)就在于:它是邊翻譯邊執(zhí)行的,即輸入一句、翻譯一句、 執(zhí)行一句,直至將整個源程序翻譯并執(zhí)行完畢。,程序的開發(fā)過程,程序的開發(fā)過程,編輯將源程序輸入
30、到計算機(jī)中,生成后綴為cpp的磁盤文件。編譯將程序的源代碼轉(zhuǎn)換為機(jī)器語言代碼。連接將多個源程序文件以及庫中的某些文件連在一起,生成一個后綴為exe的可執(zhí)行文件。運(yùn)行調(diào)試,程序的開發(fā)過程,第二章 C++簡單程序設(shè)計,清華大學(xué) 鄭 莉,C++語言程序設(shè)計,本章主要內(nèi)容,C++語言概述基本數(shù)據(jù)類型和表達(dá)式數(shù)據(jù)的輸入與輸出算法的基本控制結(jié)構(gòu)自定義數(shù)據(jù)類型,C++語言的產(chǎn)生,C++是從C語言發(fā)展演變而來的,首先是一個更好的
31、C引入了類的機(jī)制,最初的C++被稱為“帶類的C”1983年正式取名為C++從1989年開始C++語言的標(biāo)準(zhǔn)化工作于1994年制定了ANSI C++標(biāo)準(zhǔn)草案于1998年11月被國際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國際標(biāo)準(zhǔn),成為目前的C++,C++語言概述,C++的特點(diǎn),全面兼容C它保持了C的簡潔、高效和接近匯編語言等特點(diǎn)對C的類型系統(tǒng)進(jìn)行了改革和擴(kuò)充C++也支持面向過程的程序設(shè)計,不是一個純正的面向?qū)ο蟮恼Z言支持面向?qū)ο蟮姆椒?/p>
32、,C++語言概述,C++程序?qū)嵗?-1,//2_1.cpp#include using namespace std;void main(void){ cout<<"Hello!\n"; cout<<"Welcome to c++!\n";}運(yùn)行結(jié)果:Hello!Welcome to c++!,C++語言概述,C++字符集,大小寫的英文
33、字母:A~Z,a~z數(shù)字字符:0~9特殊字符:空格!#%^&*_(下劃線)+=-~/\'";.,()[]{},C++語言概述,詞法記號,關(guān)鍵字C++預(yù)定義的單詞標(biāo)識符程序員聲明的單詞,它命名程序正文中的一些實體文字在程序中直接使用符號表示的數(shù)據(jù)操作符用于實現(xiàn)各種運(yùn)算的符號分隔符 () {} , : ; 用于分隔各個詞
34、法記號或程序正文空白符空格、制表符(TAB鍵產(chǎn)生的字符)、換行符(Enter鍵所產(chǎn)生的字符)和注釋的總稱,C++語言概述,標(biāo)識符的構(gòu)成規(guī)則,以大寫字母、小寫字母或下劃線(_)開始。可以由以大寫字母、小寫字母、下劃線(_)或數(shù)字0~9組成。大寫字母和小寫字母代表不同的標(biāo)識符。,C++語言概述,,,,,數(shù)據(jù)類型 ——常量與變量,#include using namespace std;void main(voi
35、d){ const int PRICE=30; int num,total; float v ,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;},Page 54,
36、基本數(shù)據(jù)類型和表達(dá)式,#include using namespace std;void main(void){ const int PRICE=30; int num,total; float v ,r,h; num=10; total=num*PRICE; cout<<total <<endl; r=2.5; h=3.2;
37、 v=3.14159*r*r*h; cout<<v <<endl;},,數(shù)據(jù)類型 ——整型數(shù)據(jù),,整型常量,shortunsigned short 2字節(jié)int、unsigned int 4字節(jié)longunsigned long 4字節(jié),整型變量,,,基本數(shù)據(jù)類型和表達(dá)
38、式,數(shù)據(jù)類型 —整型數(shù)據(jù)及取值范圍,類型說明符 位數(shù)數(shù)值范圍短整short16-32768~32767基本 int32 -231~(231-1)長整long32-231~(231-1)無符號unsigned short160~65535 unsigned [int]320~(232-1)unsigned long320~(232-1),基本數(shù)據(jù)類型和表達(dá)式,#include
39、 using namespace std;void main(void){ const int PRICE=30; int num,total; float v ,r,h; num=10; total=num*PRICE; cout<<total<<endl; r=2.5; h=3.2; v=3.14159*r*r*h; cout<<v<<en
40、dl;},數(shù)據(jù)類型 ——實型數(shù)據(jù),實型常量,,,,float 4字節(jié) 3.4×10±38 7位有效數(shù)字double 8字節(jié) 1.7×10±308 15位有效數(shù)字long double 8字節(jié) 1.7×10±308 15位有效數(shù)字,實型變量,,,,缺省為double型后綴 F(或
41、 f)為 float型后綴 L(或 l)為 long double型,基本數(shù)據(jù)類型和表達(dá)式,數(shù)據(jù)類型 ——字符型數(shù)據(jù)(一),字符常量單引號括起來的一個字符,如:'a', 'D', '?', '$'字符變量用來存放字符常量例:char c1,c2; c1='a'; c2='A';字符數(shù)據(jù)在內(nèi)存中的存
42、儲形式以ASCII碼存儲,占1字節(jié),用7個二進(jìn)制位,Page 58,基本數(shù)據(jù)類型和表達(dá)式,字符數(shù)據(jù)的使用方法字符數(shù)據(jù)和整型數(shù)據(jù)之間可以運(yùn)算。字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。字符串常量例:"CHINA" "a" 'a'所以:char c; c="a";,Page 59,數(shù)據(jù)類型 ——字符型數(shù)據(jù)(二),基本數(shù)
43、據(jù)類型和表達(dá)式,數(shù)據(jù)類型 ——布爾型數(shù)據(jù),布爾型變量的說明:例:bool flag;布爾型數(shù)據(jù)的取值:只有 false 和 true 兩個值,基本數(shù)據(jù)類型和表達(dá)式,數(shù)據(jù)類型 ——變量初始化,例: int a=3; double f=3.56; char c='a'; int c(5);,Page 61,基本數(shù)據(jù)類型和表達(dá)式,數(shù)據(jù)類型 —混合運(yùn)算時的類
44、型轉(zhuǎn)換,不同類型數(shù)據(jù)進(jìn)行混合運(yùn)算時,C++編譯器會自動進(jìn)行類型轉(zhuǎn)換。為了避免不同的數(shù)據(jù)類型在運(yùn)算中出現(xiàn)類型問題,應(yīng)盡量使用同種類型數(shù)據(jù)??梢圆捎脧?qiáng)制類型轉(zhuǎn)換:例如:float c;int a,b;c=float(a)/float(b); 或 c= (float)a/(float)b;,基本數(shù)據(jù)類型和表達(dá)式,變量的存儲類型,auto屬于一時性存儲,其存儲空間可以被若干變量多次覆蓋使用。register存放在通用寄存器中。
45、extern在所有函數(shù)和程序段中都可引用。static在內(nèi)存中是以固定地址存放的,在整個程序運(yùn)行期間都有效。,基本數(shù)據(jù)類型和表達(dá)式,算術(shù)運(yùn)算符與算術(shù)表達(dá)式,基本算術(shù)運(yùn)算符 + - * / (若整數(shù)相除,結(jié)果取整) %(取余,操作數(shù)為整數(shù))優(yōu)先級與結(jié)合性先乘除,后加減,同級自左至右++, --(自增、自減)例:i++; -- j;,Page 64,基本數(shù)據(jù)類型和表達(dá)式,賦
46、值運(yùn)算符和賦值表達(dá)式 簡單的賦值運(yùn)算符"=",舉例n=n+5表達(dá)式的類型等號左邊對象的類型表達(dá)式的值等號左邊對象被賦值后的值,Page 65,基本數(shù)據(jù)類型和表達(dá)式,賦值運(yùn)算符和賦值表達(dá)式 復(fù)合的賦值運(yùn)算符,有10種復(fù)合運(yùn)算符:+=, -=, *=, /=, %=,>=,&=,^=,|= 例a+=3 等價于 a=a+3x*=y+8 等價于 x=
47、x*(y+8),基本數(shù)據(jù)類型和表達(dá)式,賦值運(yùn)算符和賦值表達(dá)式 ——賦值表達(dá)式舉例,a=5表達(dá)式值為5a=b=c=5表達(dá)式值為5,a,b,c均為5a=5+(c=6)表達(dá)式值為11,a為11,c為6a=(b=4)+(c=6) 表達(dá)式值為10,a為10,b為4,c為6a=(b=10)/(c=2) 表達(dá)式值為5,a為5,b為10,c為2a+=
48、a-=a*a 相當(dāng)于 a=a+(a=a-a*a),Page 67,基本數(shù)據(jù)類型和表達(dá)式,逗號運(yùn)算和逗號表達(dá)式,格式表達(dá)式1,表達(dá)式2求解順序及結(jié)果先求解1,再求解2,最終結(jié)果為表達(dá)式2的值例a=3*5 , a*4 最終結(jié)果為60,Page 68,基本數(shù)據(jù)類型和表達(dá)式,關(guān)系運(yùn)算與關(guān)系表達(dá)式,關(guān)系運(yùn)算是比較簡單的一種邏輯運(yùn)算,優(yōu)先次序為: >= == !=
49、 優(yōu)先級相同(高) 優(yōu)先級相同(低) 關(guān)系表達(dá)式是一種最簡單的邏輯表達(dá)式其結(jié)果類型為 bool,值只能為 true 或 false。例如:a>b,c<=a+b,x+y==3,基本數(shù)據(jù)類型和表達(dá)式,,,邏輯運(yùn)算與邏輯表達(dá)式,邏輯運(yùn)算符 !(非) &&(與) ||(或)優(yōu)先次序: 高 →
50、 低 邏輯表達(dá)式 例如:(a>b)&&(x>y) 其結(jié)果類型為 bool,值只能為 true 或 false,基本數(shù)據(jù)類型和表達(dá)式,條件運(yùn)算符與條件表達(dá)式,一般形式表達(dá)式1?表達(dá)式2:表達(dá)式3表達(dá)式1 必須是 bool 類型執(zhí)行順序先求解表達(dá)式1,若表達(dá)式1的值為true,則求解表達(dá)式2,表達(dá)式2的值為最終結(jié)果若表達(dá)式1的值為false,則求解表達(dá)式3
51、,表達(dá)式3的值為最終結(jié)果例: x=a>b? a:b;,基本數(shù)據(jù)類型和表達(dá)式,條件運(yùn)算符與條件表達(dá)式,注意:條件運(yùn)算符優(yōu)級高于賦值運(yùn)算符,低于邏輯運(yùn)算符表達(dá)式2、3的類型可以不同,條件表達(dá)式的最終類型為 2 和 3 中較高的類型。例: x=a>b? a:b;,基本數(shù)據(jù)類型和表達(dá)式,,①,,②,sizeof 運(yùn)算符,語法形式sizeof (類型名)或 sizeof (表達(dá)式)結(jié)果值:“類型名”所指定的類型或“表達(dá)
52、式”的結(jié)果類型所占的字節(jié)數(shù)。例:sizeof(short)sizeof(x),基本數(shù)據(jù)類型和表達(dá)式,,位運(yùn)算——按位與(&),運(yùn)算規(guī)則將兩個運(yùn)算量的每一個位進(jìn)行邏輯與操作舉例:計算 3 & 5 3: 0 0 0 0 0 0 1 1 5:(&) 0 0 0 0 0 1 0 13 & 5: 0 0 0 0 0 0 0 1用途:將某一位置0,其它位不變。例如:將
53、char 型變量 a 的最低位置 0: a = a & 0376;取指定位。例如:有 char c; int a; 取出 a 的低字節(jié),置于 c 中:c = a & 0377;,基本數(shù)據(jù)類型和表達(dá)式,位運(yùn)算——按位或(|),運(yùn)算規(guī)則將兩個運(yùn)算量的每一個位進(jìn)行邏輯或操作舉例:計算 3 | 5 3: 0 0 0 0 0 0 1 1 5:(|) 0 0 0 0 0 1 0 13 | 5:
54、 0 0 0 0 0 1 1 1用途:將某些位置1,其它位不變。例如:將 int 型變量 a 的低字節(jié)置 1 : a = a | 0xff;,基本數(shù)據(jù)類型和表達(dá)式,位運(yùn)算——按位異或(^),運(yùn)算規(guī)則兩個操作數(shù)進(jìn)行異或:若對應(yīng)位相同,則結(jié)果該位為 0,若對應(yīng)位不同,則結(jié)果該位為 1,舉例:計算 071^052 071: 0 0 1 1 1 0 0 1 052: (^
55、) 0 0 1 0 1 0 1 0 071^052 : 0 0 0 1 0 0 1 1,基本數(shù)據(jù)類型和表達(dá)式,位運(yùn)算——按位異或(^),用途:使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反) 例如:要使 01111010 低四位翻轉(zhuǎn): 0 1 1 1 1 0 1 0 (^)0 0 0 0 1 1 1 10 1 1 1 0 1 0 1,基本數(shù)據(jù)類型和表達(dá)式,位運(yùn)算——取反(~),單目運(yùn)算符,對一個二
56、進(jìn)制數(shù)按位取反。例: 025:0000000000010101 ~025:1111111111101010,基本數(shù)據(jù)類型和表達(dá)式,位運(yùn)算——移位,左移運(yùn)算(>)右移后,低位:舍棄 高位:無符號數(shù):補(bǔ)0 有符號數(shù):補(bǔ)“符號位”,基本數(shù)據(jù)類型和表達(dá)式,運(yùn)算符優(yōu)先級,括號++,--,sizeof*, /, %+, -==, !=位運(yùn)算
57、&&||?:賦值運(yùn)算逗號運(yùn)算,,低,高,基本數(shù)據(jù)類型和表達(dá)式,混合運(yùn)算時數(shù)據(jù)類型的轉(zhuǎn)換 ——隱含轉(zhuǎn)換,一些二元運(yùn)算符(算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符和賦值運(yùn)算符)要求兩個操作數(shù)的類型一致。在算術(shù)運(yùn)算和關(guān)系運(yùn)算中如果參與運(yùn)算的操作數(shù)類型不一致,編譯系統(tǒng)會自動對數(shù)據(jù)進(jìn)行轉(zhuǎn)換(即隱含轉(zhuǎn)換),基本原則是將低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)。char
58、 short int unsigned long unsigned long float double低 高,基本數(shù)據(jù)類型和表達(dá)式,,混合運(yùn)算時數(shù)據(jù)類型的轉(zhuǎn)換 —
59、—隱含轉(zhuǎn)換,當(dāng)參與運(yùn)算的操作數(shù)必須是bool型時,如果操作數(shù)是其它類型,編譯系統(tǒng)會自動將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。位運(yùn)算的操作數(shù)必須是整數(shù),當(dāng)二元位運(yùn)算的操作數(shù)是不同類型的整數(shù)時,也會自動進(jìn)行類型轉(zhuǎn)換,賦值運(yùn)算要求左值與右值的類型相同,若類型不同,編譯系統(tǒng)會自動將右值轉(zhuǎn)換為左值的類型。,基本數(shù)據(jù)類型和表達(dá)式,混合運(yùn)算時數(shù)據(jù)類型的轉(zhuǎn)換 ——強(qiáng)制類型轉(zhuǎn)換,語法形式:類型
60、說明符(表達(dá)式)或(類型說明符)表達(dá)式強(qiáng)制類型轉(zhuǎn)換的作用是將表達(dá)式的結(jié)果類型轉(zhuǎn)換為類型說明符所指定的類型。,基本數(shù)據(jù)類型和表達(dá)式,語句,聲明語句表達(dá)式語句選擇語句循環(huán)語句跳轉(zhuǎn)語句復(fù)合語句標(biāo)號語句,表達(dá)式語句,格式:表達(dá)式;表達(dá)式語句與表達(dá)式的區(qū)別:表達(dá)式可以包含在其它表達(dá)式中,而語句不可。例:if ((a=b)>0) t=a;不可寫為:if ((a=b;)>0) t=a;,語 句,復(fù)合語句,
61、將多個語句用一對大括號包圍,便構(gòu)成一個復(fù)合語句例如{sum=sum+i;i++;},語 句,簡單的輸入、輸出,向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出例:int x; cout>x;,順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu),算法的基本控制結(jié)構(gòu),如何解決分支問題?,例2-2輸入一個年份,判斷是否閏年。,算法的基本控制結(jié)構(gòu),#include using namespace std;void main(void
62、){int year; bool IsLeapYear; cout > year;IsLeapYear = ((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)); if (IsLeapYear) cout << year << " is a leap year"
63、 << endl;else cout << year << " is not a leap year" << endl;},90,運(yùn)行結(jié)果:Enter the year: 20002000 is a leap year,91,if (表達(dá)式) 語句
64、例:if (x>y) couty) cout<<x; else cout<<y;if (表達(dá)式1) 語句1else if (表達(dá)式2) 語句2else if (表達(dá)式3) 語句3 …else 語句 n,if 語句 ——三種形式,算法的基本控制結(jié)構(gòu),如何解決多分問題?,例2-3 輸入兩個整數(shù),比較兩個數(shù)的大小。,算法的基
65、本控制結(jié)構(gòu),#includeusing namespace std;void main(){ int x,y; cout>x>>y; if (x!=y) if (x>y) couty"<<endl; else cout<<"x<y"<<
66、;endl; else cout<<"x=y"<<endl;},94,運(yùn)行結(jié)果1:Enter x and y:5 8xy,95,一般形式if ( ) if ( ) 語句 1 else 語句 2else if ( ) 語句 3 else 語句 4注意語句 1、2、3、4 可以是復(fù)合
67、語句,每層的 if 與 else 配對,或用 { } 來確定層次關(guān)系。,算法的基本控制結(jié)構(gòu),特殊的多分支結(jié)構(gòu),例2-4輸入一個0~6的整數(shù),轉(zhuǎn)換成星期輸出。,算法的基本控制結(jié)構(gòu),#include using namespace std;void main(void){int day;cin >> day;switch (day){ case 0:cout << "Sund
68、ay" << endl; break; case 1:cout << "Monday" << endl; break;case 2:cout << "Tuesday" << endl; break;case 3: cout << "Wednesday" <
69、;< endl; break; case 4:cout << "Thursday" << endl; break; case 5:cout << "Friday" << endl; break; case 6:cout << "Saturday" << endl;
70、 break; default: cout << "Day out of range Sunday .. Saturday" << endl;break; }},98,一般形式switch (表達(dá)式) { case 常量表達(dá)式 1:語句1 case 常量表達(dá)式 2:語句2 ┆
71、 case 常量表達(dá)式 n:語句n default : 語句n+1 },switch 語句,執(zhí)行順序以case中的常量表達(dá)式值為入口標(biāo)號,由此開始順序執(zhí)行。因此,每個case分支最后應(yīng)該加break語句。,算法的基本控制結(jié)構(gòu),使用switch語句應(yīng)注意的問題,case分支可包含多個語句,且不用{ }。表達(dá)式、判斷值都是int型或char型。若干分支執(zhí)行內(nèi)容相同可共用一組語句。,算
72、法的基本控制結(jié)構(gòu),如何有效地完成重復(fù)工作,例2-5求自然數(shù)1~10之和分析:本題需要用累加算法,累加過程是一個循環(huán)過程,可以用while語句實現(xiàn)。,算法的基本控制結(jié)構(gòu),#includeusing namespace std;void main(){ int i(1), sum(0); while(i<=10) { sum+=i; //相當(dāng)于sum=sum+i; 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++語言程序設(shè)計(清華大學(xué)鄭莉)課后習(xí)題答案
- c語言程序設(shè)計鄭莉課后習(xí)題答案
- c++語言程序設(shè)計課后答案(鄭莉第4版)
- c++語言程序設(shè)計課后答案(鄭莉第4版)
- c--語言程序設(shè)計第二章解析
- 《c語言程序設(shè)計》教案(清華譚浩強(qiáng))
- java語言程序設(shè)計第2版鄭莉課后習(xí)題答案
- c語言程序設(shè)計教程-李含光-鄭關(guān)勝-清華大學(xué)出版社習(xí)題答案習(xí)題答案[完美打印版]
- 《c--程序設(shè)計基礎(chǔ)教程與上機(jī)指導(dǎo)》第18課c、c--語言編程格式與技巧
- 大學(xué)計算機(jī)c語言程序設(shè)計(程序設(shè)計)
- 譚浩強(qiáng)教授著、清華大學(xué)出版社出版的《c程序設(shè)計》
- c--程序設(shè)計題庫(182道含答案)
- java語言程序設(shè)計鄭莉第九章課后習(xí)題答案
- 譚浩強(qiáng)教授著、清華大學(xué)出版社出版的《c程序設(shè)計》 (1)
- c語言程序設(shè)計
- 《c語言程序設(shè)計》
- c語言程序設(shè)計
- c語言程序設(shè)計
- c語言程序設(shè)計
- c--面向?qū)ο蟪绦蛟O(shè)計習(xí)題解答(全)
評論
0/150
提交評論