語言大一上第3章運算符_第1頁
語言大一上第3章運算符_第2頁
語言大一上第3章運算符_第3頁
語言大一上第3章運算符_第4頁
語言大一上第3章運算符_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機程序設計基礎第三講2011年3月9日星期三不積跬步,無以至千里類型、運算符與表達式2011年3月9日星期三運算符和表達式2011年3月9日星期三運算符和表達式的概念 運算符:指定需要進行的計算,又稱操作符 算術運算(+ - * /%) 賦值運算(=) 關系運算(=!=) 邏輯運算(&與 |或!非) 特殊運算(指針、位運算) 表達式:通過運算符將常量和變量組合起來生成新的值2011年3月9日星期三名稱操作符表達式示例結果加法運算符+3+58減法運算符-5-23乘法運算符*3*515除法運算符/5/31模運算符(求余)%7%43基本算術運算符2011年3月9日星期三算術表達式 算術表達式由算

2、術運算符和操作數(shù)所組成的表達式 正確:(a*x+b)*x 錯誤:(ax+b)x 先乘除、后加減 先算左、后算右2011年3月9日星期三名稱操作符示例等價于簡單賦值=y = x加賦值+=y += xy = y+x減賦值-=y -= xy = y-x乘賦值*=y *= xy = y*x除賦值/=y /= xy = y/x模賦值%=y %= xy = y%x賦值運算符2011年3月9日星期三賦值運算符 賦值運算的結果是被賦值變量賦值后的值 inta=b=c=0;運算符形式看起來更直觀,而且執(zhí)行效率一般也能更高一些 注意:賦值運算符左邊一定是變量,賦值語句對該變量實施寫操作。2011年3月9日星期三名

3、稱操作符示例結果大于y x1等于=y = x0小于y =y = x1小于等于=y =ch=A A&ch=&ch=Z Z而不是:而不是: A A=ch=chx); printf(result = %dn, result); return 0;relational.c2011年3月9日星期三大家找別扭int a = 1;if(a = 0)printf(“OK”);(1)int a = 0;if(a = 0)printf(“OK”);(3)int a = 1;if(a = 0)printf(“OK”);(2)int a = 0;if(a = 0)printf(“OK”);(4)2011年3月9日星期

4、三= 和 = 一定要分清= 和 = 是比較運算=是賦值運算int a = 0;if(0 = a)printf(“OK”);int a = 0;if(0 = a)printf(“OK”);2011年3月9日星期三程序3.2 關系運算示例#include#include /包含隨機函數(shù)rand的聲明int main( ) int a=rand()%10; /產(chǎn)生3個09的隨機數(shù) int b=rand()%10; int c=rand()%10,d; printf(“a=%d,b=%d,c=%dn”,a,b,c); /輸出 printf(%dn,c=(a+b); return 0;名稱操作符表達式示

5、例說明與運算&(ab)&(bc)如果a大于b,并且b大于c,則返回1,否則返回0或運算|(ab)|(bc)如果a大于b,或者b大于c,則返回1,否則返回0非運算!a如果a為1,則返回0;如果a為0,則返回1;求反并不改變a的值;邏輯運算符2011年3月9日星期三邏輯運算符舉例例:設a=4,b=5:!a的值為0 、 a&b的值為1a|b的值為1 、 !a|b的值為14&0|2的值為1邏輯運算符短路在邏輯表達式的求解中,并不是所有的邏輯運算符都要執(zhí)行。(1)a&b&c 只有a為真時,才需要判斷b的值,只有a和b都為真時,才需要判斷c的值。(2)a|b|c 只要a為真,就不必判斷b和c的值,只有a為

