新增文字有關運算子和表示式的知識。
4.1 算術運算子與表示式
什麼是算術運算子?簡單的說就是加、減、乘、除。這些大家應該小學,不,幼兒園就開始學習了。算術運算子就是這些符號的名稱,而算術表示式則是對這些名稱的使用。比如算術運算子「+」。算術表示式就是「a+b」了。是不是很簡單,其實程式設計本來就是一件簡單的事情。
在c語言有很多算術表示式,表4.1列舉了部分關係表示式。
表4.1 部分關係表示式
運算子描述結合性
例子優先順序
+加法運算子
從左向右
a+b12
-減法運算子
從左向右
a-b12
*乘法運算子
從左向右
a*b13
/除法運算子
從左向右
a/b13
%取模運算子
從左向右
a%b13
+取正數(單目加)
從右向左
+a15
-取負數(單目減)
從右向左
-b15
注:更詳細的資訊,請參考附錄b。
算術運算子類似於數學中的四則運算。但是又與四則運算有些不同,這與c語言本身的性質有關。c語言變數的定義需要指明資料型別,也就是說在程式執行前和執行後都是同一種型別(其他情況暫不考慮,如強制型別轉換),指定型別的目的就是說明要分配的儲存空間的大小。比如:
int a = 5,b=2,c;
c = 5/2;
那麼此時c的值是多少呢?答案是2。在數學中毫無疑問5除以2結果是2.5。而此處結果是2,是因為c的型別是int,只接受整數2,後面的0.5自動被去掉。類似於數學中的取整運算。
【例4.1】 算術運算子與算術表示式
解題思路:我們只是用簡單的算術運算子和算術表示式來進行簡要的說明。程式中都是基本的加減乘除運算。由於學過上一章的scanf函式,我們可以嘗試做乙個簡單計算器。
編寫**:
#include int main()
執行結果:
a+b=10
a-b=4
a*b=21
a/b=2
a%b=1
+a=7, +b=3
-a=-7, -b=-3
press any key to continue
程式分析:這是乙個很簡單的程式。程式第9行多使用了乙個「%」,因為要輸出乙個百分號需要多寫乙個「%」,即「%%」就會輸出乙個「%」。那為什麼「/」,不可以呢?因為「/」是編譯器級別的轉義,「%」是printf()函式內部解析符號,所以不能用「/」。變數前面加乙個『-』表示負數。
注:「%」號的作用:(1)「%」用於整數求餘。(2)「%」號放在特定的大小寫字母前表示控制輸入輸出格式。如%d、%x、%x等。
4.2 關係運算子與關係表示式
關係運算子是什麼?就是我們小學裡面學習的大於、小於、大於等於、小於等於、等於、不等於這些符號。而關係表示式就是對這些名稱的具體使用罷了!在c語言中一共提供了6中關係運算子,如表4.2所示,第1列就是關係運算子,第4列就是關係表示式的具體使用。
表4.2 關係運算子
運算子描述結合性
例子優先順序
縮寫<
小於從左向右
a10lt
<=
小於或等於
從左向右
a<=b
10le
>
大於從左向右
a>b
10gt
>=
大於或等於
從左向右
a>=b
10ge
==等於
從左向右
a==b9eq
!=不等於
從左向右
a!=b9ne
注:優先順序數字越大,優先順序越高。詳見附錄b。
關係運算子的結果值只能是0或1。當關係運算子的值為真時,結果值為1。當關係運算子的值為假時,結果值為0。
除了關係運算子外,還有算術運算子,賦值運算子等。他們運算子的優先順序如圖4.1所示:
例如:a > b + c; 先進行算術運算b+c,然後再進行關係運算a>(b+c)。算符運算子優先順序大於關係運算子優先順序。值得注意的是「>」和「>=」類似。
a = b < c; 先進行關係運算ba = b + c; 先進行算術運算b+c,然後再進行賦值運算a=(b+c)。算術運算子優先順序大於賦值運算子優先順序。
a!=b+c;先進行算術運算b+c,然後再進行關係運算a!=(b+c)。算術運算子優先順序大於關係運算子優先順序。
【例4.2】關係運算子與關係表示式
程式分析:我們使用基本的關係運算子與關係表示式進行程式設計,程式中提供了小於、小於等於、大於、大於等於、等於不等於以及把關係運算計算過的結果賦值給另乙個變數,或者進行比較等。
編寫**:
#include int main()
執行結果:
a=1,b=2
!a=0,!b=0
a&&b=1
!a&&b=0
a&&!b=0
!a&&!b=0
a||b=1
!a||b=1
a||!b=1
!a||!b=0
press any key to continue
程式分析:當a=1,b=2時,!a,!b的結果值就是0。a&&b的結果值是1。!a&&b與a&&!b的結果值為0,因為「!」的優先順序(15)大於「&&」的優先順序(5)。!a&&!b的結果值為0。a||b的結果值也是1!a||b與a||!b的結果值為1。!a||!b的結果值為0。所以就有了執行結果中的值。
4.4 條件運算子與條件表示式
條件運算子就是當你滿足某種條件時去執行一種情況,不滿足條件時去執行另一種情況。在c語言中存在乙個唯一的三目條件運算子。三目運算子的優先順序大於賦值運算子。
條件表示式的一般形式:
表示式1 ? 表示式2 : 表示式3
其中:「?」,「:」都是條件運算子。
該條件表示式的含義:經過運算,如果「表示式1」成立則執行「表示式2」。否則執行「表示式3」。通過圖4.2我們可以直觀的了解這樣乙個三目條件運算子。
通過圖4.2我們會發現它和我們將要講的if語句很相似,如下。
if(表示式1)
else
如果表示式1為真,則執行表示式2。如果表示式1為假(不為真),則執行表示式3。另外if-else我們將在後面介紹。
比如:c=a>b?5:6;表示如果a大於b,就把5賦值給c。如果a不大於b,就把6賦值給c。當a等於2,b等於3時,判斷知a不大於b,所以把6賦值給c。
c=a>b?b+1:6;由於算術運算子的優先順序大於關係運算子大於條件運算子,所以先執行b+1,然後再執行關係運算子,最後執行條件運算子。當a等於5,b等於4時,首先執行b+1後值為5,接著判斷知a大於b,所以把b+1的值賦值給c,所以c等於5。
c=a>=b?』a』:』z』;表示如果a大於等於b,就把字元』a』的ascii碼值賦值給c。如果a小於b,就把』z』的ascii碼值賦值給c。
c=a==b?a>b:ab與a【例4.4】三目運算子與三目表示式
解題思路:同樣我們也是提供三目運算子與三目表示式相應**,使用三目結構,在大於、小於、大於等於、小於等於不等於、相等等幾種情況下的編碼。
編寫**:
#include int main()
第一次執行結果:
請輸入乙個年份:2008
yespress any key to continue
第二次執行結果:
請輸入乙個年份:2010
nopress any key to continue
程式分析:在printf()函式中我們發現,它是兩個三目條件運算子的結合。我們首先根據運算子的優先順序,然後再進行運算。由於括號的優先順序大於三目運算子的優先順序,所有我們會先計算num%100?4:400,假設我們輸入的年份是閏年2023年,則num值為2008,num%100的值為8,不等於0為真(即2008不能被100整除),所以括號內的計算結果為4。然後再運算num%4?」no」:」yes」,由於2008%4的值為0,所以就有0?」no」:」yes」表示式,所以最終結果值為「yes」。平年就算過程一樣,這裡就不再贅述。
第四章 表示式 4 2 算術運算子
上圖中按照運算子的優先順序將其分組。一元運算子的優先順序最高,接下來是乘法和除法,優先順序最低的是加法和減法。上述所有運算子都滿足做左結合律,意味著當優先順序相同時按照從左向右的順序進行組合。算術運算子能作用於任意算術型別以及任意能轉換為算術型別的型別。算術運算子的運算物件和求值結果都是右值。一元運...
第四章 表示式 4 4 賦值運算子
賦值運算子的左側運算物件必須是乙個可修改的左值。賦值運算的結果是它的左側運算物件,並且是乙個左值。結果的型別就是左側運算物件的型別,如果賦值運算子的左右兩個運算物件型別不同,則右側運算物件將轉換成左側運算物件的型別。賦值運算子滿足右結合律 對於多重賦值語句中的每乙個物件,她的型別或者與右邊物件的型別...
第四章 運算子 表示式和語句
使用運算子來表示算術運算。基本的算術運算子 以及 沒有指數運算子。標準 的數學庫為此提供了乙個pow 函式。例如,pow 3.5,2.2 返回3.5的2.2次冪 號左邊必須是乙個變數的名字。賦值運算子左邊必須指向乙個儲存位置。最簡單的方法是使用變數的名字,但是以後您會看到,指標 也可以用於指向乙個儲...