第3章數據類型、運算符號與表達式、輸出輸出、順序結構_第1頁
第3章數據類型、運算符號與表達式、輸出輸出、順序結構_第2頁
第3章數據類型、運算符號與表達式、輸出輸出、順序結構_第3頁
第3章數據類型、運算符號與表達式、輸出輸出、順序結構_第4頁
第3章數據類型、運算符號與表達式、輸出輸出、順序結構_第5頁
已閱讀5頁,還剩107頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章順序程序結構數據類型、運算符號與表達式主要內容預備知識:信息在計算機中的表示數據類型和常量、變量定義和使用(語法)在計算機中的存儲方式(C的低級語言特性)運算符的種類、優先級和結合性表達式的類型和表達式值順序結構程序信息在計算機系統中的表示外部世界的信息數整數有符號數無符號數小數文字(各種形狀)中文、藏文、英文、俄文、阿拉伯文。。。7段碼圖象(靜態、動態)聲音數字系統能處理的信息0、1信息的表示怎樣用0和1對上述的信息進行編碼數制(怎樣表示一個數)數數值:數的大小。數碼:表示數值的最基本符號(有限性、方便性)數符:由數碼構成的一個排列(數碼序列)。計數制(簡稱數制):怎樣構成一個數:多位數符的構成方法,以及數符所表示的數值(數的大?。┑挠嬎惴椒??;?數碼的個數,由此決定計數規則:逢幾進幾權:由數碼所在位置所決定的一個常數。計算方法:每個數碼代表的數值×這個數碼所在位置的權的總和。十進制數碼:0、1、2、3、4、5、6、7、8、9基:10權:10的冪數符:1999計數規則:逢十進一數值:例:(1999)10

=(1×103+9×102+9×101+9×100)10

二進制

數碼:0、1計數規則:逢二進一基數:2權:2的冪一般形式為:(N)2=(bn-1bn-2…b1b0)2

=(bn-1×2n-1+bn-2×2n-2+……+b1×21+b0×20)10例:(1011101)2=

(1×26+0×25+1×24+1×23+1×22+0×21+1×20)10

=(64+0+16+8+4+0+1)10=(93)10數值越大,位數越多,讀寫不方便,容易出錯!八進制

數碼:0~7計數規則:逢八進一基數:8權:8的冪例:(128)8=(1×82+2×81+8×80)10=(64+16+8)10=(88)10十六進制

數碼:0~9、A、B、C、D、E、F計數規則:逢十六進一基數:16權:16的冪例:(5D)16=(5×161+13×160)10=(80+13)10=(93)10DIY數碼:⊙、♂、▲基數:3權:3的冪計數規則:逢三進一將♂

⊙▲♂表示為十進制♂

⊙▲♂=1×33+0×32

+2×31

+1×30=34♂

⊙▲♂二進制與八進制、十六進制之間的轉換

(1)二進制與八進制之間的轉換三位二進制數對應一位八進制數。(101011100101)2

=(101,011,100,101)2

=(5345)8(6574)8=(110,101,111,100)2

=(110101111100)2二進制與十六進制之間的轉換例如:(9A7E)16=(1001101001111110)2

=(1001101001111110)2四位二進制數對應一位十六進制數。(10111010110)2=(010111010110)2

=(5D6)16十進制數轉換成二進制

整數部分的轉換:除2取余法。例:求(217)10=()2

解:∵2∣217…………余1b02∣108…………余0b12∣54…………余0b22∣27…………余1b32∣13…………余1b42∣6…………余0b52∣3…………余1b62∣1…………余1b70∴(217)10=(11011001)2例:求(0.3125)10=()2

解:

∵0.3125×2=0.625…………整數為0b-1

0.625×2=1.25…………整數為1b-20.25×2=0.5…………整數為0b-3

0.5×2=1.0…………整數為1b-4說明:有時可能無法得到0的結果,這時應根據轉換精度的要求適當取一定位數。小數部分的轉換:乘2取整法?!啵?.3125)10=(0.0101)2幾種計數進制數的對照表十進制二進制八進制十六進制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F數值(怎樣用0和1表示數的值)2進制編碼表示整數無符號數帶符號數原碼反碼補碼小數定點數浮點數BCD編碼表示8421碼5421碼余3碼信息在計算機系統中的存儲內存以字節為單元組成每個字節有一個地址一個字節一般由8個二進制位組成每個二進制位的值是0或1012345678910……...1270123456701111111計算機內存、字節、位和地址帶符號數符號的表示表示符號的位表示數值的位0

