數(shù)據(jù)類型運算符與表達(dá)式1.ppt_第1頁
數(shù)據(jù)類型運算符與表達(dá)式1.ppt_第2頁
數(shù)據(jù)類型運算符與表達(dá)式1.ppt_第3頁
數(shù)據(jù)類型運算符與表達(dá)式1.ppt_第4頁
數(shù)據(jù)類型運算符與表達(dá)式1.ppt_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)類型、運算符與表達(dá)式,西南財經(jīng)大學(xué)經(jīng)濟(jì)信息工程學(xué)院 劉家芬 ,C語言大學(xué)實用教程,例2.1 第一個C程序,#include void main( ) printf (“This is a program. n”); ,編譯預(yù)處理命令 導(dǎo)入stdio.h:標(biāo)準(zhǔn)輸入輸出頭文件,C程序的主函數(shù),每個C程序有且僅有一個主函數(shù),void表示主函數(shù)不返回任何值。,是stdio.h中定義的標(biāo)準(zhǔn)輸出函數(shù),用于在屏幕上顯示。,( )中就是需要輸出的內(nèi)容,將用“ ”引起來的字符串原樣顯示在屏幕上即可,n是一個特殊的字符,稱為轉(zhuǎn)義字符。用于控制光標(biāo)移動到下一行,例2.2 第二個C程序,#include void main() int a,b,sum; a=123; b=456; sum=a+b; printf(“sum is %dn“,sum); ,編譯預(yù)處理命令 導(dǎo)入stdio.h:標(biāo)準(zhǔn)輸入輸出頭文件,C程序的主函數(shù),每個C程序有且僅有一個主函數(shù),void表示主函數(shù)不返回任何值。,定義了三個變量,名字分別是a,b,sum.這三個變量都是int型。,給變量a賦值123,實際上就是向該內(nèi)存單元放入值123;給變量b賦值456.,變量sum的值是變量a的值加上變量b的值;,調(diào)用stdio.h中的printf函數(shù),在屏幕上顯示計算結(jié)果。首先原樣輸出sum is,后面的%d是格式控制符,表示“以十進(jìn)制整數(shù)形式輸出”變量sum的值,例2.3 第三個C程序,#include void main() int max (int x,int y); int a,b,c; scanf(“%d,%d“, ,聲明后面的語句中將使用一個用戶自定義的函數(shù)max,該函數(shù)使用兩個整型參數(shù),并且返回一個整型值,使用stdio.h中定義的標(biāo)準(zhǔn)庫函數(shù)scanf,從鍵盤讀取兩個十進(jìn)制整數(shù),分別賦值給a和b,以a和b作為參數(shù)調(diào)用用戶自定義函數(shù)max,并且將該函數(shù)的返回值賦給變量c,使用stdio.h中定義的標(biāo)準(zhǔn)輸出庫函數(shù)pintf,這里是函數(shù)max的定義部分,該函數(shù)使用兩個整型參數(shù)x和y,作用是找出x和y中較大的值并返回給主程序,C程序的特點,函數(shù)是程序的基本單位 主函數(shù) 用戶自定義函數(shù) 系統(tǒng)提供的庫函數(shù) 函數(shù)由函數(shù)頭和函數(shù)體組成 函數(shù)頭包括返回值類型、函數(shù)名、形式參數(shù)列表 函數(shù)體 由語句;組成,常量(Constant),程序運行過程中保持固定值的數(shù)據(jù),根據(jù)類型分為: 整型常量 如5,程序2中的123,456 實型常量 如4.6,-1.23,1e-4 字符常量 如5, c, /n 字符串常量 如“5”和程序1中的“This is a program.” 符號常量(宏常量) #define PI=3.1415926 枚舉常量 enum enum responseyes,no; enum response answer; answer=yes;,變量(Variable),在程序執(zhí)行過程中值會發(fā)生改變的量 變量名代表著內(nèi)存中的一個存儲單元,里面存放的就是變量的值。 怎么給變量起名字呢? 標(biāo)識符的命名規(guī)則 由英文字母、數(shù)字和下劃線組成,只能以字母和下劃線開頭。不允許使用關(guān)鍵字作為標(biāo)識符的名字 。 區(qū)分大小寫 除了變量名外,符號常量、自定義函數(shù)、數(shù)組等的名字也都是標(biāo)識符, 簡單地說,標(biāo)識符就是用戶在程序中起的一個名字。,123,456,我的名字叫a,我的名字叫b,變量使用的原則,使用變量的基本原則先定義,后使用 編譯時確定該變量所占用的內(nèi)存單元的大小 編譯時進(jìn)行合法性檢查 例如%求余運算要求兩個操作數(shù)均為int型。 一條定義語句可定義若干個同類型的變量,以逗號分隔 定義后沒有賦初值的變量,其值為隨機數(shù) 例2中先定義,然后再賦初值 int a,b,sum; a=123; b=456; 也可以在定義的同時初始化 char esc = a; int i = 1;,數(shù)據(jù)的類型,數(shù)據(jù)為什么要區(qū)分類型? 不同類型的數(shù)據(jù)代表不同的 數(shù)據(jù)表示形式 合法的取值范圍 占用內(nèi)存空間大小 可參與的運算種類 常用數(shù)據(jù)類型有整型、浮點型、字符型等,整型數(shù)據(jù)之整型常量,十進(jìn)制整數(shù) 18、-31 八進(jìn)制整數(shù) 以0開頭,數(shù)取0-7 如022,-037,注意區(qū)分022和22的值 十六進(jìn)制整數(shù) 以0x開頭,數(shù)取0-F或者0-f 0x12, -0x1f 整型常量的后綴 無后綴為基本整型 L或者l,表示long長型,占用比基本整型更長的存儲單元,如 123占用兩個字節(jié),123l、123L占用4個字節(jié),但數(shù)值一樣。 U或者u,表示unsigned無符號 ,只能表示正數(shù),涉及最高位的意義。,0XA5Lu,整型數(shù)據(jù)之整型變量,數(shù)據(jù)在內(nèi)存中以二進(jìn)制的補碼形式存放。 正數(shù)的補碼和原碼相同。 負(fù)數(shù)的補碼:將該數(shù)絕對值的二進(jìn)制形式,按位取反再加1。 例:求-10的補碼 10的原碼 取反 再加1 就得到了-10的補碼,-10,整型變量的分類,根據(jù)所占內(nèi)存大小 基本型:類型說明符為int,占2個字節(jié)。 短整型:類型說明符為short int或short。完全等同于基本型。 長整型:類型說明符為long int或long,在內(nèi)存中占4個字節(jié)。 根據(jù)是否有正負(fù)符號 有符號,修飾符signed。默認(rèn)為signed,可省略不寫 無符號,修飾符unsigned 兩種分類方法交叉組合成六種整型變量,signed VS unsigned,signed與unsigned型的區(qū)別: signed的最高位代表符號,0為正,1為負(fù) unsigned的最高位也代表數(shù)值 以基本整型int為例,signed int和unsigned int都是占用兩個字節(jié),但表示范圍不同。 有符號整型量signed int ,最大表示 =32767 無符號整型量unsigned int =65535,整型變量的取值范圍,如果超出了該變量的取值范圍,會出現(xiàn)什么情況呢?,溢出!,例2.4 溢出舉例,#include void main() int i, j, m, n; i=32767; j=i+1; m=-32768; n=m-1; printf(“i=%d, j=%dn“,i,j); printf(“m=%d, n=%dn“,m,n); ,溢出(Overflow),C語言直接提供的任何類型都有取值范圍。當(dāng)向其賦超過此范圍的數(shù)值,就會產(chǎn)生數(shù)值溢出,得到一個不正確的結(jié)果。 int 型數(shù)32767在內(nèi)存中的表示方法: 加1 補碼解釋為-32768 如何避免類似的錯誤?,typeoverflow.c,浮點型數(shù)據(jù)之浮點型常量,浮點數(shù)就是實數(shù),有兩種表示形式 十進(jìn)制小數(shù)形式 0.0、25.0、5.789、0.13、5.0、300.、-267.8230必須有小數(shù)點 指數(shù)形式 如2.1e5、- 2.8E-2等。E之前必須有數(shù)字,并且指數(shù)部分為整數(shù)。 例:123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4 后綴為“f”或“F”表示該數(shù)為單精度浮點數(shù) 365是浮點數(shù)嗎? 365.是浮點數(shù)嗎? 365.00是浮點數(shù)嗎? 365f是浮點數(shù)嗎?,浮點型數(shù)據(jù)的存放,浮點型數(shù)據(jù)在內(nèi)存中以指數(shù)形式存放 N=S2j,所占位數(shù)決定 實數(shù)的取值范圍,所占位數(shù)決定 實數(shù)的精度,例2.5關(guān)于實數(shù)的輸出,#include main() float f=123.456; printf(“f in decimal: %fn“,f); printf(“f in exponent: %en“,f); ,浮點型變量的分類,單精度(float型) 占用4個字節(jié),有效數(shù)字7位 雙精度(double型) 占用8個字節(jié),有效數(shù)字16位 長雙精度(long double型) 占用16個字節(jié),較少使用 什么是有效數(shù)字? 回顧例2.5的執(zhí)行結(jié)果 注意:浮點型常量都作為雙精度來處理,例 2.6 float型的有效位數(shù),#include “stdio.h“ main() float a; double b; a = 123456.789e4; b = 123456.789e4; printf(“%fn%fn“, a, b); ,float型中通常用位來存放以二進(jìn)制表示的尾數(shù)部分。將一個較大的十進(jìn)制小數(shù)轉(zhuǎn)化成二進(jìn)制,通常都會超出位的長度,所以在內(nèi)存中存放時會舍去后面的小數(shù)。之后讀取時,按照二進(jìn)制到十進(jìn)制的轉(zhuǎn)換規(guī)則,輸出的就不再是之前賦予的值了。,字符型數(shù)據(jù)之字符常量,字符常量是用單引號括起來的一個字符。 如a,A,5,%,$等 轉(zhuǎn)義字符是一種特殊的字符常量。 轉(zhuǎn)義字符以反斜線開頭,后跟一個或幾個字符。 轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。,常見轉(zhuǎn)義字符,101表示?,字符型數(shù)據(jù)之字符變量,字符變量 代表內(nèi)存中的一個存儲單元,長度為一個字節(jié),用來存放一個字符 char c1,c2; c1=A; c2=a;,字符型數(shù)據(jù)在內(nèi)存中的形式,字符型數(shù)據(jù)是以其ASCII碼值的形式存放在內(nèi)存單元之中的。 char c1,c2; c1=A; c2=a; 字符型數(shù)據(jù)可以作為取值范圍0-255間的整型數(shù)據(jù)處理。,0100 0001,C1,0110 0001,C2,%c,%d,A,65,%c,%d,a,97,例2.7 字符型數(shù)據(jù)的處理,#include void main() char c1,c2; c1=97; c2=98; printf(“%c,%cn“,c1,c2); printf(“%d,%dn“,c1,c2); 字符型數(shù)據(jù)可以以其ASCII碼值參與算術(shù)運算; 字符型數(shù)據(jù)可以與整型數(shù)據(jù)互相賦值; 例如int i=a; char c=97;,字符串(String)常量,字符串常量是由一對雙引號括起的字符序列。 例如: “CHINA“ , “ C program “ , “$12.5“ 等都是合法的字符串常量。 字符常量和字符串常量的區(qū)別: 字符常量由單引號括起來,字符串常量由雙引號括起來。 字符常量只能是單個字符,字符串常量則可以包含一個或多個字符。 字符常量只占一個字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字符數(shù)加1,增加的一個字節(jié)用于存放字符“0” (ASCII碼為0),也就是字符串結(jié)束標(biāo)志。 區(qū)別5,5, “5“ 注意:字符串結(jié)束標(biāo)志是由系統(tǒng)自動添加的。,不同類型間的轉(zhuǎn)換,自動轉(zhuǎn)換 不同類型的數(shù)據(jù)混合運算時,編譯系統(tǒng)自動完成類型轉(zhuǎn)換。若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運算。如10+a+1.5 轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(jìn)行,以保證精度不降低。 所有的浮點運算都是以雙精度進(jìn)行的,即使僅含float單精度量運算的表達(dá)式,也要先轉(zhuǎn)換成double型再運算。 char型和short型參與運算時,必須先轉(zhuǎn)換成int型 在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時,將丟失一部分?jǐn)?shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入。,轉(zhuǎn)換規(guī)則,1. 橫向的箭頭表示必定的轉(zhuǎn)換,例如float型數(shù)據(jù)在進(jìn)行計算時,即使兩個數(shù)都是float型,也要先轉(zhuǎn)換成double型才行。這樣做是為了提高精度。 2. 縱向箭頭標(biāo)明了數(shù)據(jù)類型級別的高低,由低向高進(jìn)行轉(zhuǎn)換。例如int型和double型運算,首先int型數(shù)據(jù)要轉(zhuǎn)換成double型,然后再運算。,強制轉(zhuǎn)換,通過類型轉(zhuǎn)換運算來實現(xiàn),其一般形式為: (類型說明符) (表達(dá)式) 其功能是把表達(dá)式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。 例如: (float) a 把a轉(zhuǎn)換為實型 (int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為整型 注意:無論是強制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是運算的需要而對變量的數(shù)據(jù)長度進(jìn)行的臨時性轉(zhuǎn)換,而不改變該變量的類型,例2.8 強制類型轉(zhuǎn)換,#include main() int m = 5; printf(“m/2=%dn“, m/2); printf(“(float)(m/2)=%fn“,(float)(m/2); printf(“(float)m/2 = %fn“, (float)m/2); printf(“m = %dn“, m); ,m/2 = 2 (float)(m/2) = 2.000000 (float)m/2 = 2.500000 m = 5,運算符,算術(shù)運算符:用于各類數(shù)值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(+)、自減(-)共七種。 關(guān)系運算符:用于比較運算。包括大于()、小于(=)、小于等于()六種。 賦值運算符:用于賦值運算,分為簡單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運算賦值(&=,|=,=,=,=)三類共十一種。 條件運算符:這是一個三目運算符,用于條件求值(?:)。 逗號運算符:用于把若干表達(dá)式組合成一個表達(dá)式(,)。 指針運算符:用于取內(nèi)容(*)和取地址(&)二種運算。 求字節(jié)數(shù)運算符:用于計算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。 特殊運算符:有括號(),下標(biāo)等幾種。,運算符的優(yōu)先級與結(jié)合性,運算符的優(yōu)先級:在表達(dá)式中,優(yōu)先級較高的先于優(yōu)先級較低的進(jìn)行運算。而在一個運算量兩側(cè)的運算符優(yōu)先級相同時,則按運算符的結(jié)合性所規(guī)定的結(jié)合方向處理。 運算符的結(jié)合性:語言中各運算符的結(jié)合性分為兩種 左結(jié)合性(自左至右)和 右結(jié)合性(自右至左)。 C語言中多數(shù)運算符為左結(jié)合,例如表達(dá)式x-y+z。 C中滿足右結(jié)合的運算符 單目運算符 賦值運算符 條件運算符,運算符的優(yōu)先級,1. ( ) - . 2. ! + - + - * & (類型) sizeof 3. * / % 4. + - 5. 6. = 7. = != 8. & 9. 10. | 11. & 12. | 13. ? : 14. = += -= *= /= %= &= = |= = 15. , 用括號來控制運算順序更直觀、方便,并減少出錯的概率,算術(shù)運算符,+,-,*,/,%,-(取反) 兩整數(shù)相除結(jié)果仍為整數(shù) 求余運算的操作數(shù)必須為整數(shù),余數(shù)符號與被除數(shù)相同 算術(shù)表達(dá)式 用算術(shù)運算符將運算對象連接起來的式子 復(fù)雜的算術(shù)表達(dá)式經(jīng)常需要用到math.h中提供的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù) P34注意事項,常用的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù),自增和自減運算符,n+,n-,+n,-n +讓參與運算的變量加1,-讓參與運算的變量減1 作為后綴運算符時,先用n的原值參與運算,然后n的值加/減1 作為前綴運算符時,先對n的值進(jìn)行加/減,然后用n的現(xiàn)值參與運算 int i=8; printf(“%dn“,+i); 9 printf(“%dn“,-i); 8 printf(“%dn“,i+); 8 printf(“%dn“,i-); 9 printf(“%dn“,-i+); -8 printf(“%dn”,-i-); -9 自增自減運算符的運算對象只能是變量,不能是表達(dá)式例如(a+b)+ 、 (-i)+都是錯誤的,關(guān)系運算符,,=,b且bc? 關(guān)系表達(dá)式abc的值為真嗎?,邏輯運算符,邏輯運算也被稱為布爾(Boolean)運算 與運算& a & b當(dāng)且僅當(dāng)兩者都為真,則結(jié)果為真 ( a b & b c) a大于b,并且b大于c 或運算| a | b只要兩者中有一個為真,結(jié)果就為真 ( a b | b c) a大于b,或者b大于c 求反! ( !a ) 如果a是0,結(jié)果非0;如果a是非0,結(jié)果是0 并不改變a的值,實例,ch是英文大寫字母 (ch = A) & (ch = Z) 判斷某一年year是否是閏年的條件是滿足下列兩個條件之一: 能被4整除,但不能被100整除; 能被400整除; (year % 4 = 0) & (year % 100 != 0) | (year % 400 = 0),賦值運算符,賦值表達(dá)式 變量名=表達(dá)式,計算右邊表達(dá)式的值并將其賦給左邊的變量。 左側(cè)不允許表達(dá)式,只能是標(biāo)識一個存儲單元的變量. 判斷a+b=c,x=x+1是否為合法的賦值表達(dá)式? 賦值運算符優(yōu)先級低于算術(shù)運算符、關(guān)系運算符和邏輯運算符。 滿足右結(jié)合性。賦值表達(dá)式的值等于運算完成后左操作數(shù)的值 a=b=c=5 等價于a=(b=(c=5) 賦值表達(dá)式將自動進(jìn)行類型轉(zhuǎn)換,復(fù)合賦值運算符,復(fù)合賦值表達(dá)式 變量 二元運算符 = 表達(dá)式 等價于 變量 = 變量 二元運算符 表達(dá)式 a += 5 等價于a=a+5 x *= y+7 等價于x=x*(y+7) r %= p 等價于r=r%p 算術(shù)運算符+、-、*、/、%和位運算符、&、|運算符都可進(jìn)行復(fù)合賦值運算。,位操作運算符,&按位與運算 |按位或運算 按位異或運算,按位右移運算 按位求反,見書本P41頁,例2.9 邏輯運算與位運算,#include void mai

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論