日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞頭條 >> 賦值表達(dá)式
新聞資訊
NEWS INFORMATION

賦值表達(dá)式

發(fā)布時間:2019-05-22

 算術(shù)表達(dá)式

知識點(diǎn):運(yùn)算符號的優(yōu)先級別;強(qiáng)制類型轉(zhuǎn)換的使用;

重要程度:★★★★

1、算術(shù)運(yùn)算符與算術(shù)表達(dá)式

1、在C語言中,有下列五個基本的算術(shù)運(yùn)算符:+、-、*、/和%,依次表示加、減、乘、除、求

余運(yùn)算。(考得最多的是/ 和%符號。。。

 

2、求余運(yùn)算符%的運(yùn)算對象只能是整型,即%左側(cè)的被除數(shù)與右側(cè)的除數(shù)都只能為整型值。

求余得到的運(yùn)算結(jié)果的符號與被除數(shù)相同。(3%1.2錯了

如:12%9運(yùn)算結(jié)果為3,12%-9的運(yùn)算結(jié)果也為3。

-12%9運(yùn)算結(jié)果為-3,-12%-9的運(yùn)算結(jié)果也為-3。

 

3、求余就是求余數(shù),而不是求商,這點(diǎn)總是容易被弄混淆。

²  想一想:3%9運(yùn)算結(jié)果為多少??(結(jié)果為3而不是0)

 

4、1/2得到的數(shù)據(jù)是為0的,這個原則是當(dāng)除號“/“左右兩邊都為整數(shù)的時候,我們遵守取整丟小數(shù)的原則。那么如果希望1和2相除得到0.5,我們就可以用1.0/2,或者1/2.0,或者1.0/2.0都可以實現(xiàn)。

 

先面通過一個具體例子的分析,我們來徹底搞清楚算術(shù)運(yùn)算符的運(yùn)算規(guī)則。

1試求  1.6+3/2*1.2-3/2.0  的值

步驟:

計算過程:

說明:

第一步:

1.6+1*1.2-3/2.0

根據(jù)運(yùn)算優(yōu)先級和結(jié)合的順序,先算3/2,注意到它們?yōu)檎蛿?shù)據(jù)相運(yùn)算,因此結(jié)果應(yīng)為整數(shù)1,而不是1.5。

第二步:

1.6+1.0*1.2-3.0/2.0

1*1.2為整型和實型數(shù)據(jù)相運(yùn)算,因此,會把整型數(shù)據(jù)1轉(zhuǎn)換為對應(yīng)的實型數(shù)據(jù)1.0,再與1.2進(jìn)行運(yùn)算。同理,3變成3.0

第三步:

1.6+1.2-1.5

分別計算出  1.0*1.2  和 3.0/2.0 的結(jié)果

第四步:

2.8-1.5

同一優(yōu)先級的運(yùn)算,從左到右依次進(jìn)行

第五步:

1.3

結(jié)果為1.3,而不是1.9

下面,大家自己算算,表達(dá)式3.6-5/2+1.2+5%2的值應(yīng)該是多少?

A)4.3     B)4.8     C)3.3      D)3.8

分析:根據(jù)表3列出的算術(shù)運(yùn)算符優(yōu)先級,本題目應(yīng)先計算5/2與5%2得到2和1,然后再計算3.6-2+1.2+1,得到答案D。

   

2、強(qiáng)制類型轉(zhuǎn)換

在進(jìn)行算術(shù)運(yùn)算時,如果希望將某一運(yùn)算量轉(zhuǎn)換成指定的類型,則可以利用強(qiáng)制類型轉(zhuǎn)換符。

強(qiáng)制類型轉(zhuǎn)換表達(dá)式為:(類型名)表達(dá)式

其中,“(類型名)”是強(qiáng)制類型轉(zhuǎn)換符,它將右邊表達(dá)式的類型轉(zhuǎn)換為括號中的類型。

強(qiáng)制類型轉(zhuǎn)換并不會改變右邊表達(dá)式的值,(類型名)表達(dá)式 這個整體產(chǎn)生了一個臨時值。

例:有如下代碼:

float a=3.8;

int b;

b=(int)a;

