《c語言程序設(shè)計》第2章.ppt
《《c語言程序設(shè)計》第2章.ppt》由會員分享,可在線閱讀,更多相關(guān)《《c語言程序設(shè)計》第2章.ppt(61頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第二章基本數(shù)據(jù)類型 運算符和表達式 C語言程序設(shè)計 2 本章主要內(nèi)容 本章介紹C語言的基礎(chǔ) 包括 數(shù)據(jù)類型運算符和表達式均是程序設(shè)計的基本知識為什么討論這些知識 通常程序要對數(shù)據(jù)進行操作處理 處理的對象是數(shù)據(jù)通過運算符和表達式進行操作 3 例如 例2 1 計算圓的面積 半徑為5cm 程序如下 main floatr area r 5 area 3 14 r r printf f n area 運算結(jié)果是輸出圓的面積 78 500000 程序中用到的數(shù)據(jù) r area 5 3 14對數(shù)據(jù)進行的運算 例jc2 1 4 分析 計算機操作處理時 要完成以下工作 在內(nèi)存中給半徑r和運算結(jié)果area開辟存儲空間 存放它們的值 應(yīng)該留多大的地方來存放它們的值 數(shù)據(jù)5和3 14與r area不同 它們是在編寫程序時就給出確定的值 在運算過程中不會改變 這樣的數(shù)計算機怎么處理 對整數(shù)5和小數(shù)3 14 計算機存放時是否有區(qū)別 涉及數(shù)據(jù)類型的基本知識 5 C語言的數(shù)據(jù)類型 C數(shù)據(jù)類型 本章討論基本類型數(shù)據(jù) 6 2 1 1整型數(shù)據(jù) 1 整型數(shù)據(jù)的類型基本整型數(shù)據(jù)int 分配2Byte短整型數(shù)據(jù)shortint 分配2Byte長整型數(shù)據(jù)longint 分配4Byte整型數(shù)據(jù)均以二進制補碼形式存儲 問題 為什么要采用補碼 如何表示 7 計算機中正 負數(shù)的表示 例如 109 1101101 2要區(qū)別 109和 109方法是 將符號也數(shù)碼化即 正的符號 用0表示負的符號 用1表示 計算機中的數(shù)表示方法是 符號位 二進制數(shù)值 以8bit為例 109 1101101 01101101 109 1101101 11101101 8 問題 計算機計算復雜化 例如計算 19 22 10010011 00010110 解決的方法是 使用反碼或補碼的表示方法 按前述表示的編碼稱為原碼 即能將減法一律轉(zhuǎn)換為加法 需要判斷符號是否相同 如果相同 結(jié)果符號不變 并進行絕對值相加如果不同 結(jié)果取絕對值大的數(shù)的符號 并進行絕對值相減 9 原碼 反碼和補碼 正數(shù) 原碼 反碼 補碼相同符號位為0 數(shù)值為對應(yīng)的二進制數(shù) 109 01101101 原 01101101 反 01101101 補負數(shù) 原碼符號位為1 數(shù)值為絕對值的二進制數(shù) 109 11101101 原反碼符號位為1 數(shù)值為絕對值的二進制數(shù)各位變反 109 10010010 反補碼符號位為1 數(shù)值為絕對值的二進制數(shù)各位變反加1 109 10010011 補 10 2 有符號和無符號整型數(shù)據(jù) 有符號的整型數(shù)據(jù)signedint無符號的整型數(shù)據(jù)unsignedint區(qū)別是將最高位看作符號位還是數(shù)據(jù)位 例如 1111111110101000作為有符號數(shù)使用時 最高為符號位為負數(shù) 值是 88 再求一次補 作為無符號數(shù)使用時 最高為數(shù)據(jù)位為無符號的數(shù) 值是 65448 11 例如 main unsignedintm m 65448 printf nm d n m printf m u n m 例jc2 a 輸出結(jié)果 m 88m 65448 按有符號數(shù)輸出 按無符號數(shù)輸出 12 整型數(shù)據(jù)的類型及規(guī)定 方括號表示可選項int分配2Byte long分配4Byte 13 2 1 2實型數(shù)據(jù) 1 實型數(shù)據(jù)的類型單精度實型數(shù)據(jù)float 分配4Byte雙精度實型數(shù)據(jù)double 分配8Byte2 實型數(shù)據(jù)的存儲 單精度實型 指數(shù)部分 小數(shù)部分 小數(shù)的符號位 指數(shù)的符號位 14 實型數(shù)據(jù)的類型及規(guī)定 C標準并未具體規(guī)定各種實型數(shù)據(jù)所占字節(jié)數(shù) 也不規(guī)定具體小數(shù)和指數(shù)部分的位數(shù) 一般而言 小數(shù)部分位數(shù)多 數(shù)據(jù)表示的有效數(shù)字多 精度就高 而指數(shù)部分位數(shù)多 則表示的數(shù)據(jù)范圍更大 有效數(shù)字的意義 例jC2 a 15 2 1 3字符型數(shù)據(jù) 字符型數(shù)據(jù)char 分配1Byte字符型數(shù)據(jù)是指字母 數(shù)字 各種符號等用ASCII值表示的字符例如 a 是一個char類型數(shù)據(jù) 稱作字符常量 存儲 01100001 2 1 4空類型 空類型void通常與指針或函數(shù)結(jié)合使用 16 2 2常量 變量與標準函數(shù) 主要內(nèi)容 常量變量標準庫函數(shù) 17 2 2 1常量 在運行程序的過程中值保持不變的量1 整型常量十進制 0 9八進制 0 7 以0開頭十六進制 0 9 A F a f 以0 x或0X開頭 例如 100 80 12301002401000730 x380 x100X100XFF0 x0a 18 1 整型常量 整型常量的類型 根據(jù)值大小默認類型 整型常量后面加l或L 則認為是longint型例如 123L 0L 432l 0 x100l 注意 十六進制常量中可以使用大寫字母A F 也可以使用小寫字母a f 八進制常量中不能出現(xiàn)數(shù)字8或9例如 018 0921非法 19 2 實型常量 十進制形式1 01 12 0 12 00 0指數(shù)形式1e31 8e 3 123E 6 1E 3 指數(shù)只能是整數(shù) 而尾數(shù)則可以是整數(shù)也可以是小數(shù) 無論指數(shù)或尾數(shù)均不能省略例如 1e E 5 E 3非法實型常量的類型 默認為double型 后面加F 或f 則強調(diào)表示該數(shù)是float類型例如 3 5f 1e2F 20 3 字符型常量 可視字符常量單引號括起來的單個可視字符例如 a A 3 等轉(zhuǎn)義字符常量單引號括起來的 與可視字符組合 例如 21 4 字符串常量 用雙引號括起的一個字符序列例如 ABC 123 a n t nGoodmorning 字符串常量的長度 所包含的字符個數(shù)字符串常量的存儲方式 所占存儲單元數(shù) 串長度 1例如 字符串結(jié)束標記 22 5 符號常量 以標識符來代表的常量事先編譯預處理命令define定義編譯時先由系統(tǒng)替換為它所代表的常量 再進行編譯例如 defineLEN2 5main floata b a 2 3 14 LEN b 3 14 LEN LEN printf a f b f n a b 編譯前系統(tǒng)進行替換 23 5 符號常量 main floata b a 2 3 14 2 5 b 3 14 2 5 2 5 printf a f b f n a b define是編譯預處理命令 必須以 開頭編譯預處理命令在第7章討論 替換為 24 2 2 2變量 1 變量的有關(guān)概念在程序運行過程中 其值改變的數(shù)據(jù) 稱為變量 變量用標識符表示 稱為變量名 變量必須 先定義后使用 系統(tǒng)為變量分配存儲單元 存儲變量的值 編寫程序時通過變量名來存 取變量值 例如 有變量a它的值是510 25 2 變量定義 變量定義的一般格式 數(shù)據(jù)類型說明符變量列表 例如 inti j longk m floatx y charch1 ch2 必須使用合法的標識符作變量名不能使用關(guān)鍵字為變量命名 26 3 變量的初始化 允許在說明變量的時候?qū)ψ兞抠x初值 例如 inta 5 b 10 2 doublex 23 568 y charch1 a ch2 66 ch3 142 表示定義變量并對變量存儲單元賦值 錯誤的初始化 inta 3 b b 5 floatm n 23 16 27 2 2 3標準庫函數(shù) 由C編譯系統(tǒng)定義的一種函數(shù) 存放在系統(tǒng)函數(shù)庫中 用戶可以根據(jù)需要隨時調(diào)用常用函數(shù)如 printf scanf fabs sqrt sin 常用數(shù)學函數(shù)參見教材P30表2 5 函數(shù)調(diào)用形式 函數(shù)名 參數(shù)表 例如 putchar a sqrt x 例jc2 3 28 2 3運算符和表達式 主要內(nèi)容 算術(shù)運算符和算術(shù)表達式賦值運算符和賦值表達式關(guān)系運算符和關(guān)系表達式邏輯運算符和邏輯表達式位運算符和位運算表達式條件運算符和條件表達式逗號運算符和逗號表達式其他運算符及其運算 29 運算符的有關(guān)概念 作用 對運算對象完成規(guī)定的操作運算類型 按運算對象分 單目 雙目 三目按功能分 算術(shù) 賦值 關(guān)系 邏輯條件 逗號 位 其他 30 運算符的優(yōu)先級和結(jié)合性 優(yōu)先級指各種運算符號的運算優(yōu)先順序例如 算術(shù)運算優(yōu)先于關(guān)系運算算術(shù)運算中先 后 結(jié)合性指運算符號和運算對象的結(jié)合方向分為 從左向右 左結(jié)合 和從右向左 右結(jié)合 例如 算術(shù)運算符為左結(jié)合a b 4賦值運算符為右結(jié)合a b 5 C語言規(guī)定見教材P297附錄B 31 本章涉及的運算符 sizeof 數(shù)據(jù)類型標識符 32 表達式的有關(guān)概念 什么是表達式由運算符將運算對象連接成的式子 它描述了一個具體的求值運算過程 計算表達式的值按照運算符的運算規(guī)則求值求值時注意運算符的優(yōu)先級和結(jié)合性表達式值的類型自動轉(zhuǎn)換強制轉(zhuǎn)換 33 例如 表達式 150 b 2 12 456b a 2a a a 2 f a b c a b c max a b a ba 3 a 3 a a1 float a 6 34 算術(shù)運算 算術(shù)運算符的優(yōu)先級 沒有乘方運算符 要計算a3要寫作a a a的連乘 或用標準庫函數(shù)pow a 3 的運算對象可為各種類型數(shù)據(jù) 但是當進行兩個整型數(shù)據(jù)相除時 運算結(jié)果也是整型數(shù)據(jù) 要求運算對象必須是整型數(shù)據(jù) 功能是求兩數(shù)相除的余數(shù) 余數(shù)的符號與被除數(shù)的符號相同 35 自增自減運算 是單目運算符有前綴和后綴兩種形式前綴形式 先自增 自減 再引用 后綴形式 先引用再自增 自減 功能 前綴形式 a等價于a a 1 a等價于a a 1后綴形式a 等價于a a 1a 等價于a a 1 表達式的值會不同 36 例如 當a 5時 a表達式的值為6 且a 6 a 表達式的值為5 且a 6 b a等價于a a 1 b a表達式的值為6 且a 6 b 6 b a 等價于b a a a 1表達式的值為5 且a 6 b 5 37 說明 和 的運算對象只能是變量 或運算結(jié)果是變量的表達式 不能是常量 或運算結(jié)果是數(shù)值的表達式 例如 5 a 2 不合法 具有右結(jié)合性 結(jié)合方向為從右到左 例如 a 等價于 a 如果有多個運算符連續(xù)出現(xiàn)時 C系統(tǒng)盡可能多的從左到右將字符組合成一個運算符例如 i j等價于 i j i j等價于 i j 38 main inta 5 printf d d n a a 說明 續(xù) 對函數(shù)參數(shù)的求值順序 TurboC系統(tǒng)先計算最右邊的參數(shù)值 再依次計算左面的參數(shù)值 例2 5 有多個函數(shù)參數(shù)且為同一變量自增的運算處理 輸出結(jié)果 65 運行例2 5 39 說明 續(xù) 例2 6 有多個函數(shù)參數(shù)且為同一變量多次自增的運算處理 main inta 5 printf d d n a a a 輸出結(jié)果 711 運行例2 6 40 賦值運算 賦值運算符 右結(jié)合 賦值表達式將表達式的值存入變量對應(yīng)的內(nèi)存單元中m 12b a 2m 3 n等價于m m 3 n x x 5 41 說明 賦值號左邊必須是變量 右邊可以是C語言任意合法的表達式例如 n t 210等價于 a b b c 10 賦值號與數(shù)學中的等號含義不同例如 數(shù)學中a b等價于b aC語言中a b不等價于b a 42 關(guān)系運算 關(guān)系運算符 左結(jié)合 c等價于a b c 與 a b c不等價關(guān)系運算符優(yōu)先于賦值 低于算術(shù) 43 說明 關(guān)系運算的結(jié)果應(yīng)該是邏輯值 C語言用數(shù)值用1表示邏輯真 0表示邏輯假例如 7 5的值是1 5 7的值是0 a b 的值是0 a b 的值是1即關(guān)系表達式的值 0或1實型數(shù)可進行大于或小于比較 但通常不進行 或 的關(guān)系運算 44 邏輯運算符 邏輯運算符 邏輯運算符的運算規(guī)則 45 邏輯表達式 邏輯表達式用邏輯運算符將運算對象連接成的式子例如 0 b a b c da b 5 c 4 x y z邏輯運算符的優(yōu)先級和結(jié)合性 是單目運算符 右結(jié)合 高于算術(shù) 和 是雙目運算符 左結(jié)合 高于賦值運算符 低于關(guān)系運算符 46 邏輯運算規(guī)則 從左到右依次進行邏輯計算運算對象為非0表示邏輯真運算對象為0表示邏輯假邏輯運算的結(jié)果為0或1例如設(shè) a 15 b 0 c 2a b c結(jié)果為0a b c結(jié)果為1 a c b c結(jié)果為1 47 邏輯運算規(guī)則 續(xù) 運算按照從左至右的順序進行 一旦能夠確定邏輯表達式的值 就立即結(jié)束運算 邏輯運算的短路性質(zhì)例如設(shè) a 1 b 0 c 2a b c a b c 為0 運算終止 表達式值為0 為非0 運算終止 表達式值為1且a為2 b為0 c為 2 b c保持原值 48 關(guān)系與邏輯運算符的應(yīng)用 表示數(shù)學公式a b c判斷a b c三條線段能否組成一個三角形a b不同時為負 a b c a c b b c a a 0 b 0 a 0 a 0 b 0 b 0 a b b c 49 位運算符 位運算符的運算對象只能是整型數(shù)據(jù)或字符型數(shù)據(jù) 不能是實型數(shù)據(jù)運算對象一律按二進制補碼參加運算 并按位進行運算位運算的結(jié)果是一個整型數(shù)據(jù) 低于單目 算術(shù)運算符 高于其他運算符 低于單目 算術(shù)和關(guān)系運算符 高于其他運算符 50 位邏輯運算符的運算規(guī)則 假設(shè)ai和bi均是一個二進制位 bit 例如 假設(shè)a 10 b 010求a b a b a b a 51 程序如下 main inta 10 b 010 printf d d n a 輸出結(jié)果 8102 11 0000000000001010 00000000000010000000000000001000即 a b的值是8 運行jc2 b 52 移位運算 例如 a b 1等價于 a 8 b 1 例如 假設(shè)a 10 b 2 求a b 1 main inta 10 b 2 printf d d n a b 1 輸出結(jié)果 409 運行jc2 c 請自行分析運行結(jié)果 53 條件表達式運算 條件運算符 條件表達式的一般形式表達式1 表達式2 表達式3例如 m 10 b 20 a bx 3 a 5 100 200 C語言中唯一的三目運算符 要正確區(qū)分用 和 分隔的表達式涉及條件運算符的優(yōu)先級與結(jié)合性 54 條件運算符優(yōu)先級 條件運算符優(yōu)先級高于賦值 逗號運算符 低于其他運算符例如 m 10 b 20 a b x 3 a 5 100 200 等價于 m n x a 3 等價于 a 10 b 20 a b 等價于 x 3 a 5 100 200 55 條件運算符的結(jié)合性 條件運算符具有右結(jié)合性當一個表達式中出現(xiàn)多個條件運算符時 應(yīng)該將位于最右邊的問號與離它最近的冒號配對 并按這一原則正確區(qū)分各條件運算符的運算對象 例如 w x x w x y x y與w x x w x y x y 等價與 w x x w x y x y不等價 56 逗號表達式運算 逗號表達式的一般形式表達式1 表達式2 表達式n逗號表達式的值從左向右 依次對表達式求值 最后得到表達式n的值就是逗號表達式的值 例如 a 5 a a 3表達式值為18 且a 6 t 1 t 5 t 表達式值為1 且t 2 x a 3 5 a 4 賦值表達式的值為60 且x 60 a 15 57 取地址運算符 為單目運算符運算對象只能是變量運算結(jié)果是變量的存儲地址例如有定義 inta student charch 可以對變量a ch student進行 運算 a ch student 58 長度運算符sizeof 為單目運算符運算對象只能是變量名或數(shù)據(jù)類型標識符運算結(jié)果為該變量或該數(shù)據(jù)類型的長度 main inta 5 doublex printf d d sizeof int sizeof a printf d d sizeof double sizeof x printf d d n sizeof float sizeof char 輸出結(jié)果 228841 運行jc2 d 59 2 4運算中數(shù)據(jù)類型的轉(zhuǎn)換 2 4 1數(shù)據(jù)類型的自動轉(zhuǎn)換轉(zhuǎn)換原則 自動將精度低 表示范圍小的運算對象類型向精度高 表示范圍大的運算對象類型轉(zhuǎn)換 例如有定義 inta charch 表達式 a ch 2 35La ch 2 35 60 2 賦值運算中的類型轉(zhuǎn)換 小數(shù)部分自動補0 自動舍去實型表達式的小數(shù)部分 注意不進行四舍五入 自動截取表達式值的低字節(jié)賦值 舍去高字節(jié) 自動給高字節(jié)補0或補1 61 2 4 2數(shù)據(jù)類型的強制轉(zhuǎn)換 強制轉(zhuǎn)換的一般形式 類型名 表達式例如 int b 3 x 31 float a 6 注意 float 22 5與 float 22 5 不同錯誤的類型轉(zhuǎn)換 int b a 5b int 3 a- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- c語言程序設(shè)計 語言程序設(shè)計
鏈接地址:http://www.szxfmmzy.com/p-6598988.html