第03章數(shù)據(jù)類型、運算符與表達式_第1頁
第03章數(shù)據(jù)類型、運算符與表達式_第2頁
第03章數(shù)據(jù)類型、運算符與表達式_第3頁
第03章數(shù)據(jù)類型、運算符與表達式_第4頁
第03章數(shù)據(jù)類型、運算符與表達式_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章數(shù)據(jù)類型 運算符與表達式 3 1C語言的數(shù)據(jù)類型3 2常量和變量3 3整型數(shù)據(jù)3 4實型數(shù)據(jù)3 5字符型數(shù)據(jù)3 6算術(shù)運算與算術(shù)表達式3 7賦值運算與賦值表達式3 8C語言特有的運算和運算符 3 1C語言的數(shù)據(jù)類型 C語言提供的數(shù)據(jù)結(jié)構(gòu) 是以數(shù)據(jù)類型形式出現(xiàn)的 具體分類如下 1 基本類型分為整型 實型 又稱浮點型 字符型和枚舉型四種 2 構(gòu)造類型分為數(shù)組類型 結(jié)構(gòu)類型和共用類型三種 3 指針類型 在第9章中介紹 4 空類型C語言中的數(shù)據(jù) 有常量和變量之分 它們分別屬于上述這些類型 3 2常量和變量 3 2 1常量1 常量的概念在程序運行過程中 其值不能被改變的量稱為常量 2 常量的分類 1 整型常量 2 實型常量 3 字符常量 4 符號常量 definePI3 14main constfloatPI 3 14 floatr area r 2 area PI r r 常量的類型 可通過書寫形式來判別 3 2 2變量1 變量的概念在程序運行過程中 其值可以被改變的量稱為變量 2 變量的兩個要素 1 變量名 每個變量都必須有一個名字 變量名 變量命名遵循標識符命名規(guī)則 2 變量值 在程序運行過程中 變量值存儲在內(nèi)存中 在程序中 通過變量名來引用變量的值 5 a 標識符命名規(guī)則 1 有效字符 只能由字母 數(shù)字和下劃線組成 且以字母或下劃線開頭 2 有效長度 隨系統(tǒng)而異 但至少前 個字符有效 如果超長 則超長部分被舍棄 例如 由于student name和student number的前 個字符相同 有的系統(tǒng)認為這兩個變量 是一回事而不加區(qū)別 在TCV2 0中 變量名 標識符 的有效長度為 個字符 缺省值為 3 C語言的關(guān)鍵字不能用作變量名 注意 C語言對英文字母的大小敏感 即同一字母的大小寫 被認為是兩個不同的字符 習慣上 變量名和函數(shù)名中的英文字母用小寫 以增加可讀性 思考題 在C語言中 變量名total與變量名TOTAL ToTaL tOtAl等是同一個變量嗎 INT是合法變量嗎 C語言關(guān)鍵字C語言的關(guān)鍵字共有32個 根據(jù)關(guān)鍵字的作用 可分其為數(shù)據(jù)類型關(guān)鍵字 控制語句關(guān)鍵字 存儲類型關(guān)鍵字和其它關(guān)鍵字四類 1 數(shù)據(jù)類型關(guān)鍵字 12個 char double enum float int long short signed struct union unsigned void 2 控制語句關(guān)鍵字 12個 break case continue default do else for goto if return switch while 3 存儲類型關(guān)鍵字 4個 auto extern register static 4 其它關(guān)鍵字 4個 const sizeof typedef volatile 標識符命名的良好習慣 見名知意 所謂 見名知意 是指 通過變量名就知道變量值的含義 通常應(yīng)選擇能表示數(shù)據(jù)含義的英文單詞 或縮寫 作變量名 或漢語拼音字頭作變量名 例如 name xm 姓名 sex xb 性別 age nl 年齡 salary gz 工資 4 變量的定義與初始化在 語言中 要求對所有用到的變量 必須先定義 后使用 且稱在定義變量的同時進行賦初值的操作為變量初始化 1 變量定義的一般格式 存儲類型 數(shù)據(jù)類型變量名 變量名2 例如 floatradius length area 2 變量初始化的一般格式 存儲類型 數(shù)據(jù)類型變量名 初值 變量名2 初值2 例如 floatradius 2 5 length area 3 3整型數(shù)據(jù) 3 3 1整型變量1 分類根據(jù)占用內(nèi)存字節(jié)數(shù)的不同 整型變量又分為 類 1 基本整型 類型關(guān)鍵字為int 2 短整型 類型關(guān)鍵字為short int 3 長整型 類型關(guān)鍵字為long int 4 無符號整型 無符號型又分為無符號基本整型 unsigned int 無符號短整型 unsignedshort 和無符號長整型 unsignedlong 三種 只能用來存儲無符號整數(shù) 2 占用內(nèi)存字節(jié)數(shù)與值域上述各類型整型變量占用的內(nèi)存字節(jié)數(shù) 隨系統(tǒng)而異 在16位操作系統(tǒng)中 一般用 字節(jié)表示一個int型變量 且long型 字節(jié) int型 字節(jié) short型 字節(jié) 不同類型的整型變量 其值域不同 占用內(nèi)存字節(jié)數(shù)為n的 有符號 整型變量 其值域為 2n 8 1 2n 8 1 1 無符號整型變量的值域為 0 2n 8 1 例如 PC機中的一個int型變量 其值域為 22 8 1 22 8 1 1 即 32768 32767 一個unsigned型變量的值域為 0 22 8 1 即0 65535 參看P43表3 13 3 2整型常量 三種表示形式整型常量即整常數(shù) 在 語言中可用三種形式表示 1 十進制 例如10 36 2 八進制 以數(shù)字 開頭 例如012 3 十六進制 以數(shù)字 小寫字母x開頭 例如0 x36 分類 1 基本整型 在16位機中 用2字節(jié)存儲 其數(shù)據(jù)范圍與int型變量一樣 2 長整型 在數(shù)值后面加 L l 對超出基本整型值域的整型常量 可使用長整型常量表示 其取值范圍可達 例如 123l 315 等 3 無符號整型 在數(shù)值后面加 U u 在內(nèi)存按unsignedint規(guī)定方式存儲 類型匹配規(guī)則類型匹配規(guī)則為 一個整型常量 可以賦給能容納下其值的整型變量 例如 其值在 的整型常量 可以賦給int型變量和longint型變量 其值在 的整型常量 就只能賦給longint型變量 整型數(shù)據(jù)的溢出main inta b a 32767 b a 1 printf d d a b getch 運行結(jié)果為 a b 3 4實型數(shù)據(jù) 2 4 1實型變量1 分類 1 單精度型 類型關(guān)鍵字為float 一般占 字節(jié) 位 提供 位有效數(shù)字 2 雙精度型 類型關(guān)鍵字為double 一般占 個字節(jié) 提供15 16位有效數(shù)字 3 長雙精度型 類型關(guān)鍵字為longdouble 一般占16個字節(jié) 提供18 19位有效數(shù)字 實型數(shù)據(jù)在內(nèi)存中的存放形式P46圖3 7 實型數(shù)據(jù)的舍入誤差main floata b a 123456 789e5 b a 20 printf f f a b 運行結(jié)果為 12345678848 000000 12345678848 000000 3 4 2實型常量 表示形式實型常量即實數(shù) 在 語言中又稱浮點數(shù) 其值有兩種表達形式 1 十進制形式 例如3 14 9 8 2 指數(shù)形式 E e 例如3 0 5等 但注意必須有 規(guī)范化的指數(shù)形式 指的整數(shù)部分只有一位非零數(shù)字 實數(shù)以指數(shù)輸出按此形式 思考題 如e3 2 1e3 5 e3合法嗎 關(guān)于類型float型 12 5f F double型 12 5 缺省類型longdouble 12 5L l 3 5字符型數(shù)據(jù) 3 5 1字符常量1 字符常量的定義用一對單引號括起來的單個字符 稱為字符常量 例如 A 等 2 轉(zhuǎn)義字符 語言還允許使用一種特殊形式的字符常量 就是以反斜杠 開頭的轉(zhuǎn)義字符 P48表3 3 101 x41 A 65 注意 如果反斜杠或單引號本身作為字符常量 必須使用轉(zhuǎn)義字符 例3 1 用轉(zhuǎn)義字符輸出可打印字符和不可打印字符 代碼文件名 c3 1 C 程序功能 用轉(zhuǎn)義字符輸出可打印字符和不可打印字符 main printf x4F x4B x21 n 等價于printf OK n printf x15 xAB n getch 程序運行結(jié)果如下 例3 5 c3 1 c include stdio h voidmain printf abc tde rf tg n printf h ti b bjk getch 程序演示 3 5 2字符變量字符變量的類型關(guān)鍵字為char 也允許定義為unsignedchar 一般占用1字節(jié)內(nèi)存單元 1 變量值的存儲字符變量用來存儲字符常量 將一個字符常量存儲到一個字符變量中 實際上是將該字符的ASCII碼值 無符號整數(shù) 存儲到內(nèi)存單元中 例如 charch1 ch2 定義兩個字符變量 ch1 ch2 ch1 a ch2 b 給字符變量賦值 2 特性字符數(shù)據(jù)在內(nèi)存中存儲的是字符的ASCII碼 一個無符號整數(shù) 其形式與整數(shù)的存儲形式一樣 P50如圖3 8所示 所以 語言允許字符型數(shù)據(jù)與整型數(shù)據(jù)之間通用 1 一個字符型數(shù)據(jù) 既可以字符形式輸出 也可以整數(shù)形式輸出 例3 3 字符變量的字符形式輸出和整數(shù)形式輸出 代碼文件名 c3 3 c 程序功能 用字符形式和整數(shù)形式輸出字符變量 main charch1 ch2 ch1 a ch2 b printf ch1 c ch2 c n ch1 ch2 printf ch1 d ch2 d n ch1 ch2 程序運行結(jié)果 ch1 a ch2 bch1 97 ch2 98 程序演示 2 允許對字符數(shù)據(jù)進行算術(shù)運算 此時就是對它們的ASCII碼值進行算術(shù)運算 例3 4 字符數(shù)據(jù)的算術(shù)運算 代碼文件名 c3 4 C 程序功能 字符數(shù)據(jù)的算術(shù)運算 main charch1 ch2 ch1 a ch2 B 字母的大小寫轉(zhuǎn)換 printf ch1 c ch2 c n ch1 32 ch2 32 用字符形式輸出一個大于256的數(shù)值 printf ch1 200 d n ch1 200 printf ch1 200 c n ch1 200 printf ch1 256 d n ch1 256 printf ch1 256 c n ch1 256 程序運行結(jié)果 ch1 A ch2 bch1 200 297ch1 200 ch1 256 353ch1 256 a 程序演示 思考題 用字符形式輸出一個大于256的數(shù)值 會得到什么結(jié)果 3 5 3字符串常量1 字符串常量的概念和字符串長度字符串常量是用一對雙引號括起來的若干字符序列 字符串中字符的個數(shù)稱為字符串長度 長度為0的字符串 即一個字符都沒有的字符串 稱為空串 表示為 一對緊連的雙引號 例如 Howdoyoudo Goodmorning 等 都是字符串常量 其長度分別為14和13 空格也是一個字符 如果反斜杠和雙引號作為字符串中的有效字符 則必須使用轉(zhuǎn)義字符 例如 1 C msdos v6 22 C msdos v6 22 2 Isay Goodbye Isay Goodbye 可用作字符串常量的續(xù)行符 例如 ABCDEFIJK ABCDE FIJK 2 字符串的存儲C語言規(guī)定 在存儲字符串常量時 由系統(tǒng)在字符串的末尾自動加一個 0 作為字符串的結(jié)束標志 注意 在源程序中書寫字符串常量時 不必加結(jié)束字符 0 否則畫蛇添足 如果有一個字符串為 CHINA 則它在內(nèi)存中的實際存儲如下所示 最后一個字符 0 是系統(tǒng)自動加上的 它占用 字節(jié)而非 字節(jié)內(nèi)存空間 綜上所述 字符常量 A 與字符串常量 A 是兩回事 1 定界符不同 字符常量使用單引號 而字符串常量使用雙引號 2 長度不同 字符常量的長度固定為1 而字符串常量的長度 可以是0 也可以是某個整數(shù) 3 存儲要求不同 字符常量存儲的是字符的ASCII碼值 而字符串常量 除了要存儲有效的字符外 還要存儲一個結(jié)束標志 0 思考題 a 20與 a 20合法嗎 3 6算術(shù)運算與算術(shù)表達式 在 語言中 除控制語句和輸入輸出函數(shù)外 其它所有基本操作都作為運算符處理 1 五種基本算術(shù)運算符 減法 取負 求余數(shù) 1 關(guān)于除法運算 C語言規(guī)定 兩個整數(shù)相除 其商為整數(shù) 小數(shù)部分被舍棄 例如 5 2 2 2 關(guān)于求余數(shù)運算 要求兩側(cè)的操作數(shù)均為整型數(shù)據(jù) 否則出錯 思考題 負整數(shù)求余情況 5 2 5 2 5 2 2 表達式和算術(shù)表達式 1 表達式的概念用運算符和括號將運算對象 常量 變量和函數(shù)等 連接起來的 符合 語言語法規(guī)則的式子 稱為表達式 單個常量 變量或函數(shù) 可以看作是表達式的一種特例 將單個常量 變量或函數(shù)構(gòu)成的表達式稱為簡單表達式 其它表達式稱之為復雜表達式 2 算術(shù)表達式的概念表達式中的運算符都是算術(shù)運算符 例如 3 6 9 x y 2 1等 都是算術(shù)表達式 良好的源程序書寫習慣 在表達式中 在雙目運算符的左右兩側(cè)各加一個空格 可增強程序的可讀性 請比較表達式 x y 2 1 與 x y 2 1 您認為哪個的可讀性更好一些 3 運算符的優(yōu)先級與結(jié)合性P375附錄II 1 語言規(guī)定了運算符的優(yōu)先級和結(jié)合性 所謂結(jié)合性是指 當一個操作數(shù)兩側(cè)的運算符具有相同的優(yōu)先級時 該操作數(shù)是先與左邊的運算符結(jié)合 還是先與右邊的運算符結(jié)合自左至右的結(jié)合方向 稱為左結(jié)合性 反之 稱為右結(jié)合性 結(jié)合性是 語言的獨有概念 除單目運算符 賦值運算符和條件運算符是右結(jié)合性外 其它運算符都是左結(jié)合性 2 表達式求值1 按運算符的優(yōu)先級高低次序執(zhí)行 例如 先乘除后加減 2 如果在一個運算對象 或稱操作數(shù) 兩側(cè)的運算符的優(yōu)先級相同 則按 語言規(guī)定的結(jié)合方向 結(jié)合性 進行 例如 算術(shù)運算符的結(jié)合方向是 自左至右 即 在執(zhí)行 a b c 時 變量b先與減號結(jié)合 執(zhí)行 a b 然后再執(zhí)行加c的運算 4 數(shù)據(jù)類型轉(zhuǎn)換 1 在 語言中 整型 實型和字符型數(shù)據(jù)間可以混合運算 因為字符數(shù)據(jù)與整型數(shù)據(jù)可以通用 如果一個運算符兩側(cè)的操作數(shù)的數(shù)據(jù)類型不同 則系統(tǒng)按 先轉(zhuǎn)換 后運算 的原則 首先將數(shù)據(jù)自動轉(zhuǎn)換成同一類型 然后在同一類型數(shù)據(jù)間進行運算 轉(zhuǎn)換規(guī)則P54圖3 10所示 1 橫向向左的箭頭 表示必須的轉(zhuǎn)換 char和short型必須轉(zhuǎn)換成int型 float型必須轉(zhuǎn)換成double型 2 縱向向上的箭頭 表示不同類型的轉(zhuǎn)換方向 例如 int型與double型數(shù)據(jù)進行混合運算 則先將int型數(shù)據(jù)轉(zhuǎn)換成double型 然后在兩個同類型的數(shù)據(jù)間進行運算 結(jié)果為double型 注意 箭頭方向只表示數(shù)據(jù)類型由低向高轉(zhuǎn)換 不要理解為int型先轉(zhuǎn)換成unsigned型 再轉(zhuǎn)換成long型 最后轉(zhuǎn)換成double型 例inti floatf doubled longe 10 a i f d e 2 除自動轉(zhuǎn)換外 語言也允許強制轉(zhuǎn)換 數(shù)據(jù)類型強制轉(zhuǎn)換的一般格式為 要轉(zhuǎn)換成的數(shù)據(jù)類型 被轉(zhuǎn)換的表達式 當被轉(zhuǎn)換的表達式是一個簡單表達式時 外面的一對圓括號可以缺省 例如 inta 10 double a 等價于 double a 將變量a的值轉(zhuǎn)換成double型 int x y 將x y的結(jié)果轉(zhuǎn)換成int型 float 5 2 等價于 float 5 2 將5轉(zhuǎn)換成實型 再除以2 2 5 float 5 2 將5整除2的結(jié)果 2 轉(zhuǎn)換成實型 2 0 注意 強制轉(zhuǎn)換類型得到的是一個所需類型的中間量 原表達式類型并不發(fā)生變化 例如 double a只是將變量a的值轉(zhuǎn)換成一個double型的中間量 其數(shù)據(jù)類型并未轉(zhuǎn)換成double型 3 7賦值運算與賦值表達式 1 賦值運算賦值符號 就是賦值運算符 它的作用是將一個表達式的值賦給一個變量 結(jié)合性為 自右而左 賦值運算符的一般形式為 變量 賦值表達式例如 x 5y float 5 2如果表達式值的類型 與被賦值變量的類型不一致 但都是數(shù)值型或字符型時 系統(tǒng)自動地將表達式的值轉(zhuǎn)換成被賦值變量的數(shù)據(jù)類型 然后再賦值給變量 類型轉(zhuǎn)換規(guī)則 P591 實型賦給整型 舍棄實數(shù)的小數(shù)部分 2 整型賦給實型 值不變 但以浮點數(shù)形式存儲3 double型賦給float型 截取7位有效數(shù)字 但需注意數(shù)值范圍不能溢出 4 字符型賦給整型 數(shù)據(jù)放入低8位中 無符號高8位補 0 有符號高8位做符號擴展 補 0 或 1 5 整型賦給字符型 僅傳送低8位 6 int型賦給long型 高位進行符號擴展 7 unsignedint賦給longint 高位補 0 8 非unsigned型賦給長度相等unsigned型 照原樣賦值思考題 假設(shè)變量num的數(shù)據(jù)類型為float 其值為2 5 則執(zhí)行 num int num 后 num的值等于多少 2 復合賦值運算復合賦值運算符是由賦值運算符之前再加一個雙目運算符構(gòu)成的 結(jié)合性為 自右而左 復合賦值運算的一般格式為 變量雙目運算符 表達式 復合賦值運算符它等價于 變量 變量雙目運算符 表達式 當表達式為簡單表達式時 表達式外的一對圓括號才可缺省 否則可能出錯 例如 x 3 等價于x x 3 y x 6 等價于y y x 6 而不是y y x 6 C語言規(guī)定的10種復合賦值運算符如下 復合算術(shù)運算符 5個 復合位運算符 5個 思考題 c b a 2如何運算 3 賦值表達式由賦值運算符或復合賦值運算符 將一個變量和一個表達式連接起來的表達式 稱為賦值表達式 1 一般格式變量 復合 賦值運算符表達式 2 賦值表達式的值任何一個表達式都有一個值 賦值表達式也不例外 被賦值變量的值 就是賦值表達式的值 例如 a 5 這個賦值表達式 變量a的值 就是它的值 思考題 a b 10 c 6合法嗎 3 8C語言特有的運算和運算符 2 9 1自增 自減 運算1 作用自增運算使單個變量的值增 自減運算使單個變量的值減 2 用法與運算規(guī)則自增 自減運算符都有兩種用法 1 前置運算 運算符放在變量之前 變量 變量先使變量的值增 或減 然后再以變化后的值參與其它運算 即先增減 后運算 2 后置運算 運算符放在變量之后 變量 變量 變量先參與其它運算 然后再使變量的值增 或減 即先運算 后增減 例3 5 自增 自減運

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論