C語言程序設(shè)計教程C語言基礎(chǔ)_第1頁
C語言程序設(shè)計教程C語言基礎(chǔ)_第2頁
C語言程序設(shè)計教程C語言基礎(chǔ)_第3頁
C語言程序設(shè)計教程C語言基礎(chǔ)_第4頁
C語言程序設(shè)計教程C語言基礎(chǔ)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

會計學(xué)1C語言程序設(shè)計教程C語言基礎(chǔ)2本章主要內(nèi)容本章介紹C語言的基礎(chǔ),包括:數(shù)據(jù)類型運算符和表達(dá)式均是程序設(shè)計的基本知識為什么討論這些知識?通常程序要對數(shù)據(jù)進(jìn)行操作處理:處理的對象是數(shù)據(jù)通過運算符和表達(dá)式進(jìn)行操作第1頁/共61頁3例如:【例2.1】計算圓的面積,半徑為5cm。

程序如下:main(){float

r,area;

r=5;

area=3.14*r*r;

printf("%f\n",

area);}運算結(jié)果是輸出圓的面積:78.500000程序中用到的數(shù)據(jù):r、area、5、3.14對數(shù)據(jù)進(jìn)行的運算:*、=例jc2_1第2頁/共61頁4分析:計算機(jī)操作處理時,要完成以下工作:在內(nèi)存中給半徑r和運算結(jié)果area

開辟存儲空間,存放它們的值。應(yīng)該留多大的地方來存放它們的值?數(shù)據(jù)

5和3.14與r

、area

不同,它們是在編寫程序時就給出確定的值,在運算過程中不會改變。這樣的數(shù)計算機(jī)怎么處理?對整數(shù)5

和小數(shù)3.14,計算機(jī)存放時是否有區(qū)別?涉及數(shù)據(jù)類型的基本知識第3頁/共61頁5C語言的數(shù)據(jù)類型C數(shù)據(jù)類型數(shù)組類型結(jié)構(gòu)體類型共用體類型枚舉類型整型字符型實型(浮點型)空類型單精度型雙精度型基本類型指針類型構(gòu)造類型本章討論基本類型數(shù)據(jù)第4頁/共61頁62.1.1整型數(shù)據(jù)1.整型數(shù)據(jù)的類型基本整型數(shù)據(jù)int,分配2Byte短整型數(shù)據(jù)shortint,分配2Byte長整型數(shù)據(jù)longint,分配4Byte整型數(shù)據(jù)均以二進(jìn)制補(bǔ)碼形式存儲問題:為什么要采用補(bǔ)碼?如何表示?第5頁/共61頁7計算機(jī)中正、負(fù)數(shù)的表示例如:109=(1101101)2要區(qū)別:+109和-109方法是:將符號也數(shù)碼化即: 正的符號+用

0表示 負(fù)的符號-用

1表示∴計算機(jī)中的數(shù)表示方法是:

符號位+二進(jìn)制數(shù)值(以8bit為例)

+109→+1101101→01101101

-109→-1101101→11101101第6頁/共61頁8問題:計算機(jī)計算復(fù)雜化例如計算:

(-19)+(+22)10010011+00010110解決的方法是:使用反碼或補(bǔ)碼的表示方法(按前述表示的編碼稱為原碼),即能將減法一律轉(zhuǎn)換為加法。需要判斷符號是否相同:如果相同,結(jié)果符號不變,并進(jìn)行絕對值相加如果不同,結(jié)果取絕對值大的數(shù)的符號,并進(jìn)行絕對值相減第7頁/共61頁9原碼、反碼和補(bǔ)碼正數(shù):原碼、反碼、補(bǔ)碼相同符號位為0,數(shù)值為對應(yīng)的二進(jìn)制數(shù)。+109[01101101]原=[01101101]反=[01101101]補(bǔ)負(fù)數(shù):原碼符號位為1,數(shù)值為絕對值的二進(jìn)制數(shù)。

-109 [11101101]原反碼符號位為1,數(shù)值為絕對值的二進(jìn)制數(shù)各位變反。

-109 [10010010]反

補(bǔ)碼符號位為1,數(shù)值為絕對值的二進(jìn)制數(shù)各位變反加1。-109 [10010011]補(bǔ)第8頁/共61頁102.有符號和無符號整型數(shù)據(jù)有符號的整型數(shù)據(jù)signedint無符號的整型數(shù)據(jù)unsignedint區(qū)別是將最高位看作符號位還是數(shù)據(jù)位例如:

