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

(二)運算符與表達式

【考點3】常考的C語言運算符

1.C語言運算符簡介

●算術運算符:+,-,*,/,%。

●關系運算符:>,>=,==,!=,<,<=。

●位運算符:>>,<<,~,&,|,∧。

●邏輯運算符:!,||,&&。

●條件運算符:?:。

●指針運算符:&,*。

●賦值運算符:=。

●逗號運算符:,。

●字節運算符:sizeof。

●強制運算符:(類型名)(表達式)。

●其他:下標、分量、函數。

2.運算符的結合性和優先級

(1)結合性。所有的單目運算符、條件運算符、賦值運算符及其擴展運算符,結合方向都是從右向左,其余運算符的結合方向是從左向右。

(2)優先級比較。初等運算符>單目運算符>算術運算符(先乘除后加減)>關系運算符 >邏輯運算符(不包括“!”)>條件運算符>賦值運算符>逗號運算符。

初等運算符包括:圓括號(),下標運算符[]和結構體成員運算符->。

3.強制類型轉換運算符

(1)可以利用強制類型轉換符將一個表達式轉換成所需類型。

(2)一般形式:(類型名)(表達式)。

4.逗號運算符和逗號表達式

(1)逗號表達式:用逗號運算符將幾個表達式連接起來。

(2)一般形式:表達式1,表達式2,…,表達式n。

(3)求解過程:先求解表達式1,然后依次求解表達式2,直到表達式n的值。表達式n的值就是整個逗號表達式的值。

【考點4】算術運算符和算術表達式

1.基本的算術運算符

(1)分類:+(加法運算符或正值運算符)、-(減法運算符或負值運算符)、*(乘)、/(除)和%(求余)。

其中,“%”運算的兩端必須都是整型,其余的運算對象都可以是整型或者實型。

(2)雙目運算符兩邊的數值類型必須一致才能進行運算,如果不一致,系統先進行一致性轉換。

轉換規則:char->short->int->unsigned->long->float->double。

(3)所有實數的運算都是以雙精度方式進行的,若是單精度數值,則需要在尾數后面補0轉換為雙精度數。

2.算術表達式和運算符的優先級與結合性

(1)定義:用算術運算符和括號將運算量連接起來的、符合C語言語法規則的表達式。

(2)運算對象:函數、常量和變量等。

(3)運算規則。

●可使用多層圓括號,但括號必須配對。運算時由內向外依次計算各表達式的值。

●對于不同優先級的運算符,按運算符的優先級由高到低進行運算,若優先級相同,則按結合方向進行運算。

●若運算符兩側的操作數類型不同,則先利用自動轉換或強制類型轉換,然后進行運算。

3.自加、自減運算符

(1)作用:自加運算符“++”使運算變量的值增1,自減運算符“--”使運算變量的值減1。

(2)均是單目運算符。運算對象可以是整型或實型變量,但不可以是常量和表達式。

(3)均可作為前綴運算符,也可作為后綴運算符構成一個表達式。

●++i,--i:在使用i之前,先使i的值加1或者減1,再使用此時的表達式的值參加運算。

●i++,i--:在使用i之后,使i的值加1或者減1,再使用此時的表達式的值參加運算。

(4)結合方向:自右向左。

【考點5】賦值運算符和賦值表達式

1.賦值運算符和賦值表達式

(1)“=”稱作賦值運算符,作用是將一個數值賦給一個變量或將一個變量的值賦給另一個變量,由賦值運算符組成的表達式稱為賦值表達式。

(2)一般形式:變量名=表達式。

●賦值運算符的優先級別高于逗號運算符。

●賦值運算符“=”和等于運算符“==”有很大差別。

●賦值運算符的左側只能是變量,而不能是常量或者表達式。右側可以是表達式,包括賦值表達式。

●規定最左邊變量所得到的新值就是整個賦值表達式的值。

2.復合的賦值運算符

在賦值運算符之前加上其他運算符可以構成復合賦值運算符。例如,+=、-=、*=、/=、%=等。

●兩個符號之間不可以有空格。

●復合賦值運算符的優先級與賦值運算符的相同。

3.賦值運算中的類型轉換

如果賦值運算符兩側的類型不一致,在賦值前系統將自動先把右側表達式求得的數值按賦值號左邊變量的類型進行轉換(也可以用強制類型轉換的方式)。

【考點6】位運算

1.C語言提供6種位運算符

●按位與“&”:若兩個相應的二進制位都為1,則該位的結果為1,否則為0。

●按位或“|”:兩個相應的二進制位中只要有一個為1,則該位的結果為1,否則為0。

●按位異或“∧”:若兩個二進制位相同,則結果為0,不同則為1。

●按位求反“~”:按位取反,即0變1,1變0。

●左移“<<”:將一個數的二進制位全部左移若干位。

●右移“>>”:將一個數的二進制位全部右移若干位。

2.說明

●位運算中除“~”以外,均為雙目運算符,要求兩側各有一個運算量。

●運算量只能是整型或字符型數據,不能為實型數據。

真題演練

(1)表達式(int)((double)9/2)-9%2的值是( )。

A)0

B)3

C)4

D)5

(2)若有定義int x,y;并已正確給變量賦值,則以下選項中與表達式(x-y)?(x++):(y++)中的條件表達式(x-y)等價的是( )。

A)(x-y<0||x-y>0)

B)(x-y<0)

C)(x-y>0)

D)(x-y==0)

(3)若變量已正確定義,在if(W)printf("%d\n",k);中,以下不可替代W的是( )。

A)a<>b+c

B)ch=getchar()

