一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C語言基礎(chǔ)知識

 田彬彬 2017-09-06

  ·1 C語言程序的結(jié)構(gòu)認(rèn)識

?用一個簡單的c程序例子,介紹c語言的基本構(gòu)成、格式、以及良好的書寫風(fēng)格,使讀者對c語言有個初步認(rèn)識。?

例1 計算兩個整數(shù)之和的c程序:?

#include?
main()?
{?
int a,b,sum;  /*定義變量a,b,sum為整型變量*/?
a=20;       /*把整數(shù)20賦值給整型變量a*/?
b=15;       /*把整數(shù)15賦值給整型變量b*/?
sum=a+b;   /*把兩個數(shù)之和賦值給整型變量sum*/?
printf(“a=%d,b=%d,sum=%d\n”,a,b,sum);?
/*把計算結(jié)果輸出到顯示屏上*/?
}??

重點說明:?

1、任何一個c語言程序都必須包括以下格式:?

main()?
{   }?

這是c語言的基本結(jié)構(gòu),任何一個程序都必須包含這個機構(gòu)。括號內(nèi)可以不寫任何內(nèi)容,那么該程序?qū)⒉粓?zhí)行任何結(jié)果。?

2、main()----在c語言中稱之為“主函數(shù)”,一個c程序有且僅有一個main函數(shù),任何一個c程序總是從main函數(shù)開始執(zhí)行,main函數(shù)后面的一對圓括號不能省略。?

3、被大括號{ }括起來的內(nèi)容稱為main函數(shù)的函數(shù)體,這部分內(nèi)容就是計算機要執(zhí)行的內(nèi)容。?

4、在{  }里面每一句話后面都有一個分號(;),在c語言中,我們把以一個分號結(jié)尾的一句話叫做一個c語言的語句,分號是語句結(jié)束的標(biāo)志。?

5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ----通過執(zhí)行這條c語言系統(tǒng)提供給我們直接使用的屏幕輸出函數(shù),用戶即可看到運行結(jié)果,本程序運行后,將在顯示器上顯示如下結(jié)果:?

a=20,b=15,sum=35?

6、#include?

注意:(1)以#號開頭 (2)不以分號結(jié)尾?
這一行沒有分號,所以不是語句,在c語言中稱之為命令行,或者叫做“預(yù)編譯處理命令”。?

7、程序中以 /*開頭并且以*/結(jié)尾的部分表示程序的注釋部分,注釋可以添加在程序的任何位置,為了提高程序的可讀性而添加,但計算機在執(zhí)行主函數(shù)內(nèi)容時完全忽略注釋部分,換而言之就是計算機當(dāng)做注釋部分不存在于主函數(shù)中。??

   ·  2 C程序的生成過程?

C程序是先由源文件經(jīng)編譯生成目標(biāo)文件,然后經(jīng)過連接生成可執(zhí)行文件,如圖所示。???

                              編譯過程??

源程序的擴展名為 .c ,目標(biāo)程序的擴展名為 .obj  , 可執(zhí)行程序的擴展名為 .exe 。??

 · 3 標(biāo)識符?

在編寫程序時,必須為函數(shù)、變量等命名,這個名字稱為標(biāo)識符。C語言中標(biāo)識符的命名規(guī)則如下:?

1、標(biāo)識符只能由字母、數(shù)字、下劃線組成;?
2、標(biāo)識符的第一個字母必須是字母和下劃線;?
3、標(biāo)識符區(qū)分大小寫字母,如If和if是兩個完全不同的標(biāo)識符。?

合法標(biāo)識符如下:?
A6, b_3 , _mn?
非法的標(biāo)識符如下:?
ab#12 , 8m , tr3:4 , yes no?

標(biāo)識符不能與程序中具有特殊意義的關(guān)鍵字相同,不能與用戶編制的函數(shù)名、C語言庫函數(shù)相同,在程序中各種標(biāo)識符盡量不要重復(fù),以便區(qū)分。選擇變量名和其他標(biāo)識符時,應(yīng)注意做到 “見名知義”。?

?

標(biāo)識符分為如下三類:?

1、關(guān)鍵字?