1111111110101000作為有符號數(shù)使用時,最高為符號位為負(fù)數(shù),值是:-88(再求一次補(bǔ))作為無符號數(shù)使用時,最高為數(shù)據(jù)位為無符號的數(shù),值是:65448第9頁/共61頁11例如:main(){unsignedintm;m=65448;printf("\nm=%d\n",m);printf("m=%u\n",m);}例jc2_a輸出結(jié)果:m=-88m=65448按有符號數(shù)輸出按無符號數(shù)輸出第10頁/共61頁12整型數(shù)據(jù)的類型及規(guī)定方括號表示可選項int分配2Byte,long分配4Byte類型名稱類型符bit取值范圍整型(短整型)[signed]int[signed]short[int]16215~215-1(-32768~32767)無符號整型unsigned[int]160~216-1(0~65535)長整型[signed]long[int]32-231~231-1無符號長整型unsignedlong[int]320~232-1第11頁/共61頁132.1.2實型數(shù)據(jù)1.實型數(shù)據(jù)的類型

單精度實型數(shù)據(jù)float,分配4Byte雙精度實型數(shù)據(jù)double,分配8

Byte2.實型數(shù)據(jù)的存儲

單精度實型指數(shù)部分小數(shù)部分

小數(shù)的符號位指數(shù)的符號位第12頁/共61頁14實型數(shù)據(jù)的類型及規(guī)定C標(biāo)準(zhǔn)并未具體規(guī)定各種實型數(shù)據(jù)所占字節(jié)數(shù),也不規(guī)定具體小數(shù)和指數(shù)部分的位數(shù)。一般而言,小數(shù)部分位數(shù)多,數(shù)據(jù)表示的有效數(shù)字多,精度就高;而指數(shù)部分位數(shù)多,則表示的數(shù)據(jù)范圍更大。有效數(shù)字的意義?類型類型符Byte絕對值的范圍有效數(shù)字單精度型float410-37~10387~8

位雙精度型double810-307~1030815~16位例jC2_a第13頁/共61頁152.1.3字符型數(shù)據(jù)字符型數(shù)據(jù)char,分配1Byte

字符型數(shù)據(jù)是指字母、數(shù)字、各種符號等用ASCII值表示的字符例如'a'是一個char類型數(shù)據(jù),稱作字符常量,存儲:011000012.1.4空類型空類型void通常與指針或函數(shù)結(jié)合使用第14頁/共61頁162.2常量、變量與標(biāo)準(zhǔn)函數(shù)主要內(nèi)容:常量變量標(biāo)準(zhǔn)庫函數(shù)第15頁/共61頁172.2.1常量在運行程序的過程中值保持不變的量1.整型常量十進(jìn)制:0~9八進(jìn)制:0~7,以0開頭十六進(jìn)制:0~9,A~F/a~f,以0x或0X開頭例如:100-80+12301002401000730x380x100X100XFF0x0a第16頁/共61頁181.整型常量整型常量的類型:根據(jù)值大小默認(rèn)類型。整型常量后面加l或L,則認(rèn)為是longint型例如:123L、0L、432l、0x100l注意:十六進(jìn)制常量中可以使用大寫字母A~F,也可以使用小寫字母a~f。八進(jìn)制常量中不能出現(xiàn)數(shù)字8或9例如:018、0921非法第17頁/共61頁192.實型常量十進(jìn)制形式

1.01.+12.0-12.00.0指數(shù)形式

1e31.8e-3-123E-6-.1E-3等價于:1×1031.8×10-3

-123×10-6

-0.1×10-3指數(shù)只能是整數(shù),而尾數(shù)則可以是整數(shù)也可以是小數(shù),無論指數(shù)或尾數(shù)均不能省略例如:1e、E.5、E-3

非法實型常量的類型:默認(rèn)為double型,后面加F(或f),則強(qiáng)調(diào)表示該數(shù)是float類型例如:3.5f、1e2F

第18頁/共61頁203.字符型常量可視字符常量

單引號括起來的單個可視字符例如:'a'、'A'、'+'、'3'、''等

轉(zhuǎn)義字符常量單引號括起來的\與可視字符組合,例如:\0字符串結(jié)束標(biāo)志\n回車換行\(zhòng)t跳到下一個輸出位置\"雙引號字符\dddddd為1到3位八進(jìn)制數(shù)所代表的字符\xhhhh為1到2位十六進(jìn)制數(shù)所代表的字符第19頁/共61頁214.字符串常量用雙引號括起的一個字符序列例如:"ABC"、"123"、"a"、"\n\t""\nGoodmorning"字符串常量的長度:所包含的字符個數(shù)

字符串常量的存儲方式:

\nGoodmorning\0a\0所占存儲單元數(shù):串長度+1例如:字符串結(jié)束標(biāo)記第20頁/共61頁225.符號常量以標(biāo)識符來代表的常量事先編譯預(yù)處理命令define定義編譯時先由系統(tǒng)替換為它所代表的常量,再進(jìn)行編譯例如:

#defineLEN

2.5main(){floata,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf("a=%f,b=%f\n",a,b);}定義符號常量使用符號常量編譯前系統(tǒng)進(jìn)行替換第21頁/共61頁235.符號常量main(){floata,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf("a=%f,b=%f\n",a,b);}define是編譯預(yù)處理命令,必須以“#”開頭編譯預(yù)處理命令在第7章討論。替換為第22頁/共61頁242.2.2變量1.變量的有關(guān)概念在程序運行過程中,其值改變的數(shù)據(jù),稱為變量,變量用標(biāo)識符表示,稱為變量名。變量必須“先定義后使用”系統(tǒng)為變量分配存儲單元,存儲變量的值。編寫程序時通過變量名來存、取變量值。a510變量值為變量分配的存儲單元變量名例如:有變量a它的值是510第23頁/共61頁252.變量定義變量定義的一般格式:

數(shù)據(jù)類型說明符變量列表;例如:inti,j;

longk,m;floatx,y;charch1,ch2;必須使用合法的標(biāo)識符作變量名不能使用關(guān)鍵字為變量命名第24頁/共61頁263.變量的初始化:

允許在說明變量的時候?qū)ψ兞抠x初值。例如:inta=5,b=10+2;

doublex=23.568,y;charch1='a',ch2=66,ch3='\142';表示定義變量并對變量存儲單元賦值。錯誤的初始化:

inta=3+b,b=5;

floatm=n=23.16;

第25頁/共61頁272.2.3標(biāo)準(zhǔn)庫函數(shù)由C編譯系統(tǒng)定義的一種函數(shù),存放在系統(tǒng)函數(shù)庫中,用戶可以根據(jù)需要隨時調(diào)用常用函數(shù)如:printf、scanf、fabs、sqrt、sin、(常用數(shù)學(xué)函數(shù)參見教材

P30表2.5)函數(shù)調(diào)用形式:函數(shù)名([參數(shù)表])例如:putchar('a')sqrt(x)例jc2_3第26頁/共61頁282.3運算符和表達(dá)式主要內(nèi)容:算術(shù)運算符和算術(shù)表達(dá)式賦值運算符和賦值表達(dá)式關(guān)系運算符和關(guān)系表達(dá)式邏輯運算符和邏輯表達(dá)式位運算符和位運算表達(dá)式條件運算符和條件表達(dá)式逗號運算符和逗號表達(dá)式其他運算符及其運算第27頁/共61頁29運算符的有關(guān)概念作用:對運算對象完成規(guī)定的操作運算類型:按運算對象分:單目、雙目、三目按功能分:算術(shù)、賦值、關(guān)系、邏輯條件、逗號、位、其他第28頁/共61頁30運算符的優(yōu)先級和結(jié)合性優(yōu)先級指各種運算符號的運算優(yōu)先順序例如:算術(shù)運算優(yōu)先于關(guān)系運算算術(shù)運算中先*/后+-結(jié)合性指運算符號和運算對象的結(jié)合方向分為:從左向右(左結(jié)合)和從右向左(右結(jié)合)例如:算術(shù)運算符為左結(jié)合

a-b+4賦值運算符為右結(jié)合

a=b=5(C語言規(guī)定見教材P297附錄B)第29頁/共61頁31本章涉及的運算符+-*/%++--+-=+=-=*=/=%=&=|=^=>>=<<=><>=<===!=&&||!&|^~<<>>?:,&sizeof(數(shù)據(jù)類型標(biāo)識符)類型種類算術(shù)運算符賦值運算符關(guān)系運算符邏輯運算符位運算符條件運算符逗號運算符其他運算符第30頁/共61頁32表達(dá)式的有關(guān)概念什么是表達(dá)式由運算符將運算對象連接成的式子,它描述了一個具體的求值運算過程。計算表達(dá)式的值按照運算符的運算規(guī)則求值求值時注意運算符的優(yōu)先級和結(jié)合性表達(dá)式值的類型自動轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換第31頁/共61頁33例如:表達(dá)式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=a>b>c--a||++b&&c++max=a>b?a:ba=3,a+=3,a*a 1/(float)a+6第32頁/共61頁34算術(shù)運算算術(shù)運算符的優(yōu)先級

()+-++--

*/%

+-

同級同級同級

單目雙目

