版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章運(yùn)算符和表達(dá)式3.1表達(dá)式
3.2算術(shù)運(yùn)算符3.3賦值運(yùn)算符3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算3.5自增、自減運(yùn)算符3.6 逗號運(yùn)算符
3.7 其它運(yùn)算符 本章小結(jié)習(xí)題參考答案11/26/20221第3章運(yùn)算符和表達(dá)式3.1表達(dá)式 11/22/203.1表達(dá)式 一.表達(dá)式表達(dá)式是由運(yùn)算對象、運(yùn)算符按照C語言的語法規(guī)則構(gòu)成的符號序列。表達(dá)式可以通過運(yùn)算產(chǎn)生一個結(jié)果或完成某種操作。C語言的表達(dá)式功能很強(qiáng),也很復(fù)雜,它提供了許多種運(yùn)算符11/26/202223.1表達(dá)式 一.表達(dá)式11/22/20222cse.c3.1表達(dá)式 二.運(yùn)算符運(yùn)算符是C語言里用于描述對數(shù)據(jù)進(jìn)行運(yùn)算的特殊符號。C語言有三大運(yùn)算符:算術(shù)、關(guān)系與邏輯、位操作。C語言還有一些已超出了一般運(yùn)算符概念的特殊運(yùn)算符。11/26/202233.1表達(dá)式 二.運(yùn)算符11/22/20223cse.c3.1表達(dá)式 三.運(yùn)算符和表達(dá)式的分類1.運(yùn)算符的分類①按在表達(dá)式中與運(yùn)算對象的關(guān)系(所需要運(yùn)算對象的個數(shù))可以分為:單目運(yùn)算符雙目運(yùn)算符三目運(yùn)算符學(xué)習(xí)運(yùn)算符應(yīng)注意:運(yùn)算符功能與運(yùn)算量關(guān)系要求運(yùn)算量個數(shù)要求運(yùn)算量類型運(yùn)算符優(yōu)先級別結(jié)合方向結(jié)果的類型11/26/202243.1表達(dá)式 三.運(yùn)算符和表達(dá)式的分類學(xué)習(xí)運(yùn)算符應(yīng)注意:3.1表達(dá)式 ②按它們在表達(dá)式中所起的作用又可以分為:算術(shù)運(yùn)算符:+、-、*、/、%賦值運(yùn)算符:=、+=、-=、*=、/=、%=、 &=、|=、^=、<<=、>>=自增自減運(yùn)算符:++、--關(guān)系運(yùn)算符:<、<=、>、>=、==、!=邏輯運(yùn)算符:!、&&、||條件運(yùn)算符:?:位運(yùn)算符:~、&、^、|、<<、>>逗號運(yùn)算符:,其它運(yùn)算符:()、[]、->、.、(類型名)、*、&、sizeof11/26/202253.1表達(dá)式 ②按它們在表達(dá)式中所起的作用又可以分為:3.1表達(dá)式 2.表達(dá)式的分類①按照運(yùn)算符要求運(yùn)算對象的個數(shù)可以分為:單目表達(dá)式雙目表達(dá)式三目表達(dá)式②按照運(yùn)算符在表達(dá)式中的作用,可以分為:算術(shù)表達(dá)式賦值表達(dá)式自增、自減表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式逗號表達(dá)式11/26/202263.1表達(dá)式 2.表達(dá)式的分類11/22/20226cs3.1表達(dá)式 四.優(yōu)先級和結(jié)合性優(yōu)先級指同一個表達(dá)式中不同運(yùn)算符進(jìn)行運(yùn)算時的優(yōu)先次序。結(jié)合性是針對同一優(yōu)先級的多個運(yùn)算符而言的,它是指同一個表達(dá)式中相同優(yōu)先級的多個運(yùn)算是自左向右進(jìn)行運(yùn)算還是自右向左進(jìn)行運(yùn)算。關(guān)于C語言運(yùn)算符的含義、類型、優(yōu)先級、結(jié)合性等問題見附錄B。11/26/202273.1表達(dá)式 四.優(yōu)先級和結(jié)合性11/22/20227c3.2算術(shù)運(yùn)算符一.算術(shù)運(yùn)算符
+:加法運(yùn)算符-:減法運(yùn)算符*:乘法運(yùn)算符/:除法運(yùn)算符 當(dāng)運(yùn)算對象均為整數(shù)時運(yùn)算結(jié)果也為整數(shù)。(P43)%:求余運(yùn)算符(模運(yùn)算符)。 要求%兩側(cè)運(yùn)算對象均為整型數(shù)據(jù)。算術(shù)運(yùn)算符均為雙目運(yùn)算符,均具有左結(jié)合性。*、/、%的優(yōu)先級為3級,+、-的優(yōu)先級為4級。11/26/202283.2算術(shù)運(yùn)算符一.算術(shù)運(yùn)算符11/22/20228c>算術(shù)運(yùn)算符基本算術(shù)運(yùn)算符:+-*/%結(jié)合方向:從左向右優(yōu)先級:----->*/%----->+-
(2)(3)(4)說明:“-”可為單目運(yùn)算符時,右結(jié)合性兩整數(shù)相除,結(jié)果為整數(shù)%要求兩側(cè)均為整型數(shù)據(jù)+-*/運(yùn)算的兩個數(shù)中有一個數(shù)為實(shí)數(shù),結(jié)果是double型例5/2=-5/2.0=例5%2=-5%2=1%10=
5%1=5.5%2例5/2=2
-5/2.0=-2.5例5%2=1
-5%2=-11%10=
1
5%1=
05.5%2()<11/26/20229>算術(shù)運(yùn)算符例5/2=例5%23.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式算術(shù)表達(dá)式是用算術(shù)運(yùn)算符和括號將運(yùn)算對象連接起來的、符合C語言的語法規(guī)則的式子。例:a+b、2+3/5、a/b/c
使用算術(shù)表達(dá)式時應(yīng)注意:(1)當(dāng)雙目算術(shù)運(yùn)算符兩側(cè)運(yùn)算對象的類型一致時,運(yùn)算結(jié)果的類型與運(yùn)算對象的類型相同,如果類型不一致,系統(tǒng)將自動按規(guī)律先將運(yùn)算對象轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。11/26/2022103.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式11/22/202210c3.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式(2)可以用括號改變表達(dá)式的運(yùn)算順序,左右括號必須配對,多層括號都用小括號“()”表示。表達(dá)式2*(3+(7-2)/2)的運(yùn)算順序是?=2*(3+5/2)=2*(3+2)=2*5=1011/26/2022113.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式=2*(3+5/2)=2*3.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式(3)注意算術(shù)表達(dá)式的書寫形式,不要寫成代數(shù)式的形式。表達(dá)式中的所有字符都是寫在同一行上,沒有分式,也沒有上下標(biāo),如代數(shù)式,應(yīng)該寫成(a+b)/(c-d),括號不能省略,若省略括號,表達(dá)式成了a+b/c-d。有些代數(shù)式無法直接寫出,還要調(diào)用數(shù)學(xué)函數(shù)來完成,如?11/26/2022123.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式表達(dá)式中的所有字符都是寫在3.3賦值運(yùn)算符一.普通賦值運(yùn)算符1.賦值運(yùn)算符賦值符號“=”就是賦值運(yùn)算符,其功能是將賦值運(yùn)算符“=”右側(cè)表達(dá)式的值求出并將結(jié)果賦值給“=”左側(cè)的變量。賦值運(yùn)算符的優(yōu)先級很低,僅高于逗號運(yùn)算符,為右結(jié)合性。11/26/2022133.3賦值運(yùn)算符一.普通賦值運(yùn)算符11/22/202213.3賦值運(yùn)算符2.賦值表達(dá)式用賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的符合C語言語法的式子稱做賦值表達(dá)式。它的一般形式為: 變量名=表達(dá)式賦值表達(dá)式的結(jié)果是賦值號右側(cè)的表達(dá)式的值。求解賦值表達(dá)式時,如果賦值運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致,賦值時要進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換的原則是將右側(cè)的表達(dá)式的值轉(zhuǎn)換為左側(cè)變量的類型再進(jìn)行對左側(cè)變量賦值。11/26/2022143.3賦值運(yùn)算符2.賦值表達(dá)式11/22/202214c>簡單賦值運(yùn)算符(見P44例3.1、3.2)符號:=格式:變量標(biāo)識符=表達(dá)式作用:將一個數(shù)據(jù)(常量或表達(dá)式)賦給一個變量左側(cè)必須是變量,不能是常量或表達(dá)式例a=3;d=func();c=d+2;例3=x-2*y;a+b=3;(×)<類型轉(zhuǎn)換賦值轉(zhuǎn)換規(guī)則:使賦值號右邊表達(dá)式值自動轉(zhuǎn)換成其左邊變量的類型例
floatf;inti=10;f=i;則
f=10.0例inti;i=2.56;//結(jié)果i=2;11/26/202215>簡單賦值運(yùn)算符(見P44例3.1、3.2)例a=3.3賦值運(yùn)算符二.復(fù)合賦值運(yùn)算符在賦值運(yùn)算符“=”之前加上其它一些雙目運(yùn)算符可以構(gòu)成復(fù)合賦值運(yùn)算符,用于完成運(yùn)算、賦值組合操作。C語言中復(fù)合賦值運(yùn)算符的一般形式為: 運(yùn)算符=其中“運(yùn)算符”可以是: +、-、*、/、%、|、&、^、<<、>>所構(gòu)成的復(fù)合賦值運(yùn)算符是: +=、-=、*=、/=、%=、|=、&=、^=、<<=、>>=所有的賦值運(yùn)算符包括復(fù)合賦值運(yùn)算符的優(yōu)先級全部相同,均為右結(jié)合性。11/26/2022163.3賦值運(yùn)算符二.復(fù)合賦值運(yùn)算符11/22/20221復(fù)合賦值運(yùn)算符種類:+=-=*=/=%=<<=>>=&=^=|=含義:exp1op=exp2exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%311/26/202217復(fù)合賦值運(yùn)算符a+=3a=a+3x*=y+8x=x*(y+83.3賦值運(yùn)算符由復(fù)合賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的式子稱為復(fù)合賦值表達(dá)式。它的一般形式為: 變量名復(fù)合賦值運(yùn)算符表達(dá)式復(fù)合賦值表達(dá)式的作用等價于: 變量名=變量名運(yùn)算符(表達(dá)式)即先將變量和表達(dá)式進(jìn)行復(fù)合賦值運(yùn)算符所指定的運(yùn)算,然后將運(yùn)算結(jié)果賦給變量。復(fù)合賦值表達(dá)式的值就是復(fù)合賦值運(yùn)算符左側(cè)變量被賦值以后的值。11/26/2022183.3賦值運(yùn)算符由復(fù)合賦值運(yùn)算符將一個變量和一個表達(dá)式連3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換(p46)整型、實(shí)型、字符型數(shù)據(jù)間可以混合進(jìn)行算術(shù)運(yùn)算。進(jìn)行運(yùn)算時,參與運(yùn)算的操作數(shù)的數(shù)據(jù)類型要一致,若參與運(yùn)算的數(shù)據(jù)類型不同,先要將其轉(zhuǎn)換為相同的類型,然后再進(jìn)行運(yùn)算。11/26/2022193.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換橫向箭頭表示必須的轉(zhuǎn)換,縱向箭頭表示當(dāng)運(yùn)算符兩側(cè)的運(yùn)算對象為不同類型時的轉(zhuǎn)換,這些轉(zhuǎn)換都是由系統(tǒng)自動進(jìn)行的。P47高低doublelongunsignedintchar,shortfloat11/26/2022203.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換高低d>doublefloatlongunsignedintchar,short低高說明:必定的轉(zhuǎn)換運(yùn)算對象類型不同時轉(zhuǎn)換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例inti;floatf;doubled;longl;<P47例3.4#include<stdio.h>main(){ inta=2,b=5; charc=’a’; floatx=2.5,y=3.3,z; z=c/2+x/a-y*b; printf("%f\n",z);}11/26/202221>doublefloatlongunsignedintcha3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算二.強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)的。其一般形式為: (類型說明符)(表達(dá)式)(類型說明符)是類型轉(zhuǎn)換運(yùn)算符,單目運(yùn)算,優(yōu)先級別為2級,具右結(jié)合性。在類型轉(zhuǎn)換運(yùn)算符的右側(cè)跟上表達(dá)式形成類型轉(zhuǎn)換表達(dá)式,其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。11/26/2022223.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算二.強(qiáng)制類型轉(zhuǎn)換11/>強(qiáng)制轉(zhuǎn)換(見P48強(qiáng)制類型轉(zhuǎn)換運(yùn)算符部分)一般形式:(類型名)(表達(dá)式)例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變例:#include<stdio>main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3精度損失問題較高類型向較低類型轉(zhuǎn)換時可能發(fā)生強(qiáng)制類型轉(zhuǎn)換運(yùn)算符表達(dá)式僅一個變量時,括號可以省略
<11/26/202223>強(qiáng)制轉(zhuǎn)換(見P48強(qiáng)制類型轉(zhuǎn)換運(yùn)算符部分)例:精度損失問題例3.5對比以下兩個程序(P48)#include<stdio.h>#include<stdio.h>main()main(){{ inta,b;inta,b; floatx;floatx; a=10;a=10; b=4;b=4; x=3.2+a/b;x=3.2+(float)a/b;printf(“x=%f\n“,x);printf("x=%f\n“,x);}}?11/26/202224例3.5對比以下兩個程序(P48)#include<s3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算三.強(qiáng)制類型轉(zhuǎn)換賦值表達(dá)式的類型轉(zhuǎn)換當(dāng)賦值運(yùn)算符兩側(cè)的運(yùn)算對象數(shù)據(jù)類型不同時,系統(tǒng)也將進(jìn)行自動類型轉(zhuǎn)換,轉(zhuǎn)換規(guī)則為:將賦值運(yùn)算符右側(cè)表達(dá)式的類型轉(zhuǎn)換為左側(cè)變量的類型。11/26/2022253.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算三.強(qiáng)制類型轉(zhuǎn)換賦值表例3.6賦值運(yùn)算的自動類型轉(zhuǎn)換。#include<stdio.h>main(){ charc=‘a(chǎn)’; inta=321,b,i; unsignedm=4294967295,n; floatx=2.5,y; doubled=12345678.987; printf("c=%c,a=%d,m=%u,x=%f,d=%f\n“,c,a,m,x,d); c=a;b=x;y=a;x=d;i=m;n=-l; printf("c=%c,b=%d,y=%f,x=%f,i=%d,n=%u\n“,c,b,y,x,i,n);}/*注意這個m的值有些特殊*/11/26/202226例3.6賦值運(yùn)算的自動類型轉(zhuǎn)換。#include<std3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(1)浮點(diǎn)型與整型相互轉(zhuǎn)換將浮點(diǎn)數(shù)據(jù)(包括單、雙精度)轉(zhuǎn)換為整型時,將舍棄浮點(diǎn)數(shù)的小數(shù)部分,只保留整數(shù)部分。(2)單、雙精度浮點(diǎn)型相互轉(zhuǎn)換由于C語言中的浮點(diǎn)值總是用雙精度表示的,所以float型數(shù)據(jù)只是在尾部加0延長為double型數(shù)據(jù)參加運(yùn)算,然后直接賦值。double型數(shù)據(jù)轉(zhuǎn)換為float型時,先截取雙精度實(shí)數(shù)的前7位有效數(shù)字,然后再賦給單精度類型的變量。11/26/2022273.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(1)浮點(diǎn)型與整型相互3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(3)字符型與整型相互轉(zhuǎn)換將整型數(shù)據(jù)賦給字符型變量時,由于整型數(shù)據(jù)用兩個字節(jié)存放,而字符型數(shù)據(jù)用一個字節(jié)存放,所以只保留其低8位賦給字符型變量,高位部分舍棄。字符型數(shù)據(jù)賦給整型變量時,將字符數(shù)據(jù)的8位放入整型變量的低8位中,有些編譯系統(tǒng)在整型變量的高8位補(bǔ)0;而有些編譯系統(tǒng)(如TurboC),根據(jù)字符的最高位為0或1將高8位全部補(bǔ)0或補(bǔ)1。11/26/2022283.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(3)字符型與整型相互3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(4)整型與長整型相互轉(zhuǎn)換長整型數(shù)據(jù)賦值給整型變量時,將低16位值送給整型變量,將高16位截斷舍棄。將整型數(shù)據(jù)賦值給長整型變量時,將整型數(shù)據(jù)的16位送到長整型變量的低16位中,根據(jù)整型數(shù)據(jù)符號位為0或1,在長整型的高16位全部補(bǔ)0或1,以保持?jǐn)?shù)值不改變。11/26/2022293.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(4)整型與長整型相互3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(5)無符號整數(shù)與有符號整數(shù)相互轉(zhuǎn)換若占據(jù)同樣長度存儲單元的有符號、無符號整型相互轉(zhuǎn)換時,是原樣賦值,內(nèi)部的存儲方式不變,但外部值可能改變。若占據(jù)不同長度存儲單元的有符號、無符號整型之間轉(zhuǎn)換,先參照(4)中所述方式進(jìn)行轉(zhuǎn)換,再按上面字節(jié)數(shù)相同的方式直接賦值。11/26/2022303.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(5)無符號整數(shù)與有符3.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式++:自增運(yùn)算符,使變量的值增加1。--:自減運(yùn)算符,使變量的值減少1。自增、自減運(yùn)算符均為單目運(yùn)算符,優(yōu)先級為2,具右結(jié)合性。11/26/2022313.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式11/23.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式自增、自減運(yùn)算符都有兩種用法:前置運(yùn)算將++或--運(yùn)算符置于變量之前,一般形式為:++變量、--變量。其功能是使變量的值增(減)1,然后再以變化后的變量值參與其它運(yùn)算,即先增減、后運(yùn)算。后置運(yùn)算將++或--運(yùn)算符置于變量之后,一般形式為:變量++、變量--。其功能是變量先參與其它運(yùn)算,然后再使變量的值增(減)1,即先運(yùn)算、后增減。11/26/2022323.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式11/2>自增、自減運(yùn)算符++--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)例 j=3;k=++j; j=3;k=j++; j=3;printf(“%d”,++j); j=3;printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//4,j=4//3,j=4//c=20,a=4//c=15,a=4<11/26/202233>自增、自減運(yùn)算符++--例 j=3;k=++j;>幾點(diǎn)說明:例-i++i=3;printf(“%d”,-i++);
-(i++)//-3
++--不能用于常量和表達(dá)式,如5++,(a+b)++++--結(jié)合方向:自右向左優(yōu)先級:-++-------->*/%----->+-
(2)(3)(4)該運(yùn)算符常用于循環(huán)語句中,使循環(huán)變量加減1有關(guān)表達(dá)式使用中的問題說明不同系統(tǒng)對運(yùn)算符和表達(dá)式的處理次序不同,盡可能寫通用性強(qiáng)的語句不要寫有歧義和不知系統(tǒng)如何執(zhí)行的程序<P51例3.711/26/202234>幾點(diǎn)說明:例-i++-(i++)//-3++-3.5自增、自減運(yùn)算符二.關(guān)于自增自減運(yùn)算符、表達(dá)式的說明自增、自減運(yùn)算符實(shí)際上屬于賦值運(yùn)算符,不能應(yīng)用于常量和表達(dá)式,操作對象只能是變量。一般自增自減表達(dá)式或是以表達(dá)式語句的形式出現(xiàn),或是出現(xiàn)在for循環(huán)語句中使循環(huán)控制變量加(減)1,或應(yīng)用于指針變量,使指針指向下(上)一個地址。其它將自增自減表達(dá)式應(yīng)用于另一個表達(dá)式內(nèi)部的形式,在尚未熟練掌握時盡量不去使用。最好不要使用諸如i+++j、(i++)+(i++)此類容易產(chǎn)生歧義或錯誤的形式。11/26/2022353.5自增、自減運(yùn)算符二.關(guān)于自增自減運(yùn)算符、表達(dá)式的說例3.8自增、自減運(yùn)算符的特別用法#include<stdio.h>main(){ inti,j,m,n; i=5;j=5; m=(i++)+(i++); n=(++j)+(++j); printf("%d,%d\n",m,n); printf("%d,%d\n",i,j);}注意:++、--、&&、||、>=、<=、==、!=運(yùn)算符中間不能有空格。11/26/202236例3.8自增、自減運(yùn)算符的特別用法#include<s3.6 逗號運(yùn)算符 逗號運(yùn)算符就是用逗號“,”作為操作符,它可以把多個表達(dá)式連接起來形成逗號表達(dá)式。逗號運(yùn)算符又稱順序求值運(yùn)算符。逗號運(yùn)算符為雙目運(yùn)算,其優(yōu)先級別是C中所有運(yùn)算符中最低的,具左結(jié)合性。逗號表達(dá)式擴(kuò)展為n元運(yùn)算的形式:表達(dá)式1,表達(dá)式2,……,表達(dá)式n逗號表達(dá)式的求值過程是自左向右,依次計算各子表達(dá)式的值,最右側(cè)子表達(dá)式“表達(dá)式n”的值即為整個逗號表達(dá)式的值。11/26/2022373.6 逗號運(yùn)算符 逗號運(yùn)算符就是用逗號“,”作為操作符,它>逗號運(yùn)算符和逗號表達(dá)式形式:表達(dá)式1,表達(dá)式2,……表達(dá)式n結(jié)合性:從左向右優(yōu)先級:15,級別最低逗號表達(dá)式的值:等于表達(dá)式n的值用途:常用于循環(huán)for語句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);//a=15,表達(dá)式值60//a=15,表達(dá)式值20//賦值表達(dá)式,表達(dá)式值18,x=18//逗號表達(dá)式,表達(dá)式值18,x=3//1,2,3//3,2,3<11/26/202238>逗號運(yùn)算符和逗號表達(dá)式例a=3*5,a*4//a=1例3.9逗號運(yùn)算符(P53)#include<stdio.h>main(){ inta,b,i,i,k; i=(a=3,a*5); k=(j=b=5,a+b); printf("%d,%d,%d,%d,%d\n“,a,b,I,j,k); printf("%d\n“,5,6); printf("%d\n“,(5,6));}11/26/202239例3.9逗號運(yùn)算符(P53)#include<std3.7 其它運(yùn)算符sizeof的使用形式比較像是函數(shù)調(diào)用,但它是一種運(yùn)算符。其一般應(yīng)用形式為: sizeof(運(yùn)算對象)sizeof運(yùn)算的功能是求出運(yùn)算對象在計算機(jī)的內(nèi)存中所占用的字節(jié)數(shù)。其中運(yùn)算對象可以是數(shù)據(jù)類型說明符或表達(dá)式,當(dāng)運(yùn)算對象是表達(dá)式時括號可省略。sizeof是單目運(yùn)算符,優(yōu)先級別為2,具右結(jié)合性,運(yùn)算的結(jié)果是整型。11/26/2022403.7 其它運(yùn)算符sizeof的使用形式比較像是函數(shù)調(diào)用,但例3.10sizeof運(yùn)算符(P54)#include<stdio.h>main(){ inta,b,c,d; doublex=1.23; a=sizeof(long); b=sizeof(x+3); c=sizeofx+3; d=sizeof("\"ab\123\abc\"\n"); printf("%d,%d,%d,%d\n",a,b,c,d);}11/26/202241例3.10sizeof運(yùn)算符(P54)#includ請問下面的程序輸出什么?#include<stdio.h>intmain(){ inti; i=10; printf("i:%d\n",i); printf("sizeof(i++)is:%d\n",sizeof(i++)); printf("i:%d\n",i); return0;}結(jié)果:102對嗎?11結(jié)果是:10210Why?11/26/202242請問下面的程序輸出什么?#include<stdio.h>本章小結(jié)本章主要介紹了運(yùn)算符與表達(dá)式,其中涉及到的重要概念有:運(yùn)算對象的個數(shù)、運(yùn)算優(yōu)先級、結(jié)合性、類型轉(zhuǎn)換等。運(yùn)算符是C語言里用于描述對數(shù)據(jù)進(jìn)行運(yùn)算的特殊符號。表達(dá)式是由運(yùn)算符連接常量、變量、函數(shù)所組成的式子,每個表達(dá)式都有一個值和類型。表達(dá)式求值按運(yùn)算符的優(yōu)先級和結(jié)合性所規(guī)定的順序進(jìn)行。11/26/202243本章小結(jié)本章主要介紹了運(yùn)算符與表達(dá)式,其中涉及到的重要概念有本章小結(jié)1.運(yùn)算符優(yōu)先級和結(jié)合性一般而言,單目運(yùn)算符優(yōu)先級較高,賦值運(yùn)算符優(yōu)先級較低。算術(shù)運(yùn)算符優(yōu)先級較高,關(guān)系和邏輯運(yùn)算符優(yōu)先級較低。多數(shù)運(yùn)算符具有左結(jié)合性,而單目運(yùn)算符、三目運(yùn)算符、賦值運(yùn)算符具有右結(jié)合性。11/26/202244本章小結(jié)1.運(yùn)算符優(yōu)先級和結(jié)合性11/22/202244cs本章小結(jié)2.算術(shù)運(yùn)算符(1)整數(shù)相除是做整除,結(jié)果也為整數(shù)。(2)求余運(yùn)算要求運(yùn)算對象均為整型。(3)注意運(yùn)算時的類型轉(zhuǎn)換問題。(4)注意C語言表達(dá)式與數(shù)學(xué)公式在形式上的差異11/26/202245本章小結(jié)2.算術(shù)運(yùn)算符11/22/202245cse.csl本章小結(jié)3.賦值運(yùn)算符(1)賦值表達(dá)式的左邊必須為變量。(2)復(fù)合賦值運(yùn)算符的優(yōu)先級全部在同一級別。(3)注意賦值時的類型轉(zhuǎn)換。11/26/202246本章小結(jié)3.賦值運(yùn)算符11/22/202246cse.csl本章小結(jié)4.類型轉(zhuǎn)換(1)自動轉(zhuǎn)換:在不同類型數(shù)據(jù)的混合運(yùn)算中,由系統(tǒng)自動實(shí)現(xiàn)轉(zhuǎn)換,由少字節(jié)類型向多字節(jié)類型轉(zhuǎn)換。(2)強(qiáng)制轉(zhuǎn)換:由強(qiáng)制轉(zhuǎn)換運(yùn)算符完成轉(zhuǎn)換。(3)賦值時的類型轉(zhuǎn)換:不同類型的量相互賦值時也由系統(tǒng)自動進(jìn)行轉(zhuǎn)換,把賦值號右邊的類型轉(zhuǎn)換為左邊變量的類型。(4)無論是系統(tǒng)所做的自動類型轉(zhuǎn)換還是強(qiáng)制類型轉(zhuǎn)換,都只是將常量、變量、表達(dá)式的值進(jìn)行轉(zhuǎn)換去參與運(yùn)算,不會改變變量的數(shù)據(jù)類型和值。11/26/202247本章小結(jié)4.類型轉(zhuǎn)換11/22/202247cse.cslg本章小結(jié)5.自增、自減運(yùn)算符(1)自增、自減其實(shí)也是賦值運(yùn)算,只能針對變量做自增、自減運(yùn)算。(2)注意前置運(yùn)算(先增減后運(yùn)算)與后置運(yùn)算(先運(yùn)算后增減)對所在表達(dá)式的影響的不同6.逗號運(yùn)算符(1)逗號表達(dá)式的值取最后一個表達(dá)式的值。(2)逗號運(yùn)算符的優(yōu)先級最低。7.其它運(yùn)算符(1)sizeof是運(yùn)算符,不是函數(shù)名。(2)sizeof求表達(dá)式在內(nèi)存中所占的字節(jié)數(shù)。11/26/202248本章小結(jié)5.自增、自減運(yùn)算符11/22/202248cse.第3章運(yùn)算符和表達(dá)式3.1表達(dá)式
3.2算術(shù)運(yùn)算符3.3賦值運(yùn)算符3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算3.5自增、自減運(yùn)算符3.6 逗號運(yùn)算符
3.7 其它運(yùn)算符 本章小結(jié)習(xí)題參考答案11/26/202249第3章運(yùn)算符和表達(dá)式3.1表達(dá)式 11/22/203.1表達(dá)式 一.表達(dá)式表達(dá)式是由運(yùn)算對象、運(yùn)算符按照C語言的語法規(guī)則構(gòu)成的符號序列。表達(dá)式可以通過運(yùn)算產(chǎn)生一個結(jié)果或完成某種操作。C語言的表達(dá)式功能很強(qiáng),也很復(fù)雜,它提供了許多種運(yùn)算符11/26/2022503.1表達(dá)式 一.表達(dá)式11/22/20222cse.c3.1表達(dá)式 二.運(yùn)算符運(yùn)算符是C語言里用于描述對數(shù)據(jù)進(jìn)行運(yùn)算的特殊符號。C語言有三大運(yùn)算符:算術(shù)、關(guān)系與邏輯、位操作。C語言還有一些已超出了一般運(yùn)算符概念的特殊運(yùn)算符。11/26/2022513.1表達(dá)式 二.運(yùn)算符11/22/20223cse.c3.1表達(dá)式 三.運(yùn)算符和表達(dá)式的分類1.運(yùn)算符的分類①按在表達(dá)式中與運(yùn)算對象的關(guān)系(所需要運(yùn)算對象的個數(shù))可以分為:單目運(yùn)算符雙目運(yùn)算符三目運(yùn)算符學(xué)習(xí)運(yùn)算符應(yīng)注意:運(yùn)算符功能與運(yùn)算量關(guān)系要求運(yùn)算量個數(shù)要求運(yùn)算量類型運(yùn)算符優(yōu)先級別結(jié)合方向結(jié)果的類型11/26/2022523.1表達(dá)式 三.運(yùn)算符和表達(dá)式的分類學(xué)習(xí)運(yùn)算符應(yīng)注意:3.1表達(dá)式 ②按它們在表達(dá)式中所起的作用又可以分為:算術(shù)運(yùn)算符:+、-、*、/、%賦值運(yùn)算符:=、+=、-=、*=、/=、%=、 &=、|=、^=、<<=、>>=自增自減運(yùn)算符:++、--關(guān)系運(yùn)算符:<、<=、>、>=、==、!=邏輯運(yùn)算符:!、&&、||條件運(yùn)算符:?:位運(yùn)算符:~、&、^、|、<<、>>逗號運(yùn)算符:,其它運(yùn)算符:()、[]、->、.、(類型名)、*、&、sizeof11/26/2022533.1表達(dá)式 ②按它們在表達(dá)式中所起的作用又可以分為:3.1表達(dá)式 2.表達(dá)式的分類①按照運(yùn)算符要求運(yùn)算對象的個數(shù)可以分為:單目表達(dá)式雙目表達(dá)式三目表達(dá)式②按照運(yùn)算符在表達(dá)式中的作用,可以分為:算術(shù)表達(dá)式賦值表達(dá)式自增、自減表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式逗號表達(dá)式11/26/2022543.1表達(dá)式 2.表達(dá)式的分類11/22/20226cs3.1表達(dá)式 四.優(yōu)先級和結(jié)合性優(yōu)先級指同一個表達(dá)式中不同運(yùn)算符進(jìn)行運(yùn)算時的優(yōu)先次序。結(jié)合性是針對同一優(yōu)先級的多個運(yùn)算符而言的,它是指同一個表達(dá)式中相同優(yōu)先級的多個運(yùn)算是自左向右進(jìn)行運(yùn)算還是自右向左進(jìn)行運(yùn)算。關(guān)于C語言運(yùn)算符的含義、類型、優(yōu)先級、結(jié)合性等問題見附錄B。11/26/2022553.1表達(dá)式 四.優(yōu)先級和結(jié)合性11/22/20227c3.2算術(shù)運(yùn)算符一.算術(shù)運(yùn)算符
+:加法運(yùn)算符-:減法運(yùn)算符*:乘法運(yùn)算符/:除法運(yùn)算符 當(dāng)運(yùn)算對象均為整數(shù)時運(yùn)算結(jié)果也為整數(shù)。(P43)%:求余運(yùn)算符(模運(yùn)算符)。 要求%兩側(cè)運(yùn)算對象均為整型數(shù)據(jù)。算術(shù)運(yùn)算符均為雙目運(yùn)算符,均具有左結(jié)合性。*、/、%的優(yōu)先級為3級,+、-的優(yōu)先級為4級。11/26/2022563.2算術(shù)運(yùn)算符一.算術(shù)運(yùn)算符11/22/20228c>算術(shù)運(yùn)算符基本算術(shù)運(yùn)算符:+-*/%結(jié)合方向:從左向右優(yōu)先級:----->*/%----->+-
(2)(3)(4)說明:“-”可為單目運(yùn)算符時,右結(jié)合性兩整數(shù)相除,結(jié)果為整數(shù)%要求兩側(cè)均為整型數(shù)據(jù)+-*/運(yùn)算的兩個數(shù)中有一個數(shù)為實(shí)數(shù),結(jié)果是double型例5/2=-5/2.0=例5%2=-5%2=1%10=
5%1=5.5%2例5/2=2
-5/2.0=-2.5例5%2=1
-5%2=-11%10=
1
5%1=
05.5%2()<11/26/202257>算術(shù)運(yùn)算符例5/2=例5%23.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式算術(shù)表達(dá)式是用算術(shù)運(yùn)算符和括號將運(yùn)算對象連接起來的、符合C語言的語法規(guī)則的式子。例:a+b、2+3/5、a/b/c
使用算術(shù)表達(dá)式時應(yīng)注意:(1)當(dāng)雙目算術(shù)運(yùn)算符兩側(cè)運(yùn)算對象的類型一致時,運(yùn)算結(jié)果的類型與運(yùn)算對象的類型相同,如果類型不一致,系統(tǒng)將自動按規(guī)律先將運(yùn)算對象轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。11/26/2022583.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式11/22/202210c3.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式(2)可以用括號改變表達(dá)式的運(yùn)算順序,左右括號必須配對,多層括號都用小括號“()”表示。表達(dá)式2*(3+(7-2)/2)的運(yùn)算順序是?=2*(3+5/2)=2*(3+2)=2*5=1011/26/2022593.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式=2*(3+5/2)=2*3.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式(3)注意算術(shù)表達(dá)式的書寫形式,不要寫成代數(shù)式的形式。表達(dá)式中的所有字符都是寫在同一行上,沒有分式,也沒有上下標(biāo),如代數(shù)式,應(yīng)該寫成(a+b)/(c-d),括號不能省略,若省略括號,表達(dá)式成了a+b/c-d。有些代數(shù)式無法直接寫出,還要調(diào)用數(shù)學(xué)函數(shù)來完成,如?11/26/2022603.2算術(shù)運(yùn)算符二.算術(shù)表達(dá)式表達(dá)式中的所有字符都是寫在3.3賦值運(yùn)算符一.普通賦值運(yùn)算符1.賦值運(yùn)算符賦值符號“=”就是賦值運(yùn)算符,其功能是將賦值運(yùn)算符“=”右側(cè)表達(dá)式的值求出并將結(jié)果賦值給“=”左側(cè)的變量。賦值運(yùn)算符的優(yōu)先級很低,僅高于逗號運(yùn)算符,為右結(jié)合性。11/26/2022613.3賦值運(yùn)算符一.普通賦值運(yùn)算符11/22/202213.3賦值運(yùn)算符2.賦值表達(dá)式用賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的符合C語言語法的式子稱做賦值表達(dá)式。它的一般形式為: 變量名=表達(dá)式賦值表達(dá)式的結(jié)果是賦值號右側(cè)的表達(dá)式的值。求解賦值表達(dá)式時,如果賦值運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致,賦值時要進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換的原則是將右側(cè)的表達(dá)式的值轉(zhuǎn)換為左側(cè)變量的類型再進(jìn)行對左側(cè)變量賦值。11/26/2022623.3賦值運(yùn)算符2.賦值表達(dá)式11/22/202214c>簡單賦值運(yùn)算符(見P44例3.1、3.2)符號:=格式:變量標(biāo)識符=表達(dá)式作用:將一個數(shù)據(jù)(常量或表達(dá)式)賦給一個變量左側(cè)必須是變量,不能是常量或表達(dá)式例a=3;d=func();c=d+2;例3=x-2*y;a+b=3;(×)<類型轉(zhuǎn)換賦值轉(zhuǎn)換規(guī)則:使賦值號右邊表達(dá)式值自動轉(zhuǎn)換成其左邊變量的類型例
floatf;inti=10;f=i;則
f=10.0例inti;i=2.56;//結(jié)果i=2;11/26/202263>簡單賦值運(yùn)算符(見P44例3.1、3.2)例a=3.3賦值運(yùn)算符二.復(fù)合賦值運(yùn)算符在賦值運(yùn)算符“=”之前加上其它一些雙目運(yùn)算符可以構(gòu)成復(fù)合賦值運(yùn)算符,用于完成運(yùn)算、賦值組合操作。C語言中復(fù)合賦值運(yùn)算符的一般形式為: 運(yùn)算符=其中“運(yùn)算符”可以是: +、-、*、/、%、|、&、^、<<、>>所構(gòu)成的復(fù)合賦值運(yùn)算符是: +=、-=、*=、/=、%=、|=、&=、^=、<<=、>>=所有的賦值運(yùn)算符包括復(fù)合賦值運(yùn)算符的優(yōu)先級全部相同,均為右結(jié)合性。11/26/2022643.3賦值運(yùn)算符二.復(fù)合賦值運(yùn)算符11/22/20221復(fù)合賦值運(yùn)算符種類:+=-=*=/=%=<<=>>=&=^=|=含義:exp1op=exp2exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%311/26/202265復(fù)合賦值運(yùn)算符a+=3a=a+3x*=y+8x=x*(y+83.3賦值運(yùn)算符由復(fù)合賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的式子稱為復(fù)合賦值表達(dá)式。它的一般形式為: 變量名復(fù)合賦值運(yùn)算符表達(dá)式復(fù)合賦值表達(dá)式的作用等價于: 變量名=變量名運(yùn)算符(表達(dá)式)即先將變量和表達(dá)式進(jìn)行復(fù)合賦值運(yùn)算符所指定的運(yùn)算,然后將運(yùn)算結(jié)果賦給變量。復(fù)合賦值表達(dá)式的值就是復(fù)合賦值運(yùn)算符左側(cè)變量被賦值以后的值。11/26/2022663.3賦值運(yùn)算符由復(fù)合賦值運(yùn)算符將一個變量和一個表達(dá)式連3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換(p46)整型、實(shí)型、字符型數(shù)據(jù)間可以混合進(jìn)行算術(shù)運(yùn)算。進(jìn)行運(yùn)算時,參與運(yùn)算的操作數(shù)的數(shù)據(jù)類型要一致,若參與運(yùn)算的數(shù)據(jù)類型不同,先要將其轉(zhuǎn)換為相同的類型,然后再進(jìn)行運(yùn)算。11/26/2022673.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換橫向箭頭表示必須的轉(zhuǎn)換,縱向箭頭表示當(dāng)運(yùn)算符兩側(cè)的運(yùn)算對象為不同類型時的轉(zhuǎn)換,這些轉(zhuǎn)換都是由系統(tǒng)自動進(jìn)行的。P47高低doublelongunsignedintchar,shortfloat11/26/2022683.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算一.自動類型轉(zhuǎn)換高低d>doublefloatlongunsignedintchar,short低高說明:必定的轉(zhuǎn)換運(yùn)算對象類型不同時轉(zhuǎn)換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例inti;floatf;doubled;longl;<P47例3.4#include<stdio.h>main(){ inta=2,b=5; charc=’a’; floatx=2.5,y=3.3,z; z=c/2+x/a-y*b; printf("%f\n",z);}11/26/202269>doublefloatlongunsignedintcha3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算二.強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)的。其一般形式為: (類型說明符)(表達(dá)式)(類型說明符)是類型轉(zhuǎn)換運(yùn)算符,單目運(yùn)算,優(yōu)先級別為2級,具右結(jié)合性。在類型轉(zhuǎn)換運(yùn)算符的右側(cè)跟上表達(dá)式形成類型轉(zhuǎn)換表達(dá)式,其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。11/26/2022703.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算二.強(qiáng)制類型轉(zhuǎn)換11/>強(qiáng)制轉(zhuǎn)換(見P48強(qiáng)制類型轉(zhuǎn)換運(yùn)算符部分)一般形式:(類型名)(表達(dá)式)例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變例:#include<stdio>main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3精度損失問題較高類型向較低類型轉(zhuǎn)換時可能發(fā)生強(qiáng)制類型轉(zhuǎn)換運(yùn)算符表達(dá)式僅一個變量時,括號可以省略
<11/26/202271>強(qiáng)制轉(zhuǎn)換(見P48強(qiáng)制類型轉(zhuǎn)換運(yùn)算符部分)例:精度損失問題例3.5對比以下兩個程序(P48)#include<stdio.h>#include<stdio.h>main()main(){{ inta,b;inta,b; floatx;floatx; a=10;a=10; b=4;b=4; x=3.2+a/b;x=3.2+(float)a/b;printf(“x=%f\n“,x);printf("x=%f\n“,x);}}?11/26/202272例3.5對比以下兩個程序(P48)#include<s3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算三.強(qiáng)制類型轉(zhuǎn)換賦值表達(dá)式的類型轉(zhuǎn)換當(dāng)賦值運(yùn)算符兩側(cè)的運(yùn)算對象數(shù)據(jù)類型不同時,系統(tǒng)也將進(jìn)行自動類型轉(zhuǎn)換,轉(zhuǎn)換規(guī)則為:將賦值運(yùn)算符右側(cè)表達(dá)式的類型轉(zhuǎn)換為左側(cè)變量的類型。11/26/2022733.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算三.強(qiáng)制類型轉(zhuǎn)換賦值表例3.6賦值運(yùn)算的自動類型轉(zhuǎn)換。#include<stdio.h>main(){ charc=‘a(chǎn)’; inta=321,b,i; unsignedm=4294967295,n; floatx=2.5,y; doubled=12345678.987; printf("c=%c,a=%d,m=%u,x=%f,d=%f\n“,c,a,m,x,d); c=a;b=x;y=a;x=d;i=m;n=-l; printf("c=%c,b=%d,y=%f,x=%f,i=%d,n=%u\n“,c,b,y,x,i,n);}/*注意這個m的值有些特殊*/11/26/202274例3.6賦值運(yùn)算的自動類型轉(zhuǎn)換。#include<std3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(1)浮點(diǎn)型與整型相互轉(zhuǎn)換將浮點(diǎn)數(shù)據(jù)(包括單、雙精度)轉(zhuǎn)換為整型時,將舍棄浮點(diǎn)數(shù)的小數(shù)部分,只保留整數(shù)部分。(2)單、雙精度浮點(diǎn)型相互轉(zhuǎn)換由于C語言中的浮點(diǎn)值總是用雙精度表示的,所以float型數(shù)據(jù)只是在尾部加0延長為double型數(shù)據(jù)參加運(yùn)算,然后直接賦值。double型數(shù)據(jù)轉(zhuǎn)換為float型時,先截取雙精度實(shí)數(shù)的前7位有效數(shù)字,然后再賦給單精度類型的變量。11/26/2022753.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(1)浮點(diǎn)型與整型相互3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(3)字符型與整型相互轉(zhuǎn)換將整型數(shù)據(jù)賦給字符型變量時,由于整型數(shù)據(jù)用兩個字節(jié)存放,而字符型數(shù)據(jù)用一個字節(jié)存放,所以只保留其低8位賦給字符型變量,高位部分舍棄。字符型數(shù)據(jù)賦給整型變量時,將字符數(shù)據(jù)的8位放入整型變量的低8位中,有些編譯系統(tǒng)在整型變量的高8位補(bǔ)0;而有些編譯系統(tǒng)(如TurboC),根據(jù)字符的最高位為0或1將高8位全部補(bǔ)0或補(bǔ)1。11/26/2022763.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(3)字符型與整型相互3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(4)整型與長整型相互轉(zhuǎn)換長整型數(shù)據(jù)賦值給整型變量時,將低16位值送給整型變量,將高16位截斷舍棄。將整型數(shù)據(jù)賦值給長整型變量時,將整型數(shù)據(jù)的16位送到長整型變量的低16位中,根據(jù)整型數(shù)據(jù)符號位為0或1,在長整型的高16位全部補(bǔ)0或1,以保持?jǐn)?shù)值不改變。11/26/2022773.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(4)整型與長整型相互3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(5)無符號整數(shù)與有符號整數(shù)相互轉(zhuǎn)換若占據(jù)同樣長度存儲單元的有符號、無符號整型相互轉(zhuǎn)換時,是原樣賦值,內(nèi)部的存儲方式不變,但外部值可能改變。若占據(jù)不同長度存儲單元的有符號、無符號整型之間轉(zhuǎn)換,先參照(4)中所述方式進(jìn)行轉(zhuǎn)換,再按上面字節(jié)數(shù)相同的方式直接賦值。11/26/2022783.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算(5)無符號整數(shù)與有符3.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式++:自增運(yùn)算符,使變量的值增加1。--:自減運(yùn)算符,使變量的值減少1。自增、自減運(yùn)算符均為單目運(yùn)算符,優(yōu)先級為2,具右結(jié)合性。11/26/2022793.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式11/23.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式自增、自減運(yùn)算符都有兩種用法:前置運(yùn)算將++或--運(yùn)算符置于變量之前,一般形式為:++變量、--變量。其功能是使變量的值增(減)1,然后再以變化后的變量值參與其它運(yùn)算,即先增減、后運(yùn)算。后置運(yùn)算將++或--運(yùn)算符置于變量之后,一般形式為:變量++、變量--。其功能是變量先參與其它運(yùn)算,然后再使變量的值增(減)1,即先運(yùn)算、后增減。11/26/2022803.5自增、自減運(yùn)算符一.自增自減運(yùn)算符、表達(dá)式11/2>自增、自減運(yùn)算符++--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)例 j=3;k=++j; j=3;k=j++; j=3;printf(“%d”,++j); j=3;printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b;//k=4,j=4//k=3,j=4//4,j=4//3,j=4//c=20,a=4//c=15,a=4<11/26/202281>自增、自減運(yùn)算符++--例 j=3;k=++j;>幾點(diǎn)說明:例-i++i=3;printf(“%d”,-i++);
-(i++)//-3
++--不能用于常量和表達(dá)式,如5++,(a+b)++++--結(jié)合方向:自右向左優(yōu)先級:-++-------->*/%----->+-
(2)(3)(4)該運(yùn)算符常用于循環(huán)語句中,使循環(huán)變量加減1有關(guān)表達(dá)式使用中的問題說明不同系統(tǒng)對運(yùn)算符和表達(dá)式的處理次序不同,盡可能寫通用性強(qiáng)的語句不要寫有歧義和不知系統(tǒng)如何執(zhí)行的程序<P51例3.711/26/202282>幾點(diǎn)說明:例-i++-(i++)//-3++-3.5自增、自減運(yùn)算符二.關(guān)于自增自減運(yùn)算符、表達(dá)式的說明自增、自減運(yùn)算符實(shí)際上屬于賦值運(yùn)算符,不能應(yīng)用于常量和表達(dá)式,操作對象只能是變量。一般自增自減表達(dá)式或是以表達(dá)式語句的形式出現(xiàn),或是出現(xiàn)在for循環(huán)語句中使循環(huán)控制變量加(減)1,或應(yīng)用于指針變量,使指針指向下(上)一個地址。其它將自增自減表達(dá)式應(yīng)用于另一個表達(dá)式內(nèi)部的形式,在尚未熟練掌握時盡量不去使用。最好不要使用諸如i+++j、(i++)+(i++)此類容易產(chǎn)生歧義或錯誤的形式。11/26/2022833.5自增、自減運(yùn)算符二.關(guān)于自增自減運(yùn)算符、表達(dá)式的說例3.8自增、自減運(yùn)算符的特別用法#include<stdio.h>main(){ inti,j,m,n; i=5;j=5; m=(i++)+(i++); n=(++j)+(++j); printf("%d,%d\n",m,n); printf("%d,%d\n",i,j);}注意:++、--、&&、||、>=、<=、==、!=運(yùn)算符中間不能有空格。11/26/202284例3.8自增、自減運(yùn)算符的特別用法#include<s3.6 逗號運(yùn)算符 逗號運(yùn)算符就是用逗號“,”作為操作符,它可以把多個表達(dá)式連接起來形成逗號表達(dá)式。逗號運(yùn)算符又稱順序求值運(yùn)算符。逗號運(yùn)算符為雙目運(yùn)算,其優(yōu)先級別是C中所有運(yùn)算符中最低的,具左結(jié)合性。逗號表達(dá)式擴(kuò)展為n元運(yùn)算的形式:表達(dá)式1,表達(dá)式2,……,表達(dá)式n逗號表達(dá)式的求值過程是自左向右,依次計算各子表達(dá)式的值,最右側(cè)子表達(dá)式“表達(dá)式n”的值即為整個逗號表達(dá)式的值。11/26/2022853.6 逗號運(yùn)算符 逗號運(yùn)算符就是用逗號“,”作為操作符,它>逗號運(yùn)算符和逗號表達(dá)式形式:表達(dá)式1,表達(dá)式2,……表達(dá)式n結(jié)合性:從左向右優(yōu)先級:15,級別最低逗號表達(dá)式的值:等于表達(dá)式n的值用途:常用于循環(huán)for語句中例a=3
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度可再生能源發(fā)電項(xiàng)目施工合同范本(完整版)3篇
- 2025年度文化信用擔(dān)保藝術(shù)品交易協(xié)議3篇
- 2024年紙板產(chǎn)品綠色包裝研發(fā)與應(yīng)用合同3篇
- 2024月餅禮盒設(shè)計及采購一體化合同范本3篇
- 2024某城市基礎(chǔ)設(shè)施建設(shè)項(xiàng)目外包合同
- 2025年度校車駕駛員聘用合同(含駕駛員健康管理與保障措施)3篇
- 二零二五年度供水、供電設(shè)施智能化改造合同范本3篇
- 二零二五年度體育賽事贊助合作意向協(xié)議書范本3篇
- 2024版體育隊伍贊助協(xié)議條款與格式一
- 2025年度消防裝備租賃與維修服務(wù)合同2篇
- 聲光影的內(nèi)心感動:電影視聽語言學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 創(chuàng)新轉(zhuǎn)化管理智慧樹知到期末考試答案章節(jié)答案2024年山東大學(xué)
- 設(shè)備采購 投標(biāo)方案(技術(shù)方案)
- 2023-2024學(xué)年四川省成都市錦江區(qū)四年級數(shù)學(xué)第一學(xué)期期末考試試題含答案
- 2021年推進(jìn)婦幼健康領(lǐng)域中醫(yī)藥工作總結(jié)
- 綠化苗木組織供應(yīng)及售后服務(wù)方案
- YY∕T 0314-2021 一次性使用人體靜脈血樣采集容器
- 第五章_油樣分析
- 儲罐受限空間作業(yè)方案DOC
- 壓力容器耐壓試驗(yàn)
- 課程設(shè)計---年產(chǎn)5.6萬噸乙醇精餾塔的設(shè)計
評論
0/150
提交評論