關(guān)鍵字是具有特定含義的,專門用來說明c語言特定成分的一類標(biāo)識符,不能用作用戶的標(biāo)識符。?

auto?
break?
case?
char?
union?
do?
double?
else?
enum?
extern?
goto?
if?
int?
long?
short?
signed?
static?
sizof?
struct?
switch?
unsigned?
void?
for?
while?
typedef?
continue?
float?
return?
typedef?
default?
?
2、預(yù)定義標(biāo)識符?
預(yù)定義標(biāo)識符在c語言中也有特定的含義,但可以用作用戶標(biāo)識符,預(yù)定義標(biāo)識符分為兩類:?

(1)、庫函數(shù)名字,比如(printf,scanf,sin,isdigit等)?
(2)、編譯處理命令名,比如(define,include)?

3、用戶標(biāo)識符?

用戶根據(jù)需要自己定義的標(biāo)識符稱為用戶標(biāo)識符。無論如何自定義標(biāo)識符,都必須符合標(biāo)識符的三條命名規(guī)則。?

?

 · 4 常量?

在程序運行中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實型常量、字符常量、字符串常量和符號常量。?

(一)數(shù)值轉(zhuǎn)換?

數(shù)字的四種表現(xiàn)形式:?

l  二進(jìn)制:所有數(shù)字由0,1構(gòu)成,逢二進(jìn)一,二進(jìn)制數(shù)中不會出現(xiàn)2.。?
例:110101?
l  八進(jìn)制:以數(shù)字0(注意不是以字母O,o)開頭,所有數(shù)字由0~7構(gòu)成,逢八進(jìn)一,八進(jìn)制數(shù)中不會出現(xiàn)8。?
例:0112,0123,077等?
l  十進(jìn)制:所有數(shù)字由0~9構(gòu)成,逢十進(jìn)一,十進(jìn)制數(shù)中不會出現(xiàn)10。?
例:0,12,-15等?
l  十六進(jìn)制:以0x或者0X(數(shù)字0加字母x)開頭,所有數(shù)字由0~9,A~F(或者a~f)構(gòu)成,逢十六進(jìn)一(其中A、B、C、D、E、F分別代表10、11、12、13、14、15)?
例:0x4A   0X14c7等?

?

在計算機內(nèi)部,數(shù)字均以二進(jìn)制形式表示和存放,用戶輸入的普通十進(jìn)制數(shù)字都要被計算機轉(zhuǎn)換成二進(jìn)制才能在計算機內(nèi)部存儲,同樣計算機的運算結(jié)果也為二進(jìn)制,一般要將其轉(zhuǎn)換成十進(jìn)制數(shù)再輸出給用戶閱讀,這種轉(zhuǎn)換通常由計算機自動實現(xiàn)。?

?

(1)將十進(jìn)制轉(zhuǎn)換二進(jìn)制、八進(jìn)制和十六進(jìn)制?

除法:將十進(jìn)制數(shù)除以2,記錄余數(shù),得到的商繼續(xù)除以2,直到商為0,然后將各次相處所得的余數(shù)從后往前逆序排列,所得余數(shù)數(shù)字序列就是該十進(jìn)制數(shù)對應(yīng)的二進(jìn)制數(shù)。八進(jìn)制和十六進(jìn)制轉(zhuǎn)換方法同上。?

例:十進(jìn)制數(shù)13轉(zhuǎn)換成二進(jìn)制數(shù)的值為1101,轉(zhuǎn)換八進(jìn)制為015,轉(zhuǎn)換成十六進(jìn)制為D.?

?

(2)將二進(jìn)制、八進(jìn)制和十六進(jìn)制轉(zhuǎn)換成十進(jìn)制?

乘積求和:將二進(jìn)制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22。。。。,然后將這些積求和。?

例如:(1101)2=(13)10     (317)8=(207)10     (23E)16=(574)10?

?

(3)二進(jìn)制與八進(jìn)制、十六進(jìn)制數(shù)之間的相互轉(zhuǎn)換?