這段代碼把a(bǔ)強(qiáng)制轉(zhuǎn)化為整型數(shù)據(jù)3(注意C語言里的強(qiáng)制轉(zhuǎn)換都是截取,而不是四舍五入),并把這個值3賦給整型變量b。注意,此時a的值仍然是3.8。

強(qiáng)制轉(zhuǎn)換只控制其后的一個數(shù)據(jù)

例:(int ) a+b和(int ) (a+b)不同:

前者是把a(bǔ)強(qiáng)制轉(zhuǎn)換為整型,再把這個臨時的整型值和b作運(yùn)算。

后者是先計算a+b,之后把它們的值做整體的強(qiáng)制轉(zhuǎn)換。

強(qiáng)制轉(zhuǎn)換需要注意的幾點(diǎn):

1) 類型名外的()必不可少

2) 強(qiáng)制轉(zhuǎn)換控制其后的一個數(shù)據(jù)

3) 強(qiáng)制類型轉(zhuǎn)換并不會改變右邊表達(dá)式的值

 

第六節(jié) 賦值表達(dá)式

知識點(diǎn):賦值表達(dá)式的運(yùn)算;復(fù)合賦值表達(dá)式的運(yùn)算;自加和自減;

重要程度:★★★★★

1、賦值運(yùn)算符和賦值表達(dá)式

        int  a = 12;

它的含義是賦值運(yùn)算符右邊的表達(dá)式的運(yùn)算結(jié)果賦值給左邊的變量。

說明:

1)賦值運(yùn)算符左邊必須是單個變量。例如x+1=3在數(shù)學(xué)上雖然是正確的,可是在C語言中卻

是錯誤的,不能將一個常量賦值給一個表達(dá)式。

 

2)賦值運(yùn)算會將左邊變量的值用右邊表達(dá)式的值來代替,右邊的值不會改變。

例如,int x=3,y=5;

x=y+1;

以上代碼先將x初始化為3,將y初始化為5。執(zhí)行完賦值語句x=y+1;后,變量x的值被y+1覆蓋掉,即x的值變成了6,變量y的值不會改變。

用盒子理論來說就是,先定義了兩個盒子,分別叫做x盒子和y盒子,x盒子裝的是整數(shù)3,y盒子裝的是整數(shù)5。之后把x盒子所裝的內(nèi)容改成y盒子的內(nèi)容加1,也就是6。這樣,x盒子中裝的就是6了,以后再要使用x,都是用的新值6。而以前x裝過什么值現(xiàn)在再也不知道了。 

 

3)賦值表達(dá)式的值是賦值號左邊變量被賦值后的值。

例如:x=0整個賦值表達(dá)式的值是變量x被賦值之后的值,也就是說這個表達(dá)式的值為0。

 

4)可以將賦值表達(dá)式的值再賦值給變量,形成連續(xù)賦值運(yùn)算。(學(xué)會分析過程)

例如,x=(y=25)是一個連續(xù)賦值表達(dá)式。由于賦值表達(dá)式的結(jié)合形式是從右到左,因此可以簡寫為x=y=25,它表達(dá)的含義是將25賦值給變量y,然后將表達(dá)式y(tǒng)=25的值賦值,即變量y的值賦給變量x,結(jié)果使變量x和y的值都變?yōu)?5。

 

5)雖然可以連續(xù)賦值,但是不能連續(xù)初始化。(考試重點(diǎn)

例如:int x=y=25;  就是錯誤的。

對于int x=y=25;我們會先計算y=25,此時,y并沒有定義,而是在直接使用,所以就會報錯。

如果我們把上面的連續(xù)初始化改成:int y;  int x=y=25;  這樣就沒有錯了。

 

6)賦值運(yùn)算符不同于數(shù)學(xué)上的“等號”。(C語言中“=”表示賦值,“= =”表示等號)

因為賦值運(yùn)算符的操作是將賦值號右邊的表達(dá)式的值賦給左邊的變量。它是單方向的操作。例如在數(shù)學(xué)中,i=i+1不成立,但在賦值表達(dá)式中卻是成立的,它表示將變量i的值增加1之后得到的結(jié)果賦值給變量i,因此,該表達(dá)式的含義是使變量i的值增加1。

 

7)如果賦值號兩邊的運(yùn)算對象類型不一致,則系統(tǒng)會自動進(jìn)行類型轉(zhuǎn)換。

 

