運算符與表達式課件.ppt_第1頁
運算符與表達式課件.ppt_第2頁
運算符與表達式課件.ppt_第3頁
運算符與表達式課件.ppt_第4頁
運算符與表達式課件.ppt_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、教學目標: 本章詳細介紹了C語言提供的運算符和表達式的使用方法,要求通過本章的學習了解運算符的優(yōu)先級和結合性,掌握的運算符和表達式類型及求值規(guī)則,掌握數(shù)據(jù)類型轉換的方法。 教學重點: 重點掌握運算符:+,-,*,/,%,+,-, printf(“Key-in a number: “); scanf(“%d”, ,Key-in a number: 26 Value before being incremented: 26 _,26,27,Key-in a number: 26 Value before being incremented: 26 Value after being increme

2、nted: 27 _,+num; /*結果如何?*/,此時,前綴+(-)和后綴+(-)相同,作用僅是增1(減1)。,例 main() int j,k,a,b,c; j=3; k=+j; printf(“%d,%d”,k,j); j=3; k=j+; printf(“%d,%d”,k,j); j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; printf(“%d,%d,%d”,a,b,c); a=3;b=5;c=(a+)*b; printf(“%d,%d,%d”,a,b,c); ,/*相當于:j=j+1;k=j;*/,/*

3、相當于:k=j; j=j+1;*/,/*相當于:j=j+1; printf(“%d”,j); */,/*相當于:printf(“%d”,j); j=j+1; */,/*相當于:a=a+1; c=a*b;*/,/*相當于:c=a*b ;a=a+1; */,2.算術表達式,定義:用算術運算符和圓括號將運算對象連接起來的,并且符合C語言語法規(guī)則的式子。,單個的常量和變量都是算術表達式,是最簡單的算術表達式。算術表達式的值是數(shù)值型。 +a+b/5 等價于 (+a)+(b/5),例 -i+ i=3; printf(“%d”,-i+);,例 -i+ -(i+) i=3; printf(“%d”,-i+);

4、 /-3,3. 運算符的組合問題 i+j如何解釋? main() int i=3, j=5, k; k=i+j; printf(“%d,%d,%d”,i,j,k) ; ,/* i+j解釋為(i+)+j*/,在表達式中出現(xiàn)多個字符時如何組合呢? 盡可能自左而右將若干字符組合成一個運算符, 標識符、關鍵字也按同樣的原則進行處理。,輸出:4,5,8,【例】閱讀下面程序寫出運行結果 include stdio.h main( ) int i, j; i=j=5; printf(i+=%d, j=%dn, i+, j); printf(+i=%d, j=%dn, +i, j); printf(i+=%d

5、, j=%dn, i+, j); printf(+i=%d, j=%dn, +i, j); printf(i=%d, j=%dn, i, j); ,運行結果: i+=5, j=5 +i=7, j=3 i+=7, j=3 +i=9, j=1 i=9, j=1,4.算術運算中的類型轉換 不同類型數(shù)據(jù)進行運算時, 要進行類型轉換。類型轉換有自動轉換(又稱隱含轉換)與強制轉換兩種方式。 (1)自動類型轉換 自動轉換由系統(tǒng)自動完成, 適用于整型、實型和字符型數(shù)據(jù)的混合運算。 轉換的規(guī)則是: 精度從低到高的順序是,例如:計算表達式3.14+18/4+a 的值,3.14 + 18 / 4 + a,(1)計算

6、18/4,結果4,int型,(2)先將3.14轉換成double型,再將4轉換成 double型4.0,計算3.144.0,結果是7.14(double),(3)先將a轉換成int型值為97,再將97轉換成double型97.0,計算7.1497.0,結果是104.14,double型,4,104.14,7.14,(2) 強制類型轉換 格式: (類型名) (表達式) /*(類型名)是類型轉換運算符,單目*/ 功能:將表達式的值類型強制轉換成類型名指定的類型。 如: ,(int)(x+y),(int)x + y,注意:類型名兩側的()不能省略,將表達式x+y的值強制轉換成整型,將表達式x的值強制

7、轉換成整型,(double)(3/2) (int)3.6,說明:強制轉換得到所需類型的中間變量,原變量類型不變,當?shù)途葟娭妻D換成高精度,易造成精度損失 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 輸出:x=3.600000,i=3,2.2.3 關系運算符與關系表達式,1 關系運算符,關系運算符的優(yōu)先級低于算術運算,高于賦值運算符。,種類:、 = 、 =、 != 均雙目 結合型:左結合 優(yōu)先級 、 = 高于 =、 !=,例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc),例如

8、: 32 b*b-4*a*c=1e-6 x=y a%b!=0,2 關系表達式,關系表達式的值:是邏輯值“真”或“假”,用1和0表示。,設有定義 int a=3,b=2,c=1; 則: ab 的值為1 c=a 的值為0,【例題】計算表達式3=4+12!=5的值并給出求解過程,3 = 4 + 1 2 != 5,5,1,0,1,注意 應避免對實數(shù)作相等或不等的判斷 如 1.0/3.0*3.0=1.0 結果為0 可改寫為:fabs(1.0/3.0*3.0-1.0)1e-6,2.2.4邏輯運算符與邏輯表達式,邏輯運算符有:,!(非,單目,右結合)、 (m=ab) ,運行結果:m=0 n=1,【例題2】寫