① 二進(jìn)制轉(zhuǎn)八進(jìn)制:從右往左每三位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對應(yīng)的八進(jìn)制數(shù)(注意:高位不足三位補零)。?
例:(010 110 111)2=(267)8?
② 二進(jìn)制轉(zhuǎn)十六進(jìn)制:從右往左每四位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對應(yīng)的十六進(jìn)制數(shù)(注意:高位不足四位補零)。?
例:(0101 1011)2=(5B)16?
③ 八進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為三位二進(jìn)制數(shù)字?
例:(13)8=(001 011)2=(1011)2?
(注意:去掉前面的兩個00,因為0在高位沒有意義)?
④ 十六進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為四位二進(jìn)制數(shù)字?
例:(E3)16=(1110 0011)2?

?

(二)整型常量?

整型常量有3種形式:十進(jìn)制整型常量、八進(jìn)制整型常量和十六進(jìn)制整型常量。?

(注意:c語言中沒有直接表示二進(jìn)制的整型常量,在c語言源程序中不會出現(xiàn)二進(jìn)制。)?

書寫方式如下:?

十進(jìn)制整型常量:123 , 0 ,-24 , 85L(長整型常量) 等?
八進(jìn)制整型常量:051 ,-026 ,0773 等?
十六進(jìn)制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。?
其中L為長整型。?

?

(三)實型常量?

實型常量有兩種表示形式:小數(shù)形式和指數(shù)形式。?

小數(shù)形式:5.4   0.074      -23.0?
指數(shù)形式:5.4e0 4.3e-3 -3.3e4?
(1)小數(shù)部分為0的實型常量,可以寫為453.0 或453。?
(2)用小數(shù)表示時,小數(shù)點的兩邊必須有數(shù),不能寫成“ .453“和“453.“,而應(yīng)該寫成“0.453“和“453.0“。?
(3)用指數(shù)寫法時,e前必須有數(shù)字,e后面的指數(shù)必須為整數(shù)(注意:整數(shù)階碼可以是正數(shù),負(fù)數(shù),也可以是八進(jìn)制數(shù)、十六進(jìn)制數(shù),但必須為整數(shù))。?

?

(四)字符常量?

字符常量的標(biāo)志是一對單引號‘ ’,c語言中的字符常量有兩類:?

(1)由一對單引號括起來的一個字符,如‘a(chǎn) ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是兩個不同的字符常量。?

(2)由一對單引號括起來,以反斜杠\開頭,后跟若干數(shù)字或者字母,比如‘\n’,其中“\“是轉(zhuǎn)義的意思,后面跟不同的字符表示不同的意思,這類字符常量叫轉(zhuǎn)義字符。具體如圖所示 。?

?

轉(zhuǎn)義字符?,轉(zhuǎn)義字符的意義,? ASCII碼?
\n?   回車換行?    10?
\t?  橫向跳到下一制表位置?   9?
\b?   退格?    8?
\r?    回車?      13?
\f?      走紙換頁?     12?
\\?      反斜線符'\'?        92?
\'?       單引號符?        39?
\”?       雙引號符?         34?
\a?        鳴鈴?          7?
\ddd?         1~3位八進(jìn)制數(shù)所代表的字符?
\xhh?        1~2位十六進(jìn)制數(shù)所代表的字符?

?

(五)字符串常量?

C語言中,以雙引號括起來的,由若干個字符組成的序列即為字符串常量。?

例:“ni hao”   “happy”等等。?

(六)符號常量?

符號常量是由宏定義“#define“定義的常量,在C程序中可用標(biāo)識符代表一個常量。?

例:計算圓的面積的c程序。?

#include?
#define  PI   3.14159?
main()?
{?
float  r,s;?
r=12.5;?
S=PI *r*r;?
printf(“s= %f ”,s);?
}?

?

說明:?

#define 是宏定義,有關(guān)宏定義在以后的章節(jié)中詳細(xì)說明,此程序中所有出現(xiàn)PI的地方都代表3.14159,同時PI稱為符號常量。習(xí)慣上我們用大寫字母來表示符號常量,小寫字母表示變量,這樣比較容易區(qū)別。?

?

?

· 5 變量?

