版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第3章 表達式和語句,04:54:35,1,C+語言程序設計教程 第2章 表達式和語句,C+語言程序設計教程 第2章 表達式和語句,運算符是描述對數(shù)據(jù)進行的運算(操作)、體現(xiàn)數(shù)據(jù)之間運算關(guān)系的符號,運算符也叫操作符。 表達式是運算符與數(shù)據(jù)連接起來的表達運算的式子,表達式也稱運算式。,優(yōu)先級是指表達式中運算符運算的順序。當一個表達式中包含多個運算符時,先進行優(yōu)先級高的運算,再進行優(yōu)先級低的運算。如果表達式中出現(xiàn)了多個相同優(yōu)先級的運算,運算順序就要看運算符的結(jié)合性了。 結(jié)合性是指操作數(shù)左右兩邊運算符的優(yōu)先級相同時,優(yōu)先和哪個運算符結(jié)合起來,進行運算。運算符的結(jié)合順序有兩種:左結(jié)合和右結(jié)合。,優(yōu)先級
2、與結(jié)合性,左結(jié)合,num1 op1 num2 op2 num3 (num1 op1 num2) op2 num3,右結(jié)合,num1 op1 num2 op2 num3 num1 op1 (num2 op2 num3),3.1 運算符,運算符: 算數(shù)運算符 關(guān)系運算符 邏輯運算符 位運算符 賦值運算符 條件運算符 逗號運算符 指針運算符,3,基本算術(shù)運算符及其含義:,算術(shù)運算符,表中優(yōu)先級數(shù)字小的優(yōu)先級高,(1) 算術(shù)運算符的意義、優(yōu)先級與數(shù)學中一致:+(正號), -(負號)是一元運算,優(yōu)先級高于二元運算,*、/、%優(yōu)先級高于+(加)、-(減)運算。,例如:a=10; b=5; a+b*-1;
3、得到結(jié)果5,(2) %要求兩個操作數(shù)的值必須是整數(shù)或字符型數(shù)?!安僮鲾?shù)1%操作數(shù)2”計算結(jié)果是操作數(shù)1被操作數(shù)2除的余數(shù)。當兩個操作數(shù)都是正數(shù)時,結(jié)果為正;如果有一個(或兩個)操作數(shù)為負,余數(shù)的符號取決于機器。,21%6 /結(jié)果是3 4%2 /結(jié)果是0 21%-5 /機器相關(guān):結(jié)果為-1或1,C+語言程序設計教程 第2章 表達式和語句,基本算術(shù)運算符及其含義:,算術(shù)運算符,(3) 當/運算符用于兩個整數(shù)相除時,如果商含有小數(shù)部分,將被截掉。如果要進行通常意義的除運算,則至少應保證除數(shù)或被除數(shù)中有一個是浮點數(shù)或雙精度數(shù)。,(4) 在使用算術(shù)運算符時,需要注意有關(guān)算術(shù)表達式求值溢出的處理問題;,5
4、/4 /結(jié)果是1 4/5 /結(jié)果是0 5/4.0 /結(jié)果是1.25 4.0/5 /結(jié)果是0.8,short i=32767,j,k; j=i+1; k=i+2; coutj=j , k=kendl; 執(zhí)行結(jié)果為:j=-32768, k=-32767,注意: 在書寫除法運算式時,通常將參加運算的整數(shù)值后補上小數(shù)點與0作為雙精度(double)常量參加運算。,C+語言程序設計教程 第2章 表達式和語句,關(guān)系運算符及其含義:,關(guān)系運算符,(1)若關(guān)系運算符的計算結(jié)果繼續(xù)用在表達式中,true與false分別當成了1與0。 。,(2)關(guān)系運算符的操作數(shù)可以是任何基本數(shù)據(jù)類型的數(shù)據(jù),但由于實數(shù)(floa
5、t)在計算機中只能近似地表示一個數(shù),所以,一般不能直接進行比較。當需要對兩個實數(shù)進行=、!=比較時,通常的做法是指定一個極小的精度值,若兩實數(shù)的差在這個精度之內(nèi)時,就認為兩實數(shù)相等,否則為不等。,x=y 應寫成 fabs(x-y)1e-6 /fabs(x)求double類型數(shù)x的絕對值,(3)關(guān)系表達式就是由關(guān)系運算符將兩個操作數(shù)連接起來的式子。這兩個操作數(shù)可以為常量、變量、算術(shù)表達式等。,例如:a+bc+d ab=cd a = bc,注意: 關(guān)系運算符的比較運算是由兩個等號組成,不要誤寫為賦值運算符=。,C+語言程序設計教程 第2章 表達式和語句,邏輯運算符操作數(shù)類型為bool型,返回類型亦
6、為bool型。,邏輯運算符,(1)邏輯運算符的操作數(shù)為bool型,當為其它數(shù)據(jù)類型時,將它轉(zhuǎn)換成bool值參加運算。,(2) C+對于二元運算符 二進制表示分別為10000111和 00101011。,(4)運算符 將兩個操作數(shù)對應位逐一地進行邏輯異或運算。邏輯異或運算的規(guī)則為“同則零,異則壹”,即兩個數(shù)只要不同,則其邏輯異或的結(jié)果就為1;否則為0。,C+語言程序設計教程 第2章 表達式和語句,位運算符,(5) 運算符 將左操作數(shù)向左移動其右操作數(shù)所指定的位數(shù),移出的位補以0。將一個數(shù)左移一位,相當將該數(shù)乘以2;左移兩位,相當將該數(shù)乘以4。一般說來,將一個數(shù)左移n位,就相當將該數(shù)乘以2n。所以
7、,在程序中,常用左移位來進行快速的乘法運算。,(6) 將左操作數(shù)向右移動其右操作數(shù)所要求的位數(shù),移出的位補以0。將一個數(shù)右移n位,相當于將該數(shù)除以2n。這與整型和字符型數(shù)據(jù)的除法運算完全一致,所以在程序中常用右移位來進行快速的除法運算。,注意: 位運算符是對其操作數(shù)按其二進制形式逐位地進行邏輯運算或移位操作的, 運算對象為bool、char、short、int等類型數(shù), 但不得是實型數(shù)據(jù)。 用移位方法進行乘法運算時,同樣要注意溢出問題。 按位左移運算符與插入運算符同形(同一個符號),按位右移運算符與提取運算符同形。那么編譯器是如何來區(qū)分cout73;是將7左移3位,還是向屏幕上輸出7、3呢?
8、編譯器將把該表達式解釋成向屏幕輸出7、3,這是由于cout是C+語言中預定義的輸出流類的對象,在該對象所屬的類中,對運算符所執(zhí)行的操作進行了新的定義。對于按位右移與提取運算符,編譯器也是按此原則解釋。,C+語言程序設計教程 第2章 表達式和語句,賦值運算符表,賦值運算符,C+語言程序設計教程 第2章 表達式和語句,賦值運算符,簡單賦值運算符的使用格式:,左表達式 = 右表達式,其功能是將右表達式(右操作數(shù))的值放到左表達式表示的內(nèi)存單元中,因此左表達式一般是變量或表示某個地址的表達式,稱為左值,在運算中作為地址使用。右表達式在賦值運算中是取其值使用,稱為右值。所有賦值運算左表達式都要求是左值。
9、,C+語言程序設計教程 第2章 表達式和語句,賦值運算符,復合賦值運算符的運算過程為:先將兩個表達式做運算符所規(guī)定的算術(shù)或位運算,然后將運算的結(jié)果賦給左表達式。,例如:設a和b的值分別為2和6,復合賦值運算式b*=a+3的計算過程為: 先計算復合賦值運算符的右表達式的值,即a+3的和,結(jié)果為5; 然后,做復合賦值運算符所規(guī)定的算術(shù)運算,即求b與上述結(jié)果的乘積,結(jié)果為30; 最后進行賦值運算,將上述運算結(jié)果賦給復合賦值運算符的左操作數(shù)b。同時,整個表達式的值也為30。,C+語言程序設計教程 第2章 表達式和語句,賦值運算符,關(guān)于賦值運算符的說明:,(1) 用賦值運算符連接起來的表達式叫做賦值表達
10、式。賦值表達式是C+語言(包括C語言)中所特有的,其它大多數(shù)語言中,只有賦值語句而沒有賦值表達式這一語法要素。賦值表達式仍可作為操作數(shù)進行運算,賦值表達式的類型為左邊變量的類型,其返回值為賦值后左邊變量的值。,float x; x=2.6; /返回值為2.6, 類型為float;,(2) 復合賦值運算符所表示的表達式不僅比一般賦值運算符表示的表達式簡練,而且所生成的目標代碼也較少,因此,C+語言程序中應盡量采用復合賦值運算符的形式表示。,(3) 在C+中還可以連續(xù)賦值,賦值運算符具有右結(jié)合性.,x=y= 2.6; / 它相當于:x=(y=2.6); a=b=3+8; /先做3+8,然后將11賦
11、給b,再將b的值11賦給a。 c=b*=a+3; /運算分解為 a+3 b=b*(a+3) c=b,C+語言程序設計教程 第2章 表達式和語句,+、-運算符,這兩個運算符都前置和后置兩種形式。所謂前置是指運算符在操作數(shù)的前面,后置是指運算符在操作數(shù)的后面。 例如: i+; /+后置 -j; /-前置,(1) 都是使操作數(shù)的值增1或減1,但對表達式的值的影響卻完全不同。,前置形式 int i=5; x=+i; y=i; / i先加(增值)后再賦給x (i=6, x=6,y=6) int i=5; +i; x=y=i; / (i=6, y=6,x=6) 后置形式 int i=5; x=i+; y=
12、i; / i賦給后再加(x=5, i=6,y=6) int i=5; i+; x=y=i; / (i=6, y=6,x=6),(2) 由于+、-運算符內(nèi)含了賦值運算,所以運算對象只能左值,不能作用于常量和表達式。5+、 (x+y)+、x+=5都是不合法的。,前綴運算是先變化后運算,后綴運算是先運算后變化。,C+語言程序設計教程 第2章 表達式和語句,其它運算符,1. 條件運算符,條件運算符也稱三目運算符, 是C+中唯一的一個三目運算符。格式為:,其中,d1,d2和d3分別是三個表達式。該運算符的功能是: 先計算d1; 如果d1的值為true(非0),返回d2的值作為整個條件運算表達式的值; 如
13、果d1的值為false(0),返回d3的值作為為整個條件運算表達式的值。 條件運算表達式的返回類型將是d2和d3這兩個表達式中類型高(表示的數(shù)值范圍大)的那種類型。,例如: a=(xy ? 12 : 10.0); /若xy(xy的值為true), 將12賦給a; 否則a=10.0。條件運算表達式的返回類型為10.0的類型double。 x?y=a+10:y=3*a-1; /若x非0則把a+10的值賦給y,否則把3*a-1的值賦y,d1 ?d2:d3,C+語言程序設計教程 第2章 表達式和語句,其它運算符,2. 逗號運算符,逗號可作分隔符使用,將若干變量隔開,如:int a,b,c;一般形式為:
14、,逗號表達式的求解過程為:先求表達式1的值,再求表達式2的值,最后求表達式n的值。整個逗號表達式結(jié)果的值是最后一個表達式n的值。它的類型也是最后一個表達式的類型。,例如: a=a+b, b=b*c, c=c-a; 設a=3,b=5,c=7,該表達式依次計算出a的值為8、b的值為35、c的值為-1、且整個表達式的值為-1。更進一步: x=(a=a+b, b=b*c, c=c-a) ; / x的值為-1。,表達式1,表達式2,表達式n;,逗號運算符還用在只允許出現(xiàn)一個表達式而又需要多個表達式才能完成運算的地方,用它將幾個表達式連起來組成一個逗號表達式。,在C+語言所有運算符中,逗號表達式的優(yōu)先級最
15、低。,C+語言程序設計教程 第2章 表達式和語句,(1) 運算符的優(yōu)先級按單目、雙目、三目、賦值依次降低。,運算符優(yōu)先級的規(guī)律,單目運算是右結(jié)合的,旨在與右邊的數(shù)結(jié)合在一起形成一個整體,因此優(yōu)先級高。,算術(shù)運算中的+(正) 、-(負)、+、-、邏輯運算中的取非!, 按位運算中的取反從各類運算中提取到單目運算中。,賦值運算之所以優(yōu)先級低且為右結(jié)合,是因為要右邊的表達式計算完后才賦值給左邊的變量。,移位運算是一種高效的算術(shù)運算,看作算術(shù)運算的補充,優(yōu)先級在算術(shù)運算后。,算術(shù)運算后的結(jié)果要進行比較,因此關(guān)系運算的優(yōu)先級在算術(shù)、移位后。,關(guān)系運算得出的邏輯值要進行運算,所以邏輯運算優(yōu)先級在關(guān)系運算后。
16、,(2) 算術(shù)、移位、關(guān)系、按位、邏輯運算的優(yōu)先級依次降低。,C+語言程序設計教程 第2章 表達式和語句,1.自動轉(zhuǎn)換,C+語言支持不同數(shù)據(jù)類型的數(shù)據(jù)之間的混合運算。在對這樣的表達式求值時,需要對其中的一些操作數(shù)進行類型轉(zhuǎn)換。表達式中的類型轉(zhuǎn)換有兩種方式:自動轉(zhuǎn)換和強制轉(zhuǎn)換。,各種類型的高低順序如下所示:,3.2類型轉(zhuǎn)換,(1) 若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進行運算,轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低,且運算的結(jié)果(即表達式的值)的類型是運算式的最終類型。,(2) 所有的浮點型運算都是以雙精度進行的,即使僅含float單精度運算的表達式,也要先轉(zhuǎn)換成double
17、型,再作運算。,C+語言程序設計教程 第2章 表達式和語句,3.2 類型轉(zhuǎn)換,(3) bool、char型和short型參與運算時,必須先轉(zhuǎn)換成int型。,(4) 邏輯運算符要求參與運算的操作數(shù)必須是bool型,如果操作數(shù)是其它類型,編譯系統(tǒng)會自動將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。,(5) 位運算的操作數(shù)必須是整數(shù),當二元位運算的操作數(shù)是不同類型的整數(shù)時,也會自動進行類型轉(zhuǎn)換。,(6) 在賦值運算中,賦值號兩邊的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時,可能丟失一部分數(shù)據(jù),或降低精度。,float pi=3.1; /降低了精度 fl
18、oat f=3.5; /未降低精度,(7) 將signed型的整型變成較長的signed型的整型,unsigned型變成較長的整型時,原值以及正負符號不變。,int a=-2; long b=a; /b的值仍為-2,C+語言程序設計教程 第2章 表達式和語句,3.2 類型轉(zhuǎn)換,(8) 將unsigned型和同長度的signed型互變時,其值根據(jù)自身所屬范圍發(fā)生適當?shù)淖兓?unsigned short a=65535; short int b=a; / b的值變成-1 short int a=-2; unsigned short b=a; / b的值變成65534,假設定義變量為:char c=1;float f=3.1; 表達式( 3 = f ) + ( B - c ) / 1.0 + f的類型轉(zhuǎn)換圖如下:,C+語言程序設計教程 第2章 表達式和語句,3.2 類型轉(zhuǎn)換,2. 強制類型轉(zhuǎn)換,舊式的C語言風格的強制類型轉(zhuǎn)換的格式如下:,類型說明符 (表達式) 或 (類型說明符) 表達式,例如:int(a+b) /將a+b運算的結(jié)果轉(zhuǎn)換成int型 5/floa
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 7956.24-2025消防車第24部分:自裝卸式消防車
- 2025年大學公共事業(yè)管理(公共組織學)試題及答案
- 2025年大學??疲ㄊ突ぜ夹g(shù))油品分析試題及答案
- 2025年大學大二(環(huán)境工程)專業(yè)分流選拔測試卷
- 2025年高職物業(yè)管理(物業(yè)管理基礎)試題及答案
- 2025年中職冶金技術(shù)(冶金操作實操)試題及答案
- 2025年中職歷史學(世界古代史)試題及答案
- 2025年大學大一(材料科學)金屬材料學階段測試題及答案
- 2025年高職環(huán)境工程技術(shù)(環(huán)保設備運行與維護)試題及答案
- 2026年注冊消防工程師(一級消防安全技術(shù)實務)試題及答案
- 2026.05.01施行的中華人民共和國漁業(yè)法(2025修訂)課件
- 維持性血液透析患者管理
- 2025年大學大四(臨床診斷學)癥狀鑒別診斷試題及答案
- 2025年消控員初級證試題及答案
- 人力資源調(diào)研報告
- 幼兒園食堂試卷(含答案)
- 2026年北京公務員考試試題及答案
- 《房屋市政工程第三方安全巡查服務標準》
- 兒童肥胖的長期管理
- 國開2025年《行政領(lǐng)導學》形考作業(yè)1-4答案
- 2025年G3鍋爐水處理實操考試題庫含答案
評論
0/150
提交評論