C語言程序設(shè)計(jì)教程 課件 第3.2 運(yùn)算符和表達(dá)式_第1頁
C語言程序設(shè)計(jì)教程 課件 第3.2 運(yùn)算符和表達(dá)式_第2頁
C語言程序設(shè)計(jì)教程 課件 第3.2 運(yùn)算符和表達(dá)式_第3頁
C語言程序設(shè)計(jì)教程 課件 第3.2 運(yùn)算符和表達(dá)式_第4頁
C語言程序設(shè)計(jì)教程 課件 第3.2 運(yùn)算符和表達(dá)式_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3.2章運(yùn)算符和表達(dá)式理論知識數(shù)據(jù)類型1常量和變量

2運(yùn)算符和表達(dá)式3數(shù)據(jù)類型轉(zhuǎn)換4引入:程序=數(shù)據(jù)結(jié)構(gòu)+算法

運(yùn)算符與表達(dá)式

常量、變量和符號的組合稱為表達(dá)式。表達(dá)式中的符號稱為運(yùn)算符。運(yùn)算符作用的變量、常量稱為操作數(shù)。

eg:

a+bnum3=num1ch=ch-323>2(a+b)/(a-b)3>2&&5<3+1

運(yùn)算符與表達(dá)式

C語言的運(yùn)算符共有13類45個(gè)運(yùn)算符1.算術(shù)運(yùn)算符+-*/%++--2.關(guān)系運(yùn)算符>>=<<===!=3.邏輯運(yùn)算符!&&||4.位運(yùn)算符<<>>~|^&5.賦值類運(yùn)算符=及自反賦值運(yùn)算符6.條件運(yùn)算符?:7.逗號運(yùn)算符,

8.指針及求地址運(yùn)算符*&9.求存儲單元字節(jié)數(shù)運(yùn)算符sizeof10.類型轉(zhuǎn)換運(yùn)算符(類型)11.結(jié)構(gòu)體成員運(yùn)算符.

->12.下標(biāo)運(yùn)算符[]13.其他運(yùn)算符如函數(shù)調(diào)用運(yùn)算符()等運(yùn)算符與表達(dá)式學(xué)習(xí)運(yùn)算符要注意幾個(gè)方面問題:(1)運(yùn)算符的功能;(2)運(yùn)算符與操作對象的關(guān)系:(3)運(yùn)算符的優(yōu)先級和結(jié)合性;(4)運(yùn)算結(jié)果的數(shù)據(jù)類型:不同類型數(shù)據(jù)運(yùn)算將發(fā)生類型轉(zhuǎn)換算術(shù)運(yùn)算符運(yùn)算符名稱表達(dá)式舉例運(yùn)算結(jié)果+正號運(yùn)算符+55的原值為5-負(fù)號運(yùn)算符-55的負(fù)值為-5+加法運(yùn)算符5+25與2的和為7-減法運(yùn)算符5-25與2的差為3*乘法運(yùn)算符5*25與2的乘積為10/除法運(yùn)算符5/25與2的商為2%取余運(yùn)算符5%25除以2的余數(shù)為1基本算術(shù)運(yùn)算符算術(shù)運(yùn)算符

說明:①"+"和"-"符號在C語言中有雙重含義,既可以表示正號和負(fù)號,也可以表示加號和減號。在表示正號和負(fù)號時(shí),只能在運(yùn)算符的一側(cè)出現(xiàn)一個(gè)操作數(shù),我們稱之為一元運(yùn)算符,又稱單目運(yùn)算符。在表示加號和減號時(shí),要求在運(yùn)算符兩側(cè)各有一個(gè)操作數(shù),我們稱之為二元(雙目)運(yùn)算符。*、/、%也是二元運(yùn)算符。②兩個(gè)整數(shù)進(jìn)行算術(shù)運(yùn)算,結(jié)果仍為整數(shù)。所以5/2的商為2,舍去了小數(shù)部分。③取余運(yùn)算符"%"要求兩邊的操作數(shù)必須為整型,余數(shù)的符號與被除數(shù)的相同。如5%3.2、18.0%7.0都是錯(cuò)誤的表達(dá)式。其它運(yùn)算符操作數(shù)的類型可以是任意的。