變量就是其值可以改變的量。變量要有變量名,在內(nèi)存中占據(jù)一定的存儲單元,存儲單元里存放的是該變量的值。不同類型的變量其存儲單元的大小不同,變量在使用前必須定義。?

(一)整型變量?

整型變量分為4種:基本型(int)、短整型(short int 或short)、長整型(long int 或 long)和無符號型(unsigned int ,unsigned short,unsigned long)。?

不同的編譯系統(tǒng)對上述四種整型數(shù)據(jù)所占用的位數(shù)和數(shù)值范圍有不同的規(guī)定。?

?

類型說明符?

字節(jié)?         數(shù)值范圍?               字符型?
基本整型
char?         1?                   C字符集?
int?            2?          -32768~32767?
短整型?
short int?       2?           -32768~32767?
長整型?
long int?  4?    -214783648~214783647?
無符號型?
unsigned?     2?           0~65535?
無符號長整型?
unsigned long?      4?    0~4294967295?
單精度實型?
float?         4?           3/4E-38~3/4E+38?
雙精度實型?
double?         8?      1/7E-308~1/7E+308?

?

說明:?

單詞signed來說明“有符號”(即有正負(fù)數(shù)之分),不寫signed也隱含說明為有符號,unsigned用來說明“無符號”(只表示正數(shù))。?

?

(二)實型變量?

C語言中,實型變量分為單精度類型( float )和雙精度類型( double )兩種。如:?

float  a , b ;?
double  m ;?

在vc中,float 型數(shù)據(jù)在內(nèi)存中占4個字節(jié)(32位),double型數(shù)據(jù)占8個字節(jié)。單精度實數(shù)提供7位有效數(shù)字,雙精度實數(shù)提供15~16位有效數(shù)字。實型常量不分float型和double型,一個實型常量可以賦給一個float 型或double型變量,但變量根據(jù)其類型截取實型常量中相應(yīng)的有效數(shù)字。?

注意:實型變量只能存放實型值,不能用整型變量存放實型值,也不能用實型變量存放整型值。?

?

(三)字符變量?

字符變量用來存放字符常量,定義形式:?

char  變量名;?

其中關(guān)鍵字char定義字符型數(shù)據(jù)類型,占用一個字節(jié)的存儲單元。?

例:char  cr1,cr2;?
cr1= ‘A’ , cr2=‘B’ ;?

將一個字符賦給一個字符變量時,并不是將該字符本身存儲到內(nèi)存中,而是將該字符對應(yīng)的ASCII碼存儲到內(nèi)存單元中。例如,字符 ′A′ 的ASCII碼為65,在內(nèi)存中的存放形式如下:01000001?

由于在內(nèi)存中字符以ASCII碼存放,它的存儲形式和整數(shù)的存儲形式類似,所以C語言中字符型數(shù)據(jù)與整型數(shù)據(jù)之間可以通用,一個字符能用字符的形式輸出,也能用整數(shù)的形式輸出,字符數(shù)據(jù)也能進(jìn)行算術(shù)運算,此時相當(dāng)于對它們的ASCII碼進(jìn)行運算。?

?

     ·6 類型的自動轉(zhuǎn)換和強制轉(zhuǎn)換?

當(dāng)同一表達(dá)式中各數(shù)據(jù)的類型不同時,編譯程序會自動把它們轉(zhuǎn)變成同一類型后再進(jìn)行計算。轉(zhuǎn)換優(yōu)先級為:?

char < int="">< float=""><>

即左邊級別“低“的類型向右邊轉(zhuǎn)換。具體地說,若在表達(dá)式中優(yōu)先級最高的數(shù)據(jù)是double型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成double型,且計算結(jié)果也是double型;若在表達(dá)式中優(yōu)先級最高的數(shù)據(jù)是float型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成float型,且計算結(jié)果也是float型。?

在做賦值運算時,若賦值號左右兩邊的類型不同,則賦值號右邊的類型向左邊的類型轉(zhuǎn)換;當(dāng)右邊的類型高于左邊的類型時,則在轉(zhuǎn)換時對右邊的數(shù)據(jù)進(jìn)行截取。?

除自動轉(zhuǎn)換外,還有強制轉(zhuǎn)換,表示形式是:?

