首頁 - 網(wǎng)校 - 萬題庫 - 美好明天 - 直播 - 導(dǎo)航
您現(xiàn)在的位置: 考試吧 > 計算機等級考試 > 計算機二級考試 > C語言 > 復(fù)習(xí)資料 > 正文

2018年全國計算機二級C語言考試考點解析(11)

來源:考試吧 2018-08-01 16:29:00 要考試,上考試吧! 萬題庫
“2018年全國計算機二級C語言考試考點解析(11)”供考生參考。更多計算機等級考試復(fù)習(xí)資料等信息請訪問考試吧計算機等級考試網(wǎng)。

  點擊查看:2018年全國計算機二級C語言考試考點解析匯總

  運算符無論是加減乘除還是大于小于,都需要用到運算符,在C語言中的運算符和我們平時用的基本上都差不多。

  運算符包括賦值運算符、算術(shù)運算符、邏輯運算符、位邏輯運算符、位移運算符、關(guān)系運算符、自增自減運算符。大多數(shù)運算符都是二目運算符,即運算符位于兩個表達(dá)式之間。單目運算符的意思是運算符作用于單個表達(dá)式。(具體什么是表達(dá)式下一節(jié)再說)

  一、賦值運算符

  賦值語句的作用是把某個常量或變量或表達(dá)式的值賦值給另一個變量。符號為‘=’。這里并不是等于的意思,只是賦值,等于用‘==’表示。

  注意:賦值語句左邊的變量在程序的其他地方必須要聲明。

  得已賦值的變量我們稱為左值,因為它們出現(xiàn)在賦值語句的左邊;產(chǎn)生值的表達(dá)式我們稱為右值,因為她它們出現(xiàn)在賦值語句的右邊。常數(shù)只能作為右值。

  例如:

  count=5;

  total1=total2=0;

  第一個賦值語句大家都能理解。

  第二個賦值語句的意思是把0同時賦值給兩個變量。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算。這樣它先total2=0;然后total1=total2;那么我們這樣行不行呢?

  (total1=total2)=0;

  這樣是不可以的,因為先要算括號里面的,這時total1=total2是一個表達(dá)式,而賦值語句的左邊是不允許表達(dá)式存在的。

  二、算術(shù)運算符

  在C語言中有兩個單目和五個雙目運算符。

  符號 功能

  + 單目正

  - 單目負(fù)

  * 乘法

  / 除法

  % 取模

  + 加法

  - 減法

  下面是一些賦值語句的例子, 在賦值運算符右側(cè)的表達(dá)式中就使用了上面的算術(shù)運算符:

  Area=Height*Width;

  num=num1+num2/num3-num4;

  運算符也有個運算順序問題,先算乘除再算加減。單目正和單目負(fù)最先運算。

  取模運算符(%)用于計算兩個整數(shù)相除所得的余數(shù)。例如:

  a=7%4;

  最終a的結(jié)果是3,因為7%4的余數(shù)是3。

  那么有人要問了,我要想求它們的商怎么辦呢?

  b=7/4;

  這樣b就是它們的商了,應(yīng)該是1。

  也許有人就不明白了,7/4應(yīng)該是1.75,怎么會是1呢?這里需要說明的是,當(dāng)兩個整數(shù)相除時,所得到的結(jié)果仍然是整數(shù),沒有小數(shù)部分。要想也得到小數(shù)部分,可以這樣寫7.0/4或者7/4.0,也即把其中一個數(shù)變?yōu)榉钦麛?shù)。

  那么怎樣由一個實數(shù)得到它的整數(shù)部分呢?這就需要用強制類型轉(zhuǎn)換了。例如:

  a=(int) (7.0/4);

  因為7.0/4的值為1.75,如果在前面加上(int)就表示把結(jié)果強制轉(zhuǎn)換成整型,這就得到了1。那么思考一下a=(float) (7/4);最終a的結(jié)果是多少?

  單目減運算符相當(dāng)于取相反值,若是正值就變?yōu)樨?fù)值,若是負(fù)數(shù)就變?yōu)檎怠?/P>

  單目加運算符沒有意義,純粹是和單目減構(gòu)成一對用的。

  三、邏輯運算符

  邏輯運算符是根據(jù)表達(dá)式的值來返回真值或是假值。其實在C語言中沒有所謂的真值和假值,只是認(rèn)為非0為真值,0為假值。

  符號 功能

  && 邏輯與

  || 邏輯或

  ! 邏輯非

  例如:

  5!3;

  0||-2&&5;

  !4;

  當(dāng)表達(dá)式進(jìn)行&&運算時,只要有一個為假,總的表達(dá)式就為假,只有當(dāng)所有都為真時,總的式子才為真。當(dāng)表達(dá)式進(jìn)行||運算時,只要有一個為真,總的值就為真,只有當(dāng)所有的都為假時,總的式子才為假。邏輯非(!)運算是把相應(yīng)的變量數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的真/假值。若原先為假,則邏輯非以后為真,若原先為真,則邏輯非以后為假。

  還有一點很重要,當(dāng)一個邏輯表達(dá)式的后一部分的取值不會影響整個表達(dá)式的值時,后一部分就不會進(jìn)行運算了。例如:

  a=2,b=1;

  a||b-1;

  因為a=2,為真值,所以不管b-1是不是真值,總的表達(dá)式一定為真值,這時后面的表達(dá)式就不會再計算了。

  四、關(guān)系運算符

  關(guān)系運算符是對兩個表達(dá)式進(jìn)行比較,返回一個真/假值。

  符號 功能

  > 大于

  < 小于

  >= 大于等于

  <= 小于等于

  == 等于

  != 不等于

  這些運算符大家都能明白,主要問題就是等于==和賦值=的區(qū)別了。

  一些剛開始學(xué)習(xí)C語言的人總是對這兩個運算符弄不明白,經(jīng)常在一些簡單問題上出錯,自己檢查時還找不出來?聪旅娴拇a:

  if(Amount=123) ……

  很多新人都理解為如果Amount等于123,就怎么樣。其實這行代碼的意思是先賦值A(chǔ)mount=123,然后判斷這個表達(dá)式是不是真值,因為結(jié)果為123,是真值,那么就做后面的。如果想讓當(dāng)Amount等于123才運行時,應(yīng)該if(Amount==123) ……

  五、自增自減運算符

  這是一類特殊的運算符,自增運算符++和自減運算符--對變量的操作結(jié)果是增加1和減少1。例如:

  --Couter;

  Couter--;

  ++Amount;

  Amount++;

  看這些例子里,運算符在前面還是在后面對本身的影響都是一樣的,都是加1或者減1,但是當(dāng)把他們作為其他表達(dá)式的一部分,兩者就有區(qū)別了。運算符放在變量前面,那么在運算之前,變量先完成自增或自減運算;如果運算符放在后面,那么自增自減運算是在變量參加表達(dá)式的運算后再運算。這樣講可能不太清楚,看下面的例子:

  num1=4;

  num2=8;

  a=++num1;

  b=num2++;

  a=++num1;這總的來看是一個賦值,把++num1的值賦給a,因為自增運算符在變量的前面,所以num1先自增加1變?yōu)?,然后賦值給a,最終a也為5。b=num2++;這是把num2++的值賦給b,因為自增運算符在變量的后面,所以先把num2賦值給b,b應(yīng)該為8,然后num2自增加1變?yōu)?。

  那么如果出現(xiàn)這樣的情況我們怎么處理呢?

  c=num1+++num2;

  到底是c=(num1++)+num2;還是c=num1+(++num2);這要根據(jù)編譯器來決定,不同的編譯器可能有不同的結(jié)果。所以我們在以后的編程當(dāng)中,應(yīng)該盡量避免出現(xiàn)上面復(fù)雜的情況。

  六、復(fù)合賦值運算符

  在賦值運算符當(dāng)中,還有一類C/C++獨有的復(fù)合賦值運算符。它們實際上是一種縮寫形式,使得對變量的改變更為簡潔。

  Total=Total+3;

  乍一看這行代碼,似乎有問題,這是不可能成立的。其實還是老樣子,'='是賦值不是等于。它的意思是本身的值加3,然后在賦值給本身。為了簡化,上面的代碼也可以寫成:

  Total+=3;

  復(fù)合賦值運算符有下列這些:

  符號 功能

  += 加法賦值

  -= 減法賦值

  *= 乘法賦值

  /= 除法賦值

  %= 模運算賦值

  <<= 左移賦值

  >>= 右移賦值

  &= 位邏輯與賦值

  |= 位邏輯或賦值

  ^= 位邏輯異或賦值

  上面的十個復(fù)合賦值運算符中,后面五個我們到以后位運算時再說明。

  那么看了上面的復(fù)合賦值運算符,有人就會問,到底Total=Total+3;與Total+=3;有沒有區(qū)別?答案是有的,對于A=A+1,表達(dá)式A被計算了兩次,對于復(fù)合運算符A+=1,表達(dá)式A僅計算了一次。一般的來說,這種區(qū)別對于程序的運行沒有多大影響,但是當(dāng)表達(dá)式作為函數(shù)的返回值時,函數(shù)就被調(diào)用了兩次(以后再說明),而且如果使用普通的賦值運算符,也會加大程序的開銷,使效率降低。

  七、條件運算符

  條件運算符(?:)是C語言中唯一的一個三目運算符,它是對第一個表達(dá)式作真/假檢測,然后根據(jù)結(jié)果返回兩外兩個表達(dá)式中的一個。

  <表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>

  在運算中,首先對第一個表達(dá)式進(jìn)行檢驗,如果為真,則返回表達(dá)式2的值;如果為假,則返回表達(dá)式3的值。

  例如:

  a=(b>0)?b:-b;

  當(dāng)b>0時,a=b;當(dāng)b不大于0時,a=-b;這就是條件表達(dá)式。其實上面的意思就是把b的絕對值賦值給a。

  八、逗號運算符

  在C語言中,多個表達(dá)式可以用逗號分開,其中用逗號分開的表達(dá)式的值分別結(jié)算,但整個表達(dá)式的值是最后一個表達(dá)式的值。

  假設(shè)b=2,c=7,d=5,

  a1=(++b,c--,d+3);

  a2=++b,c--,d+3;

  對于第一行代碼,有三個表達(dá)式,用逗號分開,所以最終的值應(yīng)該是最后一個表達(dá)式的值,也就是d+3,為8,所以a=8。對于第二行代碼,那么也是有三個表達(dá)式,這時的三個表達(dá)式為a2=++b、c--、d+3,(這是因為賦值運算符比逗號運算符優(yōu)先級高)所以最終表達(dá)式的值雖然也為8,但a2=3。

  還有其他的如位邏輯運算符,位移運算符等等,我們等到講位運算時再說明。

  九、優(yōu)先級和結(jié)合性

  從上面的逗號運算符那個例子可以看出,這些運算符計算時都有一定的順序,就好象先要算乘除后算加減一樣。優(yōu)先級和結(jié)合性是運算符兩個重要的特性,結(jié)合性又稱為計算順序,它決定組成表達(dá)式的各個部分是否參與計算以及什么時候計算。

  下面是C語言中所使用的運算符的優(yōu)先級和結(jié)合性:

  優(yōu)先級 運算符 結(jié)合性

  (最高) () [] -> . 自左向右

  ! ~ ++ -- + - * & sizeof 自右向左

  * / % 自左向右

  + - 自左向右

  << >> 自左向右

  < <= > >= 自左向右

  == != 自左向右

  & 自左向右

  ^ 自左向右

  | 自左向右

  && 自左向右

  || 自左向右

  ?: 自右向左

  = += -= *= /= %= &= ^= |= <<= >>= 自右向左

  (最低) , 自左向右

  在該表中,還有一些運算符我們沒有介紹,如指針運算符、sizeof運算符、數(shù)組運算符[]等等,這些在以后的學(xué)習(xí)中會陸續(xù)說明的。