基本算術(shù)運(yùn)算符算術(shù)運(yùn)算符

自增運(yùn)算符“++”和自減運(yùn)算符“--”都是單目運(yùn)算符,作用是使操作數(shù)的值加1或減1。如:i++

相當(dāng)于i=i+1

--i

相當(dāng)于i=i-1

注意:"++"和"--"運(yùn)算符的操作數(shù)只能是變量,不能是常量、函數(shù)或表達(dá)式。如2++、(a+b)++都是錯(cuò)誤的表達(dá)式。

自增、自減運(yùn)算符算術(shù)運(yùn)算符設(shè)已作聲明:inti=6,a;自增、自減運(yùn)算符類型表達(dá)式計(jì)算方法結(jié)果前綴自增a=++ii=i+1a=ii的值為7a的值為7后綴自增a=i++a=ii=i+1i的值為7a的值為6前綴自減a=--ii=i-1a=ii的值為5a的值為5后綴自減a=i--a=ii=i-1i的值為5a的值為6算數(shù)運(yùn)算符說明:無論作為前綴運(yùn)算符還是后綴運(yùn)算符,對于變量本身來說,自增1或自減1的效果是一樣的,但對表達(dá)式的值會有影響。

(1)前綴運(yùn)算:++i是先執(zhí)行i=i+1,再使用i的值(先增值后引用);同樣,--i先執(zhí)行i=i-1,再使用i的值(先減值后引用)。(2)后綴運(yùn)算:i++是先使用i的值,再執(zhí)行i=i+1(先引用后增值);同樣,i--是先使用i的值,再執(zhí)行i=i-1(先引用后減值)。自增、自減運(yùn)算符任務(wù)3實(shí)踐知識任務(wù)3:自增運(yùn)算符的使用

/*案例2-3*/#include"stdio.h"voidmain(){inti=6,a; a=i++;

printf("a=%d,i=%d\n",a,i);}

知識鏈接以下程序的運(yùn)行結(jié)果是(

[填空1]

)。main(){intx=6,y=3;printf(“%d,%d\n”,x++,--y);}作答填空題1分算術(shù)運(yùn)算符算術(shù)運(yùn)算符的優(yōu)先級和結(jié)合性

優(yōu)先級:當(dāng)一個(gè)運(yùn)算對象兩側(cè)的運(yùn)算符的優(yōu)先級別不同時(shí),應(yīng)遵循優(yōu)先級高的先處理的規(guī)則。

結(jié)合性:當(dāng)一個(gè)運(yùn)算對象兩側(cè)的運(yùn)算符的優(yōu)先級別相同時(shí),應(yīng)遵循運(yùn)算符的結(jié)合方向。運(yùn)算符結(jié)合性優(yōu)先級()從左向右高低++、--、+(正號)、-(負(fù)號)從右向左*、/從左向右+(加號)、-(減號)從左向右賦值運(yùn)算符賦值運(yùn)算符

C語言中賦值運(yùn)算符為“=”,它的一般形式為:

變量=表達(dá)式作用是將賦值號"="右邊表達(dá)式的值賦給左邊的變量。其中,表達(dá)式可以是常量、變量或C語言中任意合法表達(dá)式。

eg:sum=a+ba=8

注意:賦值運(yùn)算符左邊只能是變量,不能是常量或表達(dá)式,如2=a、a+b=c都是錯(cuò)誤的。

"="號右邊表達(dá)式的值即整個(gè)賦值表達(dá)式的值。如a=3*6,經(jīng)過賦值運(yùn)算,變量a的值為18,整個(gè)賦值表達(dá)式的值也是18。賦值運(yùn)算符賦值運(yùn)算符賦值運(yùn)算符具有右結(jié)合性

