C語言程序設計運算符及表達式_第1頁
C語言程序設計運算符及表達式_第2頁
C語言程序設計運算符及表達式_第3頁
C語言程序設計運算符及表達式_第4頁
C語言程序設計運算符及表達式_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學1C語言程序設計運算符及表達式3.1表達式 C語言的表達式分為基本表達式和復雜表達式。 基本表達式是由以下單項構成的,即:標識符、常量、字符串字面量和用圓括號括起來的表達式。 將基本表達式通過運算符連接在一起,就構成復雜表達式。例如:2+8,a+b,(x-y)/a等。 由表達式還可組成更大的表達式。例如:

x=(a+b)%10第1頁/共60頁3.2運算符及表達式

運算符是在一個數(shù)學運算中表示相應運算動作的一種符號。 運算符所作用的對象稱作運算分量。第2頁/共60頁3.2.1算術運算符和算術表達式 在C語言中,基本算術運算符有5個,它們是: +(加)-(減)*(乘)/(除)%(取模)

算術運算符和運算分量組成的求值序列稱作算術表達式。 要注意運算符“/”和“%”的區(qū)別。 運算符“/”可以作用于算術類型。 運算符“%”卻只能作用于整型量。

a/b表示兩個整數(shù)進行整除,其結果是舍棄余數(shù)后所得到的商值。 是取整數(shù)除法的余數(shù),而不管商的值是多少。第3頁/共60頁例3-1:算術運算符應用示例。/*arithmeticpractice*/#include<stdio.h>voidmain(){inta=99;

intb=5;

intc=11;

intd=3;

intresult;

result=a-b;第4頁/共60頁printf("a-b=%d\n",result);

result=b*c;

printf("b*c=%d\n",result);

result=a/b;

printf("a/b=%d\n",result);

result=a%b;

printf("a%%b=%d\n",result);

result=a%d+b/c;

printf("a%%d+b/c=%d\n",result);}第5頁/共60頁輸出結果是:a-b=94b*c=55a/b=19a%b=4a%d+b/c=0第6頁/共60頁例3-2:計算有多個算術運算符的算術表達式。#include<stdio.h>voidmain(){intx,a=3;

floaty;

x=20+25/5*2;

printf("(1)x=%d\n",x);

x=25/2*2;

printf("(2)x=%d\n",x);

x=-a+4*5-6;第7頁/共60頁printf("(3)x=%d\n",x);

x=a+4%5-6;

printf("(4)x=%d\n",x);

x=-3*4%-6/5;

printf("(5)x=%d\n",x);

x=(7+6)%5/2;

printf("(6)x=%d\n",x);

y=25.0/2.0*2.0;

printf("(7)y=%f\n",y);}第8頁/共60頁輸出結果是:(1)x=30(2)x=24(3)x=11(4)x=1(5)x=0(6)x=1(7)y=25.000000第9頁/共60頁3.2.2賦值運算符和賦值表達式 賦值運算符“=”,其簡單的使用形式是: 變量=表達式 這種形式的整個表達式稱作賦值表達式。在使用賦值表達式時應注意以下幾點: ①在賦值運算符左邊的量(通常稱為左值)必須是變量,不能是常量或用上述運算符結合起來的表達式。

inta,b;

a=b;b=8; 是正確的賦值形式;

6=a;a+b=14; 等形式都是不對的。第10頁/共60頁 ②賦值運算可連續(xù)進行。例如,

a=b=c=0 a=(b=(c=0)) ③賦值運算符的優(yōu)先級比上述運算符的優(yōu)先級都低。

a=(b=9)*(c=7) ④賦值表達式的值等于右邊表達式的值,而結果的類型由左邊變量的類型決定。第11頁/共60頁 ⑤除了上述基本的賦值運算符之外,C語言中還提供了另外10個賦值運算符,它們是: +=-=*=/=%=>>=<<=&=|=^= 這些運算符是把“運算”和“賦值”兩個動作結合在一起,往往把它們稱為復合賦值運算符。

x+=2其等效形式是:x=x+2。表達式x*=y(tǒng)+5的等效形式是:x=x*(y+5)。而表達式x%=y(tǒng)-10的等效形式是:x=x%(y-10)