6、假,才判斷b。a和b都為假才判斷c例:(m=ab)&(n=cd)當a=1,b=2,c=3,d=4,m和n的原值為1時,由于“ab”的值為0,因此m=0,而“n=cd”不被執(zhí)行,因此n的值不是0而仍保持原值1。邏輯表達式舉例 例:53&84-!0 自左向右運算 1&0邏輯值為083邏輯值為1表達式值為0逗號運算符 形式:表達式1,表達式2,,表達式n 運算對象:可以是任何類型的表達式 計算方法及運算結果:按從左到右的順序依次計算各表達式的值,最后一個表達式n的結果就是整個逗號表達式的結果. 優(yōu)先級:15級,優(yōu)先級最低,通常通過加括號提升其優(yōu)先級 結合方向:從左至右 例:設所有變量均為int型,計

7、算 x=a=3,6*a 和 x=(a=3,6*a) 這是一個這是一個逗號逗號表達式,先計算賦值表達式表達式,先計算賦值表達式x=a=3x=a=3,該表達式的結果為,該表達式的結果為x x,變量變量x x和和a a的值均為的值均為3 3,再計算第二個表達式,再計算第二個表達式6 6* *a a結果結果為為1818,因此逗號表達式最后結果為,因此逗號表達式最后結果為1818 類型轉換 自動轉換計算機完成(隱式轉換) 強制轉換程序員手工完成(顯式轉換)int a;double b = 9.80665;a = b;a = (int)b * 4;a = (int)(b * 4);/自動轉換/強制轉換/強

8、制轉換大家想一想:每一步返回a的值是多少?2011年3月9日星期三類型轉換#include /*自動類型轉換和強制類型轉換演示*/int main() int f=5; printf(f printf(f / 2 printf(float)(f/2) printf(float)f/2=%dn, f);%dn, f/2);%.2fn, (float)(f/2) );%.2fn, (float) f / 2);f =f / 2 =(float)(f/2) =(float)f/2 =522.002.50 return 0;typecon.c2011年3月9日星期三自動類型轉換兩個不同數(shù)據(jù)類型的運算結

9、果,是兩種類型中取值范圍更大的那種將取值范圍小的類型轉為取值范圍大的類型是安全的,反之是不安全的如果大類型的值在小類型可以容納的范圍之內(nèi),則平安無事但是,浮點數(shù)轉為整數(shù),會丟失小數(shù)部分(去尾,非四舍五入)反之,轉換后的結果必然是錯誤的,具體結果與機器和實現(xiàn)方式有關。盡量避免如此使用2011年3月9日星期三自動類型轉換兩個不同數(shù)據(jù)類型的運算結果,是兩種類型中取值范圍更大的那種將取值范圍小的類型轉為取值范圍大的類型是安全的,反之是不安全的如果大類型的值在小類型可以容納的范圍之內(nèi),則平安無事但是,浮點數(shù)轉為整數(shù),會丟失小數(shù)部分(去尾,非四舍五入)反之,轉換后的結果必然是錯誤的,具體結果與機器和實現(xiàn)方

10、式有關。盡量避免如此使用long doubledoublefloatlongintshortchar2011年3月9日星期三0100100100100000010011000110111101110110011001010010000001010101強制類型轉換 強轉很靈活,你必須知道你在做什么! 經(jīng)常用強轉來解決很多warning.(類型)表達式2011年3月9日星期三名稱操作符示例自增運算符+i+,+i自減運算符-i-,-i自增自減運算符自增自減運算符只能針對變量(演示plus.c)i+ : 在使用i之后,使i的值加1。即先使用,后加。i- : 在使用i之后,使i的值減1。即先使用,后減

11、。+i : 在使用i之前,先使i的值加1。即先加,后使用。-i : 在使用i之前,先使i的值減1。即先減,后使用。注意:i+ 等價于 i=i+1, 但是大多數(shù)編譯器對+操作進行了優(yōu)化;自加(減)運算符可以讓程序更簡潔,但是在使用過程中容易出錯2011年3月9日星期三自增自減運算符舉例#includeint main( ) int i=5,j=6,k; i+; +j; /相當于i=i+1;j=j+1; printf(i=%d,j=%dn,i,j); i-; -j; /相當于i=i-1;j=j-1; printf(i=%d,j=%dn,i,j); k=(i+)+(+j); /相當于j=j+1;k=

