C程序設(shè)計課件2.2_第1頁
C程序設(shè)計課件2.2_第2頁
C程序設(shè)計課件2.2_第3頁
C程序設(shè)計課件2.2_第4頁
C程序設(shè)計課件2.2_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言運算符(13類44個)算術(shù)運算符+-*/%++--關(guān)系運算符>>=<<===!=邏輯運算符&&||!位運算符&|^~<<>>賦值運算符=+=-=*=/=%=&=|=^=<<=>>=條件運算符?:逗號運算符,指針運算符&*求字節(jié)數(shù)運算符sizeof類型轉(zhuǎn)換運算符(類型標識符)取成員運算符.->下標運算符[]圓括號()①運算符的功能②運算符要求運算對象的個數(shù)③運算符要求運算對象的數(shù)據(jù)類型④運算符的優(yōu)先級⑤運算符的結(jié)合方向⑥表達式值的數(shù)據(jù)類型主要內(nèi)容

優(yōu)先級

-(取負)、++、--*、/、%+、-

一、算術(shù)運算符與算術(shù)表達式1.算術(shù)運算符單目:-(取負)、++(自加)、--(自減)

雙目:+、-、*、/、%(取余)

高低

結(jié)合方向單目:右結(jié)合

雙目:左結(jié)合(2)取余運算法——%

分子和分母必須同為整型數(shù),運算結(jié)果的符號取決于分子的符號。(1)除法運算符——/

若分子分母都為整型,運算結(jié)果為整數(shù),舍去小數(shù)部分;若有一個操作數(shù)是實型,運算結(jié)果是實型。如:7/2的結(jié)果為

,7.0/2的結(jié)果為

。33.5如:7%4=5.5%23(×)-7%4=-3(3)自加(++)、自減(--)運算符

++使變量值加1,--使變量值減1++和--既可作為變量的前綴,又可作為變量的后綴

如:inti=3;前綴:

++i先執(zhí)行i=i+1,再使用i值后綴:

i++先使用i值,再執(zhí)行i=i+1前綴:--i先執(zhí)行i=i-1,再使用i值后綴:

i--先使用i值,再執(zhí)行i=i-1如:5++(a+b)++

(×)(×)自加自減的操作數(shù)只能是變量Inputanumber:_Inputanumber:26_#include"stdio.h"voidmain(){intnum;printf("Inputanumber:");scanf("%d",&num);printf("Valuebeforebeingincremented:%d\n",num);num++;printf("Valueafterbeingincremented:%d",num);}numInputanumber:26Valuebeforebeingincremented:26_2627Inputanumber:26Valuebeforebeingincremented:26Valueafterbeingincremented:27_程序1?【例】自加運算舉例【例】自加自減舉例

#include"stdio.h"voidmain(){intj,k,a,b,c;j=3;

k=++j;printf("%d,%d",k,j);j=3;

k=j++;printf("%d,%d",k,j);j=3;printf("%d",++j);j=3;printf("%d",j++);a=3;b=5;c=(++a)*b;printf("%d,%d,%d",a,b,c);a=3;b=5;c=(a++)*b;printf("%d,%d,%d",a,b,c);}/*相當于:j=j+1;k=j;*//*相當于:k=j;j=j+1;*//*相當于:j=j+1;

printf("%d",j);

*//*相當于:printf("%d",j);

j=j+1;

*//*相當于:a=a+1;

c=a*b;*//*相當于:c=a*b;a=a+1;*/程序2?/*輸出:4,4*//*輸出:3,4*//*輸出:4,5,20*//*輸出:4,5,15*/2.算術(shù)表達式定義:用算術(shù)運算符和圓括號將運算對象連接起來,并且符合C語言語法規(guī)則的式子。如:12/3+78*6-(10+65%14)-b/(2*a)b++/--a

3.運算符的組合C語言規(guī)定:當運算符++、--和運算符+、-進行混合運算時,自左向右盡可能多的算符組成運算符。i+++j等價于(i++)+ji---j等價于(i--)-j-i++等價于-(i++)-i--等價于-(i--)-i+++j等價于-(i++)+j-i---j等價于-(i--)-j算術(shù)表達式值類型:數(shù)值型單個的常量和變量都是算術(shù)表達式程序3?