復合賦值運算符右邊的表達式應作為一個整體對待。第12頁/共60頁 3.2.3增量運算符和增量表達式 自增運算符“++”和自減運算符“――”。它們都是單目運算符。當出現(xiàn)在運算分量的前面時,例如++i、――i,就稱之為前綴運算符;當出現(xiàn)在運算分量的后面時,例如x++、y――,就稱之為后綴運算符。由增量運算符和運算分量構成的表達式稱為增量表達式。

1.自增運算符 ++n

這個表達式執(zhí)行后,n的值增1。 還可采用“后綴加”的形式:

n++ 但必須指出,并非在任何情況下二者都等價。第13頁/共60頁例3-3:顯示前綴加和后綴加的區(qū)別。#include<stdio.h>voidmain(){inta,b,c;

a=9;

b=++a;第14頁/共60頁printf("(1)a=%d***b=%d\n",a,b);

a=9;

c=a++;

printf("(2)a=%d***c=%d\n",a,c);}運行后輸出的結果是:(1)a=10***b=10(2)a=10***c=9第15頁/共60頁

執(zhí)行b=++a,這條語句等價于下述兩條語句:

c=a+1;

b=a; 而改為后綴加形式,即:c=a++,這條語句等價于下述兩條語句:

c=a;

a=a+1; 簡而言之,在表達式中出現(xiàn)前綴加的情況下,前綴加所作用的運算分量值先增1,然后進行其他級別較低的運算;而在表達式中出現(xiàn)后綴加的情況下,先以其運算分量的當前值參與其他級別較低的運算,最后該運算分量值才增1。第16頁/共60頁

例3-4:復合賦值符和自增運算符“++”的應用。

Voidmain(){intx=2,y,z;

x*=3+2;

printf("(1)x=%d\n",x);

x*=y(tǒng)=z=4;

printf("(2)x=%d\n",x);

x=y(tǒng)=1;

z=x++-1;第17頁/共60頁printf("(3)x=%d***z=%d\n",x,z);

z=x++*++y;

printf("(4)x=%d***y=%d***z=%d\n",x,y,z);

}輸出結果是:(1)x=10

(2)x=40

(3)x=2***z=0

(4)x=3***y=2***z=4第18頁/共60頁2.自減運算符“――n”就等價于:

n=n-1它也分前綴減和后綴減兩種形式。m=--n;等價于:n=n-1;

m=n;而m=n--;卻等價于:m=n;

n=n-1;第19頁/共60頁

在使用增量運算符時,還應注意以下幾點: ①增量運算符有副作用。就是說,增量運算符作用于運算分量時,如“++a”,不僅可以向外提供一個值,而且還改變運算分量自身的值。例如:

x=++i+i

或者x=i+(++i) ②“++”和“――”是單個運算符,不是通常意義上的兩個“加”號或者兩個“減”號。第20頁/共60頁 ③x=i+++j; 是理解成(i++)+j,還是i+(++j)呢?C語言詞法分析遵循“最長匹配”原則,即:如果在兩個運算分量之間連續(xù)出現(xiàn)多個表示運算符的字符(中間沒有空格),那么,在保證有意義的條件下,就從左到右盡可能多地將若干個字符組成一個運算符。所以,表達式就解釋為(i++)+j,而不是i+(++j)。建議讀者在錄入程序時,在各個運算符之間加入空格,或者使用圓括號,把有關部分括起來,使之作為整體處理。第21頁/共60頁 ④“++”和“――”只能作用在變量上,如“a++”,“――n”等,而不能用于常量和一般表達式(不是左值的表達式)。 另外,增量運算符與運算分量結合在一起構成的表達式帶有自身賦值含義,但這種表達式不是左值,不能直接出現(xiàn)在賦值號左邊。第22頁/共60頁3.2.4關系運算符和關系表達式

C語言有完整的一組關系運算符,用于比較兩個運算分量間的大小關系。這組運算符有6個,即: >>=<<===?。? 用關系運算符將兩個運算分量連在一起構成的表達式稱作關系表達式。根據(jù)運算符所作用的兩個運算分量之間的指定關系是否成立,分別得到關系表達式的“真”、“假”結果。第23頁/共60頁