( 類型 )(表達(dá)式);?
例:(int)(a+b)?

討論:當(dāng)a值賦值為3.4,b值賦值為2.7,(int)(a+b)和(int)a+b的值分別為多少??

?

?

   · 7  C運算符認(rèn)識?

C語言的運算符范圍很廣,可分為以下幾類:?

1、算術(shù)運算符:用于各類數(shù)值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(%)、自增(++)、自減(--)共七種。?

2、賦值運算符:用于賦值運算,分為簡單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運算賦值(&=,|=,^=,>>=,<>

3、逗號運算符:用于把若干表達(dá)式組合成一個表達(dá)式(,)。?

4、關(guān)系運算符:用于比較運算。包括大于(>)、小于(<)、等于(==)、 大于等于(="">=)、小于等于(<>

5、邏輯運算符:用于邏輯運算。包括與(&&)、或(||)、非(!)三種。?

6、條件運算符:這是一個三目運算符,用于條件求值(?:)。?

7、位操作運算符:參與運算的量,按二進(jìn)制位進(jìn)行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<)、右移(>>)六種。?

8、指針運算符:用于取內(nèi)容(*)和取地址(&)二種運算。?

9.、求字節(jié)數(shù)運算符:用于計算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。?

10、特殊運算符:有括號(),下標(biāo)[],成員(→,.)等幾種。?

另外,按參與運算的對象個數(shù),C語言運算符可分為:單目運算符 (如 !)、雙目運算符 (如+,- )和三目運算符 (如 ?  : )。?

?        ·  8 算術(shù)運算符和算術(shù)表達(dá)式?

一、   基本的算術(shù)運算符?

(1)+(加法運算符或正值運算符,如2+5)。?

(2)-(減法運算符或負(fù)值運算符,如4-2)。?

(3)*(乘法運算符,如3*8)。?

(4)/(除法運算符,如11/5)。?

/的運算分為兩種情況:?

a、“除”的左右兩邊都為整數(shù)時,所得結(jié)果必然是整數(shù)(注意:僅取整數(shù)部分,不是四舍五入)?

比如:5/2的值為2,不是2.5,1/2的值為0。?

b、“除”的左右兩邊至少有一個是實型數(shù)據(jù)(即小數(shù))時,所得結(jié)果為實型數(shù)據(jù)。?

比如:5/2.0的值為2.5,7.0/2.0的值為3.5.?

(5)%(模運算符或稱求余運算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如9%7的值為2)。?

需要說明的是:當(dāng)運算對象為負(fù)數(shù)時,所得結(jié)果隨編譯器不同而不同,在vc中,結(jié)果的符號與被除數(shù)相同,比如:13%-2值為1,而-15%2值為-1.?

?

二、   算術(shù)表達(dá)式和運算符的優(yōu)先級與結(jié)合性?

算術(shù)表達(dá)式是用算術(shù)運算符和括號將運算量(也稱操作數(shù))連接起來的、符合C語言語法規(guī)則的表達(dá)式。運算對象包括函數(shù)、常量和變量等。?

在計算機語言中,算術(shù)表達(dá)式的求值規(guī)律與數(shù)學(xué)中的四則運算的規(guī)律類似,其運算規(guī)則和要求如下。?

(1)在算術(shù)表達(dá)式中,可使用多層圓括號,但括號必須配對。運算時從內(nèi)層圓括號開始,由內(nèi)向外依次計算各表達(dá)式的值。?

(2)在算術(shù)表達(dá)式中,對于不同優(yōu)先級的運算符,可按運算符的優(yōu)先級由高到低進(jìn)行運算,若表達(dá)式中運算符的優(yōu)先級相同,則按運算符的結(jié)合方向進(jìn)行運算。?

(3)如果一個運算符兩側(cè)的操作數(shù)類型不同,則先利用自動轉(zhuǎn)換或強制類型轉(zhuǎn)換,使兩者具有相同類型,然后進(jìn)行運算。?

三、   自增自減運算符?

作用:使變量的值增1或減1。?

如:++i,--i (在使用i之前,先使i的值加1、減1)。?
i++,i-- (在使用i之后,使i的值加1、減1)。?

(1)只有變量才能用自增運算符 (++)和自減運算符(--),而常量或表達(dá)式不能用,如10++或(x+y)++都是不合法的。?

(2)++和--的結(jié)合方向是“自右向左“,如 -i++ ,i的左邊是負(fù)號運算符,右邊是自增運算符,負(fù)號運算和自增運算都是 “自右向左“結(jié)合的,相當(dāng)于 -(i++)。?

在循環(huán)語句中常用到自增(減)運算符,在指針中也常用到該運算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的區(qū)別,特別弄清楚表達(dá)式的值和變量的值。?

例:變量n的初始值為2,則?


caicai

例:有以下程序?

#include  'stdio.h'?
main(  )?
{?
int m=12,n=34;?
printf('%d  %d  ',m++,++n);?
/*輸出表達(dá)式m++和表達(dá)式++n的值*/?
printf('%d  %d  ',++m,n++);?
/*輸出表達(dá)式++m和表達(dá)式n++的值*/?
printf('%d  %d  ',m,n);?
/*輸出m 、n的值*/?
}?

程序運行后的輸出結(jié)果是_____?

A.12  35  13  35  14  36     B. 12  35  14  35  14  36?

C.12  35  14  36  14  36     D. 12  35  14  35  14  35?

解析:自增自減運算需要注意區(qū)分表達(dá)式的值和變量的值,表達(dá)式運算后,變量會自增自減運算,表達(dá)式和變量變化如下:?


caicai

     ·9 賦值運算符與賦值表達(dá)式?

一、賦值運算符與賦值表達(dá)式?

賦值符號 “=“就是賦值運算符,作用是將一個數(shù)據(jù)賦給一個變量或?qū)⒁粋€變量的值賦給另一個變量,由賦值運算符組成的表達(dá)式稱為賦值表達(dá)式。一般形式為:?