4.算術(shù)運算中的類型轉(zhuǎn)換C語言中,整型、實型、字符型可以進行混合運算如:3.14+18/4+'a'

是合法算術(shù)表達式(1)自動類型轉(zhuǎn)換轉(zhuǎn)換的規(guī)則若為字符型必須先轉(zhuǎn)換成整型,即其對應(yīng)的ASCII碼值;若為單精度型必須先轉(zhuǎn)換成雙精度型;若類型不同,將低精度類型轉(zhuǎn)換成高精度類型。精度從低到高的順序

intunsignedlongdouble不同類型數(shù)據(jù)進行運算時,先自動轉(zhuǎn)換成同一類型,然后進行計算。4

【例】計算表達式3.14+18/4+'a'

的值3.14+18/4+'a'①計算18/4,結(jié)果4(int型)。

②3.14為double型,將4轉(zhuǎn)換成double型4.0,計算3.14+4.0,結(jié)果是7.14(double型)。③先將'a'轉(zhuǎn)換成int型,值為97,再將97轉(zhuǎn)換成double型97.0,計算7.14+97.0,結(jié)果是104.14(double型)。104.147.14運算過程(2)強制類型轉(zhuǎn)換格式:

(類型名)(表達式)功能:將表達式的值類型強制轉(zhuǎn)換成類型名指定的類型如:(int)(x+y)將表達式x+y的值強制轉(zhuǎn)換成整型(int)x+y將x的值強制轉(zhuǎn)換成整型(double)5將5強制轉(zhuǎn)換成雙精度實型(int)3.6將3.6強制轉(zhuǎn)換成整型③由高精度類型轉(zhuǎn)換成低精度類型可能會損壞精度

②強制轉(zhuǎn)換只是得到一個所需類型中間值,原數(shù)據(jù)類型不變①類型標識符必須用圓括號括起來

說明程序4?#include"stdio.h"voidmain(){floatx;inti;x=3.6;i=(int)(x);printf("x=%f,i=%d",x,i);}【例】強制類型轉(zhuǎn)換舉例輸出結(jié)果:x=3.600000,i=3二、關(guān)系運算符與關(guān)系表達式1.關(guān)系運算符(6個,雙目)低于算術(shù)運算符,高于賦值運算符<、<=、>、>=、==、!=優(yōu)先級:<、<=、>、>===、!=高低

如:

a+b>c+d等價于(a+b)>(c+d)a>b!=c等價于(a>b)!=ca==b<c等價于a==(b<c)a=b>c等價于a=(b>c)結(jié)合方向:左結(jié)合如:3>2b*b-4*a*c>=1e-6x==ya%b!=02.關(guān)系表達式設(shè)有定義:inta=3,b=2,c=1;則:a>b的值為

關(guān)系表達式值:定義:用關(guān)系運算符將運算對象連接起來的式子稱為關(guān)系表達式。

1(真)或0(假)表達式值類型:整型c==a的值為10C語言規(guī)定:用數(shù)值1代表關(guān)系運算結(jié)果為邏輯“真”用數(shù)值0代表關(guān)系運算結(jié)果為邏輯“假”如:1.2345*5-6.1725==0

可改寫為:fabs(1.2345*5-6.1725

)<1e-6【例】計算表達式3==4+1>2!=5的值并給出求解過程3==4+1>2!=55101(結(jié)果為0)應(yīng)避免對實型數(shù)據(jù)作相等或不等的判斷三、邏輯運算符與邏輯表達式邏輯運算符(3個)!(非)&&(與)||(或)優(yōu)先級:

!

&&

||結(jié)合方向!是單目,右結(jié)合;&&和||是雙目,左結(jié)合高低如:3>2+1&&4<2+1等價于(3>(2+1))&&(4<(2+1))

!