在C語言中,沒有表示“真”、“假”的邏輯量TRUE(真)和FALSE(假),就借用數(shù)值來表示。以數(shù)值0表示“假”,以非0值表示“真”。對于關系表達式來說,結果的真、假分別用1和0表示。 關系運算只判定兩個運算分量是否滿足指定的關系,而不理睬二者具體數(shù)值相差多少。 應注意,賦值號“=”與全等比較運算符“==”的區(qū)別。 關系運算符的優(yōu)先級低于算術運算符。

a+b<c+d

應理解為:(a+b)<(c+d)

前4個關系運算符的優(yōu)先級相同,后兩個相等比較運算符的優(yōu)先級也相同。但前者的優(yōu)先級恰好比后者高一級。第24頁/共60頁例3-4:分析下面程序的運算結果。1voidmain()2{3inta,b,c;4a=b=c=10;5a=b==c;6printf("a=%d,b=%d,c=%d\n",a,b,c);7a==(b=c++*2);8printf("a=%d,b=%d,c=%d\n",a,b,c);9a=b>c>=100;10printf("a=%d,b=%d,c=%d\n",a,b,c);11}第25頁/共60頁上述程序運行之后的輸出結果是:a=1,b=10,c=10a=1,b=20,c=11a=0,b=20,c=11第26頁/共60頁3.2.5條件運算符和條件表達式

C語言中提供的條件運算符“?:”是惟一的三目運算符。 由條件運算符組成的表達式簡稱為條件表達式,或三目表達式。其一般構成形式是: 表達式1?表達式2:表達式3

決定條件表達式值的方法是:先計算表達式1的值;若該值不為0,則計算表達式2的值,并將表達式2的值作為整個條件表達式的值;否則,就計算表達式3的值,并將該值作為整個條件表達式的值。第27頁/共60頁

例如,要求出x和y中最大的一個,并賦予變量max。

max=(x>y)?x:y; 使用條件運算符時,還要注意以下幾點: ①條件運算符的優(yōu)先級稍高于賦值運算符,但比其他運算符的優(yōu)先級都低。 ②三個運算分量不限于簡單的算術表達式,甚至可以是函數(shù)調(diào)用。 ③分析條件表達式時,關鍵是先找出“?”和“:”,把三個運算分量區(qū)分開,然后按一般方法進行計算。第28頁/共60頁例3-5:分析下面程序運行的結果。1voidmain()2{3inta,b,c;4a=b=c=1;5a+=b;6b+=c;7c+=a;8printf("(1)%d\n",a>b?a:b);9printf("(2)%d\n",a>c?a--:c++);10(a>=b>=c)?printf("AA"):printf("CC");11printf("\na=%d,b=%d,c=%d\n",a,b,c);12}第29頁/共60頁3.2.6逗號運算符和逗號表達式 在C語言中,逗號的用途主要有兩種:一是作為分隔符,二是作為運算符。 (1)逗號分隔符 用來分開相應的多個數(shù)據(jù)。

inta,b,c;

printf("A=%d\tB=%d\n",a,b);第30頁/共60頁

(2)逗號運算符 逗號作為運算符時,是把兩個運算分量“連接”起來,使之構成一個逗號表達式。 逗號表達式的一般形式是: 表達式1,表達式2

它的執(zhí)行過程是:先計算表達式1,然后計算表達式2。整個逗號表達式的值是表達式2的值。 逗號表達式的擴展形式是: 表達式1,表達式2,…表達式n

各個表達式必須從左到右順序執(zhí)行,而整個逗號表達式的值是其中最右邊表達式的值。

x=(i=10,j=5,i*j)

逗號運算符在所有運算符中是級別最低的。第31頁/共60頁3.2.7邏輯運算符和邏輯表達式

C語言中邏輯運算符有3個,它們是: !邏輯非(相當于其他語言中的NOT) &&邏輯與(相當于其他語言中的AND) ||邏輯或(相當于其他語言中的OR)

其中,“!”是單目運算符,而&&和||是雙目運算符。第32頁/共60頁第33頁/共60頁