低沒有乘方運算符,要計算a3要寫作a*a*a的連乘,或用標(biāo)準(zhǔn)庫函數(shù)pow(a,3)“/”的運算對象可為各種類型數(shù)據(jù),但是當(dāng)進(jìn)行兩個整型數(shù)據(jù)相除時,運算結(jié)果也是整型數(shù)據(jù)“%”要求運算對象必須是整型數(shù)據(jù),功能是求兩數(shù)相除的余數(shù),余數(shù)的符號與被除數(shù)的符號相同。第33頁/共61頁35自增自減運算++--是單目運算符有前綴和后綴兩種形式

前綴形式:先自增(自減)再引用;后綴形式:先引用再自增(自減);功能:前綴形式++a

等價于

a=a+1

--

a

等價于

a=a–

1后綴形式a++

等價于a=a+1

a--

等價于a=a–

1表達(dá)式的值會不同第34頁/共61頁36例如:當(dāng)a=5時⑴++a表達(dá)式的值為6,且

a=6⑵

a++表達(dá)式的值為5,且

a=6⑶

b=++a

等價于

a=a+1;b=a表達(dá)式的值為6,且a=6,

b=6⑷b=a++等價于

b=a;a=a+1表達(dá)式的值為5,且a=6,

b=5

第35頁/共61頁37說明:++和--的運算對象只能是變量(或運算結(jié)果是變量的表達(dá)式),不能是常量(或運算結(jié)果是數(shù)值的表達(dá)式)。

例如:

5++、(a+2)++

不合法。具有右結(jié)合性,結(jié)合方向為從右到左。例如:

–a++

等價于-(a++)

如果有多個運算符連續(xù)出現(xiàn)時,C系統(tǒng)盡可能多的從左到右將字符組合成一個運算符例如:

i+++j

等價于(i++)+j

-i+++-j

等價于-(i++)+(-j)

第36頁/共61頁38main(){inta=5;printf("%d%d\n",a,a++);}說明(續(xù)):對函數(shù)參數(shù)的求值順序:

TurboC系統(tǒng)先計算最右邊的參數(shù)值,再依次計算左面的參數(shù)值?!纠?.5】有多個函數(shù)參數(shù)且為同一變量自增的運算處理。

輸出結(jié)果:65運行例2.5第37頁/共61頁39說明(續(xù)):【例2.6】有多個函數(shù)參數(shù)且為同一變量多次自增的運算處理。

main(){inta=5;printf("%d%d\n",a,(a++)+(a++));}輸出結(jié)果:711運行例2.6第38頁/共61頁40賦值運算賦值運算符(右結(jié)合)

=+=-=*=/=%=&=|=^=>>=<<=賦值表達(dá)式將表達(dá)式的值存入變量對應(yīng)的內(nèi)存單元中m=12b=(++a)-2m%=3+n等價于

m=m%(3+n)x*=(x=5)第39頁/共61頁41說明:賦值號左邊必須是變量,右邊可以是C語言任意合法的表達(dá)式例如:n=t+2<s合法

a+b=15

不合法賦值運算符僅優(yōu)先于“,”,且具有右結(jié)合性例如:

a=b=b*c>10等價于:a=(b=(

(b*c)>10)

)賦值號與數(shù)學(xué)中的等號含義不同例如:數(shù)學(xué)中a=b等價于b=aC語言中a=b不等價于b=a第40頁/共61頁42關(guān)系運算關(guān)系運算符(左結(jié)合)

>>=<<=

==!=較高較低關(guān)系表達(dá)式用關(guān)系運算符將運算對象連接成的式子例如:12<'C'+1(字符型數(shù)據(jù)比較ASCII值)a==b>=c等價于a==(b>=c)與(a==b)>=c不等價關(guān)系運算符優(yōu)先于賦值,低于算術(shù)第41頁/共61頁43說明:關(guān)系運算的結(jié)果應(yīng)該是邏輯值。C語言用數(shù)值用1表示邏輯真,0表示邏輯假例如:7>5的值是1,5>7的值是0

