《面向?qū)ο蟮某绦蛟O(shè)計(jì)語言-C》課件-第2章.ppt
《《面向?qū)ο蟮某绦蛟O(shè)計(jì)語言-C》課件-第2章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《面向?qū)ο蟮某绦蛟O(shè)計(jì)語言-C》課件-第2章.ppt(284頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1 第2章C 語言基礎(chǔ) 本章是學(xué)習(xí)C 語言的基礎(chǔ) 包括以下幾個(gè)方面 1 結(jié)構(gòu)化程序設(shè)計(jì)方法與面向?qū)ο蟪绦蛟O(shè)計(jì)方法的各自特點(diǎn) 區(qū)別和相互聯(lián)系 2 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中的有關(guān)概念 如類 對(duì)象 封裝 繼承 消息和多態(tài)性等 3 C 程序的基本組成和框架結(jié)構(gòu) 4 掌握C 語言中的基本數(shù)據(jù)類型 各種運(yùn)算符 表達(dá)式 5 C 數(shù)據(jù)輸入流對(duì)象cin和輸出流對(duì)象cout的使用 6 程序的3種基本結(jié)構(gòu)7 構(gòu)造數(shù)據(jù)類型 如數(shù)組 結(jié)構(gòu)體 指針等的定義方法 特點(diǎn)和使用方法 7 函數(shù)的定義 調(diào)用及函數(shù)調(diào)用過程中的參數(shù)傳遞的機(jī)理和程序執(zhí)行流程 8 引用的概念及其定義和使用方法 2 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 2 1 1傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì) StructuredProgramming SP 方法1 使用SP方法設(shè)計(jì)程序的步驟在數(shù)據(jù)處理過程中 采用的是自頂向下 分而治之的方法 將整個(gè)程序按功能劃分為幾個(gè)可獨(dú)立編程的子過程模塊 每一子模塊完成指定的子任務(wù) 并且提供一個(gè)清晰 嚴(yán)格的調(diào)用界面 主過程通過調(diào)用各子過程完來成全部處理工作 3 2 SP方法的特點(diǎn)優(yōu)點(diǎn) 1 這種程序設(shè)計(jì)方法力求算法描述準(zhǔn)確 2 對(duì)每一子過程模塊容易進(jìn)行程序正確性證明 缺點(diǎn) 1 這種程序設(shè)計(jì)方法本質(zhì)上是面向 過程 的 而 過程 和 操作 又是不穩(wěn)定和多變的 因此不能直接反映人類求解問題的思路 2 程序代碼可重用性差 程序中除少數(shù)標(biāo)準(zhǔn)庫函數(shù)外 每設(shè)計(jì)一個(gè)程序時(shí) 程序員幾乎從零做起 即使重用代碼 通常也是通過拷貝或編輯重新生成一份 3 維護(hù)程序的一致性困難 該種方法將數(shù)據(jù)與對(duì)數(shù)據(jù)進(jìn)行處理的程序代碼分離 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 4 2 1 2面向?qū)ο蟮某绦蛟O(shè)計(jì) Object OrientedProgramming OOP 方法1 面向?qū)ο蟮挠嘘P(guān)概念面向?qū)ο蟮某绦蛟O(shè)計(jì)方法強(qiáng)調(diào)直接以問題域 現(xiàn)實(shí)世界 中的事物為中心來思考和認(rèn)識(shí)問題 并按照這些事物的本質(zhì)特征把它們抽象為對(duì)象 以作為構(gòu)成軟件系統(tǒng)的基礎(chǔ) 1 對(duì)象 Object 每個(gè)對(duì)象都具有屬性 Attribute 和方法 Method 這兩方面的特征 對(duì)象的屬性描述了對(duì)象的狀態(tài)和特征 對(duì)象的方法說明了對(duì)象的行為和功能 并且對(duì)象的屬性值只應(yīng)由這個(gè)對(duì)象的方法來讀取和修改 兩者結(jié)合在一起就構(gòu)成了對(duì)象的完整描述 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 5 2 類 Class 具有相似屬性和行為的一組對(duì)象 就稱為類 可見 有了類的概念以后 就可以對(duì)具有共同特征的事物進(jìn)行統(tǒng)一描述 3 封裝 Encapsulation 封裝把對(duì)象的屬性和方法看成了一個(gè)密不可分的整體 從而使對(duì)象能夠完整地描述并對(duì)應(yīng)于一個(gè)具體事物 4 繼承 Inheritance 將客觀事物進(jìn)行歸類是一個(gè)逐步抽象的過程 反之 將類進(jìn)行層層分類便是一個(gè)概念逐漸細(xì)化的過程 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中 允許在已有類的基礎(chǔ)上通過增加新特征而派生出新的類 這稱為繼承 其原有的類稱為基類 baseclass 而新建立的類稱為派生類 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 6 5 消息 Message 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中 由于對(duì)象描述了客觀實(shí)體 它們之間的聯(lián)系通過對(duì)象間的聯(lián)系來反映 當(dāng)一個(gè)對(duì)象需要另外一個(gè)對(duì)象提供服務(wù)時(shí) 它向?qū)Ψ桨l(fā)出一個(gè)服務(wù)請(qǐng)求 而收到請(qǐng)求的對(duì)象會(huì)響應(yīng)這個(gè)請(qǐng)求并完成指定的服務(wù) 這種向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求就稱為消息 6 多態(tài)性 Polymorphism 多態(tài)性是面向?qū)ο蟮牧硪恢匾卣?在通過繼承而派生出的一系列類中 可能存在一些名稱相同 但實(shí)現(xiàn)過程和功能不同的方法 Method 所謂多態(tài)性是指當(dāng)程序中的其他部分發(fā)出同樣的消息時(shí) 按照接收消息對(duì)象的不同能夠自動(dòng)執(zhí)行類中相應(yīng)的方法 其好處是 用戶不必知道某個(gè)對(duì)象所屬的類就可以執(zhí)行多態(tài)行為 從而為程序設(shè)計(jì)帶來更大方便 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 7 2 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法 OOP方法 這種方法將設(shè)計(jì)目標(biāo)從模擬現(xiàn)實(shí)世界的行為轉(zhuǎn)向了模擬現(xiàn)實(shí)世界中存在的對(duì)象及其各自的行為 在OOP中 將 對(duì)象 作為系統(tǒng)中最基本的運(yùn)行實(shí)體 整個(gè)程序即由各種不同類型的對(duì)象組成 各對(duì)象既是一個(gè)獨(dú)立的實(shí)體 又可通過消息相互作用 對(duì)象中的方法決定要向哪個(gè)對(duì)象發(fā)消息 發(fā)什么消息以及收到消息時(shí)如何進(jìn)行處理等 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 8 3 OOP方法的特點(diǎn) 1 OOP以 對(duì)象 或 數(shù)據(jù) 為中心 由于對(duì)象自然地反映了應(yīng)用領(lǐng)域的模塊性 因此具有相對(duì)穩(wěn)定性 可以被用作一個(gè)組件去構(gòu)成更復(fù)雜的應(yīng)用 又由于對(duì)象一般封裝的是某一實(shí)際需求的各種成分 因此 某一對(duì)象的改變對(duì)整個(gè)系統(tǒng)幾乎沒有影響 2 引入了 類 class 的概念 類與類以層次結(jié)構(gòu)組織 屬于某個(gè)類的對(duì)象除具有該類所描述的特性外 還具有層次結(jié)構(gòu)中該類上層所有類描述的全部性質(zhì) OOP中稱這種機(jī)制為繼承 3 OOP方法的模塊性與繼承性 保證了新的應(yīng)用程序設(shè)計(jì)可在原有對(duì)象的數(shù)據(jù)類型和功能的基礎(chǔ)上通過重用 擴(kuò)展和細(xì)化來進(jìn)行 而不必從頭做起或復(fù)制原有代碼 這樣 大大減少了重新編寫新代碼的工作量 同時(shí)降低了程序設(shè)計(jì)過程中出錯(cuò)的可能性 達(dá)到了事半功倍的效果 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 9 2 1 3面向?qū)ο蟮某绦蛟O(shè)計(jì)方法與結(jié)構(gòu)化程序設(shè)計(jì)方法的比較 1 傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法以過程為中心構(gòu)造應(yīng)用程序 數(shù)據(jù)和處理數(shù)據(jù)的過程代碼是分離的 相互獨(dú)立的實(shí)體 設(shè)計(jì)出的程序可重用代碼少 且當(dāng)代碼量增加時(shí)維護(hù)數(shù)據(jù)和代碼的一致性困難 2 面向?qū)ο蟪绦蛟O(shè)計(jì)方法中 對(duì)象所具有的封裝性和繼承性使得代碼重用成為可能 并大大減少了程序出錯(cuò)的可能性 3 面向?qū)ο蠓椒ㄎ樟私Y(jié)構(gòu)化程序設(shè)計(jì)方法的優(yōu)點(diǎn) 同時(shí)引入了新概念 新機(jī)制并建立了比傳統(tǒng)方法更高層次的抽象 2 1從面向過程的程序設(shè)計(jì)到面向?qū)ο蟮某绦蛟O(shè)計(jì) 10 2 2 1從C語言到C 語言C語言以其如下獨(dú)有的特點(diǎn)風(fēng)靡了全世界 1 語言簡潔 緊湊 使用方便 靈活 C語言只有32個(gè)關(guān)鍵字 程序書寫形式自由 2 豐富的運(yùn)算符和數(shù)據(jù)類型 3 可以直接訪問內(nèi)存地址 能進(jìn)行位操作 使其能夠勝任開發(fā)操作系統(tǒng)的工作 4 生成的目標(biāo)代碼質(zhì)量高 程序運(yùn)行效率高 5 可移植性好 2 2C 程序的基本組成 11 2 2C 程序的基本組成 局限性 1 數(shù)據(jù)類型檢查機(jī)制相對(duì)較弱 這使得程序中的一些錯(cuò)誤不能在編譯階段被發(fā)現(xiàn) 2 C本身幾乎沒有支持代碼重用的語言結(jié)構(gòu) 因此一個(gè)程序員精心設(shè)計(jì)的程序 很難為其它程序所用 3 當(dāng)程序的規(guī)模達(dá)到一定程度時(shí) 程序員很難控制程序的復(fù)雜性 12 2 2C 程序的基本組成 C 包含了整個(gè)C C是建立C 的基礎(chǔ) C 包括C的全部特征和優(yōu)點(diǎn) 同時(shí)添加了對(duì)面向?qū)ο缶幊?OOP 的完全支持 1980年 貝爾實(shí)驗(yàn)室的BjarneStroustrup開始對(duì)C進(jìn)行改進(jìn)和擴(kuò)充 1983年正式命名為C 在經(jīng)歷了3次C 修訂后 1994年制定了ANSIC 標(biāo)準(zhǔn)的草案 以后又經(jīng)過不斷完善 成為目前的C C 仍在不斷發(fā)展中 美國微軟公司現(xiàn)已準(zhǔn)備推出C CSharp 語言 來代替C 語言 13 2 2 2C 程序的結(jié)構(gòu)與基本組成一個(gè)簡單的C 程序 是由若干個(gè)函數(shù)構(gòu)成的 其中有且僅有一個(gè)名稱為main的函數(shù)存在 下圖說明了C 程序的基本框架結(jié)構(gòu) 2 2C 程序的基本組成 14 1 聲明區(qū)聲明區(qū)處在程序文件的所有函數(shù)的外部 1 包含頭文件 如 include iostream h 2 宏定義 如 definePI3 1415926 3 類定義 如classname 4 結(jié)構(gòu)體定義 如structrecord 5 函數(shù)聲明 如voidprint 6 全局變量聲明 如floatH 2 58 7 條件編譯 如 ifdef 等 2 2C 程序的基本組成 15 2 主程序區(qū)主程序以main 函數(shù)開始 是整個(gè)程序運(yùn)行的入口 該函數(shù)中可能包含的內(nèi)容主要有 1 局部變量的聲明 如 inti 1 2 函數(shù)調(diào)用 如 y sin x 3 一般運(yùn)算 如 a b c d 3 4 結(jié)構(gòu)控制 如 if a b c a 5 對(duì)象與結(jié)構(gòu)的處理 6 文件的處理等 2 2C 程序的基本組成 16 圖2 3C 函數(shù)的組成4 程序舉例 2 2C 程序的基本組成 3 函數(shù)定義區(qū)程序中除了main函數(shù)之外 還可以包含其它的函數(shù) 每個(gè)函數(shù)是由函數(shù)說明和函數(shù)體兩部分構(gòu)成的 如圖2 3所示 17 2 2C 程序的基本組成 18 上例程序結(jié)構(gòu)可寫為如下程序 例2 1 一個(gè)簡單的C 程序 ThisisfirstC program C語言的某些特征仍可沿用 include iostream h include stdio h voidprint 函數(shù)聲明voidmain inti chars 80 2 2C 程序的基本組成 19 print cout s cout i 驗(yàn)證結(jié)果cout s is i yearsold voidprint printf printfisalsocanbeused n 2 2C 程序的基本組成 20 從上例可以看出 1 C語言中原有的規(guī)則和語句在C 中仍可繼續(xù)使用 但C 又增添了很多新的風(fēng)格 2 一個(gè)C 的程序是由一到若干個(gè)函數(shù)構(gòu)成的 但其中必須有且僅有一個(gè)名稱為main的函數(shù)存在 3 不管一個(gè)程序中有多個(gè)函數(shù) 只有main函數(shù)整個(gè)程序運(yùn)行時(shí)的入口 程序運(yùn)行時(shí)從此函數(shù)開始執(zhí)行 但在程序中 main函數(shù)所處的位置可以任意 4 一個(gè)C 的函數(shù)是由兩部分構(gòu)成的 即函數(shù)的說明部分和函數(shù)體 函數(shù)的說明部分包括了函數(shù)的返回值的類型 函數(shù)的名稱 圓括號(hào) 形參及形參的類型說明 函數(shù)體由一對(duì)大括號(hào) 括起來 其內(nèi)容是由若干條語句 2 2C 程序的基本組成 21 構(gòu)成 函數(shù)體的內(nèi)容決定了該函數(shù)的功能 5 C 對(duì)程序中的名稱是大小寫 敏感 的 除特殊情況下 應(yīng)一律小寫 6 程序中的注釋 可以用 或 單行注釋 對(duì)程序中的內(nèi)容進(jìn)行注釋 二者的區(qū)別在于 采用 方法時(shí) 注釋可以寫成多行 而采用 方法時(shí) 注釋只能寫成一行 它可單獨(dú)占一行 也可寫在某行程序代碼的末尾 7 數(shù)據(jù)輸出 除了使用printf 函數(shù) 還可使用功能更強(qiáng)大 更方便的cout對(duì)象進(jìn)行輸出數(shù)據(jù) 格式如下 cout 數(shù)據(jù)1 數(shù)據(jù)2 數(shù)據(jù)n如 上例中的語句cout s is i yearsold 表示同時(shí)輸出了變量s的值 字符串 is 變量i的值和字符 2 2C 程序的基本組成 22 串 yearsold 8 數(shù)據(jù)輸入 除了使用scanf 函數(shù) 還可使用功能更強(qiáng)大 更方便的cin對(duì)象進(jìn)行數(shù)據(jù)輸入 格式如下 cin 變量1 變量2 變量n如 上例中的語句cin s 表示給變量s輸入一個(gè)值 9 在分別使用cout和cin進(jìn)行數(shù)據(jù)的輸出和輸入時(shí) 需要在程序的開頭嵌入 iostream h 文件 在該頭文件中定義了輸入輸出流對(duì)象cout和cin等 10 一個(gè)C 的源程序文件在存盤時(shí) 要以 CPP為文件名后綴 而不是 C 2 2C 程序的基本組成 23 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 2 3 1數(shù)據(jù)類型 1 預(yù)定義數(shù)據(jù)類型 基本數(shù)據(jù)類型 包括字符型 整型 浮點(diǎn)型 無值型四種 其中浮點(diǎn)型又分為單精度浮點(diǎn)型和雙精度浮點(diǎn)型兩種 2 構(gòu)造數(shù)據(jù)類型 包括數(shù)組 結(jié)構(gòu)體 共用體 聯(lián)合 枚舉 類等 本節(jié)重點(diǎn)介紹C 的基本數(shù)據(jù)類型 有關(guān)構(gòu)造數(shù)據(jù)類型將在后面章節(jié)進(jìn)行介紹 24 2 3 1 1基本數(shù)據(jù)類型 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 25 2 3 1 2類型修飾符C 還允許在基本數(shù)據(jù)類型 除void類型外 前加上類型修飾符 來更具體地表示數(shù)據(jù)類型 C 的類型修飾符包括 signed有符號(hào)unsigned無符號(hào)short短型long長型 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 26 表2 2C 的基本數(shù)據(jù)類型 27 表2 2C 的基本數(shù)據(jù)類型 28 說明 1 表中帶 的部分表示是可以省略的 如short int 可以寫為shortint或簡寫為short 二者的含義是相同的 2 四種修飾符都可以用來修飾整型和字符型 用signed修飾的類型的值可以為正數(shù)或負(fù)數(shù) 用unsigned修飾的類型的值只能為正數(shù) 3 用short修飾的類型 其值一定不大于對(duì)應(yīng)的整數(shù) 用long修飾的類型 其值一定不小于對(duì)應(yīng)的整數(shù) 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 29 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 2 3 1 3常量在C 語言中 數(shù)據(jù)分為常量和變量兩大類 由于程序中的數(shù)據(jù)是有類型的 所以常量和變量都是有類型之分的 常量按照不同的數(shù)據(jù)類型可以分為 字符型常量 整型常量 浮點(diǎn)型常量 以及字符串常量等 程序是根據(jù)程序中常量的書寫格式來區(qū)分它是哪種類型常量的 30 1 整型常量在程序中書寫整型常量時(shí) 沒有小數(shù)部分 用戶可根據(jù)需要分別可以用十進(jìn)制 八進(jìn)制和十六進(jìn)制的形式書寫 十進(jìn)制格式 由數(shù)字0至9和正 負(fù)號(hào)組成 書寫時(shí)直接寫出數(shù)字 如 123 516 1000等 八進(jìn)制格式 以數(shù)字0開頭的數(shù)字 0至7 序列 0111 010007 0177777等 十六進(jìn)制格式 以0 x或0X開頭的數(shù)字 數(shù)字0至9 字母a至z 序列 如0 x78AC 0 xFFFF等 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 31 2 浮點(diǎn)型常量只能用十進(jìn)制來表示 可以用小數(shù)或指數(shù)形式表示 不分單精度和雙精度類型 如 34 5 345 1 5e 33 字符型常量 1 用一對(duì)單引號(hào)括起來的一個(gè)字符 單引號(hào)只是字符與其他部分的分割符 不是字符的一部分 并且 不能用雙引號(hào)代替單引號(hào) 在單引號(hào)中的字符不能是單引號(hào)或反斜杠 如 a A 合法的字符常量 非法的字符常量 A 不代表字符常量 2 另一種表示字符常量的方法是使用轉(zhuǎn)義字符 C 規(guī)定 采用反斜杠后跟一個(gè)字母來代表一個(gè)控制字符 具有新的含義 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 32 C 中常用的轉(zhuǎn)義字符 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 33 4 字符串常量用一對(duì)雙引號(hào)括起來的一個(gè)或多個(gè)字符的序列稱為字符串常量或字符串 字符串以雙引號(hào)為定界符 雙引號(hào)不作為字符串的一部分 如 Hello GoodMorning Isay Goodbye 字符串中的字符數(shù)稱為該字符串的長度 在存儲(chǔ)時(shí) 系統(tǒng)自動(dòng)在字符串的末尾加以字符串結(jié)束標(biāo)志 即轉(zhuǎn)義字符 0 5 符號(hào)常量常量也可用一個(gè)標(biāo)識(shí)符來代表 稱為符號(hào)常量 如 definePRICE30main 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 34 使用符號(hào)常量應(yīng)注意以下幾個(gè)方面 1 它不同于變量 在作用域內(nèi)其值不能改變和賦值 如 在上例中如再用PRICE 40 這一語句進(jìn)行賦值則是錯(cuò)誤的 2 符號(hào)常量名一般用大寫 而變量名用小寫 以示區(qū)別 6 程序中常量的表示方法在程序中的常量有以下三種表示方法 1 在程序中直接寫入常量如 200 3 4E 10 A 1 0 x120 045 5 35 1000linti chars floatf i 20 s a f 2 0 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 35 2 利用 define定義宏常量一般格式 define宏名常數(shù)如 definePI3 14 s 2 PI r 3 利用const定義正規(guī)常數(shù)一般格式 const數(shù)據(jù)類型標(biāo)識(shí)符常數(shù)名 常量值 說明 const必須放在被修飾類型符和類型名前面 數(shù)據(jù)類型是一個(gè)可選項(xiàng) 用來指定常數(shù)值的數(shù)據(jù)類型 如果省略了該數(shù)據(jù)類型 那么編譯程序認(rèn)為它是int類型 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 36 如 constinta 10 表示定義了一個(gè)初始值為10的整型常量 它在程序中不可改變 但可用于表達(dá)式的計(jì)算中 2 3 1 4變量1 變量的概念及特點(diǎn)每一變量就相當(dāng)于一個(gè)容器 對(duì)應(yīng)著計(jì)算機(jī)內(nèi)存中的某一塊存儲(chǔ)單元 用于存儲(chǔ)程序中的數(shù)據(jù) 變量的值具有以下兩個(gè)特點(diǎn) 1 一充即無 即將一個(gè)新數(shù)據(jù)存放到一個(gè)變量中時(shí) 該變量中原來的值消失 變量的值變成了新值 如 執(zhí)行完語句inti i 10 i 20 后i的值為20 而不是10 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 37 2 取之不盡 可將某個(gè)變量的值與程序中的其它數(shù)據(jù)進(jìn)行各種運(yùn)算 在運(yùn)算過程中 如果沒有改變?cè)撟兞康闹禃r(shí) 那么 不管用該變量的值進(jìn)行多少次運(yùn)算 其值始終保持不變 如 語句inti j k i 10 j i 10 k i j 5 其中 i的值可無限制地多次使用 但它的值始終保持值10 因?yàn)樵诔绦蛑袥]有改變變量i的值 2 定義變量程序中的每一變量 都要先定義 后使用 定義變量的一般有以下三種格式 數(shù)據(jù)類型標(biāo)識(shí)符變量名 數(shù)據(jù)類型標(biāo)識(shí)符變量名 初始化值 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 38 數(shù)據(jù)類型標(biāo)識(shí)符變量名1 初始值1 變量名2 初始值2 如 chara 定義字符型變量ainti 1000 定義整型變量i i的初始值為1000 floata 2 b 3 c 定義浮點(diǎn)型變量a b c 且a b的初始值分別為2 3 變量名是每個(gè)變量的名稱 其命名遵循以下規(guī)則 1 由字母 數(shù)字和下劃線 三類符號(hào)排列組合形成 且開頭字符必須是字母或下劃線 2 名稱中字符的最大個(gè)數(shù)是31個(gè) 3 C 中區(qū)分變量名的大小寫 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 39 4 變量名不能和C 中的關(guān)鍵字同名 也不能和用戶編制的函數(shù)或C 庫函數(shù)同名 如 int double或static都不能作為變量名 5 變量名盡量做到 見名知意 3 定義變量的位置在程序中的不同位置采用不同的變量定義方式 決定了該變量具有不同的特點(diǎn) 變量的定義一般可有以下三種位置 1 在函數(shù)體內(nèi)部在函數(shù)體內(nèi)部定義的變量稱為局部變量 這種局部變量只在進(jìn)入定義它的函數(shù)體時(shí)起作用 離開該函數(shù)體后該變量就消失 被釋放 即不再起作用 因此 不同函數(shù)體內(nèi)部可以定義相同名稱的變量 而互不干擾 如 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 40 voidfunc1 void inty y 2 voidfunc2 void inty y 100 在本例中 函數(shù)func1和func2的函數(shù)體內(nèi)部都分別定義了變量y 但它們都只能在各自的函數(shù)體內(nèi)起作用 都是局部變量 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 41 2 形式參數(shù)當(dāng)定義一個(gè)有參函數(shù)時(shí) 函數(shù)名后面括號(hào)內(nèi)的變量 統(tǒng)稱為形式參數(shù) 如 intis in char a charb while a if a b return1 elsea return0 本例中 函數(shù)名is in后面括號(hào)內(nèi)的變量a和b是該函數(shù)的形式參數(shù) 它們都只能在該函數(shù)體內(nèi)起作用 是該函數(shù)的局部變量 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 42 3 全局變量 在所有函數(shù)體外部定義的變量 其作用范圍是整個(gè)程序 并在整個(gè)程序運(yùn)行期間有效 如 include stdio h intcount 定義count變量是全局變量voidfunc1 void voidfunc2 void intmain count 10 func1 return0 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 43 voidfunc1 void inttemp temp count func2 printf countis d count 輸出10 voidfunc2 void intcount for count 1 count 10 count putchar 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 44 2 3 2運(yùn)算符和表達(dá)式程序中對(duì)數(shù)據(jù)進(jìn)行的各種運(yùn)算是由運(yùn)算符來決定的 不同運(yùn)算符的運(yùn)算方法和特點(diǎn)是不同的 從此可以看出 一個(gè)運(yùn)算式子中要涉及到數(shù)據(jù)及運(yùn)算符 而運(yùn)算符是對(duì)數(shù)據(jù)進(jìn)行指定操作 并產(chǎn)生新值的特殊符號(hào) 2 3 2 1算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符就是對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算 如 加 減 乘 除等 是在程序中使用最多的一種運(yùn)算符 C 的算術(shù)運(yùn)算符如表2 4所示 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 45 表2 4C 的算術(shù)運(yùn)算符 算術(shù)表達(dá)式是指由算術(shù)運(yùn)算符 括號(hào)將常量 變量 函數(shù) 圓括號(hào)等連接形成的一個(gè)有意義的式子 如 46 1 x 3 x 2 x 3 x 2 x 53 14 sqrt r b b 4 0 a c注意 1 表達(dá)式中的括號(hào)不管有多少層 一律使用圓括號(hào) 2 在將一個(gè)數(shù)學(xué)上的運(yùn)算式子寫成對(duì)應(yīng)的C 的表達(dá)式時(shí) 要注意進(jìn)行必要的轉(zhuǎn)換 乘號(hào)不能省略 數(shù)學(xué)表達(dá)式中出現(xiàn)的數(shù)學(xué)運(yùn)算函數(shù)要用C 提供的對(duì)應(yīng)的數(shù)學(xué)運(yùn)算庫函數(shù)來代替 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 47 要特別注意表達(dá)式中兩個(gè)整型數(shù)相除的情況 如 有一數(shù)學(xué)表達(dá)式為2 3 f 32 要寫成對(duì)應(yīng)的C 的表達(dá)式時(shí) 正確地寫法應(yīng)寫2 0 3 0 f 32 而不是2 3 f 32 2 3 2 2賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符的功能將某個(gè)數(shù)據(jù)的值賦給某個(gè)變量 賦值運(yùn)算符的用法格式 變量名賦值運(yùn)算符常量 變量或表達(dá)式說明 1 被賦值的目標(biāo) 即賦值運(yùn)算符左邊的量必須是變量 而不能是常量或表達(dá)式 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 48 2 C 中的賦值運(yùn)算符如表2 5所示 3 要注意區(qū)分賦值運(yùn)算符 與數(shù)學(xué)上的 等號(hào) 間的區(qū)別 如 intx y 定義變量x y為int類型變量x 10 將變量x賦成值10 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 49 x x 20 將x的值在原值 10 的基礎(chǔ)上再加上值20后 結(jié)果為30 賦給變量xy x 5 等價(jià)于y y x 5 右邊表達(dá)式的值為30 31 5 6 y被賦成值 6x y 10 等價(jià)于x x y 10 右邊表達(dá)式的值為31 6 10 3 y被賦成值32 3 2 3sizeof運(yùn)算符sizeof運(yùn)算符功能是求某一數(shù)據(jù)類型或某一變量在內(nèi)存中所占空間的字節(jié)數(shù) 其使用的一般形式 sizeof 變量名或數(shù)據(jù)類型 或sizeof變量名或數(shù)據(jù)類型如 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 50 includevoidmain shortintaShort intanInt longaLong charaChar floataReal cout datatype tmemoryused bytes cout nshortint t sizeof aShort cout ninteger t sizeof anInt cout nLonginteger t sizeof aLong cout ncharachar t sizeof aChar cout nfloat t sizeof aReal 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 51 其輸出結(jié)果為 datatypememoryused bytes shortint2integer4Longinteger4charachar1float42 3 2 4關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符就是對(duì)兩個(gè)量之間進(jìn)行比較的運(yùn)算符 如表2 6所示 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 52 由關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接形成的運(yùn)算式子是關(guān)系表達(dá)式 一個(gè)關(guān)系表達(dá)式的值是一個(gè)邏輯值 當(dāng)為真時(shí) 值為1 為假時(shí) 值為0 如 假設(shè)a 1 b 20 c 3 則a b表達(dá)式成立 其值為1b c表達(dá)式不成立 其值為0 a b c表達(dá)式成立 其值為1 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 53 注意 在對(duì)兩個(gè)表達(dá)式的值進(jìn)行是否相等的比較時(shí) 要用運(yùn)算符 而不能寫成 2 3 2 5邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符是對(duì)兩個(gè)邏輯量間進(jìn)行運(yùn)算的運(yùn)算符 如表2 7所示 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 54 由邏輯運(yùn)算符將兩個(gè)表達(dá)式連接形成的式子叫邏輯表達(dá)式 各種邏輯運(yùn)算的 真值表 如表2 8所示 對(duì)于參加邏輯運(yùn)算的操作數(shù) 系統(tǒng)認(rèn)為 非0 為真 0 為假 而邏輯表達(dá)式的結(jié)果只能為邏輯真 1 或邏輯假 0 表2 8邏輯運(yùn)算真值表 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 55 注意 1 C或C 中在給出一個(gè)邏輯表達(dá)式的最終計(jì)算結(jié)果值時(shí) 用1表示真 用0表示假 但在進(jìn)行邏輯運(yùn)算的過程中 凡是遇到非零值時(shí)就當(dāng)真值參加運(yùn)算 遇到0值時(shí)就當(dāng)假值參加運(yùn)算 如 inta 10 b 15 c 14 則 a 6 則表達(dá)式i i 0 i 的值為0 假 該表達(dá)式運(yùn)算結(jié)束后 變量i的值為0 而不是1 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 56 a b c只要a為真 就不必須判斷b和c 只有a為假 才判別b a和b都為假才判別c 如 inti 1 j 則表達(dá)式i i i 的值為1 真 運(yùn)算結(jié)束后 變量i的值為2 而不是4 對(duì)于數(shù)學(xué)上的表示多個(gè)數(shù)據(jù)間進(jìn)行比較的表達(dá)式 在C或C 中要拆寫成多個(gè)條件并用邏輯運(yùn)算符連接形成一個(gè)邏輯表達(dá)式 如 在數(shù)學(xué)上 要表示一個(gè)變量a的值處于 1和 9之間時(shí) 可以用 9 9 a 9 a 1的形式 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 57 2 3 2 6條件運(yùn)算符在C 中只提供了一個(gè)三目運(yùn)算符 即條件運(yùn)算符 其一般形式為 表達(dá)式1 表達(dá)式2 表達(dá)式3條件運(yùn)算的規(guī)則是 首先判斷表達(dá)式1的值 若其值為真 非0 則取表達(dá)式2的值為整個(gè)表達(dá)式的值 若其值為假 0 則取表達(dá)式3的值為整個(gè)表達(dá)式的值 如 若a 3 b 4 則條件表達(dá)式a b a b的值為4 2 3 2 7位運(yùn)算符1 位運(yùn)算符及其運(yùn)算規(guī)則所謂位運(yùn)算符是指能進(jìn)行二進(jìn)制位運(yùn)算的運(yùn)算符 C 提供的位運(yùn)算符如表2 9所示 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 58 位運(yùn)算的運(yùn)算規(guī)則為 1 按位與 兩個(gè)運(yùn)算量相應(yīng)的位都是1 則該位的結(jié)果值為1 否則為0 2 按位或 兩個(gè)運(yùn)算量相應(yīng)的位只要有一個(gè)是1 則該位的結(jié)果值為1 否則為0 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 59 3 按位異或 兩個(gè)運(yùn)算量相應(yīng)的位不同 則該位的結(jié)果值為1 否則為0 4 按位取反 將運(yùn)算量的每一位取反 5 按位左移 將操作數(shù)中的每一位向右移動(dòng)指定的位數(shù) 移出的位被舍棄 空出的位補(bǔ)0或補(bǔ)符號(hào)位 如 a 5 b 6 則 a000001010000010100000101b 00000110 00000110 00000110 0000011000000100000001110000001111111001即 a b 4 a b 7 a b 3 b 249 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 60 2 復(fù)合位運(yùn)算符位運(yùn)算符與賦值運(yùn)算符結(jié)合可以形成復(fù)合位運(yùn)算符 如表2 10所示 2 3 2 8強(qiáng)制類型轉(zhuǎn)換運(yùn)算符該運(yùn)算符的功能是將某一數(shù)據(jù)從一種數(shù)據(jù)類型向另一 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 61 種數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換 其使用的一般形式 數(shù)據(jù)類型標(biāo)識(shí)符 表達(dá)式 數(shù)據(jù)類型標(biāo)識(shí)符 表達(dá)式如 inti 2 floata b a float i 將變量i的類型強(qiáng)制轉(zhuǎn)換為浮點(diǎn)型 并將其值賦給變量ab float i 將變量i的類型強(qiáng)制轉(zhuǎn)換為浮點(diǎn)型 并將其值賦給變量b2 3 2 9逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符的運(yùn)算優(yōu)先級(jí)是最低的 一般形式為 表達(dá)式1 表達(dá)式2 表達(dá)式N 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 62 在計(jì)算逗號(hào)表達(dá)式的值時(shí) 按從左至右的順序依次分別計(jì)算各個(gè)表達(dá)式的值 而整個(gè)逗號(hào)表達(dá)式的值和類型是由最右邊的表達(dá)式?jīng)Q定 如 有語句inta 3 b 4 則表達(dá)式a b a b的值為9 再如 設(shè)有inti 則表達(dá)式i 1 i 2 i 1 i 4的值為6 2 3 2 10運(yùn)算符的優(yōu)先級(jí)與結(jié)合性每個(gè)運(yùn)算符都有自己優(yōu)先級(jí)和結(jié)合性 當(dāng)一個(gè)表達(dá)式中包含多個(gè)運(yùn)算符時(shí) 要確定運(yùn)算的結(jié)果 必須首先確定運(yùn)算的先后順序 即運(yùn)算符的優(yōu)先級(jí)和結(jié)合性 C 中運(yùn)算符的優(yōu)先級(jí)和結(jié)合性如表2 11所示 2 3C 數(shù)據(jù)類型 運(yùn)算符和表達(dá)式 63 表2 11C 中運(yùn)算符的優(yōu)先級(jí)和結(jié)合性 64 2 4數(shù)據(jù)的輸入與輸出 在C 語言中 數(shù)據(jù)的輸入和結(jié)果的輸出是分別使用系統(tǒng)所提供的輸入流對(duì)象cin和輸出流對(duì)象cout來完成的 在使用過程中 只要在程序的開頭嵌入相應(yīng)的頭文件 iostream h 即可 2 4 1數(shù)據(jù)的輸出cout輸出流對(duì)象輸出數(shù)據(jù)的語句格式為 cout 數(shù)據(jù)1 數(shù)據(jù)2 數(shù)據(jù)n 說明 1 cout是系統(tǒng)預(yù)定義的一個(gè)標(biāo)準(zhǔn)輸出設(shè)備 一般代表顯示器 是輸出操作符 用于向cout輸出流中插入數(shù)據(jù) 2 cout的作用是向標(biāo)準(zhǔn)輸出設(shè)備上輸出數(shù)據(jù) 被輸出的數(shù)據(jù)可以是常量 已有值的變量或是一個(gè)表達(dá)式 65 如 include includevoidmain floata 3 b 4 cout Theresultis cout sqrt a a b b 該程序的輸出結(jié)果為 Theresultis 5 3 可以在cout輸出流中插入C 中的轉(zhuǎn)義字符 如 cout thevalueofa n cout a 2 4數(shù)據(jù)的輸入與輸出 66 表示輸出完字符串Inputthevalueofa 后 在下一行輸出變量a的值 4 可以將多個(gè)被輸出的數(shù)據(jù)寫在一個(gè)cout中 各輸出項(xiàng)間用 操作符隔開即可 但要注意cout首先按從右向左的順序計(jì)算出各輸出項(xiàng)的值 然后再輸出各項(xiàng)的值 如 cout valueofa a valueofb b Theresultis sqrt a a b b 再如 設(shè)變量i的值為10 則cout i i i 的輸出結(jié)果為 12 11 10 5 一個(gè)cout語句也可拆成若干行書寫 但注意語句結(jié)束符 只能寫在最后一行上 如 對(duì)于上面的語句也可寫成如下形式 2 4數(shù)據(jù)的輸入與輸出 67 cout valueofa 注意行末無分號(hào) a valueofb b Theresultis sqrt a a b b 在此處書寫分號(hào) 6 在cout中 實(shí)現(xiàn)輸出數(shù)據(jù)換行功能的方法 既可使用轉(zhuǎn)義字符 n 也可使用表示行結(jié)束的流操作子endl 如 cout ThisisfirstLine n Thisissecondline 上面語句可等價(jià)地寫為 cout ThisisfirstLine endl Thisissecondline 2 4數(shù)據(jù)的輸入與輸出 68 7 在cout中還可以使用流控制符控制數(shù)據(jù)的輸出格式 但使用這些流控制符時(shí) 要在程序的頭上嵌入頭文件 include 常用的流控制符及其功能如表2 12所示 表2 12I O流的常用控制符 2 4數(shù)據(jù)的輸入與輸出 69 2 4數(shù)據(jù)的輸入與輸出 70 2 4數(shù)據(jù)的輸入與輸出 設(shè)置域?qū)?所謂域?qū)捑褪潜惠敵鰯?shù)據(jù)所占的輸出寬度 單位是字符數(shù) 設(shè)置域?qū)捒梢允褂昧骺刂品鹲etw n 和cout的方法cout width n 其中n為正整數(shù) 表示域?qū)?但是 cout width n 和setw n 二者都只對(duì)下一個(gè)被輸出的數(shù)據(jù)有作用 若一個(gè)輸出語句內(nèi)有多個(gè)被輸出的數(shù)據(jù) 而要保持一定格式域?qū)挄r(shí) 需要在每一輸出數(shù)據(jù)前加上cout width n 或setw n 此外 當(dāng)參數(shù)n的值比實(shí)際被輸出數(shù)據(jù)的寬度大時(shí) 則在給定的域?qū)拑?nèi) 數(shù)據(jù)靠右輸出 不足部分自動(dòng)填充空格符 若被輸出數(shù)據(jù)的實(shí)際寬度比n值大時(shí) 則數(shù)據(jù)所占的實(shí)際位數(shù)輸出數(shù)據(jù) 設(shè)置域?qū)挼膮?shù)n不再起作用 71 例2 2 cout流控制符setw的使用 include includevoidmain inta 21 b 999 cout setw 3 a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 a b setw 4 a b setw 5 a b endl 其輸出結(jié)果是 21 21 21 程序中第一個(gè)cout的輸出結(jié)果999 999 999 程序中第二個(gè)cout的輸出結(jié)果10201020 1020 程序中第三個(gè)cout的輸出結(jié)果 2 4數(shù)據(jù)的輸入與輸出 72 設(shè)置域內(nèi)填充字符 在默認(rèn)情況下 當(dāng)被輸出的數(shù)據(jù)未占滿域?qū)挄r(shí) 會(huì)自動(dòng)在域內(nèi)靠左邊填充相應(yīng)個(gè)數(shù)的空格符 但我們也可以設(shè)置在域內(nèi)填充其他的字符 方法是利用cout的fill方法cout fill c 或setfill c cout fill c 上和setfill c 可以對(duì)所有被輸出的數(shù)據(jù)起作用 例2 3 在例2 2的基礎(chǔ)上增加域內(nèi)填充字符的功能 include iostream h include iomanip h voidmain inta 21 b 999 cout fill 設(shè)置域內(nèi)填充字符為 字符cout setw 3 a setw 4 a setw 5 a endl 2 4數(shù)據(jù)的輸入與輸出 73 cout setw 3 b setw 4 b setw 5 b endl cout fill 將域內(nèi)填充字符改為 字符cout setw 3 a b setw 4 a b setw 5 a b endl 其輸出結(jié)果是 21 21 21 程序中第一個(gè)cout的輸出結(jié)果 未占滿域?qū)挼牟糠痔畛?字符 999 999 999 程序中第二個(gè)cout的輸出結(jié)果10201020 1020 程序中第三個(gè)cout的輸出結(jié)果 未占滿域?qū)挼牟糠痔畛?字符 2 4數(shù)據(jù)的輸入與輸出 74 當(dāng)采用流控制符設(shè)置填充字符時(shí) 上面程序代碼也可等價(jià)地改為 include includevoidmain inta 21 b 999 cout setw 3 setfill a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 2 4數(shù)據(jù)的輸入與輸出 75 設(shè)置輸出數(shù)據(jù)的進(jìn)位計(jì)數(shù)制 在默認(rèn)情況下 被輸出的數(shù)據(jù)按十進(jìn)制格式輸出 但可以使用流控制符hex和oct控制數(shù)據(jù)的輸出格式為十六進(jìn)制和八進(jìn)制 一旦設(shè)置成某種進(jìn)位計(jì)數(shù)制后 數(shù)據(jù)的輸出就以該種數(shù)制為主 可利用流控制符dec將數(shù)制重新成十進(jìn)制 例2 4 在例2 2的基礎(chǔ)上增加域內(nèi)填充字符的功能 include includevoidmain inta 21 b 999 設(shè)置以十六制格式輸出數(shù)據(jù) 2 4數(shù)據(jù)的輸入與輸出 76 cout setw 3 setfill hex a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 設(shè)置以八制格式輸出數(shù)據(jù)cout setw 3 setfill oct a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 設(shè)置以十制格式輸出數(shù)據(jù)cout setw 3 setfill dec a setw 4 a setw 5 a endl cout setw 3 b setw 4 b setw 5 b endl cout setw 3 setfill a b setw 4 a b setw 5 a b endl 2 4數(shù)據(jù)的輸入與輸出 77 程序的輸出結(jié)果為 15 15 15 以十六進(jìn)制格式輸出數(shù)據(jù)3e7 3e7 3e73fc 3fc 3fc 25 25 25 以八進(jìn)制格式輸出數(shù)據(jù)17471747 174717741774 1774 21 21 21 以十進(jìn)制格式輸出數(shù)據(jù)999 999 99910201020 1020 2 4數(shù)據(jù)的輸入與輸出 78 設(shè)置浮點(diǎn)數(shù)的輸出格式 對(duì)于浮點(diǎn)數(shù) 既可以用小數(shù)格式輸出 也可以用指數(shù)格式輸出 這可以分別通過setiosflags ios fixed 和setiosflags ios scientific 來控制 例2 5 已知圓的半徑r 6 779 計(jì)算并輸出圓的周長和面積 要求分別用指數(shù)和小數(shù)兩種格式輸出 include includevoidmain constdoublepi 3 14159 doubler 6 779 c s c 2 0 pi r 計(jì)算圓的周長s pi r r 計(jì)算圓的面積 2 4數(shù)據(jù)的輸入與輸出 79 以指數(shù)格式輸出圓的面積和周長cout 圓的周長 指數(shù) 為 setiosflags ios scientific c endl cout 圓的面積 指數(shù) 為 s endl 以小數(shù)輸出圓的面積和周長cout 圓的周長 小數(shù) 為 setiosflags ios fixed c endl cout 圓的面積 小數(shù) 為 setiosflags ios fixed s endl 程序的輸出結(jié)果如下 圓的周長 指數(shù) 為 4 259368e 001圓的面積 指數(shù) 為 1 443713e 002圓的周長 小數(shù) 為 42 5937圓的面積 小數(shù) 為 144 371 2 4數(shù)據(jù)的輸入與輸出 80 2 4 2數(shù)據(jù)的輸入cin在C 程序中 數(shù)據(jù)的輸入通常采用cin流對(duì)象來完成 其格式如下 cin 變量名1 變量名2 變量名n 說明 1 cin是系統(tǒng)預(yù)定義的一個(gè)標(biāo)準(zhǔn)輸入設(shè)備 2 cin的功能是 當(dāng)程序在運(yùn)行過程中執(zhí)行到cin時(shí) 程序會(huì)暫停執(zhí)行并等待用戶從鍵盤輸入相應(yīng)數(shù)目的數(shù)據(jù) 用戶輸入完數(shù)據(jù)并回車后 cin從輸入流中取得相應(yīng)的數(shù)據(jù)并傳送給其后的變量中 3 操作符后除了變量名外不得有其他數(shù)字 字符串或字符 否則系統(tǒng)會(huì)報(bào)錯(cuò) 2 4數(shù)據(jù)的輸入與輸出 81 如 cin x x 錯(cuò)誤 因含有字符串 x cin x x 錯(cuò)誤 因含有字符 x cin x 10 錯(cuò)誤 因含有常量10 4 cin后面所跟的變量可為任何數(shù)據(jù)類型 若變量為整型數(shù)據(jù)類型 則在程序運(yùn)行過程中從鍵盤輸入數(shù)據(jù)時(shí) 可分別按十進(jìn)制 八進(jìn)制或十六進(jìn)制輸入該整數(shù) 但要注意 當(dāng)按十進(jìn)制格式輸入整數(shù)時(shí) 可直接輸入數(shù)據(jù)本身即可 若以十六進(jìn)制輸入整數(shù)時(shí) 數(shù)據(jù)前要冠以0 x或0X 若按八進(jìn)制格式輸入整數(shù)時(shí) 數(shù)據(jù)前要冠以數(shù)字0 若cin后面的變量為浮點(diǎn)類型 單精度或雙精度 時(shí) 可分別按小數(shù)或指數(shù)的格式表示該浮點(diǎn)數(shù) 若cin后面的變量為字符類型時(shí) 可直接輸入字符數(shù)據(jù)而不能在字符的兩端加單引號(hào) 2 4數(shù)據(jù)的輸入與輸出 82 5 當(dāng)程序中用cin輸入數(shù)據(jù)時(shí) 最好在該語句之前用cout輸出一個(gè)需要輸入數(shù)據(jù)的提示信息 以正確引導(dǎo)和提示用戶輸入正確的數(shù)據(jù) 如 cout x 6 當(dāng)一個(gè)cin后面同時(shí)跟有多個(gè)變量時(shí) 則用戶在輸入數(shù)據(jù)時(shí)的個(gè)數(shù)應(yīng)與變量的個(gè)數(shù)相同 各數(shù)據(jù)之前用一個(gè)或多個(gè)空格隔開 輸入完后按回車鍵 或者 每輸入一個(gè)數(shù)據(jù)按回車鍵也可 如對(duì)于以下程序段 intx doublea charc1 cout 輸入一個(gè)整數(shù) 一個(gè)浮點(diǎn)數(shù)和一個(gè)字符 2 4數(shù)據(jù)的輸入與輸出 83 cin x a c1 cout 整數(shù) x 浮點(diǎn)數(shù) a 字符 c1 運(yùn)行過程中 屏幕上顯示 輸入一個(gè)整數(shù) 一個(gè)浮點(diǎn)數(shù)和一個(gè)字符 用戶輸入數(shù)據(jù)的格式可以是 100 3 14 a或者 100 3 14 a或者 1003 14a最后程序的輸出結(jié)果為 整數(shù) 100浮點(diǎn)數(shù) 3 14字符 a 2 4數(shù)據(jù)的輸入與輸出 84 2 5 1C 語句概述語句 statement 是程序中最小的可執(zhí)行單位 一條語句可以完成一種基本操作 若干條語句組合在一起就能實(shí)現(xiàn)某種特定的功能 C 中語句可以分為以下三種形式 1 單一語句在任何一個(gè)表達(dá)式后面加上分號(hào) 就構(gòu)成了一條簡單的C 語句 例如 c a b b a b a b cout HelloC endl 等等 2 5C 的控制語句 85 2 空語句僅由單個(gè)分號(hào)構(gòu)成的語句 即 稱為空語句 空語句不進(jìn)行任何操作 該語句被用在從語法上需要一條語句 但實(shí)際上卻又不進(jìn)行任何操作的地方 3 復(fù)合語句復(fù)合語句是用一對(duì)花括號(hào) 括起來的語句塊 復(fù)合語句在語法上等效于一個(gè)單一語句 使用復(fù)合語句應(yīng)注意 1 花括號(hào)必須配對(duì)使用 2 花括號(hào)外不要加分號(hào) 2 5C 的控制語句 86 2 5 2C 程序的三種基本結(jié)構(gòu)在程序設(shè)計(jì)中 語句可以按照結(jié)構(gòu)化程序設(shè)計(jì)的思想構(gòu)成三種基本結(jié)構(gòu) 它們分別是順序結(jié)構(gòu) 分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu) 如圖2 5所示 順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)圖2 5程序的三種基本結(jié)構(gòu) 2 5C 的控制語句 87 1 順序結(jié)構(gòu)程序按照語句的書寫順序依次執(zhí)行 語句在前的先執(zhí)行 語句在后的后執(zhí)行 只能滿足設(shè)計(jì)簡單程序的要求 2 分支結(jié)構(gòu)在分支結(jié)構(gòu)中 程序根據(jù)判斷條件是否成立 來選擇執(zhí)行不同的程序段 也就是說 這種程序結(jié)構(gòu) 能有選擇地執(zhí)行程序中的不同程序段 3 循環(huán)結(jié)構(gòu)在循環(huán)結(jié)構(gòu)中 程序根據(jù)判斷條件是否成立 來決定是否重復(fù)執(zhí)行某個(gè)程序段 程序的執(zhí)行流程和順序是由程序中的控制語句來完成的 而控制流程的主要方式是分支和循環(huán) 2 5C 的控制語句 88 2 5 3if語句if語句是最常用的一種分支語句 也稱為條件語句 if語句有三種形式 單分支if語句 雙分支if語句和多分支if語句 如圖2 6所示 單分支if語句雙分支if語句 2 5C 的控制語句 89 多分支if語句2 5 3 1單分支if語句if 表達(dá)式 語句 2 5C 的控制語句 90 其執(zhí)行過程為 先計(jì)算關(guān)鍵字if后面的表達(dá)式的值 若為真 則執(zhí)行if后的 語句 部分 否則跳過該 語句 部分 不管是否執(zhí)行 語句 部分 最后都要接著 語句 部分的后面 繼續(xù)執(zhí)行程序的其它部分 注意 1 括號(hào)不能省略 2 在if 表達(dá)式 后不能加分號(hào) 3 關(guān)鍵字if的后面的表達(dá)式可以是任意的表達(dá)式 只要表達(dá)式的值為非0 即當(dāng)真值處理 否則當(dāng)假值處理 4 if語句的內(nèi)嵌語句可以是單一語句 也可以是復(fù)合語句 5 盡量使if語句的內(nèi)嵌語句比if語句縮進(jìn) 這是良好編程書寫風(fēng)格 2 5C 的控制語句 91 如 intx 0 y 2 if x 0 y cout x y 運(yùn)算結(jié)束后 變量y的值為2 而不是3 變量x的值為0 2 5 3 2雙分支if語句雙分支if語句的一般格式為 if 表達(dá)式 語句塊1else語句塊2 2 5C 的控制語句 92 其執(zhí)行過程為 先判斷表達(dá)式的值 若為真 則執(zhí)行語句塊1 否則執(zhí)行語句塊2 不管程序執(zhí)行語句塊1還是執(zhí)行語句塊2 最后都要跳到語句塊2的后面接著執(zhí)行程序中后面的語句 注意 1 語句塊1 語句塊2既可以是單一語句也可以是用 括起來的復(fù)合語句 2 else子句必須與if子句配對(duì)使用 不能單獨(dú)使用 3 else子句必須處在if子句的后面 且else語句總是和離它最近的前面未配對(duì)的if語句配對(duì) 例2 6 輸入一個(gè)年號(hào) 判斷是否為閏年 如果是則輸出 yes 否則輸出 Not 分析 只要滿足下列兩個(gè)條件之一者 即是閏年 2 5C 的控制語句 93 年號(hào)能被4整除 但要排除同時(shí)能被100整除 年號(hào)能被400整除 includevoidmain inty cout y if y 4 0 2 5C 的控制語句 94 2 5 3 3多分支if語句多分支if語句是if語句的嵌套結(jié)構(gòu) 其一般形式為 if 表達(dá)式1 語句1elseif 表達(dá)式2 語句2elseif 表達(dá)式3 語句3 elseif 表達(dá)式N 語句Nelse語塊N 1 2 5C 的控制語句 95 例2 7 輸入學(xué)生的成績score 按分?jǐn)?shù)輸出其等級(jí) score 90為優(yōu) 90 score 80為良 80 score 70為中等 70 score 60為及格 scorevoidmain floatscore cout score if score 90 cout 80 cout Good 2 5C 的控制語句 96 elseif score 70 cout 60 cout Pass elsecout Failed 注意 在if語句嵌套中else與if配對(duì)關(guān)系 else與離它最近的if語句相匹配 2 5 4switch語句switch語句是多分支語句 在C 中 使用switch語句可以更方便 更簡潔地實(shí)現(xiàn)多分支結(jié)構(gòu) 2 5C 的控制語句 97 switch語句的一般形式為 switch 表達(dá)式 case常數(shù)1 語句1 break case常數(shù)2 語句2 break case常數(shù)n 語句n break default 語句n 1 switch語句的執(zhí)行過程是 計(jì)算switch語句后面的表達(dá)式的值 當(dāng)表達(dá)式的值與某一個(gè)case后面的常量的值相等時(shí) 就執(zhí)行此case后面的語句 若所有的case中的常量的值都沒有與表達(dá)式的值相匹 2 5C 的控制語句 98 配的 就執(zhí)行default后面的語句 當(dāng)沒有default語句時(shí) 則什么也不執(zhí)行 執(zhí)行完一個(gè)case后面的語句后 程序執(zhí)行的流程轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行 case常量 只是起語句標(biāo)號(hào)作用 并不是在該處進(jìn)行條件判斷 在執(zhí)行switch語句時(shí) 根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號(hào) 就從此標(biāo)號(hào)開始執(zhí)行下去 不再進(jìn)行判斷 只有當(dāng)遇到break語句或執(zhí)行完全部switch內(nèi)的語句時(shí) 才跳出switch語句 例2 8 輸入學(xué)生的成績score 按分?jǐn)?shù)輸出其等級(jí) score 90為優(yōu) 90 score 80為良 80 score 70為中等 70 score 60為及格 scorevoidmain 2 5C 的控制語句 99 floatscore inta cout score a score 10 switch a case0 case9 cout Excellent break case8 cout Good break case7 cout Right break case6 cout Pass break default cout Failed 2 5C 的控制語句 100 說明 常數(shù)1 常數(shù)n必須互不相同 且每一常數(shù)后面要有冒號(hào) 各case子句和default子句的次序可任意 語句1 語句n 1可以為復(fù)合語句 在switch語句中出現(xiàn)的break語句并不是必需的 這要根據(jù)程序的需要來決定 在此break語句的作用是跳出switch語句 各case子句后面必須是常數(shù) 而不能是變量或表達(dá)式2 5 5循環(huán)語句C 提供了三種循環(huán)結(jié)構(gòu) while循環(huán)語句 do while循環(huán)語句和for循環(huán)語句 2 5C 的控制語句 101 2 5 5 1while循環(huán)語句while語句的一般形為 while 表達(dá)式 循環(huán)體語句 該語句的執(zhí)行過程 首先判斷while后面的表達(dá)式的值 若表達(dá)式的值為真 則執(zhí)行while的內(nèi)嵌語句 即循環(huán)體 一次 然后重復(fù)以上過程 直到表達(dá)式的值為假時(shí) 才退出循環(huán) 接著執(zhí)行循環(huán)體語句后面的其它程序語句 例2 9 求 2 5C 的控制語句 102 includevoidmain inti n n 0 i 1 while i 100 n n i i cout n n endl 2 5 5 2do while循環(huán)語句do while語句的一般形式為 2 5C 的控制語句 103 do 循環(huán)體語句 while 表達(dá)式 該語句的執(zhí)行過程 首先執(zhí)行do while的內(nèi)嵌語句 循環(huán)體語句 一次 然后再判斷while后面的表達(dá)式的值 若表達(dá)式的值為真 則重復(fù)執(zhí)行do while的內(nèi)嵌語句 如此反復(fù) 直到表達(dá)式的值為假時(shí) 循環(huán)結(jié)束 執(zhí)行while后面的語句 例2 10 求 includevoidmain 2 5C 的控制語句 104 inti n n 0 i 1 do n n i i while i 100 cout n n endl 說明 在循環(huán)體相同的情況下 while語句和do while語句的功能基本相同 二者的區(qū)別在于 當(dāng)循環(huán)條件一開始就為假時(shí) do while語句中的循環(huán)體至少會(huì)被執(zhí)行一次 而while語句則一次都不執(zhí)行 2 5C 的控制語句 105 2 5 5 3for循環(huán)語句for循環(huán)語句的一般格式為 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 循環(huán)體語句 該語句的執(zhí)行過程是 執(zhí)行for后面的表達(dá)式1 執(zhí)行表達(dá)式2 若表達(dá)式2的值為真 則執(zhí)行for語句的內(nèi)嵌語句 即循環(huán)體語句 然后執(zhí)行第 步 若為假 則循環(huán)結(jié)束 執(zhí)行第 步 執(zhí)行表達(dá)式3 返回繼續(xù)執(zhí)行第 步 循環(huán)結(jié)束 執(zhí)行for語句的循環(huán)體下面的語句 2 5C 的控制語句 106 例2 11 求 用for語句實(shí)現(xiàn)循環(huán) includevoidmain inti n n 0 for i 1 i 100 i n n i cout n n endl 2 5 5 4循環(huán)嵌套在一個(gè)循環(huán)的循環(huán)體中又包含另一個(gè)循環(huán)語句 稱為循環(huán)嵌套 C 的三種循環(huán)語句可以相互嵌套 構(gòu)成循環(huán) 2 5C 的控制語句 107 嵌套 以下幾種都是合法的循環(huán)嵌套 1 for for 2 while for do while 2 5C 的控制語句 108 3 do fo- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 面向?qū)ο蟮某绦蛟O(shè)計(jì)語言-C 面向 對(duì)象 程序設(shè)計(jì)語言 課件
鏈接地址:http://appdesigncorp.com/p-7433374.html