掃描/長按二維碼幫助考試通關(guān)
2018年等考報考資訊
2018等考各科通關(guān)技巧
2018各科最新預(yù)測試卷
2018等考各科備考資料

微信搜索"考試吧"了解更多考試資訊、下載備考資料

  相關(guān)推薦:

  2018年9月全國計算機等級考試試題匯總(各科目)

  2018年全國計算機等級考試必做試題匯總(各科目)

  2018年全國計算機等級考試復(fù)習(xí)知識點匯總(各科目)

  2018全國計算機等級考試備考經(jīng)驗及應(yīng)試技巧匯總

  歷年真題匯總|考試吧策劃:2018年計算機等級考試報考指南

0
收藏該文章
0
收藏該文章
文章搜索
萬題庫小程序
萬題庫小程序
·章節(jié)視頻 ·章節(jié)練習(xí)
·免費真題 ·模考試題
微信掃碼,立即獲!
掃碼免費使用
版權(quán)聲明:如果計算機等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本計算機等級考試網(wǎng)內(nèi)容,請注明出處。
Copyright © 2004- 考試吧計算機等級考試網(wǎng) 出版物經(jīng)營許可證新出發(fā)京批字第直170033號 
京ICP證060677 京ICP備05005269號 中國科學(xué)院研究生院權(quán)威支持(北京)
在線模擬試題
考證通關(guān)殺器
考試最新資訊
學(xué)
一次通關(guān)技巧