8)自動類型轉(zhuǎn)換的實例:int a=3.6;

賦值號左邊的變量類型是整數(shù),右邊的值是實數(shù),因此將右邊的值轉(zhuǎn)換成整數(shù)。3.6轉(zhuǎn)換成整數(shù)后是3,因此a的值被賦為了3。

注意:實數(shù)轉(zhuǎn)換成整數(shù)的方法是截取而不是四舍五入,因此直接把小數(shù)點(diǎn)后的數(shù)據(jù)去掉就行了。

 

 

2、復(fù)合賦值表達(dá)式(掌握如何計算即可)

在C語言中,可以將算術(shù)運(yùn)算符與賦值運(yùn)算符組合在一起組成復(fù)合賦值運(yùn)算符。它們是:+=,-=,*=,/=,其使用方法及具體的運(yùn)算規(guī)則如下:

表達(dá)式n+=100等價的表達(dá)式為:n=n+100

表達(dá)式n-=2*n等價的表達(dá)式為:n=n-2*n

表達(dá)式n*=m+1等價的表達(dá)式為:n=n*(m+1)

表達(dá)式n/=m+1等價的表達(dá)式為:n=n/(m+1)

上述四種復(fù)合賦值運(yùn)算符的運(yùn)算優(yōu)先級與賦值運(yùn)算符的優(yōu)先級相同(優(yōu)先級都非常低),運(yùn)算方向均為自右向左。

想一想:n+=10和n+10有什么區(qū)別?區(qū)別在于前者n本身的值改變了,而后者n的值沒有改變。

 

1: 已知變量n的初始值為8,計算表達(dá)式n+=n*=n-2的值。(經(jīng)典考題)

分析:表達(dá)式中有兩個復(fù)合賦值運(yùn)算符:+=和*=。它們優(yōu)先級相同,運(yùn)算方向均為自右向左。因此,運(yùn)算的步驟如下:

(1)先計算最右邊表達(dá)式n-2的值為6;

(2)再計算n*=6,該表達(dá)式等價n=n*6,將n中的值8乘以6,得到48,并賦值給n,因此變量n的值為48,表達(dá)式n*=n-2的值為48;

(3)最后計算n+=48,該表達(dá)式相當(dāng)于n=n+48。因為上一步計算出n的值為48,所以n+48的值為96,即n的值最終為96。

通過計算,表達(dá)式n+=n*=n-2的值為96。

 

2int  a=5,b=6,c=2;

      c *=a+b;

請問:c的值最終是多少?

錯誤的算法: c=c*a+b;得到的是16。

正確的算法: c=c*(a+b);得到的是22。

 自加表達(dá)式

1、自加與自減運(yùn)算符(超級重點(diǎn))

如何讓一個變量自身的值加1?通過之前的學(xué)習(xí),我們知道a=a+1; 和 a+=1; 都可以實現(xiàn)。而我們將要討論的a++和++a同樣可以實現(xiàn)這樣的效果。

自加、自減運(yùn)算是一種賦值運(yùn)算。

既然a++和++a寫法上有區(qū)別,那么它們應(yīng)該有所不同。這里僅就++運(yùn)算符進(jìn)行說明,--運(yùn)算符有類似的結(jié)論:

a++++a的相同處:對于變量a而言,它們都是讓a的值加1。

a++++a的不同處:( ++a)、(a++)是兩個自加表達(dá)式,所以這兩個表達(dá)式本身就有數(shù)值,只是++a,a++兩個的表達(dá)式的數(shù)值不同。

自加表達(dá)式的核心理解

++a是先把a(bǔ)加1,再作為(++a)這個表達(dá)式的數(shù)值。

a++是先把a(bǔ)的數(shù)值作為(a++)這個表達(dá)式的數(shù)值,再使a自加1。

 

 

 

 

 

