c語言程序設計與項目實踐第3章ppt課件_第1頁
c語言程序設計與項目實踐第3章ppt課件_第2頁
c語言程序設計與項目實踐第3章ppt課件_第3頁
c語言程序設計與項目實踐第3章ppt課件_第4頁
c語言程序設計與項目實踐第3章ppt課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 運算符和表達式 本章的學習重點運算符與表達式的分類算術運算符與算術表達式邏輯運算符與邏輯表達式關系運算符與關系表達式位運算符條件運算符強迫類型轉(zhuǎn)換 .3.1 運算符與表達式的分類 運算符的分類:可按照操作對象數(shù)目分類,例如一元運算符、二元運算符和三元運算符等,也可按照功能分類,例如算術運算符、邏輯運算符、關系運算符等。表達式的分類:主要按照運算符的不同功能進展分類,例如算術表達式、邏輯表達式、關系表達式等。 .3.1.1 運算符的分類 按照操作對象的多少,運算符主要可分為一元運算符、二元運算符和三元運算符。例如負號-為一元運算符,加號+為二元運算符等。除了這些根本運算符之外,C言語還支

2、持復合運算符以及sizeof運算符等。按照功能分類,運算符可分為:算術運算符、賦值運算符、邏輯運算符、關系運算符、條件運算符、位運算符、取字節(jié)數(shù)運算符等。 .3.1.1 運算符的分類 表3-1 運算符分類 一元運算符二元運算符三元運算符符號功能描述符號功能描述符號功能描述+ -正負號-減號?:條件運算符+自增運算符+加號-自減運算符*乘號!非運算符/除號取反運算符%求余運算符*指針運算符右移運算符&與運算符|或運算符異或運算符大于號=大于等于 b, c .括號(函數(shù)等),數(shù)組,兩種結(jié)構(gòu)成員訪問由左向右! + - + -非,按位取反,自增,自減,正負號由右向左* &(類型)sizeof解引用(指

3、針),取地址,類型轉(zhuǎn)換,字節(jié)大小* / %乘,除,模除由左向右+ -加,減由左向右左移,右移由左向右 = 小于,小于等于,大于等于,大于由左向右= !=等于,不等于由左向右&按位與由左向右按位異或由左向右|按位或由左向右&邏輯與由左向右|邏輯或由左向右? :條件由右向左= += -= *= /=賦值由右向左&= = |= =最低,逗號(順序)由左向右.3.2 運算符的優(yōu)先級與結(jié)合性 范例3.1 PriorityAndCombine.c 這里運用多運算符的表達式演示不同優(yōu)先級的運算符組合運算所產(chǎn)生的結(jié)果。程序定義變量a,b,c,并運用復合賦值運算符+=驗證復合賦值運算符的功能。 分析:查看代碼:

4、由于賦值是自右至左的右結(jié)合性,因此先計算賦值號右邊的表達式a+c*10,結(jié)果為210,然后將結(jié)果賦給b。 .3.3 賦值運算符與賦值表達式 C言語規(guī)定,任何變量都要先定義后運用,并且在援用其數(shù)值前一定要進展賦值操作,而此時就需求用到賦值運算符“= 。1簡單賦值表達式賦值表達式運用賦值號表示,賦值號左邊的對象叫做左值l-value,賦值號左邊只能是變量。 a+=5 等價于 a=a+5假設a = 20, 執(zhí)行后a+=5后,a的值變?yōu)?5 .3.3 賦值運算符與賦值表達式 范例3.2 LvalueAndRvalue.c 將int型變量的值賦給short型變量,查看賦值后的結(jié)果。為表述方便,程序運用十