12、i+j; i=i+1; printf(i=%d,j=%d,k=%dn,i,j,k); k=(i-)+(-j); /相當于j=j-1;k=i+j; i=i-1; printf(i=%d,j=%d,k=%dn,i,j,k); return 0;i=6,j=7i=6,j=7i=5,j=6i=5,j=6i=6,j=7,k=12i=6,j=7,k=12i=5,j=6,k=12i=5,j=6,k=12 位運算符(自學內(nèi)容) 位運算是對字節(jié)或字內(nèi)的二進制數(shù)位進行測試、抽取、設置或移位等操作,是C語言可對硬件編程的體現(xiàn)。運算對象只能是int類型(包括char類型) C中提供6種位運算符 條件運算符條件運算符格

13、式: 表達式?表達式表達式 功能: 判斷表達式1的值,如果成立就執(zhí)行表 達式2,否則就執(zhí)行表達式3性質(zhì): 唯一的唯一的1 1個三目運算符個三目運算符說明:說明: (1)(1)條件運算符的執(zhí)行順序:先求解表達式,若為非(真)條件運算符的執(zhí)行順序:先求解表達式,若為非(真) 則求解表達式,此時表達式的值就作為整個條件表達式則求解表達式,此時表達式的值就作為整個條件表達式 的值。若表達式的值為(假),則求解表達式,表達的值。若表達式的值為(假),則求解表達式,表達 式的值就是整個條件表達式的值。式的值就是整個條件表達式的值。 (2)(2)條件運算符優(yōu)先級高于賦值運算符條件運算符優(yōu)先級高于賦值運算符

14、,低于關系運算符,低于關系運算符 和算術運算符。和算術運算符。 (3)(3)條件運算符的結合方向為條件運算符的結合方向為“自右至左自右至左”。 (4)(4)“表達式表達式2 2”和和“表達式表達式3 3”不僅可以是數(shù)值表達式,還可以不僅可以是數(shù)值表達式,還可以 是賦值表達式或函數(shù)表達式。是賦值表達式或函數(shù)表達式。(5)(5)條件表達式中,表達式的類型可以與表達式和表達條件表達式中,表達式的類型可以與表達式和表達 式的類型不同。式的類型不同。 條件運算符示例#include#includeint main( ) int a=rand()%10, b=rand()%10,c,d; c=ab?a:b

15、; d=ab?a:b; printf(a=%d,b=%dn,a,b); printf(c=%d,d=%dn,c,d); return 0;a=1,b=7a=1,b=7c=7,d=1c=7,d=1運算符的優(yōu)先級( ) -.!+-+-*&sizeof(類型)*/%=!=&|&|?:=+=-=*=/=%=&=|=,2011年3月9日星期三如何讓計算按照你期望的進行? 能背下優(yōu)先級表的人鳳毛麟角 腦細胞寶貴,不能用來死記硬背2011年3月9日星期三如何讓計算按照你期望的進行? 能背下優(yōu)先級表的人鳳毛麟角 腦細胞寶貴,不能用來死記硬背 用括號來控制運算順序更直觀、方便、并減少出錯的概率 先算乘除、后算加

16、減,有括號就先算括號里的 括號太多,有時候不清楚注意用空格做好分離實在不行就拆分表達式2011年3月9日星期三小結X進制數(shù)據(jù)在內(nèi)存中的存儲和表示基礎數(shù)據(jù)類型int, float, double, char修飾符short, long, signed, unsignedsizeof變量、常量算術運算、賦值運算、關系運算、邏輯運算、自增自減運算類型轉換優(yōu)先級2011年3月9日星期三課堂練習1、求下面算術表達式的值。(1)x+a%3*(int)(x+y)%2/4 設x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y 設a=2,b=3,x=3.5,y=2.52、寫出程序運行結果main( ) int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(“

溫馨提示

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

評論

0/150

提交評論