變量名 = 表達(dá)式?

在程序中可以多次給一個變量賦值,每賦一次值,與它相應(yīng)的存儲單元中的數(shù)據(jù)就被更新一次,內(nèi)存中當(dāng)前的數(shù)據(jù)就是最后一次所賦值的那個數(shù)據(jù)。?

例:a=12;  此表達(dá)式讀作“將10的值賦值給變量a”。?

說明:?

a、如果賦值號兩邊的運算對象類型不一致,系統(tǒng)會自動進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則:將賦值號右邊表達(dá)式的值的類型轉(zhuǎn)換成賦值號左邊變量的類型,?

例:int  y=3.5; 在變量y中最終存儲的是整數(shù)3。?

b、 可以將復(fù)制表達(dá)式的值再賦值給變量,形成連續(xù)賦值。?

例如:x=y=25 是一個連續(xù)賦值表達(dá)式,x=y=25 等價于x=(y=25),所以表達(dá)式x=y=25 最終的值為25 。?

?

二、復(fù)合的賦值運算符?

在賦值運算符之前加上其他運算符可以構(gòu)成復(fù)合賦值運算符。其中與算術(shù)運算有關(guān)的復(fù)合運算符是:+=,-=,*=,/=,%= 。?

兩個符號之間不可以有空格,復(fù)合賦值運算符的優(yōu)先級與賦值運算符的相同。表達(dá)式n+=1等價于n=n+1,作用是取變量n中的值增1再賦給變量n,其他復(fù)合的賦值運算符的運算規(guī)則依次類推。?

如求表達(dá)a+=a-=a*a 的值,其中a的初值為12 。?

步驟:?

(1)先進(jìn)行“a-=a*a“運算,相當(dāng)于a=a-a*a=12-144=-132 。?
(2)再進(jìn)行“a+=-132“運算,相當(dāng)于 a=a+(-132)=-132-132=-264 。?

?

?

   ·10  逗號運算符和逗號表達(dá)式?

在c語言中,逗號除了作為分隔符,還可以用作一種運算符----逗號運算符,用逗號運算符將幾個表達(dá)式連接起來,例如a=b+c,a=b*c等稱為逗號表達(dá)式。?

一般形式為:?

表達(dá)式1 ,表達(dá)式2 ,表達(dá)式3 , …,表達(dá)式n?