5、六進制值0 x12345,接納變量為short型。 2延續(xù)賦值表達式 有時需求對幾個變量賦予同一個值,這時可以運用延續(xù)賦值表達式,例如:int i, j, k;i = j = k = 10;由于賦值運算符是右結(jié)合性,因此程序執(zhí)行順序為:k = 10j = k i = j.3.3 賦值運算符與賦值表達式 3復合賦值表達式 復合賦值表達式由賦值運算符、算術運算符或邏輯運算符以及操作對象構(gòu)成。例如,表達式a += 10,它等價于:a = a + 10。 范例3.3 DAssignmentOperator.c 運用復合賦值運算符進展算術和賦值操作。程序運用*=和+=分別對變量m和n作賦值運算,驗證在同

6、一表達式中兩者之間的關系。留意:在工程運用中,應盡量防止運用這些簡化的復合賦值運算符,緣由有兩點:一是編碼時容易出錯,二是不便于其他程序員閱讀。 .3.4 算術運算符與算術表達式 C言語除了提供簡單的加減乘除四那么運算符外,還提供了模除%、自增+和自減-等幾種特殊的算術運算符。模除運算符%用于求兩個整數(shù)相除的余數(shù)。 自增+自減-運算符是C言語所特有的運算符,在工程中運用非常頻繁。 只能用于單個變量。 .3.4.1 算術運算符與數(shù)據(jù)類型 C言語中,除運算符用/替代,乘運算符用*替代,并且*不能省略如x*y不能省略為xy。范例3.4 ComputeOperatorType.c 程序運用輸出函數(shù)pr

7、intf驗證兩種不同數(shù)據(jù)類型進展算術除操作的結(jié)果,分析浮點型數(shù)據(jù)作算術運算的精度。 C言語中,兩個整型量作算術運算,其結(jié)果仍為整型,例如,算式:1/2的值取商中的整數(shù)部分0。 留意:0不能作為除數(shù),否那么程序運轉(zhuǎn)時將解體。 .3.4.1 算術運算符與數(shù)據(jù)類型 實訓3.1計算圓柱體體積 有一長為50cm,寬為30cm的長方形紙張,編寫程序,計算將該紙張卷成圓筒時的體積,要求準確到小數(shù)點后6位,圓周率取3.141592。紙張卷成圓筒的方法有兩種,一種是以長50cm作高,寬30cm作底,另一種是以寬30cm作高,長50cm作底。這里運用第二種方案。 運用周長50cm計算半徑r,實現(xiàn)語句:r = 50

8、.0/(2*pi);根據(jù)數(shù)學公式:V=S*H,計算體積V = pi*r*r*h,其中h=30。采用數(shù)據(jù)類型double型以滿足精度要求。 .3.4.2 模除運算符 模除運算符%:用于求兩個整數(shù)相除的余數(shù)。模除運算只能用于整數(shù)間求余運算,不可用于浮點數(shù)。并且0不能作為除數(shù)。例如:7%3結(jié)果為1,而7.5%5將使程序編譯出錯。C言語規(guī)定,%兩邊都為正整數(shù),結(jié)果為正整數(shù)或零;%兩邊都是負整數(shù),結(jié)果為負整數(shù)數(shù)或零。%左邊的操作數(shù)是正整數(shù),結(jié)果為正整數(shù)或零;%左邊的操作數(shù)是負整數(shù),結(jié)果為負整數(shù)或零,例如:17%4 = 117%-4 = 1-17%4 = -1-17%-4 = -1 .3.4.2 模除運算

9、符 范例3.4 Months2Year.c 鍵盤輸入總月數(shù),運用%運算符和/運算符將輸入的月數(shù)換算成年數(shù)和月數(shù)的方式,如25個月,表示2年零1個月。模除運算,例如m%n,可以運用公式m (m / n) * n替代,例如算式中-17%4,可以運用算式:-17%4 = -17 (-17 / 4) * 4 = -1 留意:和的區(qū)別,.3.4.3 自增自減運算符 自增+自減-運算符:只能用于變量,不能用于表達式或其他C言語對象。下面的操作均錯誤:(b+c)+;-(m-1); 范例3.5 SelfAddSelfReduce.c 程序定義4個變量a,b,c,d。對部分變量執(zhí)行自增自減操作,驗證左運算和右運