0001011例如:N1=+1011,N2=-1011在計算機中用8位二進制數可分別表示為:D7D6D5D4D3D2D1D0

D7D6D5D4D3D2D1D01

0001011符號數值部分原碼、補碼與反碼1.原碼

正數的符號位用0表示,負數的符號位用1表示,數值部分用真值的絕對值來表示的二進制機器數稱之為原碼,用[X]原表示。正數的原碼(設機器字長為8位)[+115]原=01110011B;負數的原碼[-115]原=11110011B零的原碼[+0]原=000…00[-0]原=100…00反碼反碼一個正數的反碼,等于該數的原碼;一個負數的反碼,等于該負數絕對值的原碼按位求反(即0變1,1變0)零的反碼:[+0]反=000…00

[-0]反=111…11[+5]反=00000101[-5]反=11111010補碼補數的概念鐘有多少個刻度能表示的數是多少時針從0到9有多少種撥法9和-3有什么關系036954217810111.在前面的鐘里,有多少個刻度?2.能表示的數有哪些?3.在2進制中,8個二進制位能表示多少個狀態(刻度)?4.用8位2進制能表示哪些數?問題0128255-128-10127127129-127怎樣求補碼正數的補碼與其原碼相同,即[X]補=[X]原;零的補碼為零,[+0]補=[-0]補=000…00;負數才有求補碼的問題。計算出該數絕對值的原碼,對原碼取反,再對整個數加1(絕對值取反加1)請計算[-5]補[-5]補=11111011[|-5|]原=00000101[[|-5|]原]反=11111010[[|-5|]原]反+1=11111011例子例1:假設X1=+83,X2=-76,當用8位二進制數表示一個數時,求X1、X2的原碼、反碼及補碼。

解:[X1]原=[X1]反=[X1]補=

01010011B

[X2]原=11001100B[X2]反=10110011B[X2]補=[X]反+1=10110100B小數的表示定點表示法在計算機中,如將小數點的位置固定不變,稱為定點表示法。這個固定的位置是事先約定好的,不必用符號表示。小數點固定在最高數值位之前,機器中能表示的所有數即為純小數。浮點表示法在計算機中,小數點位置并不是固定不變的,而是可以改變的,這種表示法稱為浮點表示法。用浮點法表示的實數,叫做浮點數。科學計數法任意一個二進制數N可以表示成如下形式:N=±M·2±E數符,表示數的正、負尾數階碼階符IEEE754標準

符號位(S)階碼(E)尾數(M)類型

存儲位數

總位數

偏移值

(offset)數符(S)

階碼(E)尾數(M)短實數(float)

1

8

23

32127長實數(double)

1

11

52

64

1023說明:

1)約定小數點左邊隱含有一位1,實際上使尾數的有效位數為24位,即尾數為1.M2)偏移值=2^(尾數位數-1)–1。必須從指數中減去偏移值,才能確定有符號指數的實際值。

123.456(42F6E979)N(10)=123.456,換算成二進制表示:N(2)=1111011.01110100101111001=1.11101101110100101111001(...)*2^6

那么E–127=6;E=127+6=133(10)=10000101(2)M=11101101110100101111001(省略了最高數字位1,共23bit)

組合起來就是:SEM010000101111011011101001011110014bit一間隔:0100001011110110111010010111100142F6E979文字(各種形狀)字符編碼:中文、藏文、英文、俄文、阿拉伯文ascII中文7段碼共陰共陽漢字編碼

用計算機處理漢字,每個漢字必須用代碼表示。鍵盤輸入漢字是輸入漢字的外部碼。外部碼必須轉換為內部碼才能在計算機內進行存儲和處理。為了將漢字以點陣的形式輸出,還要將內部碼轉換為字形碼。不同的漢字處理系統之間交換信息采用交換碼。

