1颠放、標識符
什么事標識符呢排惨?變量的名字就是標識符。不僅限于變量名碰凶,程序中各種元素的名字暮芭,都屬于標識符。例如符號常量名欲低、函數(shù)名辕宏、數(shù)組名、類型名等砾莱。關(guān)鍵字也叫保留字瑞筐。屬于關(guān)鍵字的詞已被系統(tǒng)“注冊”了,特殊用途腊瑟,我們在為程序中的各種元素命名時是堅決不能使用這些關(guān)鍵字的聚假。
C語言中的系統(tǒng)函數(shù)名如求正弦的函數(shù)名sin、求算術(shù)平方根的函數(shù)名sqrt闰非、用于輸出的函數(shù)名printf等膘格,不屬于關(guān)鍵字,稱為預(yù)定義標識符财松”窦可以用預(yù)定義標識符為變量命名纱控,語法上是可以的,但是我們應(yīng)盡量不要那樣做菜秦。如果為一個變量命名為sin,顯然是在制造混亂:sin究竟是指變量還是指系統(tǒng)函數(shù)呢甜害?
除關(guān)鍵字、預(yù)定義標識符的這些詞之外球昨,我們?yōu)槌绦蛟孛钠渌拿秩鏰尔店、b等,成用戶標識符褪尝。
用戶標識符的規(guī)則:只能由英文字母闹获、數(shù)字、下劃線三種符號組成河哑。字母區(qū)分大小寫。首字母不能為數(shù)字龟虎,可以為英文字母或下劃線璃谨。不能使用關(guān)鍵字。
2鲤妥、常量
直接寫在程序里的數(shù)據(jù)值佳吞,就是常量。例如a=10;10就是常量棉安。b=2+3;2底扳、3也是常量。而a贡耽、b不是常量是變量衷模。
常量的概念不止限于數(shù)字型,直接寫在程序中的文字型的數(shù)據(jù)值也是常量蒲赂,例如‘b’阱冶、“Hello”等。文字型常量要用引號硬起來滥嘴,有兩種類型木蹬,分別稱為字符常量和字符串常量。
還有一種常量是用符號代替的若皱,稱為符號常量镊叁。符號常量需用#define命令定義:#define ?PI ?3.14;表示定義PI是3.14的代替符號,PI是3.14的代號走触,PI就是3.14(不是變量PI的值是3.14)晦譬。3.14是常量,故PI也是常量饺汹。
在程序運行過程中這些值不會變化蛔添,故稱為常量。
3、變量
在程序中迎瞧,變量實際代表的是計算機內(nèi)存中的一塊存儲空間夸溶,存儲空間的名稱就是變量名,其中存儲的內(nèi)容就是變量的值凶硅。變量必須先定義然后才能使用缝裁。舉例:int a;是定義變量,它表示讓計算機先準備好變量a這個盒子足绅,實際是讓計算機在內(nèi)存中分配和劃定變量a的存儲空間捷绑。在程序中,我們可以隨時將新值保存在變量中氢妈。當新值保存在變量中時粹污,變量原有的值同時被覆蓋不復(fù)存在;因為一個變量在某一時刻只能保存一個值首量。
注意:定義變量后在為它賦值前壮吩,變量的值不是“空白”,而是隨機數(shù)加缘。
在定義時為變量賦初值也稱對變量的初始化鸭叙。舉例:int ?sum=0;int price=9,height=10;int ?size=num+4;size的值為4,可用表達式為變量賦初值拣宏。
在定義中不允許連續(xù)賦初值沈贝。舉例:int ?x=y=z=5;錯誤。而只能寫為:int x=5,y=5,z=5;
4勋乾、數(shù)據(jù)類型
整型數(shù)據(jù)
數(shù)值型數(shù)據(jù)分整數(shù)和實數(shù)宋下,整數(shù)是不帶有小數(shù)點的,而實數(shù)必須帶有小數(shù)點市俊。
(1)整型常量的表示
整型常量就是直接寫在程序里的整數(shù)杨凑,如語句a=10;10就是整型常量。這種直接寫出的整數(shù)都是十進制的摆昧,在c語言中還允許將整數(shù)寫為八進制或十六進制撩满。
寫為十進制:直接寫,與生活中的寫法一致绅你。
寫為八進制:在整數(shù)前加0伺帘。例如a=012;注意:生活中在整數(shù)前加0是沒有任何作用的,但在c語言中忌锯,整數(shù)前加0與不加0完全不同伪嫁,加了0就是八進制。例子中012是八進制的12偶垮。
寫為十六進制:在整數(shù)前加0x或0X张咳。a=0xA帝洪。x、A大小寫均可脚猾,如a=0Xa;a=0XA;
在C語言中不允許將數(shù)據(jù)寫為二進制葱峡。
整型數(shù)據(jù)如何在計算機中存儲:計算機的內(nèi)存只能存儲0或1,整數(shù)要被轉(zhuǎn)換為二進制存儲龙助,占2個或4個字節(jié)砰奕。
注意:整數(shù)在計算機中存儲,除要轉(zhuǎn)換為二進制外提鸟,還要轉(zhuǎn)換為補碼军援。將整數(shù)字節(jié)轉(zhuǎn)換為二進制的形式稱為原碼。正數(shù)的補碼和原碼相同称勋;負數(shù)的補碼為該數(shù)絕對值的二進制形式按位取反胸哥。(即1變?yōu)?,0變?yōu)?)后在加1.對于有符號數(shù),二進制的最高位(最左邊一位)為符號位赡鲜;負數(shù)為1正數(shù)為0.采用補碼可以將減法運算變作加法實現(xiàn)烘嘱。
《整數(shù)補碼
求給定數(shù)值的補碼分以下兩種情況:
正數(shù)
正整數(shù)的補碼是其二進制表示,與原碼相同[2]蝗蛙。
【例1】+9的補碼是00001001。(備注:這個+9的補碼是用8位2進制來表示的醉鳖,補碼表示方式很多捡硅,還有16位二進制補碼表示形式,以及32位二進制補碼表示形式,64位進制補碼表示形式等盗棵。每一種補碼表示形式都只能表示有限的數(shù)字壮韭。)
負數(shù)
求負整數(shù)的補碼,將其對應(yīng)正數(shù)二進制表示所有位取反(包括符號位纹因,0變1喷屋,1變0)后加1[2]。
同一個數(shù)字在不同的補碼表示形式中是不同的瞭恰。比如-15的補碼屯曹,在8位二進制中是11110001,然而在16位二進制補碼表示中惊畏,就是1111111111110001恶耽。以下都使用8位2進制來表示。
【例2】求-5的補碼颜启。
-5對應(yīng)正數(shù)5(00000101)→所有位取反(11111010)→加1(11111011)
所以-5的補碼是11111011偷俭。
【例3】數(shù)0的補碼表示是唯一的蟋定。
[+0]補=[+0]反=[+0]原=00000000
[ -0]補=11111111+1=00000000
轉(zhuǎn)化為原碼
已知一個數(shù)的補碼兄一,求原碼的操作其實就是對該補碼再求補碼:
⑴如果補碼的符號位為“0”重罪,表示是一個正數(shù),其原碼就是補碼矗愧。
⑵如果補碼的符號位為“1”,表示是一個負數(shù)蓬推,那么求給定的這個補碼的補碼就是要求的原碼码荔。
【例4】已知一個補碼為11111001,則原碼是10000111(-7)笙以。
因為符號位為“1”淌实,表示是一個負數(shù),所以該位不變猖腕,仍為“1”拆祈。
其余七位1111001取反后為0000110;
再加1倘感,所以是10000111放坏。》
整型變量的類型:int a;a=2.8;a將被賦值為2(無四舍五入)
基本型整型變量:整型變量是專門用于保存整數(shù)的變量老玛,且只能保存整數(shù)淤年,不能保存實數(shù)。由int 定義的變量稱為基本型的整型變量蜡豹。它的空間的大小由編譯系統(tǒng)決定麸粮。在vc++6.0中,占4字節(jié)镜廉;在其他某些編譯系統(tǒng)中弄诲,占2字節(jié)。整型變量的空間大小是預(yù)先由編譯系統(tǒng)規(guī)定的娇唯,與變量值無關(guān)齐遵。int ?a;無論a的值為1還是20000,在vc++6.0系統(tǒng)中均占4字節(jié)塔插。
其他類型的整型變量:無論向誰詢問梗摇,只要明確了是什么規(guī)格的包,則必然能得到確定的回答想许,例如問“旅行包多大伶授?”或“女式的包多大?”伸刃。在漢語中谎砾,“旅行”“女士的”是“包”的修飾語。在c語言中捧颅,也可為int添加修飾語景图,已明確指出整型變量的規(guī)格。int的修飾語有以下4個:short:表示變量為短整型碉哑,即確定占2個字節(jié)的整型變量挚币。long:表示變量為長整型亮蒋,即確定占4個字節(jié)的整型變量。signed:表示變量為有符號型妆毕,即可以保存負數(shù)的整型變量慎玖。unsigned:表示變量為無符號型,即可以保存正數(shù)和0笛粘,但不能保存負數(shù)的整型變量趁怔。
以上修飾語在定義整型變量時可選用0~多個,已定義不同規(guī)格的整型變量薪前;但short和long不能同時選用润努,signed和unsigned不能同時選用。當既不用short也不用long時示括,視為基本型铺浇,其空間大小由編譯系統(tǒng)決定;當既不用singed也不用unsigned時垛膝,視同signed,即有符號型鳍侣。舉例:signed short int a;如果使用了修飾詞,int可以省略signed short a;
占2字節(jié)的有符號短整型變量取值范圍為-32768~32767吼拥,無符號的就為0~65535倚聚,能保存的最大值比相應(yīng)有符號數(shù)擴大一倍;占4字節(jié)的整型變量也是如此(范圍最大分別是~+21億凿可、~+42億)秉沼。這是因為原來表示負數(shù)的空間在無符號變量中也用于表示正數(shù)了。
實型數(shù)據(jù)
實型也稱浮點型矿酵,就是帶有小數(shù)點的數(shù)值型數(shù)據(jù)。
(1)實型常量
實型常量也稱實數(shù)或浮點數(shù)矗积,在c語言中只能寫為十進制全肮,不能寫為其他進制。但十進制的實型常量又可寫為兩種形式:小數(shù)形式棘捣、指數(shù)形式辜腺。
小數(shù)形式:在程序中小數(shù)額寫法與生活中的寫法類似,例如:3.14159 ?0.158 ? 0.0 ? -18.0 ?12. ? ?.36 整數(shù)部分為0時0可以省略乍恐,如0.36可寫為.36评疗。小數(shù)部分末尾的0也可省略,如12.0可寫作12.茵烈。
注意:小數(shù)點是不能省略的百匆,對于無小數(shù)位的實數(shù)也必須有小數(shù)點。如實數(shù)12.0寫作12是不行的呜投,因為12是整數(shù)就不是實數(shù)了加匈。
指數(shù)形式:
以科學(xué)計數(shù)法表示的實數(shù)如2.1*10^5存璃,在C語言中用e(或E)表示“*10”,對于2.1*10^5,在程序中應(yīng)寫作2.1E5或2.1e5雕拼。舉例:-2.8e-2表示-2.8*10^-2纵东。
注意:e或E前后的內(nèi)容都不能省略。對E(或e)前的小數(shù)范圍沒有要求啥寇,但規(guī)定E(或e)后必須是整數(shù)不能是小數(shù)偎球。aen(或aEn)是一個整體,表示一個數(shù)辑甜,相當于英語中的一個單詞衰絮,中間是不能隨便加空格的。
(2)實型變量
如何定義實型變量栈戳?實型變量有兩種規(guī)格:一種為單精度實型岂傲,一種為雙精度實型。雙精度型的能表示的數(shù)值范圍相對更子檀、精度更高镊掖。
單精度型:單精度型的變量用關(guān)鍵字float定義,這種變量占4個字節(jié)褂痰,有效數(shù)字6位(有效數(shù)字是指從第一個不是0的數(shù)值起的數(shù)據(jù)位數(shù)亩进,不一定是6位小數(shù)),表示范圍+(-)10^38缩歪。舉例:float f=0.001234567;float f=0.00123456789;/*有效數(shù)字過多將被階段归薛,f實際值為0.001234568*/
雙精度:雙精度的變量用關(guān)鍵字double定義,這種變量占8個字節(jié)匪蝙,有效數(shù)字15位主籍,表示范圍+(-)10^308。
實型數(shù)據(jù)也是被轉(zhuǎn)換為二進制后存儲逛球,但首先要轉(zhuǎn)換為“小數(shù)*2^指數(shù)”的形式千元,然后將小數(shù)部分和指數(shù)部分分別轉(zhuǎn)換為二進制,在分別存儲小數(shù)部分和指數(shù)部分颤绕。這與整型數(shù)據(jù)的存儲方式截然不同幸海。
類型的轉(zhuǎn)換
在C語言中對數(shù)據(jù)類型的規(guī)定是很嚴格的,整型變量只能保存整數(shù)不能保存實數(shù)奥务;實型變量只能保存實數(shù)物独,不能保存整數(shù)。如果硬要將數(shù)據(jù)存入不同類型的變量氯葬,計算機會以變量的類型為準挡篓,自動將數(shù)據(jù)轉(zhuǎn)換為與變量一致的類型,然后再存入變量帚称。舉例:int a;a=2.8;則變量a中只會保存整數(shù)2瞻凤。double y;y=3;則變量y中保存的數(shù)據(jù)是雙精度實數(shù)3.0而不是整數(shù)3.
這種轉(zhuǎn)換是由計算機自動進行的憨攒,稱為制動類型轉(zhuǎn)換。
為了與變量的類型一致阀参,也可以為常量規(guī)定類型肝集。常量是什么類型呢?寫在程序中的整型常量都默認是有符號基本型即int型的蛛壳,實型常量默認是雙精度型即double型的杏瞻。若要改變常量的類型,可在常量后加字母后綴衙荐。字母后綴可以有:L或l捞挥。在整數(shù)后加L或l表示常量為長整型的,如0l忧吟、-125l砌函。若不寫l表示常量為基本型。在實數(shù)后加l或L表示常量為長雙精度型的(long double),如1.234567L溜族。
如果需要表示常量是短整型的讹俊,無相應(yīng)字母后綴,可用強制類型轉(zhuǎn)換如(short)5煌抒;
只能寫在整數(shù)常量之后表示常量為無符號型的仍劈,無符號即非負,不能為負數(shù):如0U(u)寡壮、6U(u)贩疙。不寫U或u則表示常量為有符號型的,可以為負數(shù)况既。
表示常量為單精度實型(float型)这溅,如8.224f為float型而不是double型的,125f也為float型而不是int型的棒仍。即有后綴f時芍躏,可不加小數(shù)點,也表示實數(shù)(單精度實數(shù))降狠。
在整數(shù)后可同時加L或U,如0LU庇楞、6LU等榜配,表示整數(shù)是無符號長整型的。
字符型數(shù)據(jù)
(1)字符常量:單個字符
每個字符常量占1個字節(jié)(8個二進制位)吕晌。
字符常量不僅限于字母字符如‘a(chǎn)‘,數(shù)字字符’4‘蛋褥,符號字符’、‘睛驳,’烙心!‘等膜廊。空格字符' '淫茵。單引號必須是英文單引號爪瓜,''連續(xù)單引號是錯誤的。
一個中文漢字占2個字節(jié)匙瘪,不能作為一個字符常量铆铆。一個漢字一般要存儲為unsigned short int型的數(shù)據(jù)。
人們把能錄入計算機的每個字符也都安排一個整數(shù)的數(shù)值編號丹喻,這種字符的編號稱為ascII碼薄货。ascII碼是整數(shù),可悲字節(jié)轉(zhuǎn)換為二進制碍论。要存儲一個字符谅猾,只要存儲這個字符ascII碼的二進制即可。例如:字符'A'的ascII碼為65鳍悠,要存儲字符'A'就存儲65的二進制税娜;
每類字符ascII碼的大小順序:控制字符(除127外)<空格<數(shù)字字符<大寫字母<小寫字母。
由于字符占1個字節(jié)(8比特)贼涩,因此ascII碼范圍是0~255(2^8-1)巧涧。
ascII碼在128~255之間的字符為擴展字符,可作為非英語國家本國語言字符的代碼遥倦,中文半個漢字的ascII碼就在128~255之間(1個漢字占2個字節(jié))谤绳。
注意:字符’a‘的ascII碼是97,在內(nèi)存中存為97的二進制袒哥,那么整數(shù)97也存為97的二進制缩筛。如果在計算機中發(fā)現(xiàn)存儲了一個97的二進制,是無法區(qū)分是字符'a'堡称,還是整數(shù)97的瞎抛,于是在計算機中就給出了這樣一種規(guī)則——整數(shù)和字符是混用的。例如:字符型量可與整型量做加減乘除的運算却紧,甚至可以和整數(shù)比較大小桐臊。整數(shù)和字符的混用并不難,只要把字符型量替換為對應(yīng)的ascII碼即可晓殊。舉例:
'C'+1的值為'D'断凶,或值為68。
'D'-'A'的值為3巫俺,看做68-65认烁。
'7'+'1'的值為55+49=104,或值為字符'h',不是'8'。
'1'<'A'看做49<65,或按照數(shù)字字符的ascII碼小于大寫字母的規(guī)則判斷却嗡。
整數(shù)和字符占用的字節(jié)數(shù)是不同的舶沛。一個整數(shù)一般占4個字節(jié)(在vc++6.0中),而一個字符占1個字節(jié)窗价。將整數(shù)看做字符時如庭,4個字節(jié)中只是用最右端1個字節(jié),而舍棄其他3個字節(jié)舌镶。將字符看做整數(shù)時柱彻,會先在它ascII的二進制數(shù)之前(左邊、高位)補3個8比特都為0的字節(jié)湊足“4”字節(jié)餐胀。由于ascII 碼的范圍在0~255哟楷,一般情況下與之混用的整數(shù)也不超過0~255.
注意:大寫字母的ascII碼比對應(yīng)小寫字母的小32,故大寫字母字符+32=對應(yīng)小寫字母字符
小寫字母字符-32=對應(yīng)大寫字母字符
轉(zhuǎn)義字符:
轉(zhuǎn)義字符仍表示一個字符否灾,\是與后面內(nèi)容作為一個整體的卖擅。
有特殊含義的字符如果想表示它本身,都必須用轉(zhuǎn)義的形式墨技,不然就分不清是在表示特殊含義還是表示它本身惩阶。有特殊含義的字符主要有三個:斜杠(\)、單引號扣汪、雙引號断楷。要表示這3個字符,必須用\的形式崭别,分別寫作:'\\','\'','\"'冬筒。
注意:
'\1~3位的八進制數(shù)':含義:表示一個字符,這個字符的ascII碼的八進制為\后面的數(shù)茅主,八進制數(shù)不必以0開頭舞痰,但最多3位。
'\x1~2位的十六進制數(shù)':含義:表示一個字符诀姚,這個字符的ascII碼的十六進制為\x后面的數(shù)响牛。x必須小寫,十六進制數(shù)不要在寫前綴0x赫段,最多2位呀打。
使用轉(zhuǎn)義字符,還可以通過字符的ascII碼糯笙,把任意一個字符表示出來贬丛。'x41'、'\101'炬丸、'A'等價,都表示字符'A'。課件通過轉(zhuǎn)義字符稠炬,對同一個字符可有多種表示方法焕阿。
轉(zhuǎn)義字符一定要寫在引號之內(nèi),因為它仍屬于字符常量首启。
(2)字符變量
用關(guān)鍵字char定義字符型變量暮屡,例如:char ?c;c='A';/*也可寫作:c=65*/
一個字符型變量只能保存一個字符毅桃。讓字符型變量保存整數(shù)或參與整數(shù)運算也是可以的褒纲。因為字符和整數(shù)是混用的。由于字符型變量也可保存整數(shù)钥飞,因此字符型變量也有有符號和無符號的區(qū)別莺掠,用signed char(或省略 signed)定義的是有符號的字符型變量,可保存-128~127范圍的整數(shù)读宙;用unsigned char 定義的是無符號的字符型變量彻秆,可保存0~255范圍的整數(shù)。但無論如何均占1字節(jié)结闸。
字符串型常量:
字符串包含多個字符唇兑,每個字符占一個字節(jié)存儲,存儲的是字符的ascII碼的二進制桦锄。需要注意的是扎附,字符串在所有字符的最后都必須再多占1個字節(jié)存字符’\0‘。
用printf函數(shù)可以直接輸出字符串常量结耀。舉例:printf("nihao!");printf("\101");/*將在屏幕輸出A留夜,即輸出僅包含一個字符A的字符串*/