++---(取負)雙目算術(shù)運算符關(guān)系運算符雙目邏輯運算符(&&高于||)高低邏輯運算符的運算規(guī)則邏輯表達式:用邏輯運算符將運算對象連接起來的式子若a、b都為真,則a&&b為真,否則為假若a、b都為假,則a||b為假,否則為真若a為真,則!a為假,否則為真如:3>2&&4>33>4||4>5邏輯表達式值:1(真)或0(假)(結(jié)果為1)(結(jié)果為0)C語言規(guī)定:用數(shù)值0代表邏輯運算結(jié)果為“假”用數(shù)值1代表邏輯運算結(jié)果為“真”

C語言規(guī)定:在判斷一個量(常量或變量)是“真”還是“假”時,以0代表“假”,以非0代表“真”1【例】寫出表達式5>3&&'a'

||5<4-!0的求解過程

5>3&&

'a'

||5<4-

!031011!++---(取負)雙目算術(shù)運算符關(guān)系運算符雙目邏輯運算符(&&高于||)高低短路運算(懶惰計算)

在計算的過程中,只要表達式的值能確定,不再計算。a&&b&&c的運算過程a||b||c的運算過程【例】邏輯運算舉例

#include"stdio.h"voidmain(){inta=1,b=2,c=3,d=4,m=1,n=1;(m=a>b)&&(n=c>d);printf("m=%dn=%d\n",m,n);}運行結(jié)果:m=0n=1程序5?(2)100≤x≤200(x%3==0)&&(x%2==0)(x>=100)&&(x<=200)(x==2)||(x==8)(year%400==0)||((year%4==0)&&(year%100!=0))100<=x<=200【例】用邏輯表達式描述下列條件,設(shè)x和year都是整型(1)x是3的倍數(shù)且x是偶數(shù)(3)x等于2或8(4)年份year是閏年(×)(如:若x=210,其值為1

)四、位運算符與位運算表達式

位運算符:~&^|<<>>(取反)(與)(異或)(或)(左移)(右移)結(jié)合方向:位運算:對二進制位進行的運算

運算對象:整型、字符型

運算結(jié)果:整型~是單目,右結(jié)合;其它是雙目,左結(jié)合~<<、>>&^|高低優(yōu)先級:

~!++---(取負)雙目算術(shù)運算符(*,/,%高于+,-)<<>>關(guān)系運算符(>,<,>=,<=高于==,!=)

其它位運算符(&高于^,^高于|)雙目邏輯運算符(&&高于||)高低作用:常用于將一個數(shù)中的某些位置1

0000000000010011(八進制無符號數(shù)023)(|)0000000000011010(八進制無符號數(shù)032)00000000000100101.按位與運算符——&運算規(guī)則:對應(yīng)位都為1,則該位的結(jié)果為1,否則為0。

如:023&032的運算過程

(八進制無符號數(shù)022)0000000000010011(八進制無符號數(shù)023)(&)0000000000011010(八進制無符號數(shù)032)作用:常用于取一個數(shù)中的某些指定位2.按位或運算符——|運算規(guī)則:對應(yīng)位都為0,則該位的結(jié)果為0,否則為1。

如:023|032的計算過程0000000000011011(八進制無符號數(shù)033)(~)0000000000010011(八進制無符號數(shù)023)

3.按位異或運算符——^運算規(guī)則:對應(yīng)位相同,則該位的結(jié)果為0,否則為1。

如:023^032的運算過程0000000000010011(八進制無符號數(shù)023)(^)0000000000011010(八進制無符號數(shù)032)0000000000001001(八進制無符號數(shù)011)作用:常用于將一個數(shù)中的某些位翻轉(zhuǎn),即0變1,1變0

4.按位取反運算符——~如:~023的運算過程1111111111101100(八進制無符號數(shù)0177754)運算規(guī)則:0位變1,1位變0。作用:用來將一個二進制數(shù)按位取反,即1變0,0變1

交換變量a,b值:a=a^b;b=b^a;a=a^b;

000000000100115.左移運算符——<<運算規(guī)則:左邊移出的位丟失,右邊空出的位補0。

如:023<<2的運算過程(<<2)0000000000010011

(八進制無符號數(shù)023)00(八進制無符號數(shù)0114)作用:當左移沒有溢出時,左移一位相當于該數(shù)乘以2,左移n位相當于該數(shù)乘以2n

