官术网_书友最值得收藏!

2.8 賦值運算符和賦值表達式

賦值運算符和賦值表達式是 C語言的一種基本的運算符和表達式。賦值表達式的作用就是設(shè)置變量的值,實際上是將特定的值寫到變量所對應(yīng)的內(nèi)存單元中去。

2.8.1 賦值運算符和賦值表達式

C語言中的賦值運算符是“=”,它的功能是把其右側(cè)表達式的值賦給左側(cè)的變量。由“=”連接的式子稱為賦值表達式。其一般形式為:

變量=表達式

例如

intx,y;  /*首先定義整型變量x和y*/

x=2;   /*把常量2賦給變量x*/

y=x+2;  /*計算x+2的值,并賦給變量y,變量x本身的值不變*/

說明

(1)賦值運算符具有右結(jié)合性

【例如】

   a=b=c=5;

   /*對3個變量a,b,c進行賦值*/

由于賦值運算符的右結(jié)合性,此賦值表達式等價于:

   a=(b=(c=5));

(2)凡是表達式可以出現(xiàn)的地方均可出現(xiàn)賦值表達式

【例如】

x=(y=1)+(z=2);

讓我們一起來分析一下這個表達式。

①把1賦給變量y,不要忘記圓括號的優(yōu)先級是最高的;

②把2賦給變量z;

③求y+z的值,即1+2的值等于3;

④將③求得的值賦給x,所以x的值應(yīng)該是3。

(3)賦值運算符“=”左邊必須是變量名

【例如】

inta,b;

(a+b)=1;

(a-3)=5;

這類表達式就是不合法的,也就是說,不能對表達式賦值(除了表示指針的表達式)。

如果賦值運算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動進行類型轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則是:把賦值運算符右邊表達式的類型轉(zhuǎn)換為左邊變量的類型。具體規(guī)定如下所述。

(1)浮點型賦予整型

賦值原則是舍棄浮點數(shù)的小數(shù)部分,只保留整數(shù)部分。

(2)整型賦予實型

賦值原則是數(shù)值不變,但將以浮點形式表示,即增加小數(shù)部分,小數(shù)部分用0表示。

(3)字符型賦予整型

賦值原則是將字符所對應(yīng)的ASCII碼值賦予整型數(shù)據(jù)。

(4)整型賦予字符型

賦值原則是把整型數(shù)據(jù)賦予字符型數(shù)據(jù),賦值后的字符型數(shù)據(jù)的值就是該整數(shù)ASCII碼值所對應(yīng)的字符。

(5)單、雙精度浮點型之間的賦值

C語言中的浮點值總是用雙精度表示的,如果將float類型的變量賦予double類型的變量,只是在float型數(shù)據(jù)尾部加0延長為double型數(shù)據(jù)參加運算,然后直接賦值。如果將double型數(shù)據(jù)轉(zhuǎn)換為float型時,通過截尾數(shù)來實現(xiàn),截斷前要進行四舍五入操作。

2.8.2 復(fù)合的賦值表達式

所謂復(fù)合的賦值表達式就是在賦值運算符之前加上其他的運算符而構(gòu)成的表達式。復(fù)合賦值表達式的一般形式是:

變量operater=表達式

它等價于:

變量=變量operater(表達式 )

說明

●operater代表賦值或其他運算符。

●operater與“=”構(gòu)成復(fù)合的賦值運算符。與算術(shù)運算符有關(guān)的常用的復(fù)合運算符有“+=”“-=”“*=”“/=”和“%=”。

例如

a+=2

該表達式等價于“a=a+2”,其含義是把a的值加上2,然后再賦給a。與“+=”類似,“a-=2”等價于“a=a-2”,其含義是把a的值減去 2,然后再賦給 a。依次類推,“a*=2”等價于“a=a*2”,其含義是把 a的值乘以2,然后再賦給a;“a/=2”等價于“a=a/2”,其含義是把a的值除以2,然后再賦給a;“a%=2”等價于“a=a%2”,其含義是把a的值模2,然后再賦給a。

復(fù)合的賦值運算符的優(yōu)先級與賦值運算符的優(yōu)先級是相同的,它們的優(yōu)先級要比算術(shù)運算符的優(yōu)先級低,并且復(fù)合的賦值運算符與賦值運算符具有相同的結(jié)合性,即自右向左。

【例2-7】分析下列程序的結(jié)果。

程序代碼

#include<stdio.h>

void main( )

{ int a=1;

 a+=a-=a+a;

 printf("%d\n",a);

程序的運行結(jié)果是:

   -2

分析一下程序的執(zhí)行過程。

① 因為復(fù)合賦值運算符的結(jié)合性是自右向左的,所以先計算a+a的值,即為2。

②計算a-=①的值,即a=a-2,為-1。需要特別注意的是,經(jīng)過①的運算a的值并沒有改變,仍是初值1。這時a的值就變成了-1。

③計算a+=②的值,即a=a+(-1),注意在②的運算中a的值是-1。所以,此時a的值是(-2)。

所以最終屏幕上顯示的a的值是-2。

真題演練

【例1】設(shè)a,b,c是整型變量且均已賦值,則以下選項中錯誤的賦值語句是( )。

A)a=(b=3)=1;