例:x=2,y=3,z=4?

逗號表達(dá)式具有從左至右的結(jié)合性,即先求解表達(dá)式1,然后依次求解表達(dá)式2,直到表達(dá)式n的值。表達(dá)式n的值就是整個逗號表達(dá)式的值。上述的逗號表達(dá)式的值就是表達(dá)式z=4的值4.需要注意的是,逗號運算符是所有運算符中級別最低的。?

例:有如下程序段:?

main()?
{?
int a=2,b=4,c=6,x,y;?
y=(x=a+b),(b+c);?
printf('y=%d,x=%d',y,x);?
}?

程序顯示結(jié)果為:y=6,x=6?

討論:將y=(x=a+b),(b+c);改為y=((x=a+b),b+c) 的程序結(jié)果??

?

  · 11 關(guān)系運算符和關(guān)系表達(dá)式?

一、   C語言中的邏輯值?

C語言中的邏輯值只有兩個:真(true)和假(flase)。用非零代表真,用零代表假。因此,對于任意一個表達(dá)式,如果它的值為零,就代表一個假值,如果它的值為非零,就代表一個真值。只要值不是零,不管是正數(shù),負(fù)數(shù),整數(shù),實數(shù),都代表一個真值。例如-5的邏輯值為真。?

?

二、   關(guān)系運算符及其優(yōu)先次序?

C語言提供了6種關(guān)系運算符,見表??


caicai

由兩個字符組成的運算符之間不可以加空格,關(guān)系運算符都是雙目運算符。?

(1)結(jié)合性:自左向右。?

(2)優(yōu)先次序:前4種關(guān)系運算符( <><=,>=,> )的優(yōu)先級別相同,后兩種 (==,!=)優(yōu)先級相同,且前4種優(yōu)先級高于后兩種;關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。?

?

三、   關(guān)系表達(dá)式?

由關(guān)系運算符連接而成的表達(dá)式稱為關(guān)系表達(dá)式。?

例如:a>b,(a=7)>(b=10)等都是合法的關(guān)系表達(dá)式。?

關(guān)系表達(dá)式的結(jié)果有兩個:0和1,。其中0表示假,1表示真。如果關(guān)系表達(dá)式成立,則值為真,如果關(guān)系表達(dá)式不成立,則值為假。?

例:變量a的值為5,b的值為6,那么關(guān)系表達(dá)式a>b的值為假,即為0.而關(guān)系表達(dá)式?

(a=13)>(b=10)的值為真,即為1。?

當(dāng)關(guān)系運算符兩邊值的類型不一致時,若一邊是整型,一邊是實型,系統(tǒng)將自動把整型數(shù)轉(zhuǎn)化為實型數(shù),然后再進(jìn)行比較。?

?

?

    ·12 邏輯運算符和邏輯表達(dá)式?

一、   邏輯運算符及其優(yōu)先級?

C語言提供了3種邏輯運算符,如下表。??


caicai

二、   邏輯表達(dá)式?

“&&”和“||”的運算對象有兩個,故它們都是雙目運算符,而!的運算對象只有一個,因此它是單目運算符。邏輯運算舉例如下:?

(1)a&&b: 當(dāng)&&兩邊都為“真”時,表達(dá)式a&&b的值才是真。?

值得注意的是:在數(shù)學(xué)中,關(guān)系式0?

(2)a||b: 當(dāng)||兩邊有一個為“真”時,表達(dá)式a||b的值就是真。?

(3)!a:   表示取反,如果a為真,則!A為假,反之亦然。例如!-5的值就為0.?

?

在C語言中,由&&或||組成的邏輯表達(dá)式,在某些特定情況下會產(chǎn)生“短路“現(xiàn)象。?

(1)x && y && z ,只有當(dāng)x為真(非0)時,才需要判別y的值;只有x和y都為真時,才需要去判別z的值;只要x為假就不必判別y和z,整個表達(dá)式的值為0??谠E:“一假必假”。?

例:(!5==1)&&(++i==0)  (!5==1)表達(dá)式的值為0,所以計算機運行中就跳過(++i==0)此表達(dá)式,(!5==1)&&(++i==0)表達(dá)式的值為0.?