10、算的區(qū)別,并進一步分析自增自減運算符與算術運算符的優(yōu)先級。范例3.5 SelfAddSelfReduce2.c 定義變量a,分別執(zhí)行單次和多次自增運算,輸出結(jié)果,分析同一表達式中兩次和三次自增操作中左運算和右運算的差別。 .3.5 關系運算符與關系表達式 關系表達式的值:真1和假0。例如:表達式103的值為1,即為真,而表達式-10的值為0,即為假。 范例3.6 RelationOperater.c 程序分析關系運算符的優(yōu)先級,驗證在同一表達式中有算術運算符和關系運算符時程序執(zhí)行順序,分析關系運算符的結(jié)合性,分析關系表達式的真和假。 留意:判別兩個對象能否相等,運用運算符=或!=,一定與賦值運

11、算符=區(qū)分開來。.3.6 邏輯運算符與邏輯表達式 言語中提供了三種邏輯運算符:邏輯與&、邏輯或|和邏輯非!。前兩種為雙目運算符,具有左結(jié)合性。后一種為單目運算符,具有右結(jié)合性。 邏輯表達式的值:“真1和“假0兩種。邏輯表達式中總是將0作為假,非0作為真。邏輯表達式的普通方式為:操作對象1 邏輯運算符 操作對象2 .3.6.1 邏輯與& 邏輯與運算&:參與運算的兩個操作對象都為真非0時,結(jié)果為真1,否那么為假0。例如,表達式-42 & 3!=5,由于表達式02為假,因此便不再判別表達式3!=5,而直接以為原表達式為假0。 范例3.7 LogicAndOperater.c 程序分析邏輯與運算符的優(yōu)

12、先級與結(jié)合性,并分析邏輯與表達式執(zhí)行過程中對兩側(cè)表達式執(zhí)行順序的影響。 .3.6.2 邏輯或| 邏輯或運算|:參與運算的兩個操作對象只需有一個為真非0,結(jié)果即為真1,否那么為假0。例如,表達式-410 | 3=0,表達式中|優(yōu)先級低于關系運算符和=,所以表達式等價于-410|3=0,表達式-410為真,因此原表達式的結(jié)果為真。 C言語規(guī)定,當運算符左邊為真非0時,即判別表達式為真1,而不再判別運算符右邊能否為真或假。例如,表達式2 | 3!=5,由于常量2為真非0,因此便不再判別表達式3!=5,而直接以為原表達式為真1。 范例3.8 LogicOrOperater.c 程序分別設置邏輯與表達式

13、和邏輯或表達式。在范例3.7根底上進一步分析邏輯與表達式的執(zhí)行順序,分析邏輯或的執(zhí)行順序,并與邏輯與表達式進展比較。分析產(chǎn)生的結(jié)果。 .3.6.3 邏輯非! 邏輯非運算!:一元運算符,該運算符只能放在操作對象左邊。當操作對象為真非0時,結(jié)果為假0,操作對象為假0時,結(jié)果為真。 范例3. LogicNoneOperator.c 程序分析邏輯非表達式的真和假,驗證當變量a為非0時,!a的含義,并分析復合邏輯運算時表達式的執(zhí)行順序與結(jié)果。 .實訓3.2判別閏年 CalculateLeapYear.c年數(shù)中分為平年或閏年,編寫程序,判別輸入年數(shù)是閏年還是平年,閏年輸出為1,平年輸出為0。 閏年判別公式

14、:(year%4 =0) &(year%100 !=0) | (year%400 =0)。 需求分析:需求1:輸入年數(shù)需求2:運用邏輯運算符判別輸入的年數(shù)能否為閏年 .3.7 位運算符位運算:對操作對象中的比特位bit進展移位、重置以及邏輯判別等操作。位運算只能用于字符型char或整型(int, short, long等),不能用于float、double、void或其他復雜類表-位運算符運算符意義表達式運算功能按位取反aa按位取反按位左移b按位右移c3c右移3位&按位與a&ba和b按位與按位異或aba和b按位異或|按位或a|ba和b按位或.3.7 位運算符1按位與& 規(guī)那么:每個操作對象對應