a=b=6

等價(jià)于a=(b=6)

【問題】a=b=6+2的值是多少?

【分析】首先考慮運(yùn)算符的優(yōu)先級:賦值運(yùn)算符的優(yōu)先級很低,僅在逗號運(yùn)算符之上,所以先計(jì)算出6+2的值8。再考慮賦值運(yùn)算符的結(jié)合性:賦值運(yùn)算符的結(jié)合性是從右向左,所以表達(dá)式實(shí)際與a=(b=8)是等價(jià)的,先把8賦給變量b,再把b的當(dāng)前值賦給a。經(jīng)過運(yùn)算,a、b變量的值及整個(gè)表達(dá)式的值都為8。

賦值運(yùn)算符復(fù)合賦值運(yùn)算符

C語言允許在賦值運(yùn)算符“=”之前加上算術(shù)運(yùn)算符或位運(yùn)算符以構(gòu)成復(fù)合的賦值運(yùn)算符。有:

+=-=*=/=%=

<<=>>=&=^=|=

設(shè)已作如下聲明:intx=7;運(yùn)算符表達(dá)式舉例運(yùn)算規(guī)則表達(dá)式的值+=x+=3x=x+310-=x-=3x=x-34*=x*=3x=x*321/=x/=3x=x/32%=x%=3x=x%31賦值運(yùn)算符復(fù)合賦值運(yùn)算符

【問題】x*=y+5是等價(jià)于x=x*y+5還是x=x*(y+5)?

【分析】因?yàn)椋?"的優(yōu)先級比"*="高,所以先計(jì)算y+5,再進(jìn)行復(fù)合賦值運(yùn)算。因此表達(dá)式與x=x*(y+5)是等價(jià)的。任務(wù)4實(shí)踐知識任務(wù)4:復(fù)合賦值運(yùn)算符的使用分析:綜合考慮運(yùn)算符的優(yōu)先級及復(fù)合賦值運(yùn)算符的結(jié)合性(自右向左)。

/*案例2-4*/#include"stdio.h"voidmain(){ inta;a=5; a+=a-=a+a;printf("a=%d\n",a);}知識鏈接inta=2;a+=a*=a+=a*=3;則a=?

612144288ABCD提交單選題1分

逗號運(yùn)算符

逗號運(yùn)算符,

用逗號運(yùn)算符可以將兩個(gè)表達(dá)式連接起來。

eg:2+3,2+5逗號表達(dá)式用逗號運(yùn)算符連接兩個(gè)或兩個(gè)以上表達(dá)式所形成的新表達(dá)式就是逗號表達(dá)式,其一般形式為:

表達(dá)式1,表達(dá)式2,…,表達(dá)式n

求值過程:先求表達(dá)式1的值,再求表達(dá)式2的值,…,最后求表達(dá)式n的值。表達(dá)式n的值就是整個(gè)逗號表達(dá)式的值。

逗號運(yùn)算符

優(yōu)先級和結(jié)合性

優(yōu)先級:逗號運(yùn)算符是所有運(yùn)算符中級別最低的.

結(jié)合性:逗號表達(dá)式的結(jié)合性為自左向右的。

任務(wù)5實(shí)踐知識任務(wù)5:逗號運(yùn)算符的使用

/*案例2-5*/#include"stdio.h"voidmain(){inta=5,b,c;b=3*5,a+4;c=(3*5,a+4);printf("b=%d,c=%d\n",b,c);}

知識鏈接下面程序段輸出結(jié)果是:()int

a=1,b=2,c=3;printf(“%d,%d,%d\n”,a,b,c);printf(“%d,%d,%d\n”,(a,b,c),b,c);

1,2,33,2,11,2,3

3,2,31,2,33,2,1ABCD提交單選題1分?jǐn)?shù)據(jù)類型轉(zhuǎn)換C語言中有3種形式的數(shù)據(jù)類型轉(zhuǎn)換:自動類型轉(zhuǎn)換賦值轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換