(2)x||y||z ,只要x的值為真(非零),就不必判別y和z的值 ,整個表達(dá)式的值為1,只有x的值為假,才需要判別y的值,只有x和y的值同時為假才需要判別z的值,口訣:“一真必真”。?

   ·13 位運算?

一、   位運算符?

在計算機中,數(shù)據(jù)都是以二進(jìn)制數(shù)形式存放的,位運算就是指對存儲單元中二進(jìn)制位的運算。C語言提供6種位運算符。?


caicai

二、位運算?

位運算符 &  |~<  ="">>  ∧ 按優(yōu)先級從高到低排列的順序是:?

位運算符中求反運算“~“優(yōu)先級最高,而左移和右移相同,居于第二,接下來的順序是按位與 “&“、按位異或 “∧“和按位或 “|“。順序為~  <  ="">>  &  ∧  |  。?

例1左移運算符“<><><>

例如:?
a<>
指把a的各二進(jìn)位向左移動4位。如a=00000011(十進(jìn)制3),左移4位后為00110000(十進(jìn)制48)。?

?

例 2右移運算符“>>”是雙目運算符。其功能是把“>> ”左邊的運算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動的位數(shù)。?

例如:?
設(shè)  a=15,?
a>>2?
表示把000001111右移為00000011(十進(jìn)制3)。?

應(yīng)該說明的是,對于有符號數(shù),在右移時,符號位將隨同移動。當(dāng)為正數(shù)時,最高位補0,而為負(fù)數(shù)時,符號位為1,最高位是補0或是補1 取決于編譯系統(tǒng)的規(guī)定。?

?

例 3 設(shè)二進(jìn)制數(shù)a是00101101 ,若通過異或運算a∧b 使a的高4位取反,低4位不變,則二進(jìn)制數(shù)b是。?

解析:異或運算常用來使特定位翻轉(zhuǎn),只要使需翻轉(zhuǎn)的位與1進(jìn)行異或操作就可以了,因為原數(shù)中值為1的位與1進(jìn)行異或運算得0 ,原數(shù)中值為0的位與1進(jìn)行異或運算結(jié)果得1。而與0進(jìn)行異或的位將保持原值。異或運算還可用來交換兩個值,不用臨時變量。?

如 int a=3 , b=4;,想將a與b的值互換,可用如下語句實現(xiàn):?
a=a∧b;?

b=b∧a;??

a=a∧b;?

所以本題的答案為: 11110000 。?


聽說好人都點了顆星

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    在线视频三区日本精品| 久久99爱爱视频视频| 日本在线高清精品人妻| 国产一区欧美一区二区| 国产亚洲不卡一区二区| 久久国产精品熟女一区二区三区| 久久精品国产亚洲熟女| 日韩精品一级一区二区| 久久青青草原中文字幕| 国产偷拍精品在线视频| 婷婷色网视频在线播放| 人妻巨大乳一二三区麻豆| 男女午夜福利院在线观看| 亚洲永久一区二区三区在线| 国产亚洲二区精品美女久久| 婷婷激情四射在线观看视频| 最近日韩在线免费黄片| 中文字幕欧美视频二区| 亚洲高清亚洲欧美一区二区| 超薄丝袜足一区二区三区| 国产成人精品国产亚洲欧洲| 欧美91精品国产自产| 日韩在线欧美一区二区| 麻豆剧果冻传媒一二三区| 亚洲一区二区三区国产| 中文字幕人妻综合一区二区| 丝袜诱惑一区二区三区| 一区二区三区日韩经典| 免费性欧美重口味黄色| 中文字幕熟女人妻视频| 日韩高清一区二区三区四区 | 国产精品午夜福利在线观看| 中文字幕亚洲精品乱码加勒比| 麻豆91成人国产在线观看| 国产色第一区不卡高清| 91超精品碰国产在线观看| 亚洲综合色婷婷七月丁香| 国产一区一一一区麻豆| 好吊色欧美一区二区三区顽频 | 中文字幕精品一区二区年下载| 免费大片黄在线观看日本|