'a'>'b'的值是0,'a'<'b'的值是1即關(guān)系表達(dá)式的值:0或1實型數(shù)可進(jìn)行大于或小于比較,但通常不進(jìn)行==或!=的關(guān)系運算第42頁/共61頁44邏輯運算符邏輯運算符&&||!邏輯運算符的運算規(guī)則運算對象邏輯運算結(jié)果aba&&ba||b!a非0非0110非000100非001100001第43頁/共61頁45邏輯表達(dá)式邏輯表達(dá)式用邏輯運算符將運算對象連接成的式子例如:0&&'b'a&&b||c&&da||b-5||c/4!x+y>=z邏輯運算符的優(yōu)先級和結(jié)合性:!是單目運算符,右結(jié)合,高于算術(shù)&&和||是雙目運算符,左結(jié)合,高于賦值運算符,低于關(guān)系運算符第44頁/共61頁46邏輯運算規(guī)則從左到右依次進(jìn)行邏輯計算運算對象為非0表示邏輯真運算對象為0表示邏輯假邏輯運算的結(jié)果為0或1例如設(shè):a=15,b=0,c=-2a&&b&&c結(jié)果為0a||b||c結(jié)果為1(a+c)||b&&c結(jié)果為1第45頁/共61頁47邏輯運算規(guī)則(續(xù))運算按照從左至右的順序進(jìn)行,一旦能夠確定邏輯表達(dá)式的值,就立即結(jié)束運算——邏輯運算的短路性質(zhì)例如設(shè):a=1,b=0,c=-2a&&b&&c(a++)||++b&&--c為0,運算終止,表達(dá)式值為0為非0,運算終止,表達(dá)式值為1且a為2,b為0,c為-2(b,c保持原值)第46頁/共61頁48關(guān)系與邏輯運算符的應(yīng)用表示數(shù)學(xué)公式a>b>c判斷a,b,c三條線段能否組成一個三角形

a,b不同時為負(fù)

a+b>c&&a+c>b&&b+c>aa>=0||b>=0!(a<0&&b<0)(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b&&b>c第47頁/共61頁49位運算符~&^|<<>>位邏輯運算符移位運算符單目位運算符的運算對象只能是整型數(shù)據(jù)或字符型數(shù)據(jù),不能是實型數(shù)據(jù)運算對象一律按二進(jìn)制補(bǔ)碼參加運算,并按位進(jìn)行運算位運算的結(jié)果是一個整型數(shù)據(jù)低于單目、算術(shù)運算符,高于其他運算符低于單目、算術(shù)和關(guān)系運算符,高于其他運算符第48頁/共61頁50位邏輯運算符的運算規(guī)則假設(shè)ai和bi均是一個二進(jìn)制位(bit)

運算對象邏輯運算結(jié)果aibiai&biai|biai^bi?ai000001010111100110111100例如:假設(shè)a=10,b=010求a&b、a|b、a^b、?a第49頁/共61頁51程序如下:

main(){inta=10,b=010;printf("%d%d\n",a&b,a|b);printf("%d%d\n",a^b,~a);}輸出結(jié)果:8102-110000000000001010&00000000000010000000000000001000即:a&b的值是80000000000001010?

1111111111110101即:?a的值是-11運行jc2_b第50頁/共61頁52移位運算例如:a<<ba+8>>b-1等價于(a+8)>>(b-1)例如:假設(shè)a=10,b=2,求a<<b、a+8>>b-1

main(){inta=10,b=2;printf("%d%d\n",a<<b,a+8>>b-1);}輸出結(jié)果:409運行jc2_c請自行分析運行結(jié)果第51頁/共61頁53條件表達(dá)式運算條件運算符:?:條件表達(dá)式的一般形式表達(dá)式1?表達(dá)式2:表達(dá)式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C語言中唯一的三目運算符,要正確區(qū)分用?和:分隔的表達(dá)式涉及條件運算符的優(yōu)先級與結(jié)合性第52頁/共61頁54條件運算符優(yōu)先級條件運算符優(yōu)先級高于賦值、逗號運算符,低于其他運算符例如:⑴m<n?x:a+3⑵a++>=10&&b-->20?a:b⑶x=3+a>5?100:200等價于:(m<n)?(x):(a+3)等價于:(a++>=10&&b-->20)

?a:b等價于:x=

((3+a>5)

?100:200)第53頁/共61頁55條件運算符的結(jié)合性

條件運算符具有右結(jié)合性當(dāng)一個表達(dá)式中出現(xiàn)多個條件運算符時,應(yīng)該將位于最右邊的問號與離它最近的冒號配對,并按這一原則正確區(qū)分各條件運算符的運算對象。例如:w<x?x+w:x<y?x:y

與w<x?x+w:(x<y?x:y)等價

與(w<x?x+w:x<y)?x:y不等價第54頁/共61頁56逗號表達(dá)式運算逗號表達(dá)式的一般形式

表達(dá)式1,表達(dá)式2,……,表達(dá)式n逗號表達(dá)式的值從左向右,依次對表達(dá)式求值,最后得到表達(dá)式n

的值就是逗號表達(dá)式的值例如:⑴a=5,

a++,

a*3

表達(dá)式值為18,且a=6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論