
c++語言程序設(shè)計(jì)第1講
46頁第一章 緒論 清華大學(xué) 鄭 莉 C+語言程序設(shè)計(jì) 1 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 本章主要內(nèi)容 l計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展 l面向?qū)ο蟮姆椒?l面向?qū)ο蟮能浖_發(fā) l信息的表示與存儲(chǔ) l程序的開發(fā)過程 2 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 計(jì)算機(jī)程序 l計(jì)算機(jī)的工作是用程序來控制的 l程序是指令的集合 l指令是計(jì)算機(jī)可以識(shí)別的命令 計(jì)算機(jī)語言的發(fā)展 3 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 機(jī)器語言與匯編語言 l由計(jì)算機(jī)硬件系統(tǒng)可以識(shí)別的二進(jìn) 制指令組成的語言稱為機(jī)器語言 計(jì)算機(jī)發(fā)展的初期,軟件工程師們只能用機(jī) 器語言來編寫程序這一階段,在人類的自然語言 和計(jì)算機(jī)編程語言之間存在著巨大的鴻溝 l匯編語言將機(jī)器指令映射為一些可 以被人讀懂的助記符,如ADD、SUB等 此時(shí)編程語言與人類自然語言間的鴻溝略有 縮小,但仍與人類的思維相差甚遠(yuǎn)因?yàn)樗某橄?層次太低,程序員需要考慮大量的機(jī)器細(xì)節(jié) 計(jì)算機(jī)語言的發(fā)展 4 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 高級(jí)語言 高級(jí)語言屏蔽了機(jī)器的細(xì)節(jié),提高 了語言的抽象層次,程序中可以采用具 有一定含義的數(shù)據(jù)命名和容易理解的執(zhí) 行語句這使得在書寫程序時(shí)可以聯(lián)系 到程序所描述的具體事物。
計(jì)算機(jī)語言的發(fā)展 5 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮恼Z言 l出發(fā)點(diǎn): 更直接地描述客觀世界中存在的 事物(對(duì)象)以及它們之間的關(guān)系 l特點(diǎn): 是高級(jí)語言 將客觀事物看作具有屬性和行為 的對(duì)象 通過抽象找出同一類對(duì)象的共同 屬性和行為,形成類 通過類的繼承與多態(tài)實(shí)現(xiàn)代碼重 用 計(jì)算機(jī)語言的發(fā)展 6 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮恼Z言 l優(yōu)點(diǎn): 使程序能夠比較直接地反映問題域的 本來面目,軟件開發(fā)人員能夠利用人類認(rèn)識(shí) 事物所采用的一般思維方法來進(jìn)行軟件開發(fā) 計(jì)算機(jī)語言的發(fā)展 7 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 程序設(shè)計(jì)方法的發(fā)展歷 程 面向過程的程序設(shè)計(jì)方 法 l最早的程序 目的:用于數(shù)學(xué)計(jì)算 主要工作:設(shè)計(jì)求解問題的過程 缺點(diǎn):對(duì)于龐大、復(fù)雜的程序難以開 發(fā)和維護(hù) 面向?qū)ο蟮姆椒?8 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 程序設(shè)計(jì)方法的發(fā)展歷 程 面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方 法 l設(shè)計(jì)思路 自頂向下、逐步求精采用模塊分 解與功能抽象,自頂向下、分而治之 l程序結(jié)構(gòu): 按功能劃分為若干個(gè)基本模塊,形 成一個(gè)樹狀結(jié)構(gòu) 各模塊間的關(guān)系盡可能簡單,功能 上相對(duì)獨(dú)立;每一模塊內(nèi)部均是由順序、 選擇和循環(huán)三種基本結(jié)構(gòu)組成。
其模塊化實(shí)現(xiàn)的具體方法是使用子 程序 面向?qū)ο蟮姆椒?9 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 程序設(shè)計(jì)方法的發(fā)展歷 程 面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方 法 l優(yōu)點(diǎn): 有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè) 計(jì)任務(wù)分解成許多易于控制和處理的子任 務(wù),便于開發(fā)和維護(hù) 面向?qū)ο蟮姆椒?10 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 程序設(shè)計(jì)方法的發(fā)展歷程 面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方 法 l缺點(diǎn):可重用性差、數(shù)據(jù)安全性差、難 以開發(fā)大型軟件和圖形界面的應(yīng)用軟件 把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨(dú)立 的實(shí)體 當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過程 都要進(jìn)行相應(yīng)的修改 每一種相對(duì)于老問題的新方法都要帶來額 外的開銷 圖形用戶界面的應(yīng)用程序,很難用過程來 描述和實(shí)現(xiàn),開發(fā)和維護(hù)也都很困難 面向?qū)ο蟮姆椒?11 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 程序設(shè)計(jì)方法的發(fā)展歷 程 面向?qū)ο蟮姆椒?l將數(shù)據(jù)及對(duì)數(shù)據(jù)的操作方法封裝在 一起,作為一個(gè)相互依存、不可分離的 整體對(duì)象 l對(duì)同類型對(duì)象抽象出其共性,形成 類 l類通過一個(gè)簡單的外部接口,與外 界發(fā)生關(guān)系 l對(duì)象與對(duì)象之間通過消息進(jìn)行通信 面向?qū)ο蟮姆椒?12 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉程序設(shè)計(jì)方法的發(fā)展歷 程 面向?qū)ο蟮姆椒?l優(yōu)點(diǎn): 程序模塊間的關(guān)系更為簡單,程序 模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好 的保障。
通過繼承與多態(tài)性,可以大大提高 程序的可重用性,使得軟件的開發(fā)和維護(hù) 都更為方便 面向?qū)ο蟮姆椒?13 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮幕靖拍?對(duì)象 l一般意義上的對(duì)象: 是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物 可以是有形的(比如一輛汽車), 也可以是無形的(比如一項(xiàng)計(jì)劃) 是構(gòu)成世界的一個(gè)獨(dú)立單位,具有 l靜態(tài)特征:可以用某種數(shù)據(jù)來 描述 l動(dòng)態(tài)特征:對(duì)象所表現(xiàn)的行為 或具有的功能 面向?qū)ο蟮姆椒?14 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮幕靖拍?對(duì)象 l面向?qū)ο蠓椒ㄖ械膶?duì)象: 是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí) 體,它是用來構(gòu)成系統(tǒng)的一個(gè)基本單位對(duì) 象由一組屬性和一組行為構(gòu)成 屬性:用來描述對(duì)象靜態(tài)特征的數(shù)據(jù) 項(xiàng) 行為:用來描述對(duì)象動(dòng)態(tài)特征的操作 序列 面向?qū)ο蟮姆椒?15 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮幕靖拍?類 l分類人類通常的思維方法 l分類所依據(jù)的原則抽象 忽略事物的非本質(zhì)特征,只注意那 些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出 事物的共性,把具有共同性質(zhì)的事物劃分 為一類,得出一個(gè)抽象的概念 例如,石頭、樹木、汽車、房屋等 都是人們?cè)陂L期的生產(chǎn)和生活實(shí)踐中抽象 出的概念。
面向?qū)ο蟮姆椒?16 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮幕靖拍?類 l面向?qū)ο蠓椒ㄖ械念?具有相同屬性和服務(wù)的一組對(duì)象的集 合 為屬于該類的全部對(duì)象提供了抽象的 描述,包括屬性和行為兩個(gè)主要部分 類與對(duì)象的關(guān)系: 猶如模具與鑄件之間的關(guān)系,一個(gè)屬于某類 的對(duì)象稱為該類的一個(gè)實(shí)例 面向?qū)ο蟮姆椒?17 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮幕靖拍?封裝 l把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú) 立的系統(tǒng)單元 l盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)對(duì)外 形成一個(gè)邊界(或者說一道屏障),只 保留有限的對(duì)外接口使之與外部發(fā)生聯(lián) 系 面向?qū)ο蟮姆椒?18 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮幕靖拍?繼承 l繼承對(duì)于軟件復(fù)用有著重要意義, 是面向?qū)ο蠹夹g(shù)能夠提高軟件開發(fā)效率 的重要原因之一 l定義:特殊類的對(duì)象擁有其一般類 的全部屬性與服務(wù),稱作特殊類對(duì)一般 類的繼承 l例如:將輪船作為一個(gè)一般類,客 輪便是一個(gè)特殊類 面向?qū)ο蟮姆椒?19 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮幕靖拍?多態(tài)性 l多態(tài)是指在一般類中定義的屬性或 行為,被特殊類繼承之后,可以具有不 同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。
這 使得同一個(gè)屬性或行為在一般類及其各 個(gè)特殊類中具有不同的語義 l例如: 數(shù)的加法-實(shí)數(shù)的加法 -復(fù)數(shù)的加法 面向?qū)ο蟮姆椒?20 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 面向?qū)ο蟮能浖こ?l面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓?法在軟件工程領(lǐng)域的全面應(yīng)用它包括: 面向?qū)ο蟮姆治觯∣OA) 面向?qū)ο蟮脑O(shè)計(jì)(OOD) 面向?qū)ο蟮木幊蹋∣OP) 面向?qū)ο蟮臏y試(OOT) 面向?qū)ο蟮能浖S護(hù)(OOSM) 面向?qū)ο蟮能浖_發(fā) 21 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 系統(tǒng)分析 l系統(tǒng)分析階段應(yīng)該扼要精確地抽象 出系統(tǒng)必須做什么,但是不關(guān)心如何去 實(shí)現(xiàn) l面向?qū)ο蟮南到y(tǒng)分析,直接用問題 域中客觀存在的事物建立模型中的對(duì)象 ,對(duì)單個(gè)事物及事物之間的關(guān)系,都保 留他們的原貌,不做轉(zhuǎn)換,也不打破原 有界限而重新組合,因此能夠很好地映 射客觀事物 面向?qū)ο蟮能浖_發(fā) 22 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 設(shè)計(jì) l針對(duì)系統(tǒng)的一個(gè)具體實(shí)現(xiàn)運(yùn)用面向 對(duì)象的方法其中包括兩方面的工作: 把OOA模型直接搬到OOD,作為OOD的 一部分 針對(duì)具體實(shí)現(xiàn)中的人機(jī)界面、數(shù)據(jù) 存儲(chǔ)、任務(wù)管理等因素補(bǔ)充一些與實(shí)現(xiàn)有 關(guān)的部分 面向?qū)ο蟮能浖_發(fā) 23 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 編程 OOP工作就是用一種面向?qū)ο蟮木?程語言把OOD模型中的每個(gè)成分書寫出 來,是面向?qū)ο蟮能浖_發(fā)最終落實(shí)的 重要階段。
面向?qū)ο蟮能浖_發(fā) 24 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 測試 l測試的任務(wù)是發(fā)現(xiàn)軟件中的錯(cuò)誤 l在面向?qū)ο蟮能浖y試中繼續(xù)運(yùn)用 面向?qū)ο蟮母拍钆c原則來組織測試,以 對(duì)象的類作為基本測試單位,可以更準(zhǔn) 確地發(fā)現(xiàn)程序錯(cuò)誤并提高測試效率 面向?qū)ο蟮能浖_發(fā) 25 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 維護(hù) 將軟件交付使用后,工作并沒有完 結(jié),還要根據(jù)軟件的運(yùn)行情況和用戶的 需求,不斷改進(jìn)系統(tǒng) 使用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件, 其程序與問題域是一致的,因此,在維 護(hù)階段運(yùn)用面向?qū)ο蟮姆椒梢源蟠筇?高軟件維護(hù)的效率 面向?qū)ο蟮能浖_發(fā) 26 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 信息的表示和存儲(chǔ) l信息的分類 l計(jì)算機(jī)的數(shù)字系統(tǒng) l程序設(shè)計(jì)中常用的數(shù)制 l不同進(jìn)位計(jì)數(shù)制間的轉(zhuǎn)換 l信息的存儲(chǔ)單位 l二進(jìn)制數(shù)的編碼表示 l小數(shù)的表示方法 l非數(shù)值信息的表示 27 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 信息的分類 指令 控制信息 控制字 信息 定點(diǎn)數(shù) 數(shù)值信息 數(shù)據(jù)信息 浮點(diǎn)數(shù) 字符數(shù)據(jù) 非數(shù)值信息 邏輯 數(shù)據(jù) 信息的表示與存儲(chǔ) 28 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 計(jì)算機(jī)的數(shù)字系統(tǒng) l計(jì)算機(jī)采用的是二進(jìn)制數(shù)字系統(tǒng)。
l基本符號(hào):0、1 l進(jìn)位原則:逢二進(jìn)一 l優(yōu)點(diǎn): 易于物理實(shí)現(xiàn) 二進(jìn)制數(shù)運(yùn)算簡單 機(jī)器可靠性高 通用性強(qiáng) l缺點(diǎn):對(duì)人來說可讀性差 信息的表示與存儲(chǔ) 29 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 程序設(shè)計(jì)中常用的數(shù)制 信息的表示與存儲(chǔ) 30 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉不同進(jìn)位記數(shù)制間的轉(zhuǎn) 換 R 進(jìn)制十進(jìn)制 各位數(shù)字與它的權(quán)相乘,其積相加 例如: (11111111.11)2=127+126+125+1 24 +123+122+121+120+12-1+12-2 =(255.75)10 (3506.2)8=383+582+081+680+2 8-1 =(1862.25)10 (0.2A)16=216-1+1016- 2=(0.1640625)10 信息的表示與存儲(chǔ) 31 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉不同進(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 0 2 1 0 0 1 高位 所以 681010001002 信息的表示與存儲(chǔ) 32 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉不同進(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 0.625 2 = 1 .25 0.25 2 = 0 .5 0.5 2 = 1 .0 所以 0.312510 = 0.01012 信息的表示與存儲(chǔ) 33 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 不同進(jìn)位記數(shù)制間的轉(zhuǎn) 換 二、八、十六進(jìn)制的相互轉(zhuǎn) 換 l每位八進(jìn)制數(shù)相當(dāng)于三位二進(jìn)制數(shù) l每位十六進(jìn)制數(shù)相當(dāng)于四位二進(jìn)制數(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 信息的表示與存儲(chǔ) 34 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 信息的存儲(chǔ)單位 l位(bit,b):度量數(shù)據(jù)的最小單位 ,表示一位二進(jìn)制信息。
l字節(jié)(byte,B):由八位二進(jìn)制數(shù) 字組成(1 byte = 8 bit) 千字節(jié) 1 KB = 1024 B 兆字節(jié) 1 MB = 1024 K 吉字節(jié) 1 GB = 1024 M 信息的表示與存儲(chǔ) 35 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 二進(jìn)制數(shù)的編碼表示: 原碼 l符號(hào)絕對(duì)值表示的編碼 例如: X=+0101011 X原= 0 0101011 X=-0101011 X原= 1 0101011 符號(hào)位 l缺點(diǎn): 零的表示不惟一: +0原 =000.0 -0原 =100.0 進(jìn)行四則運(yùn)算時(shí),符號(hào)位須單獨(dú)處 理,且運(yùn)算規(guī)則復(fù)雜 信息的表示與存儲(chǔ) 36 C+語言程序設(shè)計(jì)清華大學(xué) 鄭莉 二進(jìn)制數(shù)的編碼表示: 反碼 l正數(shù)的反碼與原碼表示相。



![[精編]吳教人[]13號(hào)](/Images/s.gif)