由邏輯運算符和運算分量構成的表達式稱為邏輯表達式。 (1)邏輯非運算符! 作用在單個運算分量上,其結果是運算分量邏輯值的“反”。 (2)邏輯與運算符&&

作用在前后兩個運算分量上,其結果是:僅當兩個運算分量同時為真時,結果才為真;否則,只要其中有一個為假,結果就為假。

第34頁/共60頁

(3)邏輯或運算符||

作用在前后兩個運算分量上,其結果是:只要其中有一個運算分量為真,結果就為真;僅當二者同時為假時,結果才為假。 這三個邏輯運算符的優(yōu)先級是:!的優(yōu)先級高于&&的優(yōu)先級,&&的優(yōu)先級又高于||的優(yōu)先級。第35頁/共60頁

例3-7:判斷給定的某一年是否是閏年。 什么是閏年呢?如果某年號能被4整除而不能被100整除,或者能被400整除,那么這年就是閏年;否則就是平年。 下面的程序對用戶輸入的年號判別是否是閏年。1/*determingifayearisaleapyear*/2#include<stdio.h>3第36頁/共60頁4Voidmain()5{6intyear,leap;7printf("Inputyouryear.\n");8scanf("%d",&year);9leap=y(tǒng)ear%4==0&&year%100!=0||year%400==0;10if(leap)11printf("%disaleapyear.\n",year);12else13printf("%disnotaleapyear.\n",year);14}第37頁/共60頁

在使用邏輯運算符時應注意以下幾點: ①用邏輯運算符把運算分量連接起來就構成邏輯表達式。其運算分量可以是關系表達式、算術表達式等,甚至還可以是邏輯表達式。 ②!的優(yōu)先級高于算術運算符的優(yōu)先級。 運算符!的結合性是從右到左,而&&和||的結合性是從左到右。 ③邏輯表達式的值只有兩個:0和1。以0代表邏輯結果為假;以1代表邏輯結果為真。第38頁/共60頁 ④運算符&&和||保證左邊的運算分量優(yōu)先得到計算。就是說,由&&和||構成的邏輯表達式嚴格地從左到右進行計算,并且一旦根據(jù)左分量的值就能確定整個邏輯表達式的值時,就不再執(zhí)行后面的運算。 例如,

x=y(tǒng)=z=1; ++x||++y&&++z; 執(zhí)行之后,x、y和z的值分別是2,1,1。第39頁/共60頁3.2.8位邏輯運算符和位邏輯表達式

1.二進制 只用0和1兩個數(shù)字來表示所有的數(shù)。二進制數(shù)的基本規(guī)則是“逢二進一”。

2.八進制和十六進制 八進制數(shù)是以8為基底的數(shù),用到的數(shù)字是0,1,2,…,7,一共8個。它的基本進位規(guī)則是“逢八進一”。 八進制整常數(shù)是以數(shù)字0開頭的八進制數(shù)字串。 二進制數(shù)與八進制數(shù)之間很容易進行轉換。對于一個二進制數(shù)來說,從右向左每三個數(shù)字為一組分開,把每組二進制數(shù)轉為八進制數(shù)表示。第40頁/共60頁

將八進制數(shù)轉換成二進制數(shù)時,只要將每位八進制數(shù)字用三位二進制數(shù)表示,串起來就是相應的二進制數(shù)。 十六進制數(shù)是以十六為基底的數(shù),它由數(shù)字0,1,2,…,9和字母A,B,C,D,E,F(xiàn)(或者a,b,c,d,e,f)來表示。其基本進位規(guī)則是“逢十六進一”。 在C語言中,十六進制整常數(shù)是以0x或0X開頭的十六進制數(shù)字串,例如0x12、0X5a8。 二進制與十六進制的轉換也很容易:對于一個二進制數(shù)來說,從右向左每四個數(shù)字為一組,把每組二進制數(shù)用十六進制數(shù)字表示。把十六進制數(shù)的每一位數(shù)字用四位二進制數(shù)表示,串起來就是相應的二進制數(shù)。第41頁/共60頁 3.原碼、反碼和補碼 在計算機內(nèi)表示數(shù)值的方法是不同的,一般有:原碼、反碼和補碼。 (1)原碼 通常,整數(shù)用一個字長表示。一般用最左邊的一位(稱作最高位)表示數(shù)的符號:以0代表正,1代表負。 二進制數(shù)的原碼表示形式是:最高位用于符號位,其余各位是數(shù)值的絕對值。第42頁/共60頁

