




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C程序設(shè)計單元五運算符與表達式5.1運算符的分類運算符的定義運算符的分類運算符優(yōu)先級運算符結(jié)合性01020304CONTENT什么是運算符?運算符是一種特殊的符號或函數(shù),它們具有一個或多個操作數(shù)并返回相應(yīng)的值。操作數(shù)是被運算符用作輸入的值,通常是字面值、變量或表達式。什么是運算符?運算符的例子:2+3,其操作數(shù)是2和3,而運算符則是“+”。4-5,其操作數(shù)是4和5,而運算符則是“-”。6*7,其操作數(shù)是6和7,而運算符則是“*”。8/9,其操作數(shù)是8和9,而運算符則是“/”。10%7,其操作數(shù)是10和7,而運算符則是“%”。運算符有哪些+-*/%==!=><>=<=&&||!=+=-=*=/=%=<<=>>=&=^=|=?:sizeof() &*++--運算符的分類+-*/%==!=><>=<=&&||!算術(shù)運算符關(guān)系運算符邏輯運算符=、+=、-=、*=、/=、%=
賦值運算符?:條件運算符sizeof() &++--其他運算符運算符通過功能特性的不同,我們可以將運算符分為6大類,分別是條件運算符,算術(shù)運算符,賦值運算符,邏輯運算符,關(guān)系運算符,其他運算符運算符的分類運算符優(yōu)先級
在一個表達式中可能包含多個由不同運算符連接起來的、具有不同數(shù)據(jù)類型的數(shù)據(jù)對象;由于表達式有多種運算,不同的結(jié)合順序可能得出不同結(jié)果甚至出現(xiàn)錯誤運算結(jié)果,因為當表達式中含多種運算時,必須按一定順序進行結(jié)合,才能保證運算的合理性和結(jié)果的正確性、唯一性。
在一個表達式中可能包含多個有不同運算符連接起來的、具有不同數(shù)據(jù)類型的數(shù)據(jù)對象;由于表達式有多種運算,不同的結(jié)合順序可能得出不同結(jié)果甚至出現(xiàn)錯誤運算錯誤,因為當表達式中含多種運算時,必須按一定順序進行結(jié)合,才能保證運算的合理性和結(jié)果的正確性、唯一性。運算符優(yōu)先級的定義!>算術(shù)運算符>關(guān)系運算符>邏輯運算符>賦值運算符。(邏輯運算符中“邏輯非!”除外。)運算符優(yōu)先級順序類似于數(shù)學公式中的先乘除,后加減,有括號先算括號里面的。優(yōu)先級方便理解C語言優(yōu)先級詳細圖優(yōu)先級運算符1后綴運算符[]()·->++--(類型名稱){列表}2一元運算符++--!~+-*&
sizeof_Alignof3類型轉(zhuǎn)換運算符(類型名稱)4乘除法運算符*/%5加減法運算符+-6移位運算符<<>>7關(guān)系運算符<<=>>=8相等運算符==!=優(yōu)先級運算符9位運算符AND
&10位運算符XOR^11位運算符OR|12邏輯運算符AND&&13邏輯運算符OR||14條件運算符
?:15賦值運算符=+=-=*=/=%=&=^=|=<<=>>=16逗號運算符,運算符結(jié)合性當一個運算對象兩側(cè)的運算符優(yōu)先級別相同時,則按運算符的結(jié)合性來確定表達式的運算順序。什么是結(jié)合性運算符的結(jié)合性結(jié)合性的分類自左至右自右至左運算符的結(jié)合性運算符結(jié)合方向說明[]左到右
()
.
->
-右到左單目運算符(類型)
++單目運算符--單目運算符*單目運算符&單目運算符!單目運算符~單目運算符sizeof
運算符結(jié)合方向說明/左到右雙目運算符*雙目運算符%雙目運算符+左到右雙目運算符-雙目運算符<<左到右雙目運算符>>雙目運算符>左到右雙目運算符>=雙目運算符<雙目運算符<=雙目運算符==左到右雙目運算符!=雙目運算符&左到右雙目運算符運算符結(jié)合方向說明^左到右雙目運算符|左到右雙目運算符&&左到右雙目運算符||左到右雙目運算符?:右到左三目運算符/=右到左
*=
%=
+=
-=
<<=
>>=
&=
^=
,左到右
+結(jié)合方向只有三個是從右往左,其余都是從左往右+另外兩個從右往左結(jié)合的運算符也很好記,因為它們很特殊:一個是單目運算符,一個是三目運算符-所有雙目運算符中只有賦值運算符的結(jié)合方向是從右往左總結(jié)-C語言中有且只有一個三目運算符+逗號運算符的優(yōu)先級最低,要記住-優(yōu)先級:算術(shù)運算符>關(guān)系運算符>邏輯運算符>賦值運算符。邏輯運算符中“邏輯非!”除外謝謝THANKYOU主講人:謝宇C程序設(shè)計精品在線開放課程單元五運算符與表達式5.2算術(shù)運算符+加-減*乘/除01020304CONTENT05%余02030401算術(shù)運算符按操作數(shù)個數(shù)可分為一元運算符和二元運算符。一元運算符的優(yōu)先級一般高于二元運算符。一元運算符:+(正號)、-(負號)、++(增1)、--(減1)。二元運算符:+(求和)、-(求差)、*(求積)、/(求商)、%(求余)。
符號運算符:+(正號)、-(負號)
'+'(正號)表示不改變操作數(shù)的值及符號,如23也可表示為+23,編譯器不報錯。
'-'(負號)可用于得到一個數(shù)的相反數(shù)。例如:
inta=-5;
intb=-a;下面我們一起來看一道例題:在ASCLL中已知C1為65時,求C2為多少?本題計算結(jié)果為Ab*(乘)兩數(shù)相乘,交換位置其結(jié)果不變,即a×b=b×a。三個數(shù)相乘,前兩個數(shù)先乘與后兩個數(shù)先乘,其結(jié)果相等,即:(ab)c=a(bc)。當乘數(shù)分別分配給兩個加數(shù),其結(jié)果相同,即:(ac)+(bc)=(a+b)c。例2:當半徑為6時,圓的周長和面積?02030401/(除)當運算符/的操作數(shù)中有一個或兩個浮點數(shù)時,結(jié)果與數(shù)學中除法運算相同,包含整數(shù)部分和小數(shù)部分。例如:8/2.5結(jié)果為3.2。
當運算符/的操作數(shù)(被除數(shù)和除數(shù))均為整數(shù)時,結(jié)果為取商(取整)。例如:16/5結(jié)果為兩數(shù)相除的商3。運算符%兩操作數(shù)都必須為整數(shù),否則語法錯誤。當運算符%的操作數(shù)中有一個或兩個浮點數(shù)時,語法錯誤當運算符%的操作數(shù)均為整數(shù)時,結(jié)果取余。余數(shù)的符號取決于被除數(shù)%(余)例如:16%5結(jié)果為兩數(shù)相除的余數(shù)1。當運算符%的操作數(shù)中有一個或兩個浮點數(shù)時,語法錯誤。例如:8%2.5語法錯誤。即運算符%兩操作數(shù)都必須為整數(shù),否則語法錯誤。在程序設(shè)計中,經(jīng)常使用求商和求余運算符分解整數(shù)的各位數(shù)字。例如,分解十進制整數(shù)123的個位、十位和百位數(shù)字??梢杂卸喾N不同的分解方案,下面是其中一種方案。
inta=123,g,s,b;
//g:個位s:十位b:百位
g=a%10;
//g=3
s=a/10%10;
//s=2
b=a/100;
//b=l謝謝THANKYOU主講人:謝宇C程序設(shè)計精品在線開放課程單元五運算符與表達式5.3關(guān)系運算符>大于01020304CONTENT<小于>=大于或等于<=小于或等于05==等于06!=不等于在C語言中,同邏輯表達式一樣,關(guān)系表達式的值也為邏輯值,即布爾型(bool),取值為真或假。由關(guān)系運算符組成的式子為關(guān)系表達式,如a>b即為關(guān)系表達式,算術(shù)、邏輯、關(guān)系、賦值運算符的優(yōu)先級順序為:邏輯非!>算術(shù)>關(guān)系>邏輯與&&、邏輯或||>賦值=例如:inta=3,b=5;則有:a>b:邏輯假,其值為0;a>=b:邏輯假,其值為0;a<b:邏輯真,其值為1;a<=b:邏輯真,其值為1;a==b:邏輯假,其值為0;a!=b:邏輯真,其值為1;分析以下程序,輸出其運行結(jié)果。#include<stdio.h>intmain(void){inta=0,b=1,c;c=a>=b||b++>1;printf("a=%d,b=%d,c=%d\n",a,b,c);return0;}代碼分析:
根據(jù)運算符的優(yōu)先級,表達式a>=b||b++>1等價于(a>=b)||(b++>1)。a>=b為假,其值為0,邏輯或||不會發(fā)生“短路”。
接著計算邏輯或||的右操作數(shù)b++>1,由于是后綴加1,故先取b的原值1與1比較大小,由于1>1為假,故邏輯或||的右操作數(shù)也為假,假|(zhì)|假=假,故c的值為0。執(zhí)行了一次b++運算,故b的自身值增了1,變?yōu)?。
運行結(jié)果為: a=0,b=2,c=0
關(guān)系運算符主要用于測試操作數(shù)之間的各種關(guān)系。
關(guān)系操作符的結(jié)果是整型的,所以它可以賦值給整型變量,但通常它們用于if或while語句中,作為測試表達式。謝謝THANKYOU主講人:謝宇C程序設(shè)計精品在線開放課程單元五運算符與表達式5.4邏輯運算符!邏輯非||邏輯或010203CONTENT&&邏輯與
以上三種邏輯運算符中,邏輯非“!”的優(yōu)先級最高,邏輯與“&&”次之,邏輯或“||”最低。即算術(shù)、邏輯、賦值運算符的優(yōu)先級順序為:
邏輯非!>算術(shù)>邏輯與&&、邏輯或||>賦值=邏輯運算符的優(yōu)先級:
邏輯表達式的值為邏輯值,即布爾型(bool),該類型為C99新增的,一些編譯器可能還不支持該類型。
邏輯值分為邏輯真值和邏輯假值。一般情況下,在判斷時,僅有零值被判斷為邏輯假值(false),一切非零值均可被判斷為邏輯真值(true);在存儲和表示時,通常,使用1表示邏輯真值,0表示邏輯假值。邏輯表達式的類型與值:
邏輯與&&運算符的運算規(guī)則:只有兩個操作數(shù)均為邏輯真時,結(jié)果才為真。其余情況,結(jié)果均為假。
邏輯或||運算符的運算規(guī)則:只有兩個操作數(shù)均為邏輯假時,結(jié)果才為假。其余情況,結(jié)果均為真。邏輯運算符的運算規(guī)則:例如,設(shè)有定義語句: inta=3,b=5;
則有: !a:由于a非零,為真,!a為假,其值為0。 a||b:由于a和b均非零,均為真,故邏輯或的結(jié)果為真,其值為1。 a&&b:由于a和b均非零,均為真,故邏輯與的結(jié)果為真,其值為1。 !a||b&&2:由于邏輯非!優(yōu)先級最高,首先與a結(jié)合,而&&優(yōu)先級高于||,相當于(!a)||(b&&2),即0||1為真,其值為1。邏輯與&&、邏輯或||均有“短路”特性:
邏輯與&&“短路”:當邏輯與&&的左操作數(shù)為邏輯假時,就足以判斷該邏輯運算的結(jié)果為假了,故右操作數(shù)就不再被執(zhí)行。
邏輯或||“短路”:當邏輯或||的左操作數(shù)為邏輯真時,就足以判斷該邏輯運算的結(jié)果為真了,故右操作數(shù)就不再被執(zhí)行。邏輯運算符的特性: inta=1,b=2,c; c=a||++b; printf("a=%d,b=%d,c=%d\n",a,b,c);
由于a為非零值,即為真,而當邏輯或||的左操作數(shù)為真時,就足以判斷該邏輯操作的結(jié)果為真。故發(fā)生“短路”,即右操作數(shù)++b不被執(zhí)行。輸出結(jié)果為:a=1,b=2,c=1。例如:#include<stdio.h>intmain(void){inta=0,b=2,c;c=!a||++b&&a--;printf("a=%d,b=%d,c=%d\n",a,b,c);return0;}分析以下程序,輸出其運行結(jié)果:
混合表達式c=!a||++b&&a--中含有的運算符有邏輯非!、邏輯或||、邏輯與&&、算術(shù)前綴++、算術(shù)后綴--、賦值號=等6個運算符。邏輯運算符、算術(shù)運算符、賦值運算符的優(yōu)先級的關(guān)系為:邏輯非!>算術(shù)>邏輯與&&、邏輯或||>賦值=
由于該表達式中賦值運算符優(yōu)先級最低,故最后賦值。代碼分析:
根據(jù)優(yōu)先級的高低,表達式!a||++b&&a--等價于(!a)||((++b)&&(a--)),而邏輯或||的左操作數(shù)!a為真,此時足以判斷該表達式的值為真。故發(fā)生“短路”,即||的整個右操作數(shù)((++b)&&(a--))不再被執(zhí)行。
運行結(jié)果為: a=0,b=2,c=1代碼分析:謝謝THANKYOU主講人:謝宇C程序設(shè)計精品在線開放課程單元五運算符與表達式
5.5賦值運算符基本賦值運算符復合賦值運算符12CONTENT
基本賦值運算符基本賦值運算符:=。復合賦值運算符: +=(加賦值)、-=(減賦值)、*=(乘賦值)、/=(除賦值)、%=(求余賦值)、 <<=(左移賦值)、>>=(右移賦值)、&=(按位與賦值)、|=(按位或賦值)、 *A=(按位異或賦值)。賦值操作的優(yōu)先級較低,僅高于逗號運算符。基本賦值=如inta=5;表示把5賦值給整型變量a,不能讀成“a等于5”。賦值號左邊必須為左值,賦值號右邊的右值可以為常量、變量或表達式。如下賦值均是正確的。inta,b;//定義整型變量a和ba=3;//把常量3賦值給a,右值為常量b=a;//把變量a的值賦給b,右值為變量b=a+3;//把求和表達式a+3的值賦給b,右值為表達式復合賦值運算符
復合賦值:+=、-=、*=、/=、%= a+=b;等價于a=a+b; a-=b;等價于a=a-b; a*=b;等價于a=a*b; a/=b;等價于a=a/b;
例如: inta=5; a+=3;//等價于a=a+3;
由于賦值運算符的優(yōu)先級很低,僅高于逗號運算符,故最后做賦值操作。 a+=3+2;等價于a=a+(3+2);.#include<stdio.h>intmain(void){inta=l,b=2,c=3;//定義三個整型變量,并初始化floatd=10.2f;//定義float變量d,用浮點常量10.2初始化a+=1;//相當于a=a+1;即a=1+1=2b-=a+5;c*=a-4;printf("%d,%d,%d,%f",a,b,c,d/=a);return0;}代碼分析:1)floatd=10.2f;如果改為floatd=10.2;雖然沒有語法錯誤,可以正常運行,但一般編譯器會提示warning(警告),原因是編譯器會把10.2等常量默認當成double型常量處理,與d的類型float不一致,故出現(xiàn)警告。因此可通過加f明確10.2為float型常量。2)a+=1;相當于a=a+1;求出a為2。3)b-=a+5;由于賦值運算符的優(yōu)先級低于算術(shù)求和運算符,故該語句等價于b=b-(a+5);,即b=2-(2+5);,得b=-5;。同理,c*=a-4;即c=3*(2-4);,故c=-60。4)printf("%d,%d,%d,%f",a,b,c,d/=a);由于輸出列表中a、b和c均為int型變量,故輸出格式占位符均為%d;輸出列表中第4項為表達式,其表達式的值為d=d/a=10.2f/2=5.1,為浮點類型,輸出格式占位符為%f,在編譯環(huán)境中,float類型為小數(shù)點后保留6位數(shù)字。運行結(jié)果為:2,-5,-6,5.100000本節(jié)結(jié)束謝謝THANKYOU主講人:謝宇C程序設(shè)計精品在線開放課程單元五
運算符與表達式5.6條件運算符
條件運算符(conditionaloperator)有時候也稱為三元運算符(ternaryoperator,或者trinaryoperator),因為它是唯一需要3個操作數(shù)的運算符:它的符號是?,語法格式如下:
條件?表達式1:表達式2
在計算完條件之后,有一個序列點。如果結(jié)果不等于0(換句話說,如果條件計算結(jié)果為true),則只有第二個操作數(shù)(也就是表達式1)會被計算,并且表達式1的值就是整個表達式的結(jié)果。
另一方面,如果結(jié)果為0(如果條件計算結(jié)果為false),那么只有第三個操作數(shù)(也就是表達式2)會被計算,并且表達式2的值就是整個表達式的結(jié)果。以這種方式,條件運算符代表了在程序流中的條件式跳轉(zhuǎn),因此,有時候可以與if-else語句相互替代。
找出兩個數(shù)中的最大者:inlineintiMax(inta,intb){returna>=b?a:b;}
函數(shù)iMax()可以用if-else語句改寫:inlineintiMax(inta,intb){if(a>=b)returna;elsereturnb;}
條件運算符具有相當?shù)偷膬?yōu)先級,只有賦值和逗號運算符的優(yōu)先級比它低。因此,下面的語句不需要括號: distance=x<y?y-x:x-y;
條件運算符的第一個操作數(shù)是條件,必須是標量類型,也就是算術(shù)類型或指針類型。第二個和第三個操作數(shù)分別是表達式1和表達式2,必須滿足下面條件之一: (1)兩個可選表達式都具有算術(shù)類型,在這種情況下,整個運算的最終結(jié)果類型,是后面兩個操作數(shù)進行尋常算術(shù)轉(zhuǎn)換的類型。 (2)兩個可選操作數(shù)都有相同的結(jié)構(gòu)或聯(lián)合類型,或者void類型。整個運算的最終結(jié)果類型也屬于與這兩個操作數(shù)一樣的類型。 (3)兩個可選操作數(shù)都是指針,并且符合下面的一個條件:
兩個指針屬于相同類型。整個運算的結(jié)果也屬于相同的類型。
其中一個操作數(shù)是空指針常量。整個運算的結(jié)果屬于另一個操作數(shù)類型。
其中一個操作數(shù)是對象指針,另一個是指向void指針。整個運算的結(jié)果屬于void*類型。
兩個指針可以指向具有不同限定符的類型。在這種情況下,整個運算的結(jié)果是一個指針,其所指的對象類型同時具備兩個可選操作數(shù)的類型限定符。謝謝THANKYOU主講人:謝宇C程序設(shè)計精品在線開放課程單元五運算符與表達式5.7其它運算符自增運算符逗號運算符0102目錄自增量運算符:++(增1)、--(減1)自增量運算符均有兩種使用形式,++a、a++及--a、a--,也稱為前綴形式和后綴形式。左值(lvalue)和右值(rvalue)12inta;//整型變量a可以作為左值使用floatb;//單精度浮點型變量b也可作為左值使用constintc;//因為常變量c的值不允許改變,故不可作為左值使用計算機內(nèi)存中可修改的存儲對象,一般稱為左值或lvalue把可賦值給左值的量稱為右值或rvalue。右值可以是常量、變量或者表達式。inta,b;//定義整型變量a和ba=2;//把常量2作為右值,賦給左值ab=a;//把變量a作為右值,賦給左值bb=a+3;//把表達式a+3的值作為右值,賦給左值b前綴形式:如++a為前綴加形式的增1表達式,表示把變量a的值加1后的值作為該表達式的值,同時變量a本身的值加1;--a類似,表示把變量a的值減1后的值作為該表達式的值,同時變量a本身的值減1。則語句b=a++;與b=++a;的含義不同。若采用第一條賦值語句,則直接把a的原值5賦給變量b。若采用第二條賦值語句,則把a的原值5加1后的值6賦給變量b。相同的是,這兩種賦值方式均使變量a自身的值增了1,即執(zhí)行完后,a均為6。例如:inta=5,b;前綴形式:如a++為后綴加形式的增1表達式,表示先直接把變量a原來的值作為該表達式的值,然后變量a本身的值加1;a--類似,表示先直接把變量a原來的值作為該表達式的值,然后變量a本身的值減1。后綴形式:例如:floata=3.2f;a++;printf("a=%f\n",a);執(zhí)行完自增量運算后,輸出a=4.200000。建議在實際編程中,應(yīng)盡量避免對浮點型變量進行自增量運算操作。通過下面的例子,掌握前綴增1與后綴增1兩種使用形式的異同。后綴形式:分析以下程序,輸出其運行結(jié)果。#include<stdio.h>intmain(void){inta=2,b,c,d;b=++a+4;c=3*a++;d=a--*3;printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);return0;}代碼分析:1)b=++a+4;該語句中運用到三個運算符:前綴增1運算符++、加法運算符+和賦值運算符=,三個運算符的優(yōu)先級是一元運算符++最高,其次是求和,最低的是賦值運算符。該語句等價于b=(++a)+4;先取變量a的值2加1后的結(jié)果3作為++a表達式的值代碼分析:然后把該表達式的值3與4求和的值1賦值給變量b,即b值為7。執(zhí)行完該語句后變量a自身值增1,其值變?yōu)?。2)c=3*a++;等價于c=3*(a++);表示把3與a++求積的結(jié)果賦給c,而a++表達式表示先把變量a的值3作為該表達式的值,即c=3*3;同時變量a自身值增1,變?yōu)?。代碼分析:3)d=a--*3;先取變量a的值4作為表達式a--的值,把4*3的值12賦給變量d。同時變量a自身減1,變?yōu)?。4)prin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村抗旱合同范例規(guī)定
- 農(nóng)民培訓協(xié)議合同范例
- 縣級代理商合同范本
- 噴油合同范本
- 春分文化與生活智慧
- 圍墻拆除回收合同范本
- 土地流轉(zhuǎn)中止合同范本
- 農(nóng)村寵物代養(yǎng)合同范本
- 廚具供應(yīng)采購合同范本
- 吊車入股分紅合同范本
- 汽車試驗概論-課件
- 腎單位的結(jié)構(gòu)PPT
- 《雷鋒的故事》繪本(課件)(27) 通用版美術(shù)
- 市域產(chǎn)教聯(lián)合體書
- 大班音樂《數(shù)高樓》
- 蘇教版三年級下冊口算題大全(全冊完整14份)
- 2022年安徽醫(yī)科大學第一附屬醫(yī)院臨床醫(yī)技、護理、管理崗位招聘187人筆試備考題庫及答案解析
- 施工鋼板樁監(jiān)理細則
- 微電網(wǎng)-儲能電池catl pet80ah電芯規(guī)格書
- GB/T 4209-2022工業(yè)硅酸鈉
- 2023年江蘇農(nóng)林職業(yè)技術(shù)學院高職單招(數(shù)學)試題庫含答案解析
評論
0/150
提交評論