(1)外部碼漢字主要是從鍵盤輸入,每個漢字對應一個外部碼,外部碼是計算機輸入漢字的代碼,是代表某一個漢字的一組鍵盤符號。外部碼也叫輸入碼。漢字的輸入方法不同,同一個漢字的外部碼可能不一樣。

(2)內部碼 漢字內部碼也稱漢字內碼或漢字機內碼。在不同的漢字輸入方案中,同一漢字的外部碼不同,但同一漢字的內部碼是惟一的。

(3)交換碼 計算機之間或計算機與終端之間交換信息時,要求其間傳送的漢字代碼信息要完全一致。為此,國家根據漢字的常用程度定出了一級和二級漢字字符集,并規定了編碼,這就是國標GB2312-80《信息交換用漢字編碼字符集基本集》,GB231280中漢字的編碼即國標碼。該標準編碼字符集共收錄漢字和圖形符號7445個。

(4)輸出碼 漢字輸出碼又稱漢字字形碼或漢字發生器的編碼。眾所周知,漢字無論字形有多少變化,也無論筆劃有多有少,都可以寫在一個方塊中;一個方塊可以看作m行n列的矩陣,稱為點陣。一個m行n列的點陣共有m×n個點。例如16×16點陣的漢字,共有256個點。每個點可以是黑點或者非黑點,凡是筆劃經過的點用黑點,于是利用點陣描繪出了漢字字形,漢字的點陣字形在計算機中稱為字模。如圖1-8表示漢字“中”的16×16點陣字模。圖形信息在數字系統中的表示圖畫在計算機中有兩種表示方法:圖像(image)表示法和圖形表示法(graphics)。圖像表示法是把原始畫面離散成m×n個像點(或稱“像素”)所組成的一個矩陣,黑白畫面的每個像素用1個二進制數表示該點的灰度,彩色畫面的每個像素用3個二進制數來表示該點的3個分量(如R、G、B)的灰度。漢字字形的點陣描述就是一種黑白圖像表示。圖形表示法是根據畫面中所包含的內容,分別用幾何要素(點、線、面、體)和物體表面的材料與性質以及環境的光照條件、觀察位置等來進行描述,如工程圖紙、地圖等。漢字字形的輪廓描述法就屬于圖形表示。其優點是易于加工處理,數據量少。C語言中的數和量C的數據是以某種類型的形式出現的程序中用到的所有數據都必須指定類型C語言的數據有常量和變量之分常量和變量都分別屬于某一數據類型數據類型總表C數據類型基本類型構造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整型實型單精度型float雙精度型double數組結構體struct共用體union短整型short長整型long整型int標識符(Identifier)標識符變量名、符號常量名、函數名、類型名…標識符命名規范由字母、數字、下劃線(Underscore,'_')組成第一個字符必須為字母或下劃線C語言標識符是大小寫敏感的不能與C語言關鍵字(Keywords)重復標識符的名稱一般應具有一定的含義一般不要使用以下劃線開頭的標識符標識符示例正確的標識符student、num1、_SUM、_1_2_3MyName、myname、my_name錯誤的標識符room3-1包含了其他字符(減號)2men

以數字開頭long

與關鍵字重復Mr.Zhu

包含了其他字符(小數點)例:判斷下列標識符號合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b常量(Constants)常量程序運行過程中,其值不能被改變的量例如:12、-6.7、'a'…直接常量符號常量(SymbolicConstants)用一個標識符代表的常量相當于把標識符用一個常量簡單替換下來含義清楚,一改全改習慣上符號常量名用大寫字母常量示例#definePRICE30#defineNUM12voidmain(){......total=NUM*PRICE;total2=84*PRICE2;printf("total=%d",total);......}不會被替換=>total=12*30;常量符號常量概念:其值可以改變的量變量名與變量值變量定義的一般格式:數據類型變量1[,變量2,…,變量n];變量初始化

