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

下載本文檔

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

文檔簡介

第2章 數(shù)據(jù)類型、運算符與表達式,C語言的數(shù)據(jù)類型 數(shù)據(jù)類型分類意義 跟存儲空間(占用的存儲空間字節(jié)數(shù)不同,例如char類型占1個字節(jié),int占4個字節(jié)) 取值范圍(取值類型及取值范圍不同) 運算類型(可以進行的運算類型不同,例如%運算符要求操作數(shù)為整型),C語言數(shù)據(jù)類型,常量與變量,常量:在程序運行過程中值不可改變 整形常量,例如1234,58等; 實型常量,例如3.14,-2.58等; 字符常量,例如A, 5, +等; 宏常量(符號常量),用一個符號名代表一個常量,用define定義,例2.1 #include #define PRICE 30 /*此行和上面這行的順序可以交換*/ void main() int num,total; num=10; total=num*PRICE; printf(“total=%dn“,total); ,運行結(jié)果為 total=300 Press any key to continue 在程序編譯之前,會有一個編譯預處理的過程,這時編譯系統(tǒng)會用30來代替PRICE,實質(zhì)是文本替換 使用字符常量好處: 含義清楚,例如用PI來表示3.14 需要修改字符常量值時,只需要修改一處就可以,使用字符常量注意問題,格式為#define 宏名 替換文字,編譯預處理會用“替換文字”來代替“宏名”,注意宏名和替換文字的先后順序; “替換名字”可以帶空格,例如 #define HELLO printf(“hello“); printf(“hello“); 不作語法檢查,用雙引號括起不進行替換,如printf(“PI”);不進行替換; 宏定義不是可執(zhí)行語句,不用分號結(jié)束,如果帶分后,連分號也作為“替換文字”的一部分 符號常量常用大寫,以區(qū)別于變量,變量:在程序運行過程中值可以改變 變量的名字必須符合標識符的命名規(guī)定,C語言有3種類型的標識符 關(guān)鍵字:已被固定為特定意義,不可用作標識符,例如int,float,long等 系統(tǒng)預定義的標識符:包括系統(tǒng)提供的庫函數(shù)名,例如scanf,printf等,以及編譯預處理命令define等,建議不要用作變量名,否則容易引起混亂; 用戶標識符:除此之外的,以字母或者下劃線開頭,以字母、數(shù)字、下劃線構(gòu)成的字符串,可用作變量、函數(shù)、符號常量、數(shù)組、結(jié)構(gòu)體等名字,標識符,合法的標識符:sum, average,_total,Student_name,_123等 不合法的標識符:M.John, $123, #22, 1234,ab等 注意: 標識符區(qū)分大小寫,例如Sum和sum是兩個不同的標識符,變量一般采用小寫,一般取名要做到“見名知意”,例如sum,average,total等; 不同的編譯系統(tǒng)對變量名的長度有不同的規(guī)定; 變量必須先定義后使用,例如int a;定義了一個整形的變量,名字為a,整形數(shù)據(jù),整型常量的表示形式 可用八進制(數(shù)字0開頭),十進制,和十六進制(0x或者0X開頭)表示。如果數(shù)據(jù)范圍在 -3276832767之間,認為是int類型;如果超過此范圍,認為是long類型; 長整型后添加l或者L,如1234567L; 無符號整形常量后跟u或者U; 無符號長整型后加LU,lu,LU,lU之一。,整型變量,整型變量可以存放整數(shù),有三種類型 基本整形,用int定義,例如int a; 短整型,用short int或者short定義; 長整型,用long int或long定義,整形變量的長度及存儲數(shù)據(jù)的范圍,對于turbo系統(tǒng),shor及int類型長度為2字節(jié),范圍為 -3276832767;long類型長度為4字節(jié),范圍為-215215-1(約21億) 對于VC+6.0系統(tǒng),shor類型長度為2字節(jié),范圍為-3276832767;int及l(fā)ong類型長度為4字節(jié),范圍為 -215215-1(約21億) 如果在int或者short int、long int前面加上unsigned修飾符,表示無符號數(shù),表示正數(shù)的范圍擴大一倍(不能存儲負數(shù)),例如unsigned int范圍為065535 如果在int或者short int、long int前面加上signed修飾符,表示有符號數(shù),此時signed符號可以省略,也就是signed int與int等價;,6種整型變量的定義方法:(方括號表示可以省掉不寫) signed int/shortint/longint 或者unsigned int/shortint/longint 如果不知道具體編譯系統(tǒng)對變量分配多少字節(jié)的存儲空間,可以用sizeof運算符,例如printf(“%dn“,sizeof(int);,整型數(shù)據(jù)在內(nèi)存中的存放形式:用補碼形式表示,參看數(shù)字電路相關(guān)章節(jié) 整形數(shù)據(jù)的溢出:在編程時注意各種存儲變量存儲數(shù)據(jù)的范圍即可,浮點型數(shù)據(jù),浮點型常量的表示形式 浮點型常量也就是實型常量,帶有小數(shù)點的常數(shù); 3 +3 -3 .3 3.都是合法實型常量; 可以寫成指數(shù)形式,格式為 小數(shù)或整數(shù) E(或e)整數(shù)的形式,左邊的有效數(shù)字不可省,指數(shù)必須為整數(shù)。如3.0e6,-3.0e-6都是合法的。E3,1e0.3不合法。 實型常量的確定:實型常量隱含為double,要確定為單精度float須添加f或者F;長雙精度long double在數(shù)值后添加L或者l,如1.25L。,浮點型變量,3種浮點型變量:float,double,long double 其中float占用4字節(jié),范圍是10-381038,有效位數(shù)為7位(注意不是指小數(shù)位數(shù));double占用8字節(jié),范圍是10-30810308,有效位數(shù)為1516位;不同的編譯系統(tǒng)對long double類型有不同的處理方式,如果按16字節(jié)存儲,范圍是10-4932104932,有效位數(shù)為1819位。 浮點數(shù)提供的有效數(shù)字是有限的,精度也是有限的,超過該變量能表示的精度范圍,將會產(chǎn)生誤差,字符型數(shù)據(jù),字符常量 字符常量書寫方式有幾種方式: 可用鍵盤輸入的字符用一對單撇號括起來,如a,* ,+等 轉(zhuǎn)義字符:n(換行),“(雙撇號)等; ddd,或者xhh,ddd為13位八進制數(shù)值,hh為12位16進制數(shù)值代表的字符,這種方法可以表示任意字符常量; 詳細詳表見P27,表2-2. 字符變量 字符變量占用一個字節(jié)的存儲空間,可以存放一個字符,例如char ch;ch= A;,字符數(shù)據(jù)的存儲形式及使用方法,字符變量存儲實際上是一個字符的ascii碼,例如字符A的ascii碼為65,那么ch= A;與ch= 65的作用是一樣的; 字符數(shù)據(jù)可以按字符的形式輸出(%c),也可以按整數(shù)形式輸出;可以按整數(shù)或者字符形式賦值; 可以把字符變量當作整形變量,可以參加整形變量可以參加的各種運算,例如算術(shù)運算。只是它只占用一個字節(jié),存儲數(shù)據(jù)的范圍是-128127,如果定義為unsigned char,存儲數(shù)據(jù)的范圍就是0255; ASCII表中并不是所有的字符都能打印出來,有的只是控制字符,是打印不出來的。另外范圍是ASCII碼范圍是128255的字符,由于字節(jié)里最高位是1,跟漢字的存儲方式有沖突,所以不一定能在顯示器上顯示出來。,例2.6向字符變量賦予整數(shù),例2.6向字符變量賦予整數(shù) #include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn“,c1,c2); printf(“%d %dn“,c1,c2); 運行結(jié)果是 a b 97 98 Press any key to continue,例2.7大小寫字母的轉(zhuǎn)換,#include void main() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“%c %cn“,c1,c2); 運行結(jié)果為: A B Press any key to continue,字符串常量,字符串常量是用一對雙撇號括起來的字符序列(可以含有空格),例如“%d%c“, “hello“。 注意字符常量A和字符串常量“A“是不同的,不可把字符串常量賦給字符變量,C語言沒有字符串變量,可以用數(shù)組來存儲字符串。 編譯系統(tǒng)自動在字符串后添加字符串結(jié)束標志0,如字符串“hello“在內(nèi)存中的存儲方式是,各類數(shù)值型數(shù)據(jù)間的混合運算,字符型、整型(int,short,long)與浮點型(float,double,long double)數(shù)值之間可以進行混合運算。在運算時候,不同類型的數(shù)據(jù)會被系統(tǒng)自動轉(zhuǎn)換成同一類型,精度等級會提高。轉(zhuǎn)換規(guī)律如下:,橫向方向表示必定的轉(zhuǎn)換,即使是兩個char類型的變量,也會轉(zhuǎn)換成int類型; 縱向方向表示類型不同則轉(zhuǎn)換,如一個int類型,一個long類型,就把int類型提升成long類型, int,unsigned,long,double只表示轉(zhuǎn)換的方向,不表示轉(zhuǎn)換依次進行。例如int類型與double進行運算,就會把int一次性提升到double類型,而不需要經(jīng)過unsigned和long的中間步驟。,運算結(jié)果為整個算式里等級最高的那一種類型。 例如i為int類型,f為float類型,d為double類型,e為long類型,有以下算式 10+a+i*f-d/e 按照運算優(yōu)先級, 先算10+a,則a被提升為int類型,運算結(jié)果107,為int類型; 再算i*f,f必定會被提升為double類型,那么i也會被提升為double類型; 第1步得到的結(jié)果107為int類型,被提升為double類型,跟第2步結(jié)果運算,結(jié)果是double類型; e被提升為double,再計算d/e,運算結(jié)果為double; 第3步跟第4步結(jié)果相減,結(jié)果為double類型。,算術(shù)運算符和算術(shù)表達式,C運算符:C語言的運算符范圍很廣,把除了控制語句和輸入輸出以外幾乎所有的操作都作為運算符處理,如算術(shù)運算符(+ - * / %)、關(guān)系運算符( = 0),邏輯表達式(如x0 )。,算術(shù)運算符,+(加法運算符,或者正值運算符) -(減法運算符,或者負值運算符) *(乘法) /(除法)如3/2的值為1,舍去小數(shù)部分。如果想計算結(jié)果包含小數(shù),則可以寫成3.0/2或者3/2.0或者3.0/2.0的形式。 %(模運算符或稱求余運算符),如7%4的值為3。%號兩邊應該為整數(shù),結(jié)果符號與被除數(shù)相同,例如7%-4的值為3,-7%4的值為-3。,算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性,用算術(shù)運算符和括號將操作數(shù)連接起來,、符合C語法規(guī)則的式子,稱為C算術(shù)表達式,例如a*b/c-1.5+ a C語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。先按優(yōu)先級進行運算,優(yōu)先級相同的,再看結(jié)合性。算術(shù)運算為左結(jié)合性,也就是從左往右進行計算。 例如表達式a-b*c,乘法優(yōu)先級比減法優(yōu)先級高,先算乘法,再算減法。表達式a-b+c,b左右兩側(cè)的運算符優(yōu)先級相等,但表達式按照從左到右的方向進行運算。 有的運算符(如+,-)是右結(jié)合性。詳見附錄C。,強制類型轉(zhuǎn)換,作用:轉(zhuǎn)換原有類型后再使用,但不修改原先定義的屬性 格式:(類型名)(表達式) 例如(double)a (int)(x+y) (double)5 注意,如果(int)(x+y)寫成(int)x+y,那么被強制轉(zhuǎn)換的是x,而不是x+y。 兩種類型的類型轉(zhuǎn)換: 系統(tǒng)自動進行的類型轉(zhuǎn)換,把精度低的類型提升成精度高的類型,例如float自動轉(zhuǎn)換成double類型; 強制類型轉(zhuǎn)換,以便達到特定的目的,例如x的值為float類型,那么x%3不合法,可以把x強制轉(zhuǎn)換成int類型,(int)x%3,自增、自減運算符(右結(jié)合性),i+,+i,i-,-i 前綴,先增1或者減1再使用其值;后綴,先使用其值再增1或者減1。 假設n=3,執(zhí)行m=n+;結(jié)果如何?(m=3)m=+n;結(jié)果如何?(m=4) 自增、自減運算符只能用于變量,常量、表達式都不能自增或自減。,m=-n+該怎么算?從附錄C可以查出,負號運算符(-)和自增運算符(+)的優(yōu)先級相同,但是m=(-n)+非法,只能是m=-(n+),相當于m= -n;n=n+1; 另外,負號運算符(-)和自增運算符(+)都是右結(jié)合性,因此n應該跟+結(jié)合。 不要出現(xiàn)太復雜晦澀難懂的表達式,例如a=i+j之類的表達式,建議分寫成幾個表達式,或者用括號括起更容易懂。,逗號運算符和逗號表達式,表達式1,表達式2,表達式n 先計算表達式1,再計算表達式2,最后表達式n為整個表達式的值,x=a=3,6*a 執(zhí)行結(jié)果x和a都等于3,整個逗號表達式結(jié)果是18 x=(a=3,6*a) a的值為3,x的值為18 a=3*5,a*4 整個表達式里,乘法運算符優(yōu)先級最高,先算3*5,得到15;賦值運算符優(yōu)先級又比逗號運算符優(yōu)先級高,于是把15賦給

溫馨提示

  • 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

提交評論