B)a=(b=2)+c;

C)a=b=c+10;

D)a=1+(b=c=2);

【解析】賦值運算結(jié)合性為由右向左結(jié)合,賦值運算符左值為變量,右值為變量或常量,且左右兩邊數(shù)據(jù)類型相同才能實現(xiàn)賦值。選項A中,賦值運算(b=3)=1,左值為表達式,不是變量不能被賦值,所以選項A錯誤。選項B運算過程為:先賦值b=2,再計算b+c,將結(jié)果賦給a,是正確的賦值語句。選項C運算過程為:先計算c+10,再將結(jié)果賦給b,然后將b賦給a,是正確的賦值語句。選項D運算過程為:先將2賦給c,再將c賦給b,然后計算1+b,最后將結(jié)果賦給a,也是正確的賦值語句。

【答案】A

【例2】設(shè)有定義:inta=0,b=1,c=1;,以下選項中,表達式值與其他3個不同的是( )。

A)b=a==c

B)a=b=c

C)a=c==b

D)c=a!=c

【解析】賦值運算結(jié)合性為由右向左結(jié)合,賦值運算符左值為變量,右值為變量或常量,且左右兩邊數(shù)據(jù)類型相同才能實現(xiàn)賦值。成功實現(xiàn)賦值后以左值為返回值。邏輯表達式成立則返回1,不成立則返回0。選項A中,邏輯表達式a==c不成立(0),則b=0,表達式值為0。選項B中,將c賦值給b,b=1,再將b賦給a,a=1,表達式值為1。選項C中,邏輯表達式c==b成立(1),則a=1,表達式值為1。選項D中,邏輯表達式a!=c成立(1),則c=1,表達式值為1。選項A與其他選項不同,所以選擇選項A。

【答案】A

【例3】若想給已定義為 int型的變量 a,b,c,d賦值為1,以下選項中錯誤的語句是( )。

A)d=1,c=d,b=c,a=b;

B)a=b=c=d=1;

C)a=1,b=a,c=b,d=c;

D)a=b,b=c,c=d,d=1;

【解析】賦值是將一個常量的值賦給一個變量。在選項D中,變量b的值相當(dāng)于一個未知的數(shù),用b對a賦值,不滿足題干要求的變量a、b、c、d賦值為1的條件,因此選擇選項D。

【答案】D

推薦閱讀
  1. 全國計算機等級考試真題匯編與專用題庫:二級C語言
  2. 2013全國計算機等級考試新版無紙化上機考試臨考沖刺模擬實戰(zhàn):二級Access數(shù)據(jù)庫
  3. 2020年3月全國計算機等級考試《四級軟件工程》復(fù)習(xí)全書【核心講義+歷年真題詳解】
  4. 2020年3月全國計算機等級考試《四級數(shù)據(jù)庫原理》復(fù)習(xí)全書【核心講義+歷年真題詳解】
  5. 汪博士解讀PMP考試
  6. 2020年3月全國計算機等級考試《三級網(wǎng)絡(luò)技術(shù)》【教材精講+真題解析】講義與視頻課程【28小時高清視頻】
  7. 5天通過職稱計算機考試(考點視頻串講+全真模擬):Excel 2003中文電子表格(第2版) (全國專業(yè)技術(shù)人員計算機應(yīng)用能力考試指導(dǎo)叢書)
  8. 2014年全國計算機等級考試3年真題精解與過關(guān)全真訓(xùn)練題:二級Java語言程序設(shè)計
  9. 2020年3月全國計算機等級考試《二級Visual Basic語言程序設(shè)計》歷年真題與模擬試題詳解
  10. 全國會計從業(yè)資格考試應(yīng)試指南·真題·預(yù)測三合一:財經(jīng)法規(guī)與會計職業(yè)道德
  11. PMP項目管理認證學(xué)習(xí)指南(第4版)
  12. 2020年3月全國計算機等級考試《三級網(wǎng)絡(luò)技術(shù)》復(fù)習(xí)全書【核心講義+歷年真題詳解】
  13. 全國職稱計算機考試講義 真題 預(yù)測三合一:Word 2003中文字處理
  14. 全國職稱計算機考試標(biāo)準(zhǔn)教材與專用題庫:Internet應(yīng)用
  15. 2020年3月全國計算機等級考試《三級信息安全技術(shù)》復(fù)習(xí)全書【核心講義+歷年真題詳解】
主站蜘蛛池模板: 万载县| 高陵县| 交城县| 平阴县| 定兴县| 林口县| 安康市| 毕节市| 永修县| 沙田区| 东明县| 庆安县| 佛冈县| 扎囊县| 怀集县| 翼城县| 临桂县| 福建省| 英山县| 韩城市| 营山县| 澄江县| 宜城市| 承德市| 通道| 鲜城| 青龙| 甘谷县| 乌海市| 讷河市| 潼南县| 沂南县| 奎屯市| 常山县| 米泉市| 拜泉县| 滁州市| 潮州市| 苍溪县| 大埔县| 抚顺县|