定義時賦初值例:inta,b,c;floatdata;決定分配字節數和數的表示范圍合法標識符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;intx=y=z=1;變量的使用:先定義,后使用例1intstudent;stadent=19;例2floata,b,c;c=a%b;變量定義位置:一般放在函數開頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量定義可執行語句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量(語法)編譯程序根據變量定義為其分配指定字節的內存單元…...硬件地址main(){inta=1,b=-5,c;

c=b;printf(“%d”,a);}0000H0001H2字節abc變量名(符號地址)…...內存隨機數000000010000000011111011111111110002H0003H10010001001101011111101111111111變量(實質)整型(Integer)整型變量整型變量的類型整型變量的定義整形變量的輸入、輸出整型常量表示方法類型整型變量的分類按占用存儲空間的大小劃分(表示的數的范圍)基本整型 int短整型 short[int]長整型 long[int]按有無符號劃分有符號 [signed]無符號 unsigned上述兩種分類方式組合,可得到6種類型整數的長度整數的類型與長度short:占2字節(16bit)long:占4字節(32bit)int:占2或4字節(16或32bit)2Bytes=short≤int≤long=4Bytes若需要精確的長度,可選用short或long舉例BC3.1: int長度為2Bytesgcc: int長度為4Bytes整型數據的取值范圍類型長度(bit)取值范圍[signed]short[int]16-215~215-1unsignedshort[int]160~216-1[signed]int16or32-215(31)~215(31)-1unsigned[int]16or320~216(32)-1[signed]long[int]32-231~231-1unsignedlong[int]320~232-1整型變量的定義(Definition)定義形式[signed]short[int]a,i;unsignedshort[int]b=1,j;[signed]int c;unsigned[int] d;[signed]long[int] e;unsignedlong[int] f;整型變量的定義與使用舉例voidmain(){inta; unsignedb; longc; a=-23; b=45; c=a+b; }程序舉例設計一個程序,計算1到5的平方并將其顯示到屏幕上計算1到5的平方并將其顯示到屏幕上main(){printf(“1491625”);}程序舉例設計一個程序,計算1到5的平方并將其顯示到屏幕上問題:1、在這個題中怎樣使用變量

2、使用多少個變量

3、怎樣定義變量

4、怎樣將一個整形變量的內容顯示在屏幕上5、流程圖是什么怎樣將整形變量的內容顯示到屏幕上voidmain(){inta; intb; intc; a=-23; b=45; c=a+b; printf(”%d”,a);printf(”bis%d,a+b=%d”,b,c);}計算1到5的平方并將其顯示到屏幕上main(){intx1=1,x2=2,x3=3,x4=4,x5=5;x1=x1*x1;x2=x2*x2;x3=x3*x3;x4=x4*x4;x5=x5*x5;

printf(“%d,%d,%d,%d,%d”,x1,x2,x3,x4,x5);}怎樣使用一個變量顯示1-5的平方main(){intx=0;x=x+1;printf(“%d”,x*x);x=x+1;printf(“%d”,x*x);

x=x+1;printf(“%d”,x*x);

}使用這種方法能否將1…100的平方顯示到屏幕上?能找到一個更方便一點的方法嗎?計算1到5的平方并將其顯示到屏幕上main(){intx=1;

clrscr();while(x<=5){printf(“%d”,x*x);x=x+1;}getch();}計算1到100、200、500的平方并將其顯示到屏幕上main(){intx=1;

clrscr();while(x<=5){printf(“%d”,x*x);x=x+1;}getch();}整型數據在內存中的存放方式長度shortintlong舉例,inti=50;/*int類型占2字節*/符號signedunsigned0000000000110010高地址字節低地址字節負整數舉例舉例inti=-50;/*int類型占2字節*/00000000001100101111111111001101111111111100111050的原碼-50的補碼取反加一整型數據的溢出(Overflow)溢出數據超出了變量能夠存儲的范圍,造成數據丟失或數值改變等舉例voidmain(){inta=32767;a=a+1;}01111111111111111000000000000000+132767的補碼-32768的補碼有符號數與無符號數有符號數二進制補碼表示,首位為符號位指定signed或缺省情況,即為有符號數無符號數沒有符號位,只能表示非負數無符號數類型必須指定為unsignedvoidmain(){inti;unsignedj;i=-50;j=-50;i=i/2;j=j/2;}若把負數賦值給無符號數,則把該負數的補碼當作無符號數進行處理有符號數與無符號數舉例voidmain(){inti;unsignedj;i=-50;j=-50;i=i/2;/*-25*/j=j/2;/*32743*/}1111111111001110-50的補碼i,j/211111111111001110111111111100111i/2-25的補碼j/232743的原碼整形變量的內容顯示voidmain(){inta; unsignedintb; longc; a=-23; b=45; c=a+b; printf(”%d\n”,a);printf(”%u\n”,b);printf(“%ld\n”,c)}求s=12+22+32+42+52數列的通項是什么?怎樣求數列的和?問題設計一程序使用變量的方式計算下面和式:

S=12+23+32+43+52+63上一問題的兩種方法定義兩個變量,x和y分別從1,2開始每次+2定義三個變量x,y,t,t從1到3x=2*t-1;y=2*t;求12+22+32+…+n2,其中n需要用戶從屏幕輸如intx;unsignedy;longz;scanf(“%d”,&x);scanf(“%u”,&y);scanf(“%ld”,&z);演示(3-1)整型常量的表示方法十進制(Decimal)例如,123、-456、0八進制(Octal)以0開頭,不得含有8或9例如,0123、-0456錯例,0138、-0912十六進制(Hexadecimal)以0x或0X開頭,用a~f或A~F表示10~15例如,0x123、-0X45、0x3AB、-0xabc整型常量的類型常量的類型后綴(Suffix)l、L 表示常量是一個長整型u、U 表示常量是一個無符號整型數兩種后綴可以一起使用舉例123l 長整型常數123456U 無符號整型常數456789ul 無符號長整型常數789101Lu 無符號長整型常數101浮點型(FloatingPoint)浮點型常量的表示方法浮點型變量浮點型變量的類型浮點型變量的輸入、輸出浮點型數據在內存中的存放形式浮點型數據的舍入誤差浮點型常數的類型浮點型常量的表示方法十進制小數形式由符號、數字和小數點(必須)組成整數和小數部分都可省略,但不能同時省略舉例,12.3、-.123、123.、0.、.0指數形式由整數(或小數)、e(或E)、整數順序組成e或E之前必須有數字,之后必須是整數舉例,123.4e-5表示123.4×10-5錯例,e1、12e、1.2e3.4、.e5、e規范化指數形式規范化指數形式類似于“科學計數法”e或E之前的小數中,小數點前面有且僅有一個非零數字舉例,123.456規范化形式,1.23456e2、1.23456E+002非規范化形式,123.456、12.3456e1、12345.6e-2、0.123456e3、12345600e-5…浮點型變量的類型分類單精度float雙精度double長雙精度longdouble長度和取值范圍類型長度(bit)有效數字絕對值范圍float326~710-37~1038double6415~1610-307~10308longdouble12818~1910-4931~104932浮點數的定義和輸出main(){floatx=1.3,y=12e-3,t;doublea=.4,u=13;

u=x*12;printf(“%f”,x);printf(“%f,%f”,a);}編程例題設長方形的高為1.5,寬為2.3,編程求該長方形的周長和面積。在屏幕上顯示1到10的平方根問題平方根是什么數據類型?(整型/實型)?怎樣定義變量?怎樣在C語言中求一個數的平方根?怎樣將一個實型變量顯示在屏幕上?sin函數計算器要求:設計一個程序,用戶從鍵盤上輸入一個實數(0~2×3.14),將該實數的sin函數值顯示在屏幕上問題:

1.怎樣輸入一個實數到一個變量中?

2.怎樣計算sin函數浮點型數據在內存中的存放方式二進制規范化指數形式小數部分長度與能表示的精度有關指數部分長度與能表示的數值范圍有關1101100110110010指數部分e小數部分f符號s123.456N(10)=123.456,換算成二進制表示:N(2)=1111011.01110100101111001=1.11101101110100101111001(...)*2^6

