C語言基礎(chǔ)知識

? ?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 ?二進制:所有數(shù)字由0,1構(gòu)成,逢二進一亥宿,二進制數(shù)中不會出現(xiàn)2.卸勺。
例:110101
l ?八進制:以數(shù)字0(注意不是以字母O,o)開頭,所有數(shù)字由0~7構(gòu)成烫扼,逢八進一曙求,八進制數(shù)中不會出現(xiàn)8。
例:0112,0123,077等
l ?十進制:所有數(shù)字由0~9構(gòu)成映企,逢十進一悟狱,十進制數(shù)中不會出現(xiàn)10。
例:0,12堰氓,-15等
l ?十六進制:以0x或者0X(數(shù)字0加字母x)開頭,所有數(shù)字由0~9挤渐,A~F(或者a~f)構(gòu)成,逢十六進一(其中A双絮、B浴麻、C得问、D、E软免、F分別代表10宫纬、11、12膏萧、13漓骚、14、15)
例:0x4A ? 0X14c7等

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

(1)將十進制轉(zhuǎn)換二進制艘希、八進制和十六進制

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

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

(2)將二進制吩屹、八進制和十六進制轉(zhuǎn)換成十進制

乘積求和:將二進制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22拧抖。煤搜。。唧席。擦盾,然后將這些積求和。

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

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

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

(二)整型常量

整型常量有3種形式:十進制整型常量、八進制整型常量和十六進制整型常量掉弛。

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

書寫方式如下:

十進制整型常量:123 , 0 筒饰,-24 , 85L(長整型常量) 等
八進制整型常量:051 ,-026 壁晒,0773 等
十六進制整型常量: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ù)焕檬,也可以是八進制數(shù)、十六進制數(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位八進制數(shù)所代表的字符
\xhh ? ? ? ?1~2位十六進制數(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é)中詳細說明型型,此程序中所有出現(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ù)也能進行算術(shù)運算骚腥,此時相當(dāng)于對它們的ASCII碼進行運算。

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

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

char < int < float < double

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

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

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

( 類型 )(表達式);
例:(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滑沧、逗號運算符:用于把若干表達式組合成一個表達式(,)躬它。

4腾啥、關(guān)系運算符:用于比較運算。包括大于(>)冯吓、小于(<)倘待、等于(==)、 大于等于(>=)组贺、小于等于(<=)和不等于(!=)六種凸舵。

5、邏輯運算符:用于邏輯運算失尖。包括與(&&)啊奄、或(||)、非(!)三種掀潮。

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

7峻仇、位操作運算符:參與運算的量,按二進制位進行運算邑商。包括位與(&)摄咆、位或(|)、位非(~)人断、位異或(^)吭从、左移(<<)、右移(>>)六種恶迈。

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

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

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

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

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

一痒筒、 ? 基本的算術(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ù)表達式和運算符的優(yōu)先級與結(jié)合性

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

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

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

(2)在算術(shù)表達式中,對于不同優(yōu)先級的運算符誓酒,可按運算符的優(yōu)先級由高到低進行運算樟蠕,若表達式中運算符的優(yōu)先級相同,則按運算符的結(jié)合方向進行運算靠柑。

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

三、 ? 自增自減運算符

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

如:++i甸怕,--i (在使用i之前,先使i的值加1腮恩、減1)梢杭。
i++,i-- (在使用i之后秸滴,使i的值加1武契、減1)。

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

(2)++和--的結(jié)合方向是“自右向左“内颗,如 -i++ 钧排,i的左邊是負(fù)號運算符,右邊是自增運算符均澳,負(fù)號運算和自增運算都是 “自右向左“結(jié)合的恨溜,相當(dāng)于 -(i++)符衔。

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

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

caicai

例:有以下程序

#include ?"stdio.h"
main( ?)
{
int m=12,n=34项戴;
printf("%d ?%d ?",m++,++n)形帮;
/*輸出表達式m++和表達式++n的值*/
printf("%d ?%d ?",++m,n++);
/*輸出表達式++m和表達式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ū)分表達式的值和變量的值,表達式運算后仿耽,變量會自增自減運算合冀,表達式和變量變化如下:

caicai

? ? ??9 賦值運算符與賦值表達式

一、賦值運算符與賦值表達式

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

變量名 = 表達式

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

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

說明:

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

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

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

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

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

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

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

如求表達a+=a-=a*a 的值,其中a的初值為12 地回。

步驟:

(1)先進行“a-=a*a“運算,相當(dāng)于a=a-a*a=12-144=-132 俊鱼。
(2)再進行“a+=-132“運算刻像,相當(dāng)于 a=a+(-132)=-132-132=-264 。

? ??10 ?逗號運算符和逗號表達式

在c語言中并闲,逗號除了作為分隔符绎速,還可以用作一種運算符----逗號運算符,用逗號運算符將幾個表達式連接起來焙蚓,例如a=b+c,a=b*c等稱為逗號表達式纹冤。

一般形式為:

表達式1 ,表達式2 购公,表達式3 萌京, …,表達式n

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

逗號表達式具有從左至右的結(jié)合性宏浩,即先求解表達式1知残,然后依次求解表達式2,直到表達式n的值比庄。表達式n的值就是整個逗號表達式的值求妹。上述的逗號表達式的值就是表達式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)系表達式

一、 ? C語言中的邏輯值

C語言中的邏輯值只有兩個:真(true)和假(flase)神凑。用非零代表真净神,用零代表假。因此溉委,對于任意一個表達式鹃唯,如果它的值為零,就代表一個假值瓣喊,如果它的值為非零坡慌,就代表一個真值。只要值不是零藻三,不管是正數(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)系表達式

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

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

關(guān)系表達式的結(jié)果有兩個:0和1,。其中0表示假晋渺,1表示真镰绎。如果關(guān)系表達式成立,則值為真木西,如果關(guān)系表達式不成立畴栖,則值為假。

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

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

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

? ? ?12 邏輯運算符和邏輯表達式

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

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

caicai

二室奏、 ? 邏輯表達式

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

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

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

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

(3)!a: ? 表示取反念恍,如果a為真六剥,則!A為假,反之亦然峰伙。例如仗考!-5的值就為0.

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

(1)x && y && z ,只有當(dāng)x為真(非0)時顿膨,才需要判別y的值锅锨;只有x和y都為真時,才需要去判別z的值恋沃;只要x為假就不必判別y和z必搞,整個表達式的值為0∧矣剑口訣:“一假必假”恕洲。

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

(2)x||y||z ,只要x的值為真(非零)泌类,就不必判別y和z的值 ,整個表達式的值為1底燎,只有x的值為假刃榨,才需要判別y的值弹砚,只有x和y的值同時為假才需要判別z的值,口訣:“一真必真”枢希。

? ??13 位運算

一桌吃、 ? 位運算符

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

caicai

二呕屎、位運算

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

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

例1左移運算符“<<”是雙目運算符椭迎。其功能把“<< ”左邊的運算數(shù)的各二進位全部左移若干位,由“<<”右邊的數(shù)指定移動的位數(shù)田盈,高位丟棄畜号,低位補0。

例如:
a<<4
指把a的各二進位向左移動4位允瞧。如a=00000011(十進制3)简软,左移4位后為00110000(十進制48)。

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

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

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

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

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

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

b=b∧a;

a=a∧b;

所以本題的答案為: 11110000 脊凰。

聽說好人都點了顆星
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茂腥,隨后出現(xiàn)的幾起案子狸涌,更是在濱河造成了極大的恐慌,老刑警劉巖最岗,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帕胆,死亡現(xiàn)場離奇詭異,居然都是意外死亡般渡,警方通過查閱死者的電腦和手機懒豹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驯用,“玉大人脸秽,你說我怎么就攤上這事〕啃冢” “怎么了豹储?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淘这。 經(jīng)常有香客問我剥扣,道長,這世上最難降的妖魔是什么铝穷? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任钠怯,我火速辦了婚禮,結(jié)果婚禮上曙聂,老公的妹妹穿的比我還像新娘晦炊。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布断国。 她就那樣靜靜地躺著贤姆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稳衬。 梳的紋絲不亂的頭發(fā)上霞捡,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音薄疚,去河邊找鬼碧信。 笑死,一個胖子當(dāng)著我的面吹牛街夭,可吹牛的內(nèi)容都是我干的砰碴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼板丽,長吁一口氣:“原來是場噩夢啊……” “哼呈枉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起檐什,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤碴卧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乃正,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體住册,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年瓮具,在試婚紗的時候發(fā)現(xiàn)自己被綠了荧飞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡名党,死狀恐怖叹阔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情传睹,我是刑警寧澤耳幢,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站欧啤,受9級特大地震影響睛藻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邢隧,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一店印、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倒慧,春花似錦按摘、人聲如沸包券。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溅固。三九已至,卻和暖如春照激,著一層夾襖步出監(jiān)牢的瞬間发魄,已是汗流浹背盹牧。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工俩垃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汰寓。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓口柳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親有滑。 傳聞我的和親對象是個殘疾皇子跃闹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 這個是初始版本望艺,還會進行改正和補充,請大家認(rèn)真熟悉這些基礎(chǔ)知識肌访!如有錯誤找默,請在評論區(qū)留言@作者 總體上必須清楚的:...
    亦一銀河閱讀 2,492評論 3 40
  • #C語言基礎(chǔ)知識 一、簡單程序的的一般形式 #include//標(biāo)準(zhǔn)輸入輸出文件吼驶,讓當(dāng)前文件有文件的功能 //ma...
    空白Null閱讀 719評論 1 6
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型惩激。 運用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)蟹演; ...
    朱森閱讀 3,424評論 3 44
  • C語言基礎(chǔ) 編譯程序 gcc xx.c,他會默認(rèn)生成a.out的可執(zhí)行文件,在a.out所在目錄,執(zhí)行./a.ou...
    帥碧閱讀 622評論 1 3
  • 熱劇《我的前半生》播到31集后,我發(fā)現(xiàn)朋友圈里好多小伙伴都表示要果斷棄劇羞反。因為布朦,羅子君與賀涵在唐晶面前各懷鬼胎的模...
    離影疏落閱讀 1,975評論 43 24