15、位都為1時,結(jié)果才為1,否那么為0。例如:3&5的計算方法為:先轉(zhuǎn)化為二進制,然后按位進展與操作。 0000 0011& 0000 0101 - 結(jié)果為 0000 0001 運用: 按位與&主要用于將某個操作對象的某些位置零,例如,將int型變量的第3、5、7、12位置零,方法為將a和二進制數(shù)1110 1111 0101 1111作位與操作,表達式為:a&0 xEF5F。 .3.7 位運算符范例3.10 LogicBitAnd.c運用位&操作取變量a的低10bit位,其他位置零,并運用十六進制打印結(jié)果。方法為使變量a與另一常量作&,該常量低10位為1,其他位為0。 2按位或| 規(guī)那么:有一個操

16、作對象對應位為1時,結(jié)果即為1,當兩個操作對象對應位都為為0時,結(jié)果才為。例如:35的計算方法為:先轉(zhuǎn)化為二進制,然后按位進展或操作。0000 00110000 0101-結(jié)果為0000 0111.3.7 位運算符3按位異或 規(guī)那么:操作對象對應位一樣時為1,不同時為0。例如35的計算方法為:先轉(zhuǎn)化為二進制,然后按位進展異或操作。0000 00110000 0101-結(jié)果為0 xF9,十進制數(shù)2491111 1001 用途:按位異或主要用于將操作對象的的某些位翻轉(zhuǎn)原來為1的位變?yōu)?,為0的變?yōu)?),其他各位不變。 .實訓3.3交換兩變量的值 ExchangeTwoVariable.c 編寫程序

17、,不運用其他中間變量,交換兩個整型變量a和b的值。運用按位異或交換兩變量的值。運用異或操作置位兩變量對應位不同的位置,并依次交叉操作,到達兩值交換的功能,本例主要運用一個變量存儲了兩個變量信息的特性。需求分析:需求1:交換兩個變量的值需求2:不運用中間變量 實現(xiàn):運用按位異或運算符,完成操作,方法為:首先將變量a和b作異或操作,將結(jié)果賦給a,然后將b與a作異或操作,并將結(jié)果賦給b,反復第一步操作,完成。 .3.7 位運算符4按位取反 按位取反操作是將操作對象各位翻轉(zhuǎn),即原來為1的位變成0,原來為0的位變成1。例如:1111 1111 0001 0011-0000 0000 1110 1100用

18、途: 按位取反操作主要用于間接地構(gòu)造一個數(shù),以加強程序的可移植性。 .3.7 位運算符5按位左移 操作使操作對象的各位右移,高位補0,低位舍棄。與左移類似,操作對象和右移位數(shù)只能是整型或字符型。 .3.8 條件運算符 條件運算符:C言語中獨一一個三元運算符三目運算符,其普通表達方式為:表達式1?表達式2:表達式3 規(guī)那么:假設表達式1的值為真非0,那么表達式的值為表達式2,否那么為表達式3。例如: ab?a+b:a-b 當a=10,b=5,c=2時,該表達式的執(zhí)行過程如下: 首先計算表達式ab能否為真,經(jīng)運算為真,因此,表達式的值為a+b,即為15。 .實訓3.4分段函數(shù)計算 MulitPartFunction.c 鍵盤輸入變量x的值,運用條件運算符判別函數(shù)y的值,并輸出x和y的值。編寫程序,實現(xiàn)分段函數(shù): 需求分析:需求1:鍵盤輸入變量x的值需求2:運用條件運算符判別變量x的值,并確定y的值思緒:判別鍵盤

溫馨提示

  • 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

提交評論