那么E–127=6;E=127+6=133(10)=10000101(2)M=11101101110100101111001(省略了最高數字位1,共23bit)

組合起來就是:SEM010000101111011011101001011110014bit一間隔:0100001011110110111010010111100142F6E979浮點型數據的舍入誤差由于浮點型變量能夠表示的有效數字有限,將有效位以外的數字舍去造成誤差舉例floata=123456.789e5,b;/*a=12345678900*/b=a+20;/*b=12345678920?*/printf("a=%f\nb=%f\n",a,b);運行結果>a=12345678848.000000b=12345678848.000000浮點型常量的類型類型后綴f、F 表示常量是一個單精度型浮點數l、L 表示常量是一個長雙精度型浮點數無任何后綴的浮點型常量視作雙精度型對浮點型變量賦值一個浮點型常量可以賦值給任何類型的浮點型變量根據變量類型截取常量的相應有效數字注意防止出現溢出字符型(Character)字符型常量字符型變量字符型數據在內存中的存放形式字符型數據的使用方法字符串常量字符型常量單引號括起來的一個字符普通字符舉例,'a'、'A'、'1'、''、'?'…錯例,'abc'、''、'我'…轉義字符以‘\’開頭+一個字母的特殊字符'\ddd'1到3位8進制數ASCII碼代表的字符'\xhh'1到2位16進制數ASCII碼代表的字符舉例,'\n'、'\t'、'\\'、'\''、'\"'、'\123'、'\x3A'…<轉義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉義字符含義換行垂直制表回車響鈴單引號3位8進制數代表的字符水平制表退格換頁反斜線雙引號2位16進制數代表的字符例轉義字符舉例(ch2_001.c,ch2_004.c)main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}運行結果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}運行結果:屏幕顯示:=打印機輸出:¥轉義字符舉例84aaa字符型變量字符型變量只能存放一個字符定義與使用voidmain(){charc1,c2;/*定義字符型變量c1和c2*/

c1='a';/*c1的值為'a'*/c2='2';/*c2的值為'2'*/}字符型數據在內存中的存放形式一個字符型數據占一個字節的空間字符型數據以其ASCII碼形式存放字符型數據的存放形式與只占一個字節長度的整型數據完全相同01100001c1='a'(ASCII=97)00110010c1='2'(ASCII=50)字符型數據使用舉例voidmain(){charc;inti,j;c=97; i=c+2;j='2'; printf("%c,%c\n",c,i);}字符型數據的使用方法可以把字符型數據視作一種長度為1字節的整型數據處理當使用字符型數據時,與使用這個字符的ASCII碼(一個8位整數)是完全一樣的字符型數據的用法與整型數據完全一樣,包括運算、賦值、輸入、輸出等字符型數據使用過程中,同樣需要注意溢出、符號等問題是字符還是整數,只有在輸出時才有意義字符型數據使用舉例voidmain(){charc;inti,j;c=97; i=c+2;j='2'; printf("%c,%d\n",c,c);}輸出ASCII碼字符型變量與整型變量一樣,也分為有符號數與無符號數無符號字符unsignedcharc;舉例,表示一個班級的人數(<256)賦值和使用中需要注意的問題,與整型變量相同voidmain(){charc=0;while(c<255){printf("%c,%d\n",c,c);c=c+1;}}字符串(String)常量表示形式一對雙引號括起來的字符序列引號內可以包括0個、1個或多個字符字符序列中的特殊字符用轉義字符表示舉例,"abc"、"a"、""、""、"我"舉例,"12.4"、"$#*!"、"C:\\HOME"字符常量和字符串常量是不同類型的數據例如,'a'與"a"是不同的不能把一個字符串賦值給一個字符型變量字符串在內存中的存放方式在內存中每個字符按順序存放字符串結尾有一個空字符(ASCII=0,'\0')作為字符串結束標志字符串結束標志'\0'是不能顯示的,在字符串常量中,也不用顯式寫出來舉例"TEST""""a"'T''E''S''T'\08469838400\0'a'\0009700各類數值型數據間的混合運算整型、字符型、浮點型數據可混合運算混合運算時,不同類型的數據按照一定的規則先轉換為同一類型,然后再運算doublefloatlongunsignedintchar,short低高說明:必定轉換運算對象類型不同時轉換

charch;inti;floatf;doubled;intintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例2inti;floatf;doubled;longl;例1例main(){floatx;inti;x=1/2*3.6;printf(“x=%f”,x);}結果:ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubledouble基本數據類型類型符號關鍵字數的表示范圍所占位數整型字符型實型有無[signed]int16-32768~32767[signed]short[int]16-32768~32767[signed]long[int]32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

long[int]unsigned

short[int]160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255C運算符算術運算符:(+-*/%++--)關系運算符:(<<===>>=!=)邏輯運算符:((!&&||)位運算符:(<<>>~|^&)賦值運算符:(=及其擴展)條件運算符:(?:)逗號運算符:(,)指針運算符:(*&)求字節數:(sizeof)強制類型轉換:(類型)分量運算符:(.->)下標運算符:([])其它:(()-)運算符和表達式C表達式算術表達式關系表達式邏輯表達式

賦值表達式條件表達式逗號表達式

用運算符號將運算對象連接起來形成的式子稱為表達式表達式什么是表達式:表達式是簡單表達式與運算符的組合,我們可以對其求值以獲得單個數據值。簡單的表達式可以是一個常量、變量、或函數??梢杂眠\算符將兩個或更多的簡單表達式聯接起來組成復雜的表達式。運算符功能要求運算量個數和類型運算符優先級別結合方向學習運算符應注意x=y^0xf0y=y%10x=10+15*2x=10+15-2基本算術運算符:+-*/%優先級:-*/%+-(2)(3)(4) 結合方向:從左向右說明:“-”可為單目運算符時,從右向左的結合性兩整數相除,結果為整數%要求兩側均為整型數據例5/2=-5/2.0=例5%2=-5%2=1%10=5%1=5.5%2算術運算符和表達式2-2.51-110()作用:使變量值加1或減1種類:前置++i,--i(先執行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執行i+1或i-1)由++--構成的表達式的值,變量的值例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4自增、自減運算符++--說明:1)++--不能用于常量和表達式,如5++,(a+b)++2)優先級:-++--*/%+-(2)(3)(4)3)結合方向:自右向左例-i++-(i++)i=3;printf(“%d”,-i++);//-3例j+++k;例-i++i=3;printf(“%d”,-i++);

續:自增、自減運算符++--

(j++)+k;一般形式:(類型名)(表達式)例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6

說明:強制轉換得到所需類型的中間變量,原變量類型不變

例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結果:x=3.600000,i=3較高類型向較低類型轉換時可能發生精度損失問題顯式轉換(強制轉換)<簡單賦值運算符符號:=格式:變量標識符=表達式作用:將一個數據(常量或表達式)賦給一個變量表達式的值:變量的值復合賦值運算符種類:+=-=*=/=%=《=》=&=^=|=含義:a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例a=3;d=func();c=d+2;賦值運算符和表達式優先級:14結合方向:自右向左左側必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉換規則:使賦值號右邊表達式值自動轉換成其左邊變量的類型例3=x-2*y;a+b=3;例

floatf;inti;i=10;f=i;則

f=10.0例inti;i=2.56;//結果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//表達式值為5,a,b,c值為5//b=5;a=5//表達式值11,c=6,a=11//表達式值10,a=10,b=4,c=6//表達式值5,a=5,b=10,c=2簡單賦值說明(1):結合方向:自右向左優先級:12

左側必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉換規則:使賦值號右邊表達式值自動轉換成其左邊變量的類型例:a=5;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=-40等價于a=a+(a=a-(a*a))//a=0等價于a=a+(a=a*(a=a-(a=a*3)))復合賦值說明:形式:表達式1,表達式2,……表達式n結合性:從左向右優先級:15逗號表達式的值:等于表達式n的值用途:常用于循環for語句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a

溫馨提示

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

評論

0/150

提交評論