6.右移運算符——>>運算規(guī)則:右邊移出的位丟失,左邊空出的位補原來最左邊的那位的值(算數(shù)右移)。

如:023>>2的運算過程(>>2)0000000000010011(八進制無符號數(shù)023)(八進制無符號數(shù)04)0000000000010000作用:右移一位相當于除以2,右移n位相當于除以2n

0011五、賦值運算符與賦值表達式賦值運算符(11個)

基本賦值運算符:=

復合賦值運算符:+=、-=、*=、/=、%=&=、|=、^=、<<=、>>=結(jié)合方向:右結(jié)合優(yōu)先級:11個賦值運算符的優(yōu)先級相同~!++---(取負)雙目算術(shù)運算符(*,/,%高于+,-)<<>>關(guān)系運算符(>,<,>=,<=高于==,!=)其它位運算符(&高于^,^高于|)雙目邏輯運算符(&&高于||)

賦值運算符高低復合賦值表達式的一般形式如:(1)inta=3;a+=2;(2)floatx=1.2,y=2.1;y*=x+3.4;(3)inta=1,b=2;b/=a+=1;變量OP=表達式/*等價于a=a+2*//*等價于y=y*(x+3.4)*//*等價于b=b/(a=a+1)*/其中,OP∈{+,-,*,/,%,&,|,^,<<,>>}基本賦值表達式的一般形式賦值表達式的值:被賦值的變量值。變量名=表達式賦值表達式值的類型:被賦值的變量的類型。變量OP=表達式變量=變量OP(表達式)144a+=a-=a*a【例】若有定義:inta=12;計算表達式a+=a-=a*a的值a=a-144(即a=-132)a+=-132

(即a=-264)#include"stdio.h"voidmain(){inta=12;printf("%d\n",a+=a-=a*a);}運行結(jié)果:-264程序6?六、逗號運算符和逗號表達式逗號運算符:,

一般形式

表達式1,表達式2[,表達式3,…,表達式n]

運算過程從左向右依次計算每個表達式的值,逗號表達式的值就是最右邊表達式的值,逗號表達式值的類型就是最右邊表達式值的類型。優(yōu)先級:最低結(jié)合方向:左結(jié)合

若有定義:inta,x;

則:x=a=3,6*x,6*a,a+x的值為_____。6#include"stdio.h"voidmain(){inta,x;printf("%d%d%d\n",a,x,(x=a=3,++a,a+=4,a>5));

printf("%d%d%d\n",a,x,x=(a=3,++a,a+=4,a>5));}程序7?運行結(jié)果831811【例】閱讀程序,寫出運行結(jié)果七、條件運算符和條件表達式條件表達式一般形式

表達式1?表達式2:表達式3條件運算符:?:

求解過程(三目運算符)表達式2和表達式3只有一個被求解條件表達式求解過程表達式2表達式30表達式1非0雙精度型表達式值的類型:取表達式2值的類型和表達式3值的類型中的精度較高者。

如:3>2?1:1.5的值為_____,類型為_______。1.0結(jié)合方向:右結(jié)合如:10<9?1:6>7?2:310<9?1:(6>7?2:3)優(yōu)先級:高于賦值運算,低于邏輯運算~!++---(取負)雙目算術(shù)運算符(*,/,%高于+,-)<<>>關(guān)系運算符(>,<,>=,<=高于==,!=)其它位運算符(&高于^,^高于|)雙目邏輯運算(&&高于||)

條件運算符

賦值運算符逗號運算符高低【例】計算兩個整數(shù)a和b的最大值,請?zhí)羁铡?include"stdio.h"voidmain(){inta=3,b=4,max;max=

;printf("max(%d,%d)=%d",a,b,max);}程序8?a>b?a:b【例】用條件運算符求a+|b|,請?zhí)羁铡?include"stdio.h"voidmain(){inta=3,b=-4;printf("%d+|%d|=%d\n",a,b,

);}b>0?a+b:a-b程序9?#include"stdio.h"voidmain(){inta=1,b=2,c=3,d=4,m,n;m=1;n=1;printf("m=%dn=%de=%d\n",m,n,(a+d==b+c)?(m=a>b):(n=c>d));m=1;n=1;printf("m=%dn=%de=%d\n",m,n,(a+d!=b+c)?(m=a>b):(n=c>d));}【例】閱讀程序,寫出運行結(jié)果。運行結(jié)果