9、出表達式53 a+=2 ; (2) float x=1.2, y=2.1; y*=x+3.4 ; (3) int a=1, b=2; b/=a+=1;,變量 OP= 表達式 等價于: 變量 = 變量 OP (表達式),【例題】已知int a=12;計算表達式a+=a-=a*a 的值,a += a -= a * a,144,aa144即a-132,a-132 即a=-264,main() int a=12; printf(%d %dn, a ,a+=a-=a*a); ,2.2.7 逗號表達式,逗號運算符: , 雙目運算 左結合 逗號表達式一般形式如下: 表達式1,表達式2,表達式3,表達式n 用

10、途:用于將多個表達式連接成一個表達式。常用于for循環(huán)語句中 運算過程:從左向右依次計算每個表達式的值,逗號表達式的值就是最右邊表達式的值,逗號表達式值的類型就是最右邊表達式的值的類型。 優(yōu)先級:最低 結合:左結合(自左向右)。 如表達式x=a=3, 6*x, 6*a, a+x的值為_。,6,【例題】 main() int a,x; printf(“%d %d %dn”,a,x,(x=a=3,+a,a+=4,a5); printf(%d %d %dn,a,x,x=(a=3,+a,a+=4,a5); ,運行結果: 8 3 1 8 1 1,2.2.8條件運算符及條件表達式,條件表達式一般形式: 表

11、達式 1? 表達式 2: 表達式 3,條件運算符 ? :,求解過程如右圖。 表達式值的類型: 取表達式2和3中值的類型中的精度較高者。,其中,表達式1一般為關系表達式或邏輯表達式,表達式2和表達式3一般為同類型表達式。,三目運算符,圖 條件表達式的求解過程,注意:條表達式2和表達式3只有一個被求解。,例如:32?1:1.5 的值為_,類型為_。 ,優(yōu)先級:條件運算為倒數(shù)第 3 級, 高于賦值運算, 低于邏輯運算。 結合性:右結合 條件運算符可嵌套使用,如 107 ? 2:3) /*表達式的值為3*/,例1 編寫程序計算兩個整數(shù)a和b的最大值,main() int a=3,b=4,max; ma

12、x = ab?a:b; printf(“max(%d,%d)=%d”,a,b,max); ,運行結果: max(3,4)=4,例2用條件運算符求 a+|b|,main() int a=3,b=-4; printf(“%d+|%d|=%dn”,a,b,b0?a+b:a-b); ,運行結果: 3+|-4|=7,【例3】讀程序寫結果 main() int a=1,b=2,c=3,d=4,m,n,e; m=1; n=1; printf(m=%d n=%d e=%dn, m, n, (a+d=b+c)?(m=ab):(n=cd); m=1; n=1; printf(m=%d n=%d e=%dn, m,

13、 n, (a+d!=b+c)?(m=ab):(n=cd); ,運行結果: m=0 n=1 e=0 m=1 n=0 e=0,2.2.9 其它運算,1. 取地址運算 運算符: p= 則輸出為:,3. 求字節(jié)數(shù)運算 運算符: sizeof單目運算 右結合 優(yōu)先級次高 書寫形式:sizeof(類型名或變量或表達式) 操作數(shù)可以是類型名, 也可以是變量、表達式, 用以 求得相應類型或數(shù)據(jù)所占的字節(jié)數(shù)。 ,10,10,10 /* a、*p和* printf(%dn,sizeof(int); printf(%dn,sizeof(long); printf(%dn,sizeof(float); printf(

14、%dn,sizeof(double); ,4. 括號運算 在其它語言中括號是某些語法成分的描述方式, C語言將括號亦作為運算處理。 (1) 圓括號運算( ): 用于改變運算的優(yōu)先級, 還用于將函數(shù)的參數(shù)與函數(shù)名相分離。 (2) 中括號運算 : 又稱下標運算, 用來得到數(shù)組的分量下標變量。 括號運算的優(yōu)先級處于最高一級。,作業(yè): P73 一、4,5,7,8,9,10,12,13 二、程序填空題 1 三、程序改錯題 1 四、程序分析題 1 實驗2 寫出測試程序的輸出結果 實驗課前檢查,書后習題:P73 一、4,5,7,8,9,10,12,13,4.設m,n,a,b,c,d的值均為0,執(zhí)行 (m=a

15、=b)|(n=c=d)后,m,n的值是( ) 0,0 0,1 1,0 1,1 5.設有定義:int a=5,b; 執(zhí)行下列語句后,b的值不為2的是( ) b=a/2 b=6-(-a) b=a%2 b=a3?2:4 7.設有定義:int x,a,b;則執(zhí)行完語句 x=(a=3,b=a-);后,x,a,b的值依次是( ) 3,3,2 3,2,2 3,2,3 2,3,2 8.若有定義:char ch=A;則表達式ch=(ch=Aa=2+(c+=c+,c+8,+c),則 a=( ) A.13 B. 14 C. 15 D.16 5.表達式 (int)5.7*2.0的值為( ) (A) 11.4 (B) 10 (C)10.0 (D

溫馨提示

  • 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

提交評論