²  遇到a++,就看成a,等這部分執(zhí)行結(jié)束后,再讓a的值加一。(加號在后,則先使用后自加

 

²  遇到++a,則把a(bǔ)的值先加一,之后再使用加過一后的值。(加號在前,則先自加后使用)。

例如有以下代碼(通過以下代碼,學(xué)會分析a++++a的執(zhí)行過程):

int a=3,b;

b=a++;

這段代碼執(zhí)行完后,b的值為3,a的值為4。

對于語句b=a++; 按照以上所說,我們就看成b=a; 此時a值為3,因此賦值后b的值也為3。等這部分執(zhí)行結(jié)束后,再讓a的值加一。因此,整個這段代碼結(jié)束后,b的值為3,a的值為4。

----------------------------------------------------------------------------------------------------------------------------------

int a=3, b;

b=++a,代碼發(fā)生了變化,那么執(zhí)行完后,a和b的值分別為多少呢?

對于語句b= ++a; 按照以上所說,我們把a(bǔ)值先加一,得到a的值為4。之后賦值給b。因此,整個這段代碼結(jié)束后,a、b的值都為4。

 

 

通過以上的簡單例子,我們看到,a++和++a都會讓a本身的值加一。

不同在于對別人的影響。

語句b=a++; 等價于以下兩條語句:b=a;a++;(先使用(賦值),后自加

語句b=++a; 等價于以下兩條語句:a++;b=a;(先自加,后使用(賦值)

 

 

 

 

 

 

 

說明:

 

補(bǔ)充考點(diǎn):

1)增量運(yùn)算符的運(yùn)算對象只能為單個變量,不能是常量或是表達(dá)式。例如:++3、++(i+1)

都是不合法的增量表達(dá)式。

 

2)不論“++”在變量的前面還是在變量的后面,對于變量本身都具有“增加1”的相同效果。

例如i++、++i兩個增量表達(dá)式運(yùn)算后變量i的值都是增加1。

 

3)自加、自減運(yùn)算符的結(jié)合方向是“從右到左”。

例如有如下代碼:

int y,x=3;

y=-x++;

負(fù)號“-”與自加運(yùn)算符“++”具有相同的運(yùn)算優(yōu)先級,但是根據(jù)“從右到左”的結(jié)合方向,那么應(yīng)該先計算x++,而x++可以先看成就是x。取其負(fù)值3賦給y,那么y的值就為-3,這部分執(zhí)行結(jié)束了,x的值再加一,所以這段代碼結(jié)束后,x的值為4,y的值為-3。

 

4)在使用“++”運(yùn)算符時,變量應(yīng)該有個確定的值。例如:int a; a++; 就是錯誤的。因為剛定

義好的a值不確定。讓一個垃圾值自加一沒有任何意義。

 

經(jīng)典考題:

1: 有以下定義語句:double a,b; int w; long c;

若各變量已正確賦值,則下列選項中正確的表達(dá)式是

A)a=a+b=b++         B)w%((int)a+b)     C)(c+w)%(int)a         D)w=a%b;

分析:答案C正確。

選項A是一個連續(xù)賦值表達(dá)式,先將表達(dá)式b++的值賦值給表達(dá)式a+b,因為賦值語句的左邊只能是變量名稱,因此這時會出錯。

選項B是一個求余運(yùn)算符連接起來的兩個運(yùn)算對象,除數(shù)((int)a+b)看起來比較復(fù)雜,它先將雙精度類型變量a的值強(qiáng)制轉(zhuǎn)換為整型,然后再與雙精度類型變量b求和,得到的值的類型仍為雙精度類型,也就是說除數(shù)是一個實數(shù)而不是整數(shù),因此不能使用%運(yùn)算符,所以答案B錯誤。

選項C的被除數(shù)是兩個整型數(shù)相加,運(yùn)算結(jié)果為整型,除數(shù)為(int)a,也為整型,答案C正確。

選項D中a%b錯誤。

 

2 有以下程序

main()

{     int m=12,n=34;

       printf("%d%d",m++,++n);

printf("%d%d\n",n++,++m);

}

程序運(yùn)行后的輸出結(jié)果是

A)12353514   B)12353513   C)12343514   D)12343513

分析:在第一個printf輸出語句中,計算表達(dá)式m++時,其值為變量m的初始值,即12,因為執(zhí)行了表達(dá)式m++,變量m的值增加1,因此m的值變?yōu)?3。計算表達(dá)式++n 時,其值為變量n的初始值增加1,即35,因為計算了表達(dá)式++n,因此變量n的值增加1,為35。在第二個printf中,計算n++時,其值為n的初始值,即上一次計算得到的35,因為計算了n++,變量n的值增加1。計算++m時,其值為變量m的初始值增加1,即使上一次計算得到的m的值加上1,為14。因此本題答案為A。

 逗號表達(dá)式

