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