自動類型轉(zhuǎn)換自動類型轉(zhuǎn)換發(fā)生在做算術(shù)運(yùn)算時(shí)。同種類型的數(shù)據(jù)做算術(shù)運(yùn)算時(shí),結(jié)果類型不變。當(dāng)運(yùn)算符兩邊的數(shù)據(jù)類型不同時(shí),則先遵循規(guī)則自動進(jìn)行類型轉(zhuǎn)換,使二者具有同一種類型,然后進(jìn)行計(jì)算。規(guī)則如下:①float和double型數(shù)據(jù)運(yùn)算時(shí),float型數(shù)據(jù)自動轉(zhuǎn)換為double型。②整型數(shù)據(jù)(包括所有整數(shù)類型)、char型數(shù)據(jù)和float或double型數(shù)據(jù)運(yùn)算時(shí),整型數(shù)據(jù)和char型數(shù)據(jù)會自動轉(zhuǎn)換為float或double型數(shù)據(jù)。③int和char型數(shù)據(jù)運(yùn)算時(shí),char型數(shù)據(jù)自動轉(zhuǎn)換為int型,也就是用字符的ASCII碼與int型數(shù)據(jù)進(jìn)行運(yùn)算。如'a'+2的結(jié)果為99。④char型數(shù)據(jù)與char型數(shù)據(jù)運(yùn)算時(shí),也會先自動轉(zhuǎn)換為int型,再進(jìn)行計(jì)算。如'c'-'a'的結(jié)果為int型數(shù)據(jù)2。自動類型轉(zhuǎn)換高doublefloatlongchar,shortunsigned低自動類型轉(zhuǎn)換規(guī)則int任務(wù)6:方案一

inti;floatf;doubled;10+'a'+i*f-d/iintdoubledoubledouble低類型→高類型低類型:存儲字節(jié)少所表示的數(shù)據(jù)范圍小。高類型:存儲字節(jié)多

所表示的數(shù)據(jù)范圍大。賦值類型轉(zhuǎn)換賦值轉(zhuǎn)換是在做賦值運(yùn)算時(shí)發(fā)生的。如果賦值運(yùn)算符兩側(cè)的類型一致,則直接進(jìn)行賦值;如果兩側(cè)的類型不一致(但都是整型,浮點(diǎn)型或字符型),在賦值時(shí)會進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換的規(guī)則如下:

①將整型數(shù)據(jù)賦給浮點(diǎn)型變量時(shí),數(shù)值不變,但有效位增加。②將浮點(diǎn)型數(shù)據(jù)賦給整型變量時(shí),將舍棄浮點(diǎn)數(shù)的小數(shù)部分。

注意:不是四舍五入,而是將小數(shù)部分去掉。

③將字符型數(shù)據(jù)賦給整型變量時(shí),是將字符的ASCII碼賦給變量。強(qiáng)制類型轉(zhuǎn)換

當(dāng)自動類型轉(zhuǎn)換和賦值轉(zhuǎn)換失效時(shí),可以使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型,其一般形式為:

(數(shù)據(jù)類型名)(表達(dá)式)

eg:(int)a//將強(qiáng)制轉(zhuǎn)換為int型,但a的類型不變

(double)(x+y)//將x+y的值強(qiáng)制轉(zhuǎn)換為double型

注意:如表達(dá)式寫成(double)x+y,是先將變量x強(qiáng)制轉(zhuǎn)換為double型,再與變量y相加。因?yàn)閺?qiáng)制類型轉(zhuǎn)換運(yùn)算符的優(yōu)先級高于二元算術(shù)運(yùn)算符。

任務(wù)6:方案二實(shí)踐知識任務(wù)6:計(jì)算1/2+1/3+1/4的和/*案例2-6*//*解決方案1*/#include"stdio.h"voidmain(){inti=2;//floati=2;

floats;

s=1.0/i+1.0/(i+1)+1.0/(

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論