版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第2章 基本數(shù)據(jù)類型和運算符及表達式 第2頁主要內(nèi)容常量與變量整型數(shù)據(jù)實型數(shù)據(jù)字符型數(shù)據(jù)運算符和表達式數(shù)據(jù)類型的轉(zhuǎn)換程序案例小結(jié)第3頁2-1 常量與變量常量和符號常量變量第4頁常量所謂常量,是指在程序運行過程中其值保持不變的量。如程序中的具體數(shù)字、字符等。常量被區(qū)分為不同的類型。第5頁符號常量用一個標(biāo)識符代表一個常量,稱為符號常量,即標(biāo)識符形式的常量。 第6頁2-1-2 變量變量的概念變量的定義變量的初始化第7頁變量的概念C語言中的變量是指在一個程序運行過程中,其值能被改變的量。一個變量應(yīng)該有一個名字作為標(biāo)識,變量名的命名規(guī)則也就是相關(guān)標(biāo)識符的命名規(guī)則。 第8頁變量的定義在C語言中,所有變量必
2、須在使用之前給予說明。也就是“先定義,后使用”,說明主要是指出變量的類型。變量定義的一般格式為: 數(shù)據(jù)類型標(biāo)識符 變量名1,變量名2,變量名n; 第9頁變量的存儲第10頁變量的初始化 在定義變量時同時初始化變量int a=8;/*指定a為整型變量,初值為8*/float f=8.24; /*指定f為實型變量,初值為8.24*/char c=a; /*指定c為字符型變量,初值為a*/給被定義變量的部分賦初值 int a,b,c=-6;它表示指定a、b、c均為整型變量,而只對c進行初始化,且c的初值為-6。第11頁變量的初始化 對幾個變量賦給同一個初值若對幾個變量賦同一個初值,不能寫成: int
3、a=b=c=6;而應(yīng)寫成: int a=6,b=6,c=6;初始化不是在編譯階段完成的,而是在程序運行時執(zhí)行本函數(shù)時賦給初值的,相當(dāng)于有一個賦值語句。第12頁2-2 整型數(shù)據(jù)整型常量整型變量第13頁2-2-1 整型常量十進制的整型常量:十進制數(shù)允許出現(xiàn)的數(shù)字是0-9共10個阿拉伯?dāng)?shù)字,并以非0數(shù)字開頭。如456、-789、0等。八進制的整型常量:以0開頭的整型常量是八進制整型常量。十六進制的整型常量:以0 x開頭的整型常量是十六進制整型常量。第14頁2-2-2 整型變量整型變量的分類整型數(shù)據(jù)在內(nèi)存中的存放形式整型變量的定義整型數(shù)據(jù)的溢出第15頁整型變量的分類基本整型,以int表示。短整型,以s
4、hort int表示,或以short表示。長整型,以long int表示,或以long表示。第16頁整型變量的表示方法第17頁C語言整型變量數(shù)值的表示范圍 第18頁整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中是以二進制形式存放的。如果定義了一個整型變量i,系統(tǒng)就給變量i分配相應(yīng)的存儲單元。 第19頁整型變量的定義定義變量一般要在程序塊的首部進行,以免在編譯中出現(xiàn)變量未定義的錯誤。變量定義的位置決定了被定義變量的作用域,這一概念將在以后介紹。描述數(shù)據(jù)類型的關(guān)鍵字與被定義的變量之間至少要有一個以上的空格隔開,這樣做的目的一是便于閱讀程序,二是便于編譯系統(tǒng)識別。多個變量是同一數(shù)據(jù)類型時,可以用一個數(shù)據(jù)類
5、型的關(guān)鍵字進行定義,但必須注意,變量間要用逗號隔開,結(jié)尾要用分號結(jié)束。變量可以以任意順序進行定義,不必與它們在代碼塊中出現(xiàn)的順序相對應(yīng)。在定義short int型、long int 型和unsigned int 型變量時,可以只用short,long和unsigned進行定義。第20頁整型變量的定義一個整型常量,其值在-32 76832 767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和short int型變量。一個整型常量,其值若超過了上述范圍,在-2 147 483 6482 147 483 647范圍之內(nèi),則認(rèn)為它是long int 型,可以將它賦值給一個long int 型變量。如
6、果C語言版本(如Turbo C)確定short int 與int 型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與int 型相同。因此,一個int型的常量也同時是一個short int 型常量,可以賦值給int 型或short int 型變量。常量中無unsigned類型。但一個非負(fù)值的整型常量可以賦值給unsigned型的整型變量,只要它的范圍不超過變量數(shù)值的表示范圍即可。在一個整型常量后面加一個字母l 或L,則認(rèn)為是long int 型常量。第21頁整型數(shù)據(jù)的溢出 第22頁2-3 實型數(shù)據(jù)實型常量實型變量第23頁2-3-1 實型常量實型常量的形式實型常量的類型第24頁實型常量的形式十進制數(shù)形
7、式 由數(shù)字09和小數(shù)點組成(注意,必須有小數(shù)點)。如3.14159、0.123、.321、21.0、0.0等。 注意:在用十進制數(shù)書寫實型常量時,必須包含小數(shù)點,小數(shù)點的兩邊不一定要求都有數(shù)字,例如,21.0可以寫成21.;而0.123可以寫成.123。第25頁實型常量的形式指數(shù)形式 實型常量的指數(shù)形式類似于數(shù)學(xué)中的指數(shù)表示法,就是把其10的多少次冪中的10用E(e)代替。一般格式為: 尾數(shù)E(e)整數(shù)指數(shù) 如5.11027,7.21023。在C語言程序中表示為:5.1e-27,7.2e23或7.2e+23。 注意:在用指數(shù)形式書寫實型常量時,e(或E)的前面和后面必須有數(shù)字,且e后面的指數(shù)必
8、須為整數(shù),而尾數(shù)可以是整數(shù)也可以是小數(shù)。例如,.0e0、1E0、0e5合法,而e3、2.1e3.5、.e3、e等都不是合法的指數(shù)形式。第26頁實型常量的類型許多編譯系統(tǒng)將實型常量作為雙精度來處理。例如,已定義一個實型變量f,有如下語句:f=3.86435*6620.87 系統(tǒng)將3.86435和6620.87按雙精度數(shù)據(jù)存儲(占64位)和運算,得到一個雙精度的乘積,然后取前16位賦給實型變量f。這樣做可以保證計算結(jié)果更精確,但是運算速度降低了。若在數(shù)的后面加字母f或F(如1.65f、654.87F),這樣編譯系統(tǒng)就會按單精度(32位)處理。第27頁實型常量的類型一個實型常量可以賦給一個float
9、型、double型或long double型變量。根據(jù)變量的類型截取實型常量中相應(yīng)的有效位數(shù)字。 第28頁2-3-2 實型變量實型變量的分類實型變量的定義實型數(shù)據(jù)在內(nèi)存中的存放形式實型數(shù)據(jù)的誤差第29頁實型變量的分類實型變量分為單精度(float型)、雙精度(double型)和長雙精度(long double型)3類。第30頁 實型變量第31頁實型變量的定義 使用單精度型變量之前,必須在程序塊的首部對其進行定義。定義單精度型變量的關(guān)鍵字是float。 定義i為長雙精度實數(shù)。C編譯系統(tǒng)將為其分配8個字節(jié)(128bit)的存儲空間。第32頁實型數(shù)據(jù)在內(nèi)存中的存放形式 第33頁實型數(shù)據(jù)在內(nèi)存中的存放
10、形式 第34頁實型數(shù)據(jù)的誤差 由于實型變量是用有限的存儲單元存儲的,因此,能提供的有效數(shù)字總是有限的,在有效位以外的數(shù)字將被舍去。由此可能會產(chǎn)生一些誤差。 第35頁2-4 字符型數(shù)據(jù)字符常量轉(zhuǎn)義序列字符串常量符號常量字符型變量字符數(shù)據(jù)在內(nèi)存中的存放形式及其使用方法第36頁2-4-1 字符常量C語言中字符型常量是由一對單引號括起來的單個字符構(gòu)成。例如:x,y,7,%,;等都是有效的字符型常量。第37頁2-4-2 轉(zhuǎn)義序列除了以上介紹的字符常量之外,C語言還允許用一種特殊形式的字符常量,就是以一個“”開頭的字符序列。 第38頁轉(zhuǎn)義序列 第39頁2-4-3 字符串常量C語言中除了允許使用字符型常量外
11、,還允許使用字符串常量。字符串常量是用一對雙引號括起來的字符序列。第40頁2-4-4 符號常量C語言中,常量可以用符號代替,代替常量的符號稱之為符號常量。為了便于與一般標(biāo)識符、變量名相區(qū)別,符號常量一般用大寫英文字母序列構(gòu)成,符號常量在使用之前必須預(yù)先進行定義。其定義的一般格式是: #define 符號常量名 常量第41頁2-4-4 符號常量使用符號常量增強了程序的可讀性。使程序易于修改。第42頁2-4-5 字符型變量字符型變量是用來存放字符常量的,在一個字符變量中只能放一個字符,而不能存放一個字符串(包括若干字符)。字符型變量和整型變量一樣也需要先定義,其定義應(yīng)該在程序塊的首部,其關(guān)鍵字是“
12、char”。字符型變量的定義形式如下: char c1,c2;或char c1; char c2;第43頁2-4-6 字符數(shù)據(jù)在內(nèi)存中的存放形式及其使用方法字符常量在內(nèi)存中的存放形式及使用字符串常量在內(nèi)存中的存放形式第44頁字符常量在內(nèi)存中的存放形式及使用 將一個字符常量放到一個字符型變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。第45頁字符常量在內(nèi)存中的存放形式第46頁字符串常量在內(nèi)存中的存放形式字符串常量在內(nèi)存中存儲時,系統(tǒng)自動在該字符串的末尾加一個“字符串結(jié)束標(biāo)志”,這個結(jié)束標(biāo)志就是0(ASCII碼值為0的字符),也用NULL表示。它
13、是一字節(jié)(8bit)的代碼,因此,長度為n個字符的字符串常量,在內(nèi)存中要占用n+1個字節(jié)的存儲空間。 第47頁2-5 運算符和表達式 運算符的分類運算符的優(yōu)先級與結(jié)合性算術(shù)運算符和算術(shù)表達式增1、減1運算符及表達式賦值運算符和賦值表達式關(guān)系運算符和關(guān)系表達式邏輯運算符和邏輯表達式逗號運算符和逗號表達式sizeof運算符第48頁2-5-1 運算符的分類 圓括號運算符:( )。算術(shù)運算符:+、-、*、%。增1、減1運算符:+、-。賦值運算符:=及其擴展賦值運算符。關(guān)系運算符:、=、=、=、!=。邏輯運算符:&、!。逗號運算符:,。求字節(jié)數(shù)運算符:sizeof。第49頁2-5-1 運算符的分類 強制
14、類型轉(zhuǎn)換運算符:(類型)。條件運算符:?、:。下標(biāo)運算符: 。指針運算符:*、&。分量運算符:、。位運算符:、|、。第50頁2-5-2 運算符的優(yōu)先級與結(jié)合性運算符的優(yōu)先級運算符的結(jié)合性第51頁運算符的優(yōu)先級 所謂運算符的優(yōu)先級就是在一個表達式中運算符所具有的運算優(yōu)先次序。優(yōu)先級數(shù)字越大,表示優(yōu)先級越高,越優(yōu)先被執(zhí)行。在C語言中,運算符的優(yōu)先順序共分15個等級,最低為1,最高為15。處在同一級別的運算符,它們的優(yōu)先級相同。第52頁運算符的結(jié)合性所謂運算符的結(jié)合性就是同一優(yōu)先級的運算符的結(jié)合方向。自左至右的結(jié)合方向,稱為“左結(jié)合性”;反之稱為“右結(jié)合性”。除單目運算符、賦值運算符和條件運算符是“
15、右結(jié)合性”,即第14、3、2級。其他運算符都是“左結(jié)合性”。第53頁2-5-3 算術(shù)運算符和算術(shù)表達式算術(shù)運算符算術(shù)表達式算數(shù)運算符的優(yōu)先級、結(jié)合性第54頁算術(shù)運算符C語言有如下5個算術(shù)運算符。+:加法運算符,或正值運算符,如1+4,+8。-:減法運算符,或負(fù)值運算符,如5-2,-9。*:乘法運算符,如2*6。/:除法運算符,如7/4。%:模運算符,或稱求余運算符,如5%3。第55頁算術(shù)運算符兩個整數(shù)相除的結(jié)果為整數(shù),如5/3的結(jié)果值為1,舍去小數(shù)部分。但是,如果除數(shù)或被除數(shù)中有一個為負(fù)值,則舍入的方向是不固定的。模運算是取整數(shù)除法的余數(shù)。第56頁算術(shù)表達式算術(shù)運算符和操作數(shù)結(jié)合構(gòu)成算術(shù)表達式
16、。操作數(shù)包括常量、變量、函數(shù)等。第57頁算數(shù)運算符的優(yōu)先級、結(jié)合性算術(shù)運算符中的“*、/、%”運算符指定優(yōu)先級是第13級,它們優(yōu)先于優(yōu)先級小于13級的各種運算符,但它們低于優(yōu)先級為第15級和第14級的運算符。而運算符+、-的優(yōu)先級是第12級。也就是說在一個表達式中有加、減、乘和除運算時要先進行乘、除運算,而后進行加、減運算。第58頁2-5-4 增1、減1運算符及表達式增1、減1運算符增1、減1表達式第59頁增1、減1運算符C語言中除了基本運算符外,還包括兩個特殊的算術(shù)運算符:增1運算符“+”,減1運算符“-”。表達形式有4種:+操作數(shù)操作數(shù)+-操作數(shù)操作數(shù)-第60頁增1、減1表達式 由增1、減
17、1運算符和變量構(gòu)成的表達式是增1、減1表達式。使用增1、減1操作時需注意:增1、減1運算的操作對象只能是變量,而不允許是常量或表達式、函數(shù)調(diào)用等。增1、減1運算符的操作數(shù)通常是整型或字符型,因為上述類型的數(shù)據(jù)操作后其值是確定的;而實型數(shù)操作前后并不能確保其差的絕對值是1。增1、減1操作又分前置和后置操作兩類,它們有質(zhì)的區(qū)別。第61頁增1、減1表達式 增1、減1運算是除了第15級以外優(yōu)先級最高的運算。但是后置操作則要注意:必然先引用其值參加運算,再做后置操作。注意增1、減1操作的副作用。增1、減1運算一般用于如下兩種場合:計數(shù)。最常用的場合是修改循環(huán)控制變量,因為n+不論是從書寫的角度還是從閱讀
18、的角度都比n=n+1來得簡捷方便;且生成的目標(biāo)碼較之n=n+1短。指針增1、減1操作。在增1或減1表達式不是其他表達式的一部分時,其前置操作和后置操作的效果是一樣的。第62頁2-5-5 賦值運算符和賦值表達式賦值運算符復(fù)合的賦值運算符賦值表達式第63頁賦值運算符 賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。例如:a=10; /*把常量10賦給變量a*/b=2; /*把常量2賦給變量b*/x=a/b; /*將表達式a/b的值賦給x*/如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進行類型轉(zhuǎn)換。第64頁復(fù)合的賦值運算符在賦值符“=”之前加上其他運算符,可以構(gòu)
19、成復(fù)合的運算符。凡是二目運算符,都可以與賦值符一起組合成復(fù)合賦值符。C語言規(guī)定可以使用10種復(fù)合賦值運算符。它們是:+= = *= /= %= &= = |=第65頁復(fù)合的賦值運算符C語言中采用這種復(fù)合運算符,一是為了簡化程序,使程序精煉;二是為了提高編譯效率,下面是復(fù)合賦值運算符的例子:a+=6等價于a=a+6。 a-=5等價于a=a-5。x*=y+6等價于x=x*(y+6)。 x/=6等價于x=x/6。x%=4等價于x=x%4。第66頁賦值表達式定義 由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。其一般形式為: 變量=表達式賦值表達式可以嵌套,并可以放在任何可以放置表
20、達式的地方。例如: a=(b=5)賦值表達式也可以包含復(fù)合的賦值運算符 其一般形式為: 變量 雙目運算符=表達式第67頁賦值表達式先進行“x*=x-2”的計算,此式子相當(dāng)于x=x*(x-2),因為賦值運算符的優(yōu)先級別最低,所以根據(jù)運算規(guī)則,將x=5代入此式,即得:x=x*(x2)x=5*(52)x=15再計算x+=x*=x-2,此時即是計算x+=xx=x+xx=15+15x=30。最后計算整個式子的值:x+=x+=x*=x-2x+=x+=xx+=xx=x+xx=30+30 x=60該賦值表達式的值是60,x的值為60。第68頁2-5-6 關(guān)系運算符和關(guān)系表達式關(guān)系運算符關(guān)系表達式第69頁關(guān)系運
21、算符所謂“關(guān)系運算符”實際上就是“比較運算”,即將兩個數(shù)據(jù)進行比較,判斷兩個數(shù)據(jù)是否符合制定的條件。C語言提供了6種關(guān)系運算符。說明:關(guān)系運算符 、=的優(yōu)先級別相同,關(guān)系運算符=、!=的優(yōu)先級別相同,前面4種高于后面兩種。關(guān)系運算符是雙目運算符,結(jié)合性方向都是從左向右,即左結(jié)合性。關(guān)系運算符優(yōu)先級低于算術(shù)運算符,但它們高于賦值運算符。第70頁關(guān)系運算符第71頁關(guān)系表達式關(guān)系表達式的概念 關(guān)系表達式是指,用關(guān)系運算符將兩個表達式連接起來進行關(guān)系運算的式子。其一般形式為: 表達式1 關(guān)系運算符 表達式2 關(guān)系運算符兩邊的運算對象可以是算術(shù)表達式、關(guān)系表達式、邏輯表達式、賦值表達式、字符表達式等任意
22、合法的表達式。關(guān)系表達式的值邏輯值(“真”或“假”) 由于C語言沒有邏輯型數(shù)據(jù),所以用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。因為關(guān)系表達式的值為“1”或“0”,所以可參與其他種類的運算,如算術(shù)運算、邏輯運算等。關(guān)系表達式的求值過程 首先計算關(guān)系運算符兩邊的表達式的值,然后比較這兩個值的大小。第72頁2-5-7 邏輯運算符和邏輯表達式邏輯運算符邏輯表達式第73頁邏輯運算符C語言提供了3種邏輯運算符,分別是:&:邏輯與:邏輯或!:邏輯非其中,&和運算符是雙目運算符,如(x=1)&(x9)和(x5)。!運算符是單目運算符,應(yīng)該出現(xiàn)在運算對象的左邊,如!(ab)。邏輯運算符結(jié)合方向都是
23、從左向右,即左結(jié)合性。邏輯運算符的運算規(guī)則。第74頁邏輯運算符邏輯運算就是將關(guān)系表達式用邏輯運算符連接起來,并對其求值的一個運算過程。a&b:若a、b同時為“真”,則a&b為“真”,否則a&b為“假”。ab:若a、b同時為“假”,則ab為“假”,否則ab為“真”。!a:若a為真,則!a為“假”;若a為“假”,則!a為“真”。第75頁邏輯運算符邏輯運算符的優(yōu)先級邏輯運算符的優(yōu)先級順序是:!(邏輯非)級別最高,&(邏輯與)次之,(邏輯或)最低。邏輯運算與算術(shù)運算、關(guān)系運算和賦值運算之間從高到低的運算順序是:!(邏輯非)、算術(shù)運算、關(guān)系運算、&(邏輯與)、(邏輯或)、賦值運算。根據(jù)這個優(yōu)先級關(guān)系,下
24、列表達式可以簡化為:(ab)&(xy) 可寫成 ab&xy (a=b)(x=y) 可寫成 a=bx=y (!a)(ab) 可寫成 !aab (a+b)& (x%y) 可寫成 a+b&x%y 第76頁邏輯運算符的運算規(guī)則第77頁邏輯表達式 用邏輯運算符將算術(shù)表達式、關(guān)系表達式或邏輯量連接起來的式子就是邏輯表達式。C語言用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。但在判斷一個數(shù)據(jù)是“真”或“假”時,卻以0和非0為根據(jù):如果為0,則判定為“邏輯假”;如果為非0,則判定為“邏輯真”。 第78頁2-5-8 逗號運算符和逗號表達式逗號運算符C語言提供一種特殊的運算符,即逗號“,”運算符。逗號運
25、算符又稱為“順序求值運算符”,其優(yōu)先級為1,即最低優(yōu)先級;結(jié)合方向是從左至右。操作數(shù)的類型不受限制。此運算符不進行算術(shù)轉(zhuǎn)換。2逗號表達式用逗號表達式連接的表達式稱為逗號表達式。逗號表達式的一般形式為:表達式1,表達式2,表達式n第79頁2-5-9 sizeof運算符sizeof運算符是一個單目運算符,有下面兩種不同的用法,格式為:sizeof 表達式 或:sizeof(類型名)它是以字節(jié)為單位給出操作數(shù)所占用存儲空間的大小。當(dāng)操作數(shù)是類型名時,必須用圓括號將其括起來;當(dāng)操作數(shù)是表達式時,圓括號可以省略。第80頁2-6 數(shù)據(jù)類型的轉(zhuǎn)換 隱式類型轉(zhuǎn)換強制類型轉(zhuǎn)換第81頁2-6-1 隱式類型轉(zhuǎn)換算術(shù)
26、轉(zhuǎn)換賦值轉(zhuǎn)換第82頁算術(shù)轉(zhuǎn)換 當(dāng)表達式中的運算對象不同時,系統(tǒng)會進行類型的自動轉(zhuǎn)換。轉(zhuǎn)換的基本原則是:自動將精度低、表示范圍小的運算對象類型向精度高、表示范圍大的運算對象轉(zhuǎn)換。 第83頁算術(shù)轉(zhuǎn)換規(guī)則第84頁數(shù)據(jù)轉(zhuǎn)換 第85頁賦值轉(zhuǎn)換 將實型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄實數(shù)的小數(shù)部分。將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中,如將35賦給float變量f,即f35,先將35轉(zhuǎn)換成35.00000,再存儲到f中。如果將35賦給double型變量d,即d35,則將35補足有效位數(shù)字為35.00000000000000,然后以雙精度浮點數(shù)形式存儲到d中。將一個
27、double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(32位)中。但應(yīng)注意數(shù)值范圍不能溢出。第86頁賦值轉(zhuǎn)換 字符型數(shù)據(jù)賦給整型變量時,由于字符只占1個字節(jié),而整型變量為2個字節(jié),因此,將字符數(shù)據(jù)(8位)放到整型變量低8位中。將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時,要進行符號擴展,將整型數(shù)的l6位送到long型低l6位中將unsigned int型數(shù)據(jù)賦給long int型變量時,不存在符號擴展問題,只需將高位補0即可。將一
28、個unsigned型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的整型變量。int,unsigned longlong,unsigned shortshort),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。第87頁賦值轉(zhuǎn)換 將unsigned int型數(shù)據(jù)賦給long int型變量時,不存在符號擴展問題,只需將高位補0即可。將一個unsigned型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的整型變量。int,unsigned longlong,unsigned shortshort),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,如果數(shù)據(jù)范
29、圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號位也作為數(shù)值一起傳送)。第88頁2-6-2 強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換是利用強制類型轉(zhuǎn)換運算符將一個表達式轉(zhuǎn)換成所需數(shù)據(jù)類型的轉(zhuǎn)換。強制類型轉(zhuǎn)換常被稱為顯式類型轉(zhuǎn)換。其一般形式為: (類型標(biāo)識符)表達式其功能就是把表達式結(jié)果的數(shù)據(jù)類型強制轉(zhuǎn)換為圓括號中的類型。其中,類型標(biāo)識符可以是int、char、float、double、long等,也可以是后面章節(jié)介紹的指針、結(jié)構(gòu)體類型標(biāo)識符等。注意,類型轉(zhuǎn)標(biāo)識符兩邊的圓括號不可省略,此圓括號就是C語言中的強制類型轉(zhuǎn)換符。 第89
30、頁2-7 程序案例#include main() int a=99; int b=5; int c=11; int d=3; int result; float r;第90頁接上 result=a-b; printf(a-b=%dn,result); result=b*c; printf(b*c=%dn,result); result=a/b; printf(a/b=%dn,result); result=a%b; printf(a%b=%dn,result); result=a%d+b/c; printf(a%d+b/c=%dn,result); r=(float)(a+b)/2; prin
31、tf(float)(a+b)/2=%fn,r); 第91頁接上運行結(jié)果為:a-b=94b*c=55a/b=19a%b=4a%d+b/c=0(float)(a+b)/2=52.000000第92頁2-8 小結(jié)C語言的數(shù)據(jù)類型:基本類型、構(gòu)造類型、指針類型和空類型。其中基本數(shù)據(jù)類型包括整型、實型(包括單精度實型和雙精度實型)、字符型和枚舉類型等。構(gòu)造類型包括數(shù)組類型、結(jié)構(gòu)體類型和共用體類型。常量是指在程序運行過程中其值不能被改變的量。常量通常有4種類型,整型常量、實型常量、字符型常量、字符串常量。整型常量有十進制、八進制和十六進制表示。實型常量有小數(shù)和指數(shù)兩種表示形式,均按double類型處理。字
32、符常量是用單引號(即撇號)括起來的單個可視字符或轉(zhuǎn)義字符。字符串常量是用一對雙引號括起來的若干字符序列,存儲時系統(tǒng)會自動在其末尾加0作為字符串的結(jié)束標(biāo)志,因此字符串常量所占存儲空間等于字符串長度加1。第93頁接上在程序運行時,其值能被改變的量叫做變量,變量必須先定義后使用。變量的類型由定義語句中的數(shù)據(jù)類型標(biāo)識符指定。系統(tǒng)根據(jù)變量類型分配相應(yīng)的存儲空間,存放變量的值。通過變量初始化可以給變量賦初值。不能直接使用未經(jīng)賦值的變量,因為它的值是一個不確定的數(shù)據(jù)。C語言的運算符,按運算對象分類有:一目運算符、二目運算符、三目運算符。按完成的動作類型分類有:算術(shù)運算符、賦值運算符、關(guān)系運算符、邏輯運算符、
33、強制類型轉(zhuǎn)換運算符、位運算符、條件運算符、逗號運算符、指針運算符、求字節(jié)數(shù)運算符、分量運算符、下標(biāo)運算符和其他運算符。一個表達式中運算符所具有的運算優(yōu)先次序稱為運算符的優(yōu)先級。同一優(yōu)先級的運算符的結(jié)合方向稱為運算符的結(jié)合性。自左至右的結(jié)合方向,稱為“左結(jié)合性”;反之稱為“右結(jié)合性”。第94頁接上在C語言中,基本的算術(shù)運算符有5個,分別是+、-、*、/、%。其中*、/和%的優(yōu)先級相同且高于+、-。這5個運算符具有“左結(jié)合性”。C語言中增1運算符“+”,減1運算符“-”是兩個特殊的算術(shù)運算符。將操作數(shù)先執(zhí)行增1或減1操作,再將操作后的值參加其他操作稱為前置操作。先將操作數(shù)的值參加其他操作,再對操作
34、數(shù)做相應(yīng)的增1或減1操作稱為后置操作。C語言中,賦值運算符用“=”表示,它的作用是將一個數(shù)據(jù)賦給一個變量,有+=、- =、*=、/=、%=、=、&=、=和|=10種復(fù)合賦值運算符。由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。C語言提供的關(guān)系運算符有6種:(小于),(大于),=(大于等于),=(等于),!=(不等于)。用關(guān)系運算符將兩個表達式連接起來,進行關(guān)系運算的式子稱為關(guān)系表達式。第95頁接上C語言提供的邏輯運算符有3種:&(邏輯與),|(邏輯或),!(邏輯非)。用邏輯運算符將一個或多個表達式連接起來,進行邏輯運算的式子稱為邏輯表達式。C語言提供一種特殊的運算符,即逗
35、號“,”運算符。用逗號連接的表達式稱為逗號表達式。C語言中,sizeof運算符的作用是以字節(jié)為單位給出操作數(shù)所占用存儲空間的大小。當(dāng)操作數(shù)是類型名時,必須用圓括號將其括起來;當(dāng)操作數(shù)是表達式時,圓括號可以省略。在進行混合運算時,如果一個運算符兩側(cè)的運算對象的數(shù)據(jù)類型不同,系統(tǒng)則按“先轉(zhuǎn)換,后運算”的原則,首先將數(shù)據(jù)自動轉(zhuǎn)換成同一類型,然后在同一類型數(shù)據(jù)間進行運算。分隱式類型轉(zhuǎn)換和強制類型轉(zhuǎn)換。隱式類型轉(zhuǎn)換主要又分為兩類:算術(shù)轉(zhuǎn)換和賦值轉(zhuǎn)換。強制類型轉(zhuǎn)換格式為:(類型)表達式。第5章 數(shù)組 第97頁主要內(nèi)容一維數(shù)組二維數(shù)組字符數(shù)組程序案例小結(jié)第98頁5-1 一維數(shù)組 一維數(shù)組的定義一維數(shù)組元素的
36、引用一維數(shù)組的初始化一維數(shù)組的應(yīng)用第99頁5-1-1 一維數(shù)組的定義一維數(shù)組的定義方式為:類型說明符 數(shù)組名常量表達式;第100頁說明 類型說明符 類型說明符用來定義數(shù)組中各個數(shù)據(jù)元素的類型,包括整數(shù)型、浮點型、字符型、指針型以及結(jié)構(gòu)體和共用體。數(shù)組名 數(shù)組名即數(shù)組的名稱,它代表數(shù)組所占存儲空間的首地址。數(shù)組名、變量名、標(biāo)識符的命名規(guī)則相同。因為在C語言中,將數(shù)組也當(dāng)成一個變量來看待。常量表達式 常量表達式表示數(shù)組中元素的個數(shù),即:數(shù)組的大小,它必須是由常量或符號常量組成的表達式,不能含有變量。即C語言不允許對數(shù)組的大小作動態(tài)定義。這點是與PASCAL、BASIC語言不同的。第101頁接上下標(biāo)
37、 下標(biāo)決定了元素在數(shù)組中的次序。數(shù)組都是以0作為第一個元素的下標(biāo),設(shè)n為一個常量,則下標(biāo)的取值范圍是0,n-1。存儲方式 在內(nèi)存中是以字節(jié)為基本單位來表示存儲空間的,并且在內(nèi)存中只能按照順序的方式存放數(shù)據(jù)。一維數(shù)組中的各個元素在內(nèi)存中是按照下標(biāo)規(guī)定的順序存放在內(nèi)存中的。第102頁 數(shù)組元素存放方式 第103頁5-1-2 一維數(shù)組元素的引用在已經(jīng)定義了一個數(shù)組以后,怎么來使用數(shù)組中的元素呢?C語言規(guī)定只能逐個地引用數(shù)組元素而不能整體引用,即不能一次引用數(shù)組中的全部元素。一維數(shù)組元素的引用格式:數(shù)組名下標(biāo)第104頁說明 數(shù)組必須先定義,后引用。數(shù)組名是表示要引用哪一個數(shù)組中的元素。下標(biāo)往往隱含有特
38、定的含義。一般來說,一維數(shù)組的使用往往與單循環(huán)聯(lián)系在一起。對于下標(biāo)出界,C語言不進行語法檢查。第105頁5-1-3 一維數(shù)組的初始化變量的初始化是指變量在被說明的同時被賦予一個初值。數(shù)組的初始化操作是在定義數(shù)組的同時就規(guī)定數(shù)組中有什么樣的內(nèi)容,即各個數(shù)組元素取什么值。對數(shù)組的初始化操作可以采取以下方式:static類型說明符 數(shù)組名n=值1,值2,值n;第106頁說明 對數(shù)組的初始化操作只能在定義數(shù)組時進行。C語言規(guī)定:只有靜態(tài)存儲數(shù)組和外部存儲(extern)數(shù)組才能初始化。常量表達式n表示數(shù)組含有的元素個數(shù)。大括號中的內(nèi)容即為數(shù)組的初值。值1將賦給第0個元素、值2將賦給第1個元素,等等。數(shù)
39、組初始化時,初值用“,”分開,整體再加一對“”括起來,最后以“;”表示結(jié)束。第107頁在對數(shù)組元素全部賦初值時,可以不指定數(shù)組的大小。在省略了數(shù)組的大小后,系統(tǒng)將根據(jù)初值的個數(shù)來決定數(shù)組的大小。 static int a=1,2,3,4,5; 這個數(shù)組定義語句相當(dāng)于static int a5=1,2,3,4,5;。對數(shù)組初始化時, 可以只給最前一部分?jǐn)?shù)組元素賦初值,其余的數(shù)組元素賦0。如果想使數(shù)組中的元素全部被賦為0,則可以這樣寫: static int a5=0,0,0,0,0; (要寫5個0) 或:static int a5=0;第108頁賦初值后數(shù)組內(nèi)容 第109頁5-2 二維數(shù)組二維數(shù)
40、組的定義二維數(shù)組元素的引用二維數(shù)組的初始化二維數(shù)組的應(yīng)用第110頁5-2-1 二維數(shù)組的定義當(dāng)數(shù)組中的每個元素帶有兩個下標(biāo)時,稱這樣的數(shù)組為二維數(shù)組,其中存放的是有規(guī)律地按行、列排列的同一類型數(shù)據(jù)。所以二維數(shù)組中的兩個下標(biāo),一個是行下標(biāo),一個是列下標(biāo)。在C語言中二維數(shù)組定義的一般形式為:類型說明符 數(shù)組名常量表達式1常量表達式2第111頁說明 “類型說明符”、“數(shù)組名”及“常量表達式”的含義與一維數(shù)組中的相關(guān)定義相同。二維數(shù)組中有兩個下標(biāo),每一維的下標(biāo)都是從0算起。第112頁5-2-2 二維數(shù)組元素的引用二維數(shù)組元素的引用格式為:數(shù)組名行下標(biāo)表達式列下標(biāo)表達式第113頁說明 二維數(shù)組的引用與一
41、維數(shù)組的引用基本上是一樣的,只不過二維數(shù)組的引用要使用兩個下標(biāo)。數(shù)組元素可以出現(xiàn)在表達式中,也可以被賦值。二維數(shù)組的輸入和輸出常常通過二重循環(huán)來實現(xiàn),一個下標(biāo)對應(yīng)一重循環(huán)控制變量,外循環(huán)對應(yīng)下標(biāo)1,內(nèi)循環(huán)對應(yīng)下標(biāo)2。要注意定義數(shù)組和引用數(shù)組元素的差別。第114頁5-2-3 二維數(shù)組的初始化分行初始化線性初始化只對部分元素初始化如果將數(shù)組的所有元素全部賦值的話,可以省略第一維的長度第115頁分行初始化這種初始化是對二維數(shù)組進行初始化的最基本形式。二維數(shù)組有幾行,就有幾個用逗號分隔的大括號;有幾列,每個大括號中就有幾個用逗號分隔的數(shù)值;最后將所有的初始化內(nèi)容用一對大括號括起來。 第116頁線性初始
42、化 二維數(shù)組的存儲是連續(xù)的,因此,可以用初始化一維數(shù)組的辦法來初始化二維數(shù)組,即將所有的初始值全部連續(xù)地寫在一對大括號里。 第117頁只對部分元素初始化 對數(shù)組初始化時,如果初值表中的數(shù)據(jù)個數(shù)比數(shù)組元素少,則不足的數(shù)組元素用0來填補。第118頁5-3 字符數(shù)組字符數(shù)組的定義字符數(shù)組的初始化字符數(shù)組的引用字符串和字符串結(jié)束標(biāo)志字符數(shù)組的輸入輸出字符串處理函數(shù)字符數(shù)組的應(yīng)用第119頁5-3-1 字符數(shù)組的定義字符數(shù)組的定義與前面介紹的數(shù)值數(shù)組的定義類似。 第120頁5-3-2 字符數(shù)組的初始化逐個字符賦值用字符串對字符數(shù)組賦初值第121頁逐個字符賦值對字符數(shù)組進行初始化時,如果提供的初值個數(shù)小于數(shù)
43、組長度,則只將這些字符賦給數(shù)組中前面的那些元素,其余的元素自動賦空字符0。 第122頁用字符串對字符數(shù)組賦初值例如,static char a=I am a student;也可以省略大括號,寫成static char a = I am a student ;。注意:此時數(shù)組a的長度為15而不是14。因為在字符串常量的最后由系統(tǒng)加上了一個0。第123頁5-3-3 字符數(shù)組的引用字符數(shù)組的引用和前面幾節(jié)數(shù)組的引用沒有什么區(qū)別,也是通過對數(shù)組元素的引用實現(xiàn)的,每次得到一個字符,只是要注意數(shù)據(jù)元素的類型現(xiàn)在是字符型。第124頁5-3-4 字符串和字符串結(jié)束標(biāo)志 這樣在初始化字符數(shù)組時,可以寫成如下形
44、式: static char a=I am a boy!;,此時a數(shù)組的長度為12。大括號也可以省略,寫成如下形式: static char a=I am a boy!; 相當(dāng)于static char a=I, ,a,m, ,a, ,b,o,y,!,0;。第125頁5-3-4 字符串和字符串結(jié)束標(biāo)志 注意:只有在程序中對字符串進行處理時,才考慮字符串結(jié)束標(biāo)志的問題。系統(tǒng)在處理字符串時,如果程序中有一個字符串,那么就將其翻譯成若干字符和一個0字符;如果某段程序要處理一個字符串,首先系統(tǒng)要找到字符串的第一個字符,然后依次向后,在遇到0字符時就認(rèn)為當(dāng)前這個字符串結(jié)束了。第126頁5-3-5 字符數(shù)組
45、的輸入輸出字符數(shù)組的輸出字符數(shù)組的輸入第127頁字符數(shù)組的輸出 利用printf函數(shù),按%c的格式將數(shù)組元素一次輸出一個字符。利用printf函數(shù),按%s的格式將數(shù)組中的內(nèi)容按字符串的方式輸出,即將整個字符串一次輸出(要判斷0字符)。利用puts函數(shù)可以將整個字符串一次輸出。第128頁字符數(shù)組的輸入 利用scanf函數(shù)按%c的格式,讀入鍵盤輸入的單個字符為字符數(shù)組元素賦值。利用scanf函數(shù),按%s的格式將整個字符串一次輸入(要判斷0字符)。利用gets函數(shù)可以將整個字符串一次輸入。第129頁5-3-6 字符串處理函數(shù)strcat(字符數(shù)組1,字符數(shù)組2)字符串連接函數(shù)strcpy(字符數(shù)組1
46、,字符數(shù)組2) 字符串復(fù)制函數(shù)strcmp(字符數(shù)組1,字符數(shù)組2)字符串比較函數(shù)strlen(字符數(shù)組) 求字符串長度函數(shù)strlwr()將大寫字母轉(zhuǎn)為小寫字母strupr()將小寫字母轉(zhuǎn)為大寫字母第130頁strcat(字符數(shù)組1,字符數(shù)組2)字符串連接函數(shù) 功能:將存放在字符數(shù)組1和字符數(shù)組2的兩個字符串連接起來,并存入字符數(shù)組1中。第131頁strcat字符串連接函數(shù)執(zhí)行過程 第132頁strcpy(字符數(shù)組1,字符數(shù)組2) 字符串復(fù)制函數(shù)功能:字符復(fù)制函數(shù)將字符數(shù)組2中的字符復(fù)制到字符數(shù)組1中去,字符數(shù)組1中的原有字符串將被覆蓋。注意:字符數(shù)組1一定要能放下字符數(shù)組2中的字符串。第1
47、33頁strcmp(字符數(shù)組1,字符數(shù)組2)字符串比較函數(shù)功能:如果兩個數(shù)組中的字符串一模一樣,函數(shù)返回0值,否則返回非0值。注意:如果a、b為兩個字符數(shù)組時,下面的寫法是不正確的。if(a=b)printf(OK!);應(yīng)寫成if(strcmp(a,b)=0)printf(OK!);第134頁strlen(字符數(shù)組) 求字符串長度函數(shù) 功能:函數(shù)返回字符串中原有字符的個數(shù),不包括0。第135頁strlwr()將大寫字母轉(zhuǎn)為小寫字母 功能:將字符串中的大寫字母轉(zhuǎn)換為小寫字母。第136頁strupr()將小寫字母轉(zhuǎn)為大寫字母功能:將字符串中的小寫字母轉(zhuǎn)換為大寫字母。第137頁【例5-9】用篩法求2
48、100之間的所有素數(shù)。 用篩法求2100之間的所有素數(shù)基本思路: 應(yīng)用篩法求素數(shù)時,首先要建立篩子,這里用數(shù)組作為篩子。下標(biāo)對應(yīng)于數(shù),相應(yīng)下標(biāo)變量的值標(biāo)志是否在篩子中:為1表示在篩子中,為0表示已被篩去,不在篩子中。然后找每一輪篩選種子,篩選種子是完成一輪篩選后的下一個最小的素數(shù),初值為2。 對每一輪篩選種子,篩去其所有的倍數(shù),即相應(yīng)下標(biāo)變量的值賦值為0。倍數(shù)初值為篩選種子的2倍。第138頁5-4 程序案例篩選完成后,篩子中剩下的即為素數(shù)。#include main() int i,a100; /*篩子數(shù)組*/ int i,n=0; /*n為素數(shù)個數(shù),用于輸出格式控制*/ int minp,d
49、oub; /* minp為篩選種子,doub為倍數(shù)*/ for(i=0;i100;i+) /*建立篩子*/第139頁5-4 程序案例 ai=1; minp=2; /*篩選種子初始化*/ while(minp100) /*完成整個篩選*/ doub=2*minp; /*倍數(shù)初始化*/ while(doub100) /*完成一輪篩選*/ adoub=0; /*篩去當(dāng)前倍數(shù)*/ doub+=minp; /*計算下一個倍數(shù)*/ do /*計算下一輪篩選種子*/ 第140頁5-4 程序案例 minp+; while(aminp=0); printf(2到100之間的所有素數(shù)如下:n); for(i=2;
50、iy)m=x; else m=y; return(m);/*返回最大值*/第155頁6-2 函數(shù)的參數(shù)與返回值函數(shù)的參數(shù)返回語句第156頁6-2-1 函數(shù)的參數(shù)C語言程序由若干相對獨立的函數(shù)組成,在程序運行期間,數(shù)據(jù)必然在函數(shù)中流入或流出,這就是函數(shù)之間的數(shù)據(jù)傳遞,也是函數(shù)之間的接口。一般的語言中,數(shù)據(jù)傳遞有參數(shù)傳遞和全局變量傳遞兩種方法,語言也提供這兩種傳遞方法。參數(shù)傳遞是數(shù)據(jù)傳遞的主門(正門),全局變量傳遞是數(shù)據(jù)傳遞的輔門(后門)。參數(shù)傳遞又有傳值與傳地址兩種方式。語言提供的是傳值方式,傳值方式將對應(yīng)實參表達式的值傳遞給相應(yīng)的形參,實參與形參占有不同的存儲單元,形參的改變不會引起對應(yīng)實參的
51、改變。C語言的形式參數(shù)是入口參數(shù),將數(shù)據(jù)從主調(diào)函數(shù)帶進被調(diào)函數(shù)是單向傳遞,而數(shù)據(jù)的帶回、數(shù)據(jù)的出口通過函數(shù)名進行。第157頁6-2-2 返回語句通過在函數(shù)中使用返回語句,返回一個值給函數(shù),同時終止函數(shù)的調(diào)用,返回主函數(shù)。一般格式為: return(表達式)或:return 表達式;第158頁6-2-2 返回語句功能:計算表達式的值,將表達式的值返回給函數(shù)。從被調(diào)用的函數(shù)返回主調(diào)函數(shù)。說明:返回值類型應(yīng)和函數(shù)類型一致,若不一致則將返回值自動轉(zhuǎn)換成函數(shù)類型。函數(shù)中可以有多條返回語句,這時一般與if語句連用,執(zhí)行到哪一條返回語句,哪條返回語句起作用。函數(shù)中無return語句,執(zhí)行至函數(shù)體結(jié)尾時返回,
52、此時將返回一個不確定的值給函數(shù)。如果只需要從函數(shù)中返回,而不需帶返回值,使用不帶表達式的return語句。第159頁6-3 函數(shù)的調(diào)用函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的方式被調(diào)函數(shù)的說明第160頁6-3-1 函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式為:函數(shù)名(實參表);第161頁說明 如果調(diào)用無參函數(shù),則無實參表,此時小括號不能省略。調(diào)用時,實參與形參的個數(shù)應(yīng)相同,類型應(yīng)一致。實參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。調(diào)用后,形參得到實參的值。實參可以是表達式。如是表達式實參,先計算表達式的值,再將值傳遞給形參。第162頁說明 在C語言中,對于實參表的求值順序,有的系統(tǒng)按自左至右的常規(guī)順序,有的系統(tǒng)則按自右至
53、左的順序求實參數(shù)值。大多數(shù)C(包括Turbo C)語言采用自右至左的順序求值。主函數(shù)由系統(tǒng)調(diào)用。第163頁6-3-2 函數(shù)調(diào)用的方式表達式方式語句方式參數(shù)方式第164頁表達式方式 函數(shù)調(diào)用出現(xiàn)在一個表達式中,這種表達式稱為函數(shù)表達式。這時要求函數(shù)返回一個確定的值以參加表達式的運算。第165頁語句方式把函數(shù)調(diào)用作為一個語句。常用于只要求函數(shù)完成一定的操作,不要求函數(shù)返回值。這在scanf函數(shù)及printf函數(shù)的調(diào)用中已多次使用。第166頁參數(shù)方式 函數(shù)調(diào)用作為另一個函數(shù)的實參。說明: 如要求2-n之間的所有素數(shù),只需在主函數(shù)中增加數(shù)據(jù)n的輸入處理,將for循環(huán)控制變量的終值改為n。第167頁6-
54、3-3 被調(diào)函數(shù)的說明用戶自定義函數(shù)一般在調(diào)用前,在主函數(shù)中進行說明。函數(shù)說明是一種聲明,是告訴主調(diào)函數(shù)這里調(diào)用的是一個什么樣的函數(shù)。函數(shù)說明的一般形式為:被調(diào)函數(shù)類型 被調(diào)函數(shù)名();注意:函數(shù)說明不是函數(shù)定義,故其后應(yīng)有分號。第168頁有以下情況,在調(diào)用函數(shù)前可不加說明 如果是整型函數(shù)或字符型函數(shù),可以不加說明,系統(tǒng)自動按整型函數(shù)處理。如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前,可以不加說明。如果已在所有函數(shù)定義之前,或在文件的開頭,或在函數(shù)的外部已作說明,可以不加說明。除了上述情況,其他情況均必須對被調(diào)用的函數(shù)在調(diào)用前進行說明。第169頁注意 函數(shù)一般先定義,后使用。為清晰起見,一般均對被調(diào)
55、用的函數(shù)在調(diào)用前進行說明,以增加程序的可讀性。函數(shù)不能重復(fù)定義,但可以反復(fù)說明。對于標(biāo)準(zhǔn)函數(shù),還應(yīng)在文件開頭用文件包含指令include,指明調(diào)用有關(guān)庫函數(shù)時所需用到的信息。例如,include ,其中stdio.h是一個頭文件,它包含了輸入輸出庫函數(shù)所用到的一些宏定義信息,前面程序中已反復(fù)用到。第170頁6-4 函數(shù)的嵌套調(diào)用在C語言中,被調(diào)用函數(shù)還可以調(diào)用其他函數(shù),這就構(gòu)成了函數(shù)的嵌套調(diào)用。函數(shù)的嵌套調(diào)用是逐級調(diào)用,逐層返回。 第171頁6-5 函數(shù)的遞歸調(diào)用遞歸算法具有兩個基本特征。轉(zhuǎn)化:將問題規(guī)模用一定的條件描述;類似問題的求解通過定義一個函數(shù)來完成;問題規(guī)模需轉(zhuǎn)化成函數(shù)參數(shù)的形式來表
56、示。終止:對特定簡單易解的類似問題有明確的解,這也就是遞歸調(diào)用的終止條件,常用if語句來控制。第172頁遞歸調(diào)用分成兩個基本階段完成 第一階段是遞歸階段,也就是完成轉(zhuǎn)化階段的處理。第二階段是回歸階段,即由特定問題的解遞推出所求問題的解。 第173頁6-6 函數(shù)與數(shù)組一維數(shù)組名作實參二維數(shù)組名和指針數(shù)組作實參第174頁6-6-1 一維數(shù)組名作實參【例】通過函數(shù)給數(shù)組輸入若干個正整數(shù),調(diào)用函數(shù)輸出該數(shù)組中的數(shù)據(jù)。本例的算法十分簡單,只是想通過此例的程序,舉例說明如何在函數(shù)中給主函數(shù)中的數(shù)組元素賦值;如何把主函數(shù)中的數(shù)組的數(shù)據(jù)傳送給被調(diào)用函數(shù);同時也顯示了如何在被調(diào)用函數(shù)中引用在主函數(shù)中定義的數(shù)組。
57、第175頁接上#define M 100void arrout(int ,int);/*函數(shù)原型,用以輸出數(shù)組中的值*/int arrin(int *);/*函數(shù)原型,給數(shù)組輸入數(shù)據(jù)*/main() int sM,k; k=arrin(s); arrout(s,k);第176頁接上arrin(int *a) int i,x; i=0; scanf(%d,&x); while(x=0) *(a+i)=x;i+;scanf(%d,&x); return i;第177頁接上void arrout(int *a,int n) int i; for(i=0;in;i+) printf(i+1)%5=0)
58、?%4dn:%4d,*(a+i); /*根據(jù)i的值來確定使用不同的格式串*/ printf(n); 第178頁接上當(dāng)數(shù)組名作為實參時,對應(yīng)的形參除了應(yīng)該是指針外,形參還可以用另外兩種形式。 對于上例中的函數(shù)調(diào)用arrin(s);對應(yīng)的函數(shù)首部可以寫成以下3種形式:arrin(int *a)arrin(int a )arrin(int aM)在第(2)和第(3)種形式中,雖然說明的形式與數(shù)組相同,但C編譯程序都將把a處理成第一種的指針形式。第179頁6-6-2 二維數(shù)組名和指針數(shù)組作實參二維數(shù)組名作實參指針數(shù)組作實參第180頁二維數(shù)組名作實參 當(dāng)二維數(shù)組名作為實參時,對應(yīng)的形參必須是一個行指針變
59、量。例如,若主函數(shù)中有以下定義和函數(shù)調(diào)用語句。#define M 5#define N 3main() double sMN; fun(s);第181頁接上則fun函數(shù)的首部可以是以下3種形式之一:fun(double (*a)N)fun(double a N)fun(double aMN)注意:列下標(biāo)不可缺。無論是哪種方式,系統(tǒng)都將把a處理成一個行指針。第182頁指針數(shù)組作實參當(dāng)指針數(shù)組作為實參時,對應(yīng)的形參應(yīng)當(dāng)是一個指向指針的指針。例如,若主函數(shù)中有以下定義和函數(shù)調(diào)用語句。#define M 5#define N 3main() double sMN,*psM; for(i=0;iM;i+
60、)psi=si; fun(ps); 第183頁接上則fun函數(shù)的首部可以是以下3種形式之一:fun(double *aM)fun(double *a)fun(double *a)因為傳送的是一維指針數(shù)組,所以形參的定義形式與一維數(shù)組中作為實參的形式類似。 第184頁6-7 程序案例【例】使用函數(shù)isprime(int a),用來判斷自變量a是否為素數(shù),若是素數(shù),函數(shù)返回1,否則返回0。#include int isprime(int);/*函數(shù)原型說明*/main()第185頁接上int x; printf(Enter a interger number: ); scanf(d%,&x);/*
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)技術(shù)在現(xiàn)代物流中的應(yīng)用與挑戰(zhàn)
- 現(xiàn)代城市住宅區(qū)的綠色規(guī)劃與實踐
- 現(xiàn)代人如何通過飲食改善腸胃問題
- 國慶節(jié)活動方案百米畫
- 牙科患者需求與商業(yè)價值挖掘
- 2024-2025學(xué)年新教材高中英語 Unit 6 Earth first預(yù)習(xí) 新知早知道2說課稿 外研版必修第二冊
- 12《示兒》說課稿-2024-2025學(xué)年五年級上冊語文統(tǒng)編版
- 《11~20的認(rèn)識-11~20的認(rèn)識》(說課稿)-2024-2025學(xué)年一年級上冊數(shù)學(xué)人教版
- 2024-2025學(xué)年新教材高中地理 第一章 人口 第一節(jié) 人口分布(2)說課稿 新人教版必修2
- 1學(xué)會尊重-《每個人都應(yīng)得到尊重》(說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治四年級下冊
- 2024年廣東省高考地理真題(解析版)
- DB37-T3953-2020醫(yī)療衛(wèi)生機構(gòu)安全風(fēng)險分級管控體系實施指南
- 浩順一卡通軟件新版說明書
- 植物檢疫員崗位職責(zé)說明書
- 2023~2024學(xué)年二年級下冊語文期末??荚嚲怼?chuàng)意情境 統(tǒng)編版
- 2024年北師大版六年級下冊數(shù)學(xué)期末測試卷(各地真題)
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 經(jīng)理層年度任期經(jīng)營業(yè)績考核及薪酬辦法
- 2024高考物理廣東卷押題模擬含解析
- 青少年農(nóng)業(yè)科普館建設(shè)方案
- 新測繪法解讀
評論
0/150
提交評論