C語言程序設(shè)計(jì)清華大學(xué)鄭莉課件.ppt_第1頁
C語言程序設(shè)計(jì)清華大學(xué)鄭莉課件.ppt_第2頁
C語言程序設(shè)計(jì)清華大學(xué)鄭莉課件.ppt_第3頁
C語言程序設(shè)計(jì)清華大學(xué)鄭莉課件.ppt_第4頁
C語言程序設(shè)計(jì)清華大學(xué)鄭莉課件.ppt_第5頁
已閱讀5頁,還剩698頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一章緒論 清華大學(xué)鄭莉 C 語言程序設(shè)計(jì) 本章主要內(nèi)容 計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展面向?qū)ο蟮姆椒嫦驅(qū)ο蟮能浖_發(fā)信息的表示與存儲程序的開發(fā)過程 計(jì)算機(jī)程序 計(jì)算機(jī)的工作是用程序來控制的程序是指令的集合 指令是計(jì)算機(jī)可以識別的命令 計(jì)算機(jī)語言的發(fā)展 機(jī)器語言與匯編語言 由計(jì)算機(jī)硬件系統(tǒng)可以識別的二進(jìn)制指令組成的語言稱為機(jī)器語言 計(jì)算機(jī)發(fā)展的初期 軟件工程師們只能用機(jī)器語言來編寫程序 這一階段 在人類的自然語言和計(jì)算機(jī)編程語言之間存在著巨大的鴻溝 匯編語言將機(jī)器指令映射為一些可以被人讀懂的助記符 如ADD SUB等 此時(shí)編程語言與人類自然語言間的鴻溝略有縮小 但仍與人類的思維相差甚遠(yuǎn) 因?yàn)樗某橄髮哟翁?程序員需要考慮大量的機(jī)器細(xì)節(jié) 計(jì)算機(jī)語言的發(fā)展 高級語言 高級語言屏蔽了機(jī)器的細(xì)節(jié) 提高了語言的抽象層次 程序中可以采用具有一定涵義的數(shù)據(jù)命名和容易理解的執(zhí)行語句 這使得在書寫程序時(shí)可以聯(lián)系到程序所描述的具體事物 計(jì)算機(jī)語言的發(fā)展 面向?qū)ο蟮恼Z言 出發(fā)點(diǎn) 更直接地描述客觀世界中存在的事物 對象 以及它們之間的關(guān)系 特點(diǎn) 是高級語言 將客觀事物看作具有屬性和行為的對象 通過抽象找出同一類對象的共同屬性和行為 形成類 通過類的繼承與多態(tài)實(shí)現(xiàn)代碼重用 計(jì)算機(jī)語言的發(fā)展 面向?qū)ο蟮恼Z言 優(yōu)點(diǎn) 使程序能夠比較直接地反問題域的本來面目 軟件開發(fā)人員能夠利用人類認(rèn)識事物所采用的一般思維方法來進(jìn)行軟件開發(fā) 計(jì)算機(jī)語言的發(fā)展 程序設(shè)計(jì)方法的發(fā)展歷程 面向過程的程序設(shè)計(jì)方法 程序的目的 用于數(shù)學(xué)計(jì)算主要工作 設(shè)計(jì)求解問題的過程缺點(diǎn) 對于龐大 復(fù)雜的程序難以開發(fā)和維護(hù) 面向?qū)ο蟮姆椒?程序設(shè)計(jì)方法的發(fā)展歷程 面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法 設(shè)計(jì)思路自頂向下 逐步求精 采用模塊分解與功能抽象 自頂向下 分而治之 程序結(jié)構(gòu) 按功能劃分為若干個(gè)基本模塊 形成一個(gè)樹狀結(jié)構(gòu) 各模塊間的關(guān)系盡可能簡單 功能上相對獨(dú)立 每一模塊內(nèi)部均是由順序 選擇和循環(huán)三種基本結(jié)構(gòu)組成 其模塊化實(shí)現(xiàn)的具體方法是使用子程序 面向?qū)ο蟮姆椒?程序設(shè)計(jì)方法的發(fā)展歷程 面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法 優(yōu)點(diǎn) 有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù) 便于開發(fā)和維護(hù) 面向?qū)ο蟮姆椒?程序設(shè)計(jì)方法的發(fā)展歷程 面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法 缺點(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)的修改 每一種相對于老問題的新方法都要帶來額外的開銷 圖形用戶界面的應(yīng)用程序 很難用過程來描述和實(shí)現(xiàn) 開發(fā)和維護(hù)也都很困難 面向?qū)ο蟮姆椒?程序設(shè)計(jì)方法的發(fā)展歷程 面向?qū)ο蟮姆椒?將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起 作為一個(gè)相互依存 不可分離的整體 對象 對同類型對象抽象出其共性 形成類 類通過一個(gè)簡單的外部接口 與外界發(fā)生關(guān)系 對象與對象之間通過消息進(jìn)行通訊 面向?qū)ο蟮姆椒?程序設(shè)計(jì)方法的發(fā)展歷程 面向?qū)ο蟮姆椒?優(yōu)點(diǎn) 程序模塊間的關(guān)系更為簡單 程序模塊的獨(dú)立性 數(shù)據(jù)的安全性就有了良好的保障 通過繼承與多態(tài)性 可以大大提高程序的可重用性 使得軟件的開發(fā)和維護(hù)都更為方便 面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?對象 一般意義上的對象 是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物 可以是有形的 比如一輛汽車 也可以是無形的 比如一項(xiàng)計(jì)劃 是構(gòu)成世界的一個(gè)獨(dú)立單位 具有 靜態(tài)特征 可以用某種數(shù)據(jù)來描述動態(tài)特征 對象所表現(xiàn)的行為或具有的功能 面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?對象 面向?qū)ο蠓椒ㄖ械膶ο?是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體 它是用來構(gòu)成系統(tǒng)的一個(gè)基本單位 對象由一組屬性和一組行為構(gòu)成 屬性 用來描述對象靜態(tài)特征的數(shù)據(jù)項(xiàng) 行為 用來描述對象動態(tài)特征的操作序列 面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?類 分類 人類通常的思維方法分類所依據(jù)的原則 抽象忽略事物的非本質(zhì)特征 只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征 從而找出事物的共性 把具有共同性質(zhì)的事物劃分為一類 得出一個(gè)抽象的概念 例如 石頭 樹木 汽車 房屋等都是人們在長期的生產(chǎn)和生活實(shí)踐中抽象出的概念 面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?類 面向?qū)ο蠓椒ㄖ械?類 具有相同屬性和服務(wù)的一組對象的集合為屬于該類的全部對象提供了抽象的描述 包括屬性和行為兩個(gè)主要部分 類與對象的關(guān)系 猶如模具與鑄件之間的關(guān)系 一個(gè)屬于某類的對象稱為該類的一個(gè)實(shí)例 面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?封裝 把對象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單元 盡可能隱蔽對象的內(nèi)部細(xì)節(jié) 對外形成一個(gè)邊界 或者說一道屏障 只保留有限的對外接口使之與外部發(fā)生聯(lián)系 面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?繼承 繼承對于軟件復(fù)用有著重要意義 是面向?qū)ο蠹夹g(shù)能夠提高軟件開發(fā)效率的重要原因之一 定義 特殊類的對象擁有其一般類的全部屬性與服務(wù) 稱作特殊類對一般類的繼承 例如 將輪船作為一個(gè)一般類 客輪便是一個(gè)特殊類 面向?qū)ο蟮姆椒?面向?qū)ο蟮幕靖拍?多態(tài)性 多態(tài)是指在一般類中定義的屬性或行為 被特殊類繼承之后 可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為 這使得同一個(gè)屬性或行為在一般類及其各個(gè)特殊類中具有不同的語義 例如 數(shù)的加法 實(shí)數(shù)的加法 復(fù)數(shù)的加法 面向?qū)ο蟮姆椒?面向?qū)ο蟮能浖こ?面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用 它包括 面向?qū)ο蟮姆治?OOA 面向?qū)ο蟮脑O(shè)計(jì) OOD 面向?qū)ο蟮木幊?OOP 面向?qū)ο蟮臏y試 OOT 面向?qū)ο蟮能浖S護(hù) OOSM 面向?qū)ο蟮能浖_發(fā) 系統(tǒng)分析 系統(tǒng)分析階段應(yīng)該扼要精確地抽象出系統(tǒng)必須做什么 但是不關(guān)心如何去實(shí)現(xiàn) 面向?qū)ο蟮南到y(tǒng)分析 直接用問題域中客觀存在的事物建立模型中的對象 對單個(gè)事物及事物之間的關(guān)系 都保留他們的原貌 不做轉(zhuǎn)換 也不打破原有界限而重新組合 因此能夠很好地映射客觀事物 面向?qū)ο蟮能浖_發(fā) 設(shè)計(jì) 針對系統(tǒng)的一個(gè)具體實(shí)現(xiàn)運(yùn)用面向?qū)ο蟮姆椒?其中包括兩方面的工作 把OOA模型直接搬到OOD 作為OOD的一部分針對具體實(shí)現(xiàn)中的人機(jī)界面 數(shù)據(jù)存儲 任務(wù)管理等因素補(bǔ)充一些與實(shí)現(xiàn)有關(guān)的部分 面向?qū)ο蟮能浖_發(fā) 編程 OOP工作就是用一種面向?qū)ο蟮木幊陶Z言把OOD模型中的每個(gè)成分書寫出來 是面向?qū)ο蟮能浖_發(fā)最終落實(shí)的重要階段 面向?qū)ο蟮能浖_發(fā) 測試 測試的任務(wù)是發(fā)現(xiàn)軟件中的錯誤 在面向?qū)ο蟮能浖y試中繼續(xù)運(yùn)用面向?qū)ο蟮母拍钆c原則來組織測試 以對象的類作為基本測試單位 可以更準(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ì)算機(jī)的數(shù)字系統(tǒng)程序設(shè)計(jì)中常用的數(shù)制不同進(jìn)位計(jì)數(shù)制間的轉(zhuǎn)換信息的存儲單位二進(jìn)制數(shù)的編碼表示小數(shù)的表示方法非數(shù)值信息的表示 信息的分類 指令 控制信息 控制字信息 定點(diǎn)數(shù) 數(shù)值信息 數(shù)據(jù)信息 浮點(diǎn)數(shù) 字符數(shù)據(jù) 非數(shù)值信息 邏輯數(shù)據(jù) 信息的表示與存儲 計(jì)算機(jī)的數(shù)字系統(tǒng) 計(jì)算機(jī)采用的是二進(jìn)制數(shù)字系統(tǒng) 基本符號 0 1進(jìn)位原則 逢二進(jìn)一優(yōu)點(diǎn) 易于物理實(shí)現(xiàn)二進(jìn)制數(shù)運(yùn)算簡單機(jī)器可靠性高通用性強(qiáng)缺點(diǎn) 對人來說可讀性差 信息的表示與存儲 程序設(shè)計(jì)中常用的數(shù)制 信息的表示與存儲 不同進(jìn)位計(jì)數(shù)制間的轉(zhuǎn)換 R進(jìn)制 十進(jìn)制 各位數(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 信息的表示與存儲 不同進(jìn)位計(jì)數(shù)制間的轉(zhuǎn)換 十進(jìn)制 R進(jìn)制 十進(jìn)制整數(shù)轉(zhuǎn)換成R進(jìn)制的整數(shù) 除R取余 法 例如 268余數(shù)234 0低位217 028 124 022 021 00 1高位所以6810 10001002 信息的表示與存儲 不同進(jìn)位計(jì)數(shù)制間的轉(zhuǎn)換 十進(jìn)制 R進(jìn)制 十進(jìn)制小數(shù)轉(zhuǎn)換成R進(jìn)制小數(shù) 乘R取整 法 例如 高位0 3125 2 0 6250 625 2 1 250 25 2 0 50 5 2 1 0所以0 312510 0 01012 信息的表示與存儲 不同進(jìn)位計(jì)數(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 001011010 100 2 132 4 8 1011010 10 2 01011010 1000 2 5A 8 16 F7 16 11110111 2 11110111 2 信息的表示與存儲 信息的存儲單位 位 bit 度量數(shù)據(jù)的最小單位 表示一位二進(jìn)制信息 字節(jié) byte 由八位二進(jìn)制數(shù)字組成 1byte 8bit K字節(jié)1K 1024byteM字節(jié)1M 1024KG字節(jié)1G 1024M 信息的表示與存儲 二進(jìn)制數(shù)的編碼表示 原碼 符號 絕對值表示 的編碼例如 X 0101011 X 原 00101011X 0101011 X 原 10101011符號位缺點(diǎn) 零的表示不唯一 0 原 000 0 0 原 100 0進(jìn)行四則運(yùn)算時(shí) 符號位需單獨(dú)處理 且運(yùn)算規(guī)則復(fù)雜 信息的表示與存儲 二進(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反碼只是求補(bǔ)碼的中間碼 信息的表示與存儲 二進(jìn)制數(shù)的編碼表示 補(bǔ)碼 模數(shù) n位整數(shù) 包括一位符號位 則它的模數(shù)為2n n位小數(shù) 小數(shù)點(diǎn)前一位為符號位 則它的模數(shù)為2 補(bǔ)數(shù) 一個(gè)數(shù)減去另一個(gè)數(shù) 或者說一個(gè)數(shù)加上一個(gè)負(fù)數(shù) 等于第一個(gè)數(shù)加上第二個(gè)數(shù)的補(bǔ)數(shù) 例 8 2 8 10 mod12 一個(gè)二進(jìn)制負(fù)數(shù)可用其模數(shù)與真值做加法 模減去該數(shù)的絕對值 求得其補(bǔ)碼 信息的表示與存儲 二進(jìn)制數(shù)的編碼表示 補(bǔ)碼 計(jì)算機(jī)中的補(bǔ)碼表示法負(fù)數(shù)的補(bǔ)碼由該數(shù)反碼的末位加1求得對補(bǔ)碼再求補(bǔ)即得到原碼補(bǔ)碼運(yùn)算規(guī)則符號位可作為數(shù)值參加運(yùn)算減法運(yùn)算可轉(zhuǎn)換為加法運(yùn)算 加上一個(gè)負(fù)數(shù)等于加上該數(shù)的補(bǔ)碼補(bǔ)碼運(yùn)算的結(jié)果仍為補(bǔ)碼運(yùn)算結(jié)果溢出 負(fù)數(shù)之和得正數(shù) 或正數(shù)之和得負(fù)數(shù) 信息的表示與存儲 小數(shù)的表示方法 計(jì)算機(jī)中通常采用浮點(diǎn)方式表示小數(shù)一個(gè)數(shù)N用浮點(diǎn)形式表示可以寫成 N M 2EE表示2的冪 稱為數(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ù)表示一個(gè)字符 最多可以表示27 128個(gè)字符EBCDIC碼 用8位二進(jìn)制數(shù)表示一個(gè)字符 最多可以表示28 256個(gè)字符漢字 應(yīng)用較為廣泛的是 國家標(biāo)準(zhǔn)信息交換用漢字編碼 GB2312 80標(biāo)準(zhǔn) 簡稱國標(biāo)碼 是二字節(jié)碼 用二個(gè)七位二進(jìn)制數(shù)編碼表示一個(gè)漢字 信息的表示與存儲 基本術(shù)語 源程序 用源語言寫的 有待翻譯的程序目標(biāo)程序 也稱為 結(jié)果程序 是源程序通過翻譯程序加工以后所生成的程序 翻譯程序 是指一個(gè)把源程序翻譯成等價(jià)的目標(biāo)程序的程序 程序的開發(fā)過程 基本術(shù)語 三種不同類型的翻譯程序 匯編程序 其任務(wù)是把用匯編語言寫成的源程序 翻譯成機(jī)器語言形式的目標(biāo)程序 編譯程序 若源程序是用高級程序設(shè)計(jì)語言所寫 經(jīng)翻譯程序加工生成目標(biāo)程序 那么 該翻譯程序就稱為 編譯程序 程序的開發(fā)過程 基本術(shù)語 三種不同類型的翻譯程序 解釋程序 這也是一種翻譯程序 同樣是將高級語言源程序翻譯成機(jī)器指令 它與編譯程序不同點(diǎn)就在于 它是邊翻譯邊執(zhí)行的 即輸入一句 翻譯一句 執(zhí)行一句 直至將整個(gè)源程序翻譯并執(zhí)行完畢 程序的開發(fā)過程 程序的開發(fā)過程 編輯將源程序輸入到計(jì)算機(jī)中 生成后綴為cpp的磁盤文件 編譯將程序的源代碼轉(zhuǎn)換為機(jī)器語言代碼 連接將多個(gè)源程序文件以及庫中的某些文件連在一起 生成一個(gè)后綴為exe的可執(zhí)行文件 運(yùn)行調(diào)試 程序的開發(fā)過程 第二章C 簡單程序設(shè)計(jì) 清華大學(xué)鄭莉 C 語言程序設(shè)計(jì) 本章主要內(nèi)容 C 語言概述基本數(shù)據(jù)類型和表達(dá)式數(shù)據(jù)的輸入與輸出算法的基本控制結(jié)構(gòu)自定義數(shù)據(jù)類型 C 語言的產(chǎn)生 C 是從C語言發(fā)展演變而來的 首先是一個(gè)更好的C引入了類的機(jī)制 最初的C 被稱為 帶類的C 1983年正式取名為C 從1989年開始C 語言的標(biāo)準(zhǔn)化工作于1994年制定了ANSIC 標(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è)計(jì) 不是一個(gè)純正的面向?qū)ο蟮恼Z言支持面向?qū)ο蟮姆椒?C 語言概述 C 程序?qū)嵗?例2 1 2 1 cpp includeusingnamespacestd voidmain void cout Hello n cout Welcometoc n 運(yùn)行結(jié)果 Hello Welcometoc C 語言概述 C 字符集 大小寫的英文字母 A Z a z數(shù)字字符 0 9特殊字符 空格 C 語言概述 詞法記號 關(guān)鍵字C 預(yù)定義的單詞標(biāo)識符程序員聲明的單詞 它命名程序正文中的一些實(shí)體文字在程序中直接使用符號表示的數(shù)據(jù)操作符用于實(shí)現(xiàn)各種運(yùn)算的符號分隔符 用于分隔各個(gè)詞法記號或程序正文空白符空格 制表符 TAB鍵產(chǎn)生的字符 換行符 Enter鍵所產(chǎn)生的字符 和注釋的總稱 C 語言概述 標(biāo)識符的構(gòu)成規(guī)則 以大寫字母 小寫字母或下劃線 開始 可以由以大寫字母 小寫字母 下劃線 或數(shù)字0 9組成 大寫字母和小寫字母代表不同的標(biāo)識符 C 語言概述 數(shù)據(jù)類型 常量與變量 includeusingnamespacestd 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ù)類型和表達(dá)式 includeusingnamespacestd 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 unsignedint4字節(jié)longunsignedlong4字節(jié) 整型變量 基本數(shù)據(jù)類型和表達(dá)式 數(shù)據(jù)類型 整型數(shù)據(jù)及取值范圍 類型說明符位數(shù)數(shù)值范圍短整short16 32768 32767基本int32 231 231 1 長整long32 231 231 1 無符號unsignedshort160 65535unsigned int 320 232 1 unsignedlong320 232 1 基本數(shù)據(jù)類型和表達(dá)式 includeusingnamespacestd 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í)型數(shù)據(jù) 實(shí)型常量 float4字節(jié)3 4 10 387位有效數(shù)字double8字節(jié)1 7 10 30815位有效數(shù)字longdouble8字節(jié)1 7 10 30815位有效數(shù)字 實(shí)型變量 缺省為double型后綴F 或f 為float型后綴L 或l 為longdouble型 基本數(shù)據(jù)類型和表達(dá)式 數(shù)據(jù)類型 字符型數(shù)據(jù) 一 字符常量單引號括起來的一個(gè)字符 如 a D 字符變量用來存放字符常量例 charc1 c2 c1 a c2 A 字符數(shù)據(jù)在內(nèi)存中的存儲形式以ASCII碼存儲 占1字節(jié) 用7個(gè)二進(jìn)制位 Page58 基本數(shù)據(jù)類型和表達(dá)式 字符數(shù)據(jù)的使用方法字符數(shù)據(jù)和整型數(shù)據(jù)之間可以運(yùn)算 字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值 字符串常量例 CHINA a a 所以 charc c a Page59 數(shù)據(jù)類型 字符型數(shù)據(jù) 二 基本數(shù)據(jù)類型和表達(dá)式 數(shù)據(jù)類型 布爾型數(shù)據(jù) 布爾型變量的說明 例 boolflag 布爾型數(shù)據(jù)的取值 只有false和true兩個(gè)值 基本數(shù)據(jù)類型和表達(dá)式 數(shù)據(jù)類型 變量初始化 例 inta 3 doublef 3 56 charc a intc 5 Page61 基本數(shù)據(jù)類型和表達(dá)式 數(shù)據(jù)類型 混合運(yùn)算時(shí)的類型轉(zhuǎn)換 不同類型數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí) C 編譯器會自動進(jìn)行類型轉(zhuǎn)換 為了避免不同的數(shù)據(jù)類型在運(yùn)算中出現(xiàn)類型問題 應(yīng)盡量使用同種類型數(shù)據(jù) 可以采用強(qiáng)制類型轉(zhuǎn)換 例如 floatc inta b c float a float b 或c float a float b 基本數(shù)據(jù)類型和表達(dá)式 變量的存儲類型 auto屬于一時(shí)性存儲 其存儲空間可以被若干變量多次覆蓋使用 register存放在通用寄存器中 extern在所有函數(shù)和程序段中都可引用 static在內(nèi)存中是以固定地址存放的 在整個(gè)程序運(yùn)行期間都有效 基本數(shù)據(jù)類型和表達(dá)式 算術(shù)運(yùn)算符與算術(shù)表達(dá)式 基本算術(shù)運(yùn)算符 若整數(shù)相除 結(jié)果取整 取余 操作數(shù)為整數(shù) 優(yōu)先級與結(jié)合性先乘除 后加減 同級自左至右 自增 自減 例 i j Page64 基本數(shù)據(jù)類型和表達(dá)式 賦值運(yùn)算符和賦值表達(dá)式簡單的賦值運(yùn)算符 舉例n n 5表達(dá)式的類型等號左邊對象的類型表達(dá)式的值等號左邊對象被賦值后的值 Page65 基本數(shù)據(jù)類型和表達(dá)式 賦值運(yùn)算符和賦值表達(dá)式復(fù)合的賦值運(yùn)算符 有10種復(fù)合運(yùn)算符 例a 3等價(jià)于a a 3x y 8等價(jià)于x 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 a a a相當(dāng)于a a a a a a Page67 基本數(shù)據(jù)類型和表達(dá)式 逗號運(yùn)算和逗號表達(dá)式 格式表達(dá)式1 表達(dá)式2求解順序及結(jié)果先求解1 再求解2 最終結(jié)果為表達(dá)式2的值例a 3 5 a 4最終結(jié)果為60 Page68 基本數(shù)據(jù)類型和表達(dá)式 關(guān)系運(yùn)算與關(guān)系表達(dá)式 關(guān)系運(yùn)算是比較簡單的一種邏輯運(yùn)算 優(yōu)先次序?yàn)?優(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)先次序 高 低邏輯表達(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 表達(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á)式 的結(jié)果類型所占的字節(jié)數(shù) 例 sizeof short sizeof x 基本數(shù)據(jù)類型和表達(dá)式 位運(yùn)算 按位與 運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯與操作舉例 計(jì)算3 基本數(shù)據(jù)類型和表達(dá)式 位運(yùn)算 按位或 運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯或操作舉例 計(jì)算3 53 000000115 000001013 5 00000111用途 將某些位置1 其它位不變 例如 將int型變量a的低字節(jié)置1 a a 0 xff 基本數(shù)據(jù)類型和表達(dá)式 位運(yùn)算 按位異或 運(yùn)算規(guī)則兩個(gè)操作數(shù)進(jìn)行異或 若對應(yīng)位相同 則結(jié)果該位為0 若對應(yīng)位不同 則結(jié)果該位為1 舉例 計(jì)算071 052071 00111001052 00101010071 052 00010011 基本數(shù)據(jù)類型和表達(dá)式 位運(yùn)算 按位異或 用途 使特定位翻轉(zhuǎn) 與0異或保持原值 與1異或取反 例如 要使01111010低四位翻轉(zhuǎn) 01111010 0000111101110101 基本數(shù)據(jù)類型和表達(dá)式 位運(yùn)算 取反 單目運(yùn)算符 對一個(gè)二進(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)算 賦值運(yùn)算逗號運(yùn)算 低 高 基本數(shù)據(jù)類型和表達(dá)式 混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換 隱含轉(zhuǎn)換 一些二元運(yùn)算符 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 邏輯運(yùn)算符 位運(yùn)算符和賦值運(yùn)算符 要求兩個(gè)操作數(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ù) charshortintunsignedlongunsignedlongfloatdouble低高 基本數(shù)據(jù)類型和表達(dá)式 混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換 隱含轉(zhuǎn)換 當(dāng)參與運(yùn)算的操作數(shù)必須是bool型時(shí) 如果操作數(shù)是其它類型 編譯系統(tǒng)會自動將非0數(shù)據(jù)轉(zhuǎn)換為true 0轉(zhuǎn)換為false 位運(yùn)算的操作數(shù)必須是整數(shù) 當(dāng)二元位運(yùn)算的操作數(shù)是不同類型的整數(shù)時(shí) 也會自動進(jìn)行類型轉(zhuǎn)換 賦值運(yùn)算要求左值與右值的類型相同 若類型不同 編譯系統(tǒng)會自動將右值轉(zhuǎn)換為左值的類型 基本數(shù)據(jù)類型和表達(dá)式 混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換 強(qiáng)制類型轉(zhuǎn)換 語法形式 類型說明符 表達(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ù)合語句 將多個(gè)語句用一對大括號包圍 便構(gòu)成一個(gè)復(fù)合語句例如 sum sum i i 語句 簡單的輸入 輸出 向標(biāo)準(zhǔn)輸出設(shè)備 顯示器 輸出例 intx cout x 順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu) 算法的基本控制結(jié)構(gòu) 如何解決分支問題 例2 2輸入一個(gè)年份 判斷是否閏年 算法的基本控制結(jié)構(gòu) includeusingnamespacestd voidmain void intyear boolIsLeapYear cout year IsLeapYear year 4 0 90 運(yùn)行結(jié)果 Entertheyear 20002000isaleapyear 91 if 表達(dá)式 語句例 if x y couty cout x elsecout y if 表達(dá)式1 語句1elseif 表達(dá)式2 語句2elseif 表達(dá)式3 語句3 else語句n if語句 三種形式 算法的基本控制結(jié)構(gòu) 如何解決多分問題 例2 3輸入兩個(gè)整數(shù) 比較兩個(gè)數(shù)的大小 算法的基本控制結(jié)構(gòu) includeusingnamespacestd voidmain intx y cout x y if x y if x y couty endl elsecout x y endl elsecout x y endl 94 運(yùn)行結(jié)果1 Enterxandy 58xy 95 一般形式if if 語句1else語句2elseif 語句3else語句4注意語句1 2 3 4可以是復(fù)合語句 每層的if與else配對 或用 來確定層次關(guān)系 算法的基本控制結(jié)構(gòu) 特殊的多分支結(jié)構(gòu) 例2 4輸入一個(gè)0 6的整數(shù) 轉(zhuǎn)換成星期輸出 算法的基本控制結(jié)構(gòu) includeusingnamespacestd 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 98 一般形式switch 表達(dá)式 case常量表達(dá)式1 語句1case常量表達(dá)式2 語句2 case常量表達(dá)式n 語句ndefault 語句n 1 switch語句 執(zhí)行順序以case中的常量表達(dá)式值為入口標(biāo)號 由此開始順序執(zhí)行 因此 每個(gè)case分支最后應(yīng)該加break語句 算法的基本控制結(jié)構(gòu) 使用switch語句應(yīng)注意的問題 case分支可包含多個(gè)語句 且不用 表達(dá)式 判斷值都是int型或char型 若干分支執(zhí)行內(nèi)容相同可共用一組語句 算法的基本控制結(jié)構(gòu) 如何有效地完成重復(fù)工作 例2 5求自然數(shù)1 10之和分析 本題需要用累加算法 累加過程是一個(gè)循環(huán)過程 可以用while語句實(shí)現(xiàn) 算法的基本控制結(jié)構(gòu) includeusingnamespacestd voidmain inti 1 sum 0 while i 10 sum i 相當(dāng)于sum sum i i cout sum sum endl 運(yùn)行結(jié)果 sum 55 102 while語句 形式while 表達(dá)式 語句 執(zhí)行順序先判斷表達(dá)式的值 為true時(shí) 再執(zhí)行語句 算法的基本控制結(jié)構(gòu) 先執(zhí)行循環(huán)體 后判斷條件的情況 例2 6輸入一個(gè)整數(shù) 將各位數(shù)字反轉(zhuǎn)后輸出 算法的基本控制結(jié)構(gòu) includeusingnamespacestd voidmain void intn right digit newnum 0 cout n cout Thenumberinreverseorderis do right digit n 10 cout right digit n 10 相當(dāng)于n n 10 while n 0 cout endl 105 運(yùn)行結(jié)果 Enterthenumber 365Thenumberinreverseorderis563 106 do while語句 一般形式do語句while 表達(dá)式 執(zhí)行順序先執(zhí)行循環(huán)體語句 后判斷條件 表達(dá)式為true時(shí) 繼續(xù)執(zhí)行循環(huán)體與while語句的比較 While語句執(zhí)行順序先判斷表達(dá)式的值 為true時(shí) 再執(zhí)行語句 算法的基本控制結(jié)構(gòu) 對比下列程序 程序1 includeusingnamespacestd voidmain inti sum 0 cin i while i 10 sum i i cout sum sum endl 算法的基本控制結(jié)構(gòu) 程序2 includeusingnamespacestd voidmain inti sum 0 cin i do sum i i while i 10 cout sum sum endl 108 for語句 語法形式for 表達(dá)式1 表達(dá)式2 表達(dá)式3 語句 算法的基本控制結(jié)構(gòu) 例2 8 輸入一個(gè)整數(shù) 求出它的所有因子 算法的基本控制結(jié)構(gòu) includeusingnamespacestd voidmain void intn k cout n cout Number n Factors for k 1 k n k if n k 0 cout k cout endl 111 111 運(yùn)行結(jié)果1 Enterapositiveinteger 36Number36Factors123469121836運(yùn)行結(jié)果2 Enterapositiveinteger 7Number7Factors17 112 例2 9編寫程序輸出以下圖案 算法的基本控制結(jié)構(gòu) includeusingnamespacestd 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 114 for 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 115 循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)相互嵌套 includeusingnamespacestd voidmain intn for n 100 n 200 n if n 3 0 cout n 算法的基本控制結(jié)構(gòu) 例2 10 讀入一系列整數(shù) 統(tǒng)計(jì)出正整數(shù)個(gè)數(shù)i和負(fù)整數(shù)個(gè)數(shù)j 讀入0則結(jié)束 分析 需要讀入一系列整數(shù) 但是整數(shù)個(gè)數(shù)不定 要在每次讀入之后進(jìn)行判斷 因此使用while循環(huán)最為合適 循環(huán)控制條件應(yīng)該是n 0 由于要判斷數(shù)的正負(fù)并分別進(jìn)行統(tǒng)計(jì) 所以需要在循環(huán)內(nèi)部嵌入選擇結(jié)構(gòu) 算法的基本控制結(jié)構(gòu) includeusingnamespacestd voidmain inti 0 j 0 n cout n while n 0 if n 0 i if n n cout 正整數(shù)個(gè)數(shù) i 負(fù)整數(shù)個(gè)數(shù) j endl 118 break和continue語句 break語句使程序從循環(huán)體和switch語句內(nèi)跳出 繼續(xù)執(zhí)行邏輯上的下一條語句 不宜用在別處 continue語句結(jié)束本次循環(huán) 接著判斷是否執(zhí)行下一次循環(huán) 算法的基本控制結(jié)構(gòu) typedef語句 為一個(gè)已有的數(shù)據(jù)類型另外命名語法形式typedef已有類型名新類型名表 例如typedefdoublearea volume typedefintnatural naturali1 i2 areaa volumev 自定義數(shù)據(jù)類型 枚舉類型 enum 只要將需要的變量值一一列舉出來 便構(gòu)成了一個(gè)枚舉類型 枚舉類型的聲明形式如下 enum枚舉類型名 變量值列表 例如 enumweekday sun mon tue wed thu fri sat 自定義數(shù)據(jù)類型 枚舉類型 enum 枚舉類型應(yīng)用說明 對枚舉元素按常量處理 不能對它們賦值 例如 不能寫 sun 0 枚舉元素具有缺省值 它們依次為 0 1 2 也可以在聲明時(shí)另行指定枚舉元素的值 如 enumweekday sun 7 mon 1 tue wed thu fri sat 枚舉值可以進(jìn)行關(guān)系運(yùn)算 整數(shù)值不能直接賦給枚舉變量 如需要將整數(shù)賦值給枚舉變量 應(yīng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換 自定義數(shù)據(jù)類型 例2 11 設(shè)某次體育比賽的結(jié)果有四種可能 勝 win 負(fù) lose 平局 tie 比賽取消 cancel 編寫程序順序輸出這四種情況 分析 由于比賽結(jié)果只有四種可能 所以可以聲明一個(gè)枚舉類型 聲明一個(gè)枚舉類型的變量來存放比賽結(jié)果 自定義數(shù)據(jù)類型 includeusingnamespacestd 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 124 運(yùn)行結(jié)果Thegamewasplayedandwewon Thegamewasplayedandwelost ThegamewasplayedThegamewascancelled 125 結(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ù)類型 結(jié)構(gòu)體 結(jié)構(gòu)的聲明 舉例 structstudent 學(xué)生信息結(jié)構(gòu)體 intnum 學(xué)號charname 20 姓名chargender 性別intage 年齡floatscore 成績charaddr 30 住址 自定義數(shù)據(jù)類型 結(jié)構(gòu)體 結(jié)構(gòu)變量說明 變量說明形式結(jié)構(gòu)名結(jié)構(gòu)變量名 注意 結(jié)構(gòu)變量的存儲類型概念 它的壽命 可見性及使用范圍與普通變量完全一致 結(jié)構(gòu)變量說明在結(jié)構(gòu)類型聲明之后 二者也可同時(shí)進(jìn)行 結(jié)構(gòu)變量占內(nèi)存大小可用sizeof運(yùn)算求出 sizeof 運(yùn)算量 自定義數(shù)據(jù)類型 結(jié)構(gòu)體 結(jié)構(gòu)變量的初始化和使用 初始化說明結(jié)構(gòu)變量的同時(shí)可以直接設(shè)置初值 使用結(jié)構(gòu)體成員的引用形式 結(jié)構(gòu)變量名 成員名 自定義數(shù)據(jù)類型 例2 12 結(jié)構(gòu)體變量的初始化和使用 include includeusingnamespacestd structstudent 學(xué)生信息結(jié)構(gòu)體 intnum 學(xué)號charname 20 姓名chargender 性別intage 年齡 stu 97001 LinLin F 19 voidmain cout setw 7 stu num setw 20 stu name setw 3 stu sex setw 3 stu age 自定義數(shù)據(jù)類型 運(yùn)行結(jié)果 97001LinLinF19 聯(lián)合體 聲明形式 union聯(lián)合名 數(shù)據(jù)類型成員名1 數(shù)據(jù)類型成員名2 數(shù)據(jù)類型成員名n 聯(lián)合體類型變量說明的語法形式聯(lián)合名聯(lián)合變量名 引用形式 聯(lián)合名 成員名 自定義數(shù)據(jù)類型 例 unionuarea charc data shorts data longl data 聯(lián)合體 自定義數(shù)據(jù)類型 無名聯(lián)合 無名聯(lián)合沒有標(biāo)記名 只是聲明一個(gè)成員項(xiàng)的集合 這些成員項(xiàng)具有相同的內(nèi)存地址 可以由成員項(xiàng)的名字直接訪問 例 union inti floatf 在程序中可以這樣使用 i 10 f 2 2 自定義數(shù)據(jù)類型 第三章函數(shù) 清華大學(xué)鄭莉 C 語言程序設(shè)計(jì) 本章主要內(nèi)容 函數(shù)的聲明和調(diào)用函數(shù)間的參數(shù)傳遞內(nèi)聯(lián)函數(shù)帶默認(rèn)形參值的函數(shù)函數(shù)重載C 系統(tǒng)函數(shù) 函數(shù)的聲明 函數(shù)是面向?qū)ο蟪绦蛟O(shè)計(jì)中 對功能的抽象函數(shù)聲明的語法形式類型標(biāo)識符函數(shù)名 形式參數(shù)表 語句序列 函數(shù)的聲明與使用 若無參數(shù) 寫void 是被初始化的內(nèi)部變量 壽命和可見性僅限于函數(shù)內(nèi)部 若無返回值 寫void 函數(shù)的聲明 形式參數(shù)表name1 name2 namen函數(shù)的返回值由return語句給出 例如 return0無返回值的函數(shù) void類型 不必寫return語句 函數(shù)的聲明與使用 函數(shù)的調(diào)用 調(diào)用前先聲明函數(shù)原型 在調(diào)用函數(shù)中 或程序文件中所有函數(shù)之外 按如下形式說明 類型標(biāo)識符被調(diào)用函數(shù)名 含類型說明的形參表 調(diào)用形式函數(shù)名 實(shí)參列表 嵌套調(diào)用函數(shù)可以嵌套調(diào)用 但不允許嵌套定義 遞歸調(diào)用函數(shù)直接或間接調(diào)用自身 函數(shù)的聲明與使用 例3 1編寫一個(gè)求x的n次方的函數(shù) includeusingnamespacestd doublepower doublex intn voidmain void cout 5tothepower2is power 5 2 endl doublepower doublex intn doubleval 1 0 while n val val x return val 函數(shù)的聲明與使用 運(yùn)行結(jié)果 5tothepower2is25 例3 1編寫一個(gè)求x的n次方的函數(shù) 函數(shù)的聲明與使用 例3 2數(shù)制轉(zhuǎn)換 題目 輸入一個(gè)8位二進(jìn)制數(shù) 將其轉(zhuǎn)換為十進(jìn)制數(shù)輸出 例如 11012 1 23 1 22 0 21 1 20 1310所以 如果輸入1101 則應(yīng)輸出13 函數(shù)的聲明與使用 includeusingnamespacestd doublepower doublex intn voidmain void inti intvalue 0 charch cout 0 i cin ch if ch 1 value int power 2 i cout Decimalvalueis value endl doublepower doublex intn doubleval 1 0 while n val x return val 運(yùn)行結(jié)果 Enteran8bitbinarynumber01101001Decimalvalueis105 142 例3 3編寫程序求 的值 其中arctan用如下形式的級數(shù)計(jì)算 直到級數(shù)某項(xiàng)絕對值不大于10 15為止 和x均為double型 函數(shù)的聲明與使用 includeusingnamespacestd voidmain doublea b doublearctan doublex 函數(shù)原型聲明a 16 0 arctan 1 5 0 b 4 0 arctan 1 239 0 注意 因?yàn)檎麛?shù)相除結(jié)果取整 如果參數(shù)寫1 5 1 239 結(jié)果就都是0cout PI a b endl 144 doublearctan doublex inti doubler e f sqr sqr x x r 0 e x i 1 while e i 1e 15 f e i r i 4 1 r f r f e e sqr i 2 returnr 運(yùn)行結(jié)果 PI 3 14159 145 例3 4 尋找并輸出11 999之間的數(shù)m 它滿足m m2和m3均為回文數(shù) 回文 各位數(shù)字左右對稱的整數(shù) 例如 11滿足上述條件112 121 113 1331 分析 10取余的方法 從最低位開始 依次取出該數(shù)的各位數(shù)字 按反序重新構(gòu)成新的數(shù) 比較與原數(shù)是否相等 若相等 則原數(shù)為回文 函數(shù)的聲明與使用 includeusingnamespacestd voidmain boolsymm longn longm for m 11 m 1000 m if symm m 147 boolsymm longn longi m i n m 0 while i m m 10 i 10 i i 10 return m n 148 運(yùn)行結(jié)果 m 11m m 121m m m 1331m 101m m 10201m m m 1030301m 111m m 12321m m m 1367631 149 例3 5 計(jì)算如下公式 并輸出結(jié)果 其中r s的值由鍵盤輸入 SINx的近似值按如下公式計(jì)算 計(jì)算精度為10 6 函數(shù)的聲明與使用 include includeusingnamespacestd voidmain doublek r s doubletsin doublex cout r cout s if r r s s k sqrt tsin r tsin r tsin s tsin s elsek tsin r s 2 cout k endl 151 doubletsin doublex doublep 0 000001 g 0 t x intn 1 do g g t n t t x x 2 n 1 2 n 2 while fabs t p returng 運(yùn)行結(jié)果 r 5s 81 37781 152 例3 6投骰子的隨機(jī)游戲 游戲規(guī)則是 每個(gè)骰子有六面 點(diǎn)數(shù)分別為1 2 3 4 5 6 游戲者在程序開始時(shí)輸入一個(gè)無符號整數(shù) 作為產(chǎn)生隨機(jī)數(shù)的種子 每輪投兩次骰子 第一輪如果和數(shù)為7或11則為勝 游戲結(jié)束 和數(shù)為2 3或12則為負(fù) 游戲結(jié)束 和數(shù)為其它值則將此值作為自己的點(diǎn)數(shù) 繼續(xù)第二輪 第三輪 直到某輪的和數(shù)等于點(diǎn)數(shù)則取勝 若在此前出現(xiàn)和數(shù)為7則為負(fù) 由rolldice函數(shù)負(fù)責(zé)模擬投骰子 計(jì)算和數(shù)并輸出和數(shù) 函數(shù)的聲明與使用 include includeusingnamespacestd introlldice void voidmain intgamestatus sum mypoint unsignedseed cout seed 輸入隨機(jī)數(shù)種子srand seed 將種子傳遞給rand sum rolldice 第一輪投骰子 計(jì)算和數(shù) 154 switch sum case7 如果和數(shù)為7或11則為勝 狀態(tài)為1case11 gamestatus 1 break case2 和數(shù)為2 3或12則為負(fù) 狀態(tài)為2case3 case12 gamestatus 2 break default 其它情況 游戲尚無結(jié)果 狀態(tài)為0 記下點(diǎn)數(shù) 為下一輪做準(zhǔn)備gamestatus 0 mypoint sum cout pointis mypoint endl break 155 while gamestatus 0 只要狀態(tài)仍為0 就繼續(xù)進(jìn)行下一輪 sum rolldice if sum mypoint 某輪的和數(shù)等于點(diǎn)數(shù)則取勝 狀態(tài)置為1gamestatus 1 elseif sum 7 出現(xiàn)和數(shù)為7則為負(fù) 狀態(tài)置為2gamestatus 2 當(dāng)狀態(tài)不為0時(shí)上面的循環(huán)結(jié)束 以下程序段輸出游戲結(jié)果if gamestatus 1 cout playerwins n elsecout playerloses n 156 rand函數(shù)原型 intrand void 所需頭文件 功能和返回值 求出并返回一個(gè)偽隨機(jī)數(shù)srand函數(shù)原型 voidsrand unsignedintseed 參數(shù) seed產(chǎn)生隨機(jī)數(shù)的種子 所需頭文件 功能 為使rand 產(chǎn)生一序列偽隨機(jī)整數(shù)而設(shè)置起始點(diǎn) 使用1作為seed參數(shù) 可以重新初化rand 157 introlldice void 投骰子 計(jì)算和數(shù) 輸出和數(shù)intdie1 die2 worksum die1 1 rand 6 die2 1 rand 6 worksum die1 die2 cout playerrolled die1 die2 worksum endl returnworksum 158 運(yùn)行結(jié)果2 Pleaseenteranunsignedinteger 23playerrolled6 3 9pointis9pl

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論