C語言程序設計教程 課件 第3.2 運算符和表達式_第1頁
C語言程序設計教程 課件 第3.2 運算符和表達式_第2頁
C語言程序設計教程 課件 第3.2 運算符和表達式_第3頁
C語言程序設計教程 課件 第3.2 運算符和表達式_第4頁
C語言程序設計教程 課件 第3.2 運算符和表達式_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第3.2章運算符和表達式理論知識數據類型1常量和變量

2運算符和表達式3數據類型轉換4引入:程序=數據結構+算法

運算符與表達式

常量、變量和符號的組合稱為表達式。表達式中的符號稱為運算符。運算符作用的變量、常量稱為操作數。

eg:

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

運算符與表達式

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

8.指針及求地址運算符*&9.求存儲單元字節數運算符sizeof10.類型轉換運算符(類型)11.結構體成員運算符.

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

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

基本算術運算符算術運算符

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

相當于i=i+1

--i

相當于i=i-1

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

自增、自減運算符算術運算符設已作聲明:inti=6,a;自增、自減運算符類型表達式計算方法結果前綴自增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算數運算符說明:無論作為前綴運算符還是后綴運算符,對于變量本身來說,自增1或自減1的效果是一樣的,但對表達式的值會有影響。

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

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

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

知識鏈接以下程序的運行結果是(

[填空1]

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

優先級:當一個運算對象兩側的運算符的優先級別不同時,應遵循優先級高的先處理的規則。

結合性:當一個運算對象兩側的運算符的優先級別相同時,應遵循運算符的結合方向。運算符結合性優先級()從左向右高低++、--、+(正號)、-(負號)從右向左*、/從左向右+(加號)、-(減號)從左向右賦值運算符賦值運算符

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

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

eg:sum=a+ba=8

注意:賦值運算符左邊只能是變量,不能是常量或表達式,如2=a、a+b=c都是錯誤的。

"="號右邊表達式的值即整個賦值表達式的值。如a=3*6,經過賦值運算,變量a的值為18,整個賦值表達式的值也是18。賦值運算符賦值運算符賦值運算符具有右結合性

a=b=6

等價于a=(b=6)

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

【分析】首先考慮運算符的優先級:賦值運算符的優先級很低,僅在逗號運算符之上,所以先計算出6+2的值8。再考慮賦值運算符的結合性:賦值運算符的結合性是從右向左,所以表達式實際與a=(b=8)是等價的,先把8賦給變量b,再把b的當前值賦給a。經過運算,a、b變量的值及整個表達式的值都為8。

賦值運算符復合賦值運算符

C語言允許在賦值運算符“=”之前加上算術運算符或位運算符以構成復合的賦值運算符。有:

+=-=*=/=%=

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

設已作如下聲明:intx=7;運算符表達式舉例運算規則表達式的值+=x+=3x=x+310-=x-=3x=x-34*=x*=3x=x*321/=x/=3x=x/32%=x%=3x=x%31賦值運算符復合賦值運算符

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

【分析】因為"+"的優先級比"*="高,所以先計算y+5,再進行復合賦值運算。因此表達式與x=x*(y+5)是等價的。任務4實踐知識任務4:復合賦值運算符的使用分析:綜合考慮運算符的優先級及復合賦值運算符的結合性(自右向左)。

/*案例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分

逗號運算符

逗號運算符,

用逗號運算符可以將兩個表達式連接起來。

eg:2+3,2+5逗號表達式用逗號運算符連接兩個或兩個以上表達式所形成的新表達式就是逗號表達式,其一般形式為:

表達式1,表達式2,…,表達式n

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

逗號運算符

優先級和結合性

優先級:逗號運算符是所有運算符中級別最低的.

結合性:逗號表達式的結合性為自左向右的。

任務5實踐知識任務5:逗號運算符的使用

/*案例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);}

知識鏈接下面程序段輸出結果是:()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分數據類型轉換C語言中有3種形式的數據類型轉換:自動類型轉換賦值轉換強制類型轉換

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

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

所表示的數據范圍大。賦值類型轉換賦值轉換是在做賦值運算時發生的。如果賦值運算符兩側的類型一致,則直接進行賦值;如果兩側的類型不一致(但都是整型,浮點型或字符型),在賦值時會進行類型轉換。轉換的規則如下:

①將整型數據賦給浮點型變量時,數值不變,但有效位增加。②將浮點型數據賦給整型變量時,將舍棄浮點數的小數部分。

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

③將字符型數據賦給整型變量時,是將字符的ASCII碼賦給變量。強制類型轉換

當自動類型轉換和賦值轉換失效時,可以使用強制類型轉換運算符將一個表達式轉換成所需類型,其一般形式為:

(數據類型名)(表達式)

eg:(int)a//將強制轉換為int型,但a的類型不變

(double)(x+y)//將x+y的值強制轉換為double型

注意:如表達式寫成(double)x+y,是先將變量x強制轉換為double型,再與變量y相加。因為強制類型轉換運算符的優先級高于二元算術運算符。

任務6:方案二實踐知識任務6:計算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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論