C)a==b+c

D)a++

(4)若有定義語句:int x=10;,則表達式x-=x+x的值為( )。

A)0

B)-20

C)-10

D)10

(5)設有定義:int x=2;,以下表達式中,值不為6的是( )。

A)2*x,x+=2

B)x++,2*x

C)x*=(1+x)

D)x*=x+1

(6)若有定義語句:int x=12,y=8,z;,在其后執行語句 z=0.9+x/y;,則z的值為( )。

A)1

B)1.9

C)2

D)2.4

(7)表達式3.6-5/2+1.2+5%2的值是( )。

A)4.3

B)4.8

C)3.3

D)3.8

(8)有定義語句:int a;long b;double x,y;,則以下選項中正確的表達式是( )。

A)a=x<>y

B)a%(int)(x-y)

C)(a*y)%b

D)y=x+y=x

(9)設變量已正確定義并賦值,下列表達式中正確的是( )。

A)x=y+z+5,++y

B)int(15.8%5)

C)x=y*5=x+z

D)x=25%5.0

(10)有以下程序:

#include <stdio.h>

main()

{ int x,y,z;

x=y=1;

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

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

}

程序運行后的輸出結果是( )。

A)2,3,3

B)2,3,2

C)2,3,1

D)2,2,1

(11)以下不能將s所指字符串正確復制到t所指存儲空間的是( )。

A)do{*t++=*s++;}while(*s);

B)for(i=0;t[i]=s[i];i++);

C)while(*t=*s){t++;s++}

D)for(i=0,j=0;t[i++]=s[j++];);

(12)設有定義:int k=0;,以下選項的4個表達式中與其他3個表達式的值不相同的是( )。

A)++k

B)k+=1

C)k++

D)k+1

(13)若有定義語句:int year=2009,*p=&year;,以下不能使變量year中的值增至2010的語句是( )。

A)(*p)++;

B)*p++;

C)++(*p);

D)*p+=1;

(14)若有定義:double a=22;int i=0,k=18;,則不符合C語言規定的賦值語句是( )。

A)i=(a+k)<=(i+k);

B)i=a%11;

C)a=a++,i++

D)i=! a;

(15)若變量x、y已正確定義并賦值,以下符合C語言語法的表達式是( )。

A)x+1=y

B)++x,y=x-

C)x=x+10=x+y

D)double(x)/10

(16)若變量均已正確定義并賦值,以下合法的C語言賦值語句是( )。

A)x=y==5;

B)x=n%2.5;

C)x+n=i;

D)x=5=4+1;

(17)以下選項中正確的定義語句是( )。

A)double,a,b;

B)double a=b=7;

C)double a;b;

D)double a=7,b=7;

(18)若有定義語句:int a=3,b=2,c=1;,以下選項中錯誤的賦值表達式是( )。

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

B)a=b=c+1;

C)a=(b=4)+c;

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

(19)表達式 a+=a-=a=9的值是( )。

A)18

B)-9

C)0

D)9

(20)有以下程序:

#include <stdio.h>

main()

{ int a=1,b=0;

printf("%d,",b=a+b);

printf("%d\n",a=2*b);

程序運行后的輸出結果是( )。

A)1,2

B)1,0

C)3,2

D)0,0

(21)有以下程序:

# include <stdio.h>

main()

{ unsigned char a=8,c;

c=a>>3;

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

}

程序運行后的輸出結果是( )。

A)16

B)1

C)32

D)0

(22)有以下程序:

# include <stdio.h>

main()

unsigned char a=2,b=4,c=5,d;

d=a |b;

d &=c;

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

}

程序運行后的輸出結果是( )。

A)3

B)4

C)5

D)6

(23)設有以下語句:

int a=1,b=2,c;

c=a^(b<<2);

執行后,c的值為( )。

A)7

B)9

C)8

D)6

(24)若有以下程序段:

int r=8;

printf("%d\n",r>>1);

輸出結果是( )。

A)16

B)8

C)4

D)2

(25)有以下程序:

#include <stdio.h>

main()

{ int a=1,b=2,c=3,x;

x=(a^b)&c;

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

}

程序的運行結果是( )。

A)3

B)1

C)2

D)0

(26)有以下程序:

#include <stdio.h>

main()

{ int a=2,b;

b=a<<2;

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

}

程序運行后的輸出結果是( )。

A)2

B)4

C)6

D)8

(27)有以下程序:

#include <stdio.h>

main()

{ char a=4;

printf("%d\n",a=a<<1);

}

程序的運行結果是( )。

A)16

B)8

C)40

D)4

(28)有以下程序:

#include <stdio.h>

main()

{ int a=5,b=1,t;

t=(a<<2)|b;

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

}

程序運行后的輸出結果是( )。

A)1

B)11

C)6

D)21

(29)若變量已正確定義,則語句s=32; s^=32; printf("% d",s);的輸出結果是( )。

A)-1

B)0

C)1

D)32

主站蜘蛛池模板: 固原市| 湖南省| 屯昌县| 晴隆县| 凉城县| 东源县| 中阳县| 宜黄县| 景德镇市| 金塔县| 阿勒泰市| 宁德市| 望谟县| 上林县| 岑巩县| 兴仁县| 阿坝县| 宝丰县| 临沭县| 铜山县| 桓台县| 浦城县| 香河县| 方城县| 任丘市| 乌兰县| 江油市| 兴仁县| 吉安县| 肇源县| 泊头市| 桃源县| 南阳市| 昌吉市| 利津县| 炉霍县| 科技| 宾阳县| 绥棱县| 仙桃市| 从化市|