(2)反碼 正數(shù)的反碼與原碼相同。負數(shù)的反碼是:原碼除符號位外(仍為1),各位取反。 (3)補碼 正數(shù)的補碼與原碼相同。除最高位仍為1外,原碼的其余各位求反,最后再加1第43頁/共60頁4.位邏輯運算符和位邏輯表達式在C語言中,位邏輯運算符有以下4個:&(按位與)|(按位或)~(按位反)^(按位異或)

它們都是按二進制一位一位地進行運算,相鄰位之間不發(fā)生聯(lián)系,即沒有“進位”、“借位”等問題,所以稱為位邏輯運算符。第44頁/共60頁

各個位邏輯運算符的優(yōu)先級關系是:~最高,其余3個運算符的優(yōu)先級從高到低依次是&、^、|,但三者都高于邏輯運算符而低于關系運算符。 由位邏輯運算符和運算分量構成的表達式稱作位邏輯表達式。 位邏輯運算符與邏輯運算符之間的區(qū)別: ①位邏輯運算符是針對二進制位的,而邏輯運算符是針對整個表達式的;位邏輯運算符要計算表達式的具體數(shù)值,而邏輯運算符只判別表達式的真與假。 ②位邏輯運算符&、|和^的兩個運算分量是可交換的;而邏輯運算符&&和||的兩個運算分量都是不可交換的,并且它們嚴格從左到右運算。第45頁/共60頁3.2.9移位運算符和移位表達式

C語言中實現(xiàn)移位功能的運算符有兩個:<<(左移)和>>(右移)。它們都是雙目運算符,并且要求兩個運算分量都是整型量。由移位運算符和運算分量構成的表達式稱作移位表達式。 (1)左移運算符<< 它的一般使用形式是: 表達式1<<表達式2

它的功能是:把表達式1的值(以二進制形式表示)向左移動n位,n值由表達式2確定,并且表達式2的值必須是正整數(shù)。第46頁/共60頁

例如,a=00001011,那么,移位表達式

a<<3

的結果是01011000,即:把a的各二進位全部向左移3位,右邊空出的位補0,而左邊溢出的位被丟棄不管。第47頁/共60頁

(2)右移運算符>> 它的一般使用形式是: 表達式1>>表達式2

它的功能是:把表達式1的值(以二進制形式表示)向右移n位,n的值由表達式2確定(該值必須是正整數(shù)) 例如,a=00001011,那么,移位表達式

a>>3

的結果是00000001,即:把a的各二進位全都向右移3位,右邊溢出的位被丟棄,而左邊空出的位(在本例情況下)補0。 在右移時,要注意符號位問題。第48頁/共60頁3.2.10其他運算符 (1)&和* 單目運算符&用來取出其運算分量的地址,例如,

inta,*p;

p=&a; “*”也是單目運算符,它是“&”的逆運算。它把運算分量(應是指針量)所指向的內(nèi)存單元中的內(nèi)容取出來。例如,

b=*p;第49頁/共60頁

(2)強制類型運算符()

一般使用形式是:

(類型名)表達式 它把表達式的類型強制轉換成圓括號中“類型名”所指定的類型。

(double)a

這是類型的臨時轉換方法。 (3)sizeof

單目運算符sizeof用來計算某種類型的變量或某種數(shù)據(jù)類型在計算機內(nèi)部表示時所占用的字節(jié)數(shù)。例如:

sizeof(int)第50頁/共60頁

(4)單目加“+”和單目減“-”運算符 單目加“+”運算的結果仍是其運算分量的值 負號(―)的運算結果是其運算分量的負值 (5)基本運算符

[]()->·

其中,[]用于數(shù)組下標的表示,()用于標識函數(shù),“->”和“”用于存取結構或聯(lián)合中的成員。它們的優(yōu)先級在所有運算符中是最高的。第51頁/共60頁3.3運算符優(yōu)先級和結合性第52頁/共60頁

溫馨提示

  • 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

提交評論