m=0n=1e=0m=1n=0e=0程序10?八、求長度運算符

運算符:sizeof(單目,右結(jié)合,優(yōu)先級次高)格式:sizeof(類型標識符)或sizeof表達式

功能:用以求得相應(yīng)類型變量或表達式值在內(nèi)存中所占的字節(jié)數(shù)?!纠壳笞止?jié)數(shù)運算符舉例

#include"stdio.h"voidmain(){printf("%d\n",sizeof(char));printf("%d\n",sizeof(int));printf("%d\n",sizeof(long));printf("%d\n",sizeof10);printf("%d\n",sizeof(1.0+10));}程序11?14448九、指針運算符1.取地址運算符

運算符:&(單目,右結(jié)合,優(yōu)先級次高)功能:取變量的地址如:inta=10,*p;p=&a;printf("%d,%d,%d",a,*p,*&a);輸出:10,10,10/*a,*p和*&a等價*/取地址運算符&的操作數(shù)只能是變量間接訪問運算符*的操作數(shù)只能是地址2.間接訪問運算符

運算符:*(單目,右結(jié)合,優(yōu)先級次高)功能:取給定地址單元中的內(nèi)容運算符的優(yōu)先級和結(jié)合性優(yōu)先級運算符含義結(jié)合方向運算對象個數(shù)1()[]->.圓括號下標運算符取成員運算符取成員運算符左結(jié)合2!~++---(類型標識符)*&sizeof邏輯非運算符按位取反運算符自加運算符自減運算符取負運算符類型轉(zhuǎn)換運算符間接訪問運算符取地址運算符求字節(jié)數(shù)運算符右結(jié)合13*/%乘法運算符除法運算符求余運算符左結(jié)合24+-加法運算符減法運算符左結(jié)合25<<>>按位左移運算符按位右移運算符左結(jié)合26<<=>>=關(guān)系運算符左結(jié)合27==!=等于運算符不等于運算符左結(jié)合28&按位與運算符左結(jié)合29^按位異或運算符左結(jié)合210|按位或運算符左結(jié)合211&&邏輯與運算符左結(jié)合212||邏輯或運算符左結(jié)合213?:條件運算符右結(jié)合314=+=-=*=/=%=>>=<<=&=^=|=賦值運算符右結(jié)合215,逗號運算符左結(jié)合21.設(shè)m,n,a,b,c,d的值均為0,執(zhí)行(m=a==b)||(n=c==d)后,m,n的值是()①0,0②0,1③1,0④1,14.若有定義:charch='A';,則表達式ch=(ch>='A'&&ch<='C')?(ch+32):ch的值是()①A②a③Z④z2.設(shè)有定義:inta=5,b;,執(zhí)行下列語句后,b的值不為2的是()①b=a/2②b=6-(--a)③b=a%2④b=a>3?2:43.設(shè)有定義:intx,a,b;,則執(zhí)行完語句:x=(a=3,b=a--);后,x,a,b的值依次是()①3,3,2②3,2,2③3,2,3④2,3,2

一、單項選擇題練習題③③③②5.設(shè)有定義:inta=3,b=4,*c=&a;則下面表達式中值為0的是()①a-*c②a-*b③b-a④*b-*a8.設(shè)有定義:inta=3,b=4;,則執(zhí)行語句printf("%d,%d",(a,b),(b,a));的輸出是()①3,4②4,3③3,3④4,4

6.若有定義:inta,b,c;,則下列表達式中,那一個是合法的C語言賦值表達式()①a=7+b=c=7②a=b++=c=7③a=(b=7,c=12)④a=3,b=a+5,c=b-27.若有定義:floatx=1,*y=&x;,則執(zhí)行完語句*y=x+3/2;后,x的值為()①1②2③2.0④2.5①③③②二、程序填空題1.以下程序的功能是輸出a、b、c三個變量中的最小值。

#include

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論