5、逗號運(yùn)算符和逗號表達(dá)式

1、在C語言中,逗號除了做分隔符,還可以作一種運(yùn)算符——逗號運(yùn)算符。用逗號運(yùn)算符把兩個或兩個以上的表達(dá)式連接起來,可以構(gòu)成一個新的表達(dá)式,即逗號表達(dá)式。例如:

x=5,y=6,z=7    整個(x=5,y=6,z=7)是逗號表達(dá)式,他的數(shù)值等于7,

 

2、逗號運(yùn)算符是級別最低的運(yùn)算符號,比賦值還要低。

 

3、逗號運(yùn)算符具有從左到右的結(jié)合性,即先計算第一個表達(dá)式,然后計算第二個表達(dá)式,直到最后一個表達(dá)式。最后一個表達(dá)式的值就是整個逗號表達(dá)式的值。上述的逗號表達(dá)式的值就是表達(dá)式z=7的值7。

x=5,y=6,z=7   是個逗號表達(dá)式,它的數(shù)值為7。x的數(shù)值為5。

x=(5,y=6,z=7) 是個逗號表達(dá)式,它的數(shù)值為7,x的數(shù)值為7。

 

.

1: 有以下程序

main( )

{     int a1=3,a2=9;

printf("%d\n",(a1,a2)); 

}

以下敘述中正確的是

A)程序輸出3                             B)程序輸出9

C)格式說明符不足,編譯出錯                       D)程序運(yùn)行時產(chǎn)生出錯信息

分析:函數(shù)體中首先變量初始化,變量a1、a2的值分別為3和9,接下來的printf輸出語句中,要輸出的項是(a1,a2),在此要明白輸出項是一個逗號表達(dá)式就不會選錯答案。逗號表達(dá)式a1,a2的值就是a2的值,因此本題的答案為B。

請注意它與printf("%d\n",a1,a2)的區(qū)別。

 

2: 有以下程序(經(jīng)典考題

main( )

{    int x,y,z;

x=y=1;

z=x++,y++,++y;

printf(“%d,%d,%d\n”,x,y,z);

}

程序運(yùn)行后的輸出結(jié)果是

A)2,3,3      B)2,3,2     C)2,3,1     D)2,2,1

分析:函數(shù)體中首先定義了三個整型變量x,y和z,接下來,對變量x和y賦值為1。然后,仔細(xì)分析語句z=x++,y++,++y;,因為逗號運(yùn)算符在所有運(yùn)算符中的優(yōu)先級最低,因此賦值表達(dá)式應(yīng)該先于逗號表達(dá)式計算,所以上述逗號表達(dá)式語句由三個賦值表達(dá)式組成:z=x++、y++和++y。按逗號表達(dá)式的計算規(guī)則,從左至右依次計算每個表達(dá)式,故應(yīng)先計算x++,并將其值賦給變量z,z的值為1,因為計算了x++,x的值增加1,變?yōu)?;計算了y++和++y,變量y的值應(yīng)增加2,變?yōu)?。最后,程序

輸出x,y,z的值應(yīng)為2,3,1。本題答案為C。

 

補(bǔ)充:

   int  a=1,x;

   x= (a++,a++,++a)后,x的數(shù)值為多少?                                    x為3.

 

int  a=1,x;

   x= a++,a++,++a后,x的數(shù)值為多少?                                        x為1

 

聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

锦州市| 江陵县| 昌图县| 昌江| 门头沟区| 丰宁| 田东县| 景东| 雷州市| 敦煌市| 苏州市| 鹰潭市| 乌拉特中旗| 闸北区| 同江市| 宜春市| 邳州市| 都安| 平凉市| 蒙自县| 皋兰县| 陇西县| 宣城市| 河津市| 文化| 阳东县| 宁夏| 邵东县| 顺义区| 竹溪县| 定结县| 婺源县| 恩平市| 清原| 铜鼓县| 琼海市| 唐山市| 法库县| 师宗县| 北辰区| 长治县|