(完整word版)C語(yǔ)言基礎(chǔ)知識(shí)大全_第1頁(yè)
(完整word版)C語(yǔ)言基礎(chǔ)知識(shí)大全_第2頁(yè)
(完整word版)C語(yǔ)言基礎(chǔ)知識(shí)大全_第3頁(yè)
(完整word版)C語(yǔ)言基礎(chǔ)知識(shí)大全_第4頁(yè)
(完整word版)C語(yǔ)言基礎(chǔ)知識(shí)大全_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1. 語(yǔ)言變量聲明和變量賦值 1)基本數(shù)據(jù)類型 在C語(yǔ)言中,僅有4種基本數(shù)據(jù)類型一整型、浮點(diǎn)型、指針和聚合類型(如 數(shù)組和結(jié)構(gòu)等),所有其他的類型都是從這 4 種基本類型的某種組合派生而來(lái)。 整型:整型家族包括字符、短整型、整型和長(zhǎng)整型,它們都分為有符號(hào)(signed) 和無(wú)符號(hào)(unsignec)兩種版本。規(guī)定整數(shù)值相互之間大小的規(guī)則很簡(jiǎn)單:長(zhǎng)整 型至少應(yīng)該和整型一樣長(zhǎng),而整型至少應(yīng)該和短整型一樣長(zhǎng)。 浮點(diǎn)類型:諸如3.14159和2.3X 1023這樣的數(shù)值無(wú)法按照整數(shù)存儲(chǔ)。第一個(gè) 數(shù)為非整數(shù), 而第二個(gè)數(shù)遠(yuǎn)遠(yuǎn)超出了計(jì)算機(jī)整數(shù)所表達(dá)范圍, 這樣的數(shù)就可以用 浮點(diǎn)數(shù)的形式存儲(chǔ)。浮點(diǎn)數(shù)家族包括

2、 float、double和long double類型。通常, 這些類型分別提供單精度、雙精度以及在某種擴(kuò)展精度的機(jī)器上提供擴(kuò)展精度。 ANSI標(biāo)準(zhǔn)僅僅規(guī)定long double至少和double 一樣長(zhǎng),而double至少和float 一 樣長(zhǎng)。標(biāo)準(zhǔn)同時(shí)規(guī)定了一個(gè)最小范圍: 所有浮點(diǎn)類型至少能夠容納從 10-37到 1037 之間的任何值。 指針:變量的值存儲(chǔ)于計(jì)算機(jī)內(nèi)存中, 每個(gè)變量都占據(jù)一個(gè)特定的位置。 每 個(gè)內(nèi)存的位置都由地址唯一確定并應(yīng)用, 就像一條街上的房子由他們的門牌號(hào)碼 標(biāo)識(shí)一樣,指針知識(shí)地址的另一個(gè)名字。 2)變量聲明形式 只知道基本的數(shù)據(jù)類型是遠(yuǎn)遠(yuǎn)不夠的, 你還應(yīng)該知道怎樣

3、聲明變量。 變量的 基本形式是: 說(shuō)明符(一個(gè)或多個(gè)) 聲明表達(dá)式列表 對(duì)于簡(jiǎn)單的類型, 聲明表達(dá)式列表就是被聲明的標(biāo)識(shí)符的基本類型。 對(duì)于相 對(duì)比較復(fù)雜的類型, 聲明表達(dá)式列表的每個(gè)條目實(shí)際上是一個(gè)表達(dá)式, 顯示被聲 明的名字的可能用途。 例如: int a, double b; 該語(yǔ)句就是一條聲明語(yǔ)句,其中 a,b 就是變量名,該語(yǔ)句指明了變量 a,b 是 int 數(shù)據(jù)類型。所有變量在使用前都必須寫在執(zhí)行語(yǔ)句之前,也就是變量聲明要 與執(zhí)行語(yǔ)句相分離,否則就是出現(xiàn)編譯錯(cuò)誤。 3)變量命名 C 語(yǔ)言中任何的變量名都是合法的標(biāo)示符。 所謂標(biāo)識(shí)符就是由字母、 數(shù)字和 下劃線組成的但不以數(shù)字開(kāi)頭的一

4、系列字符。雖然 C 語(yǔ)言對(duì)標(biāo)示符的長(zhǎng)度沒(méi)有 限制,但是根據(jù) ANSI 標(biāo)準(zhǔn), C 編譯器必須要識(shí)別前 31 個(gè)字符。 C 語(yǔ)言是對(duì)大 小寫敏感的,即C語(yǔ)言認(rèn)為大寫字母和小寫字母的含義是不同的,因此a1和A1 是不同的標(biāo)識(shí)符。 到目前為止, 沒(méi)有一種命名規(guī)則可以讓所有的程序員贊同, 程序設(shè)計(jì)教科書 一般都不指定命名規(guī)則。 常用的命名規(guī)則有匈牙利命名法和駝峰命名法等, 在實(shí) 際操作中, 我們會(huì)采取相對(duì)簡(jiǎn)單方便的命名規(guī)則, 即“類型首字母” +“_”+“變 量用途英文縮寫”,其中英文縮寫首字母為大寫, 例如 int i_Num,char c_Name5。 4) 變量賦值 在一個(gè)變量聲明中, 你可以給

5、一個(gè)標(biāo)量變量指定一個(gè)初始值, 方法是在變量 名后面跟一個(gè)等號(hào)(賦值號(hào)) ,后面就是你想要給變量的值。例如: int i_Num=10; char c_Name= ” student ”; 上述語(yǔ)句聲明 i_Num 為一個(gè)整數(shù)變量,其初始值為 10,聲明 c_Name 為一 個(gè)字符數(shù)組,其初始值為“ student”。 在 C 語(yǔ)言中,全局變量和靜態(tài)變量,如果沒(méi)有賦初值,則默認(rèn)初始值 int , float,char 分別為 0,0.0,0,除了全局變量和靜態(tài)變量以外,其他變量如果沒(méi) 有賦初值,則默認(rèn)初始值為內(nèi)存中的垃圾內(nèi)容,對(duì)于垃圾內(nèi)容不能有任何假設(shè)。 注意: 定義指針后,默認(rèn)初始值不是 0,

6、而是隨機(jī)的一個(gè)值,故定義指針后,一 定要初始化。 在實(shí)際操作中, 變量的賦值都是以賦值語(yǔ)句的形式出現(xiàn), 賦值語(yǔ)句是由賦值 表達(dá)式再加上分號(hào)構(gòu)成的表達(dá)式語(yǔ)句。其一般形式為: 變量=表達(dá)式; 在賦值語(yǔ)句的使用中需要注意以下幾點(diǎn): a) 由于在賦值符“ =”右邊的表達(dá)式也可以又是一個(gè)賦值表達(dá)式。 下述形式 : 變量=(變量 =表達(dá)式); 該語(yǔ)句是成立的,從而形成了嵌套的情形。其展開(kāi)后的一般形式為: 變量=變量= =表達(dá)式; 例如: a=b=c=d=e=5; 按照賦值運(yùn)算符的右結(jié)合性,因此實(shí)際上等效于: e=5;d=e;c=d;b=c;a=b; b) 注意在變量聲明中給變量賦初值和賦值語(yǔ)句的區(qū)別 給變

7、量賦初值是變量說(shuō)明的一部分, 賦初值后的變量與其后的其他同類變量 之間仍必須用逗號(hào)隔開(kāi),而賦值語(yǔ)句則必須用分號(hào)隔開(kāi)。 例如: int a=5,b,c; c) 在變量聲明中,不允許連續(xù)給多個(gè)變量賦初值。 如下述說(shuō)明就是錯(cuò)誤的: int a=b=c=5; 正確寫法為: int a=5,b=5,c=5; 但是,賦值語(yǔ)句允許連續(xù)賦值。 d) 注意賦值表達(dá)式和賦值語(yǔ)句的區(qū)別。 賦值表達(dá)式是一種表達(dá)式, 它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方, 而賦 值語(yǔ)句則不能。下述語(yǔ)句是合法的: If(x=y+7)0) z=x; 語(yǔ)句功能為若表達(dá)式 x=y+5 大于 0 則 z=x。 但是,下述語(yǔ)句是錯(cuò)誤的: If(x

8、=y+7;)0) z=x; 因?yàn)閤=y+7;是語(yǔ)句,不能出現(xiàn)在表達(dá)式中。 實(shí)例: #include “ stdafx.h ” void main() int i_Tmp,i_Type=8; float f_Tmp; double d_Tmp; char c_Tmp; d_Tmp=d_Tmp=f_Tmp=12; f_Tmp=i_Type; i_Tmp=i_Type+3; prin tf(a=%d,b=%d,c=%.3f,d=%.6lf,i_Tmp,i_Type,f_Tmp,d_Tmp); 參考書目: 1. (美)Kebbeth A.reek.C 與指針29-40 2. H.M.Deitel P.

9、J .Deitel 等how to program Seco nd Edition19-23 2. 算術(shù)運(yùn)算符及使用方式 c語(yǔ)言提供了最基本的算術(shù)運(yùn)算符,如下表: 運(yùn)算符 含義 舉例 結(jié)果 + 加法運(yùn)算符 a+b a和b的和 - 減法運(yùn)算符 a-b a和b的差 * 乘法運(yùn)算符 a*b a和b的乘積 / 除法運(yùn)算符 a/b a除b的商 % 求余運(yùn)算符 a%b a除b的余數(shù) + 自加運(yùn)算符 a+,+a a自加1 - 自減運(yùn)算符 a-,- a a自減1 1、+、-、*、/都適用于浮點(diǎn)類型和整數(shù)類型,當(dāng)兩個(gè)操作數(shù)都為整數(shù)時(shí)進(jìn) 行整數(shù)運(yùn)算,其余情況則進(jìn)行 double型運(yùn)算;當(dāng)/除法運(yùn)算符的兩個(gè)操作數(shù)為

10、整 數(shù)時(shí),結(jié)果為整數(shù),舍去小數(shù)部分,例如5/3的結(jié)果為1; %求余運(yùn)算符只接受 兩個(gè)整型操作數(shù)的運(yùn)算,結(jié)果為余數(shù) 2、 +、-:作用是使變量自加1或自減1,例如i+、+i,都是使i的值加 1,但其執(zhí)行的步驟是不同的。例如: int i=3,j ; j=i+ ; / i的值為4 , j的值為3 int i=3,j ; j=+i ; /i的值為4, j的值為4 可見(jiàn)當(dāng)變量在左側(cè)時(shí),先進(jìn)行賦值運(yùn)算再進(jìn)行自加1操作,當(dāng)變量在右側(cè)時(shí), 先進(jìn)行自加1操作再進(jìn)行賦值運(yùn)算。 3、 在賦值運(yùn)算符之前加上算術(shù)運(yùn)算符既構(gòu)成復(fù)合運(yùn)算符,例如:a+=b,等 價(jià)于a=a+bo -=、 *=、/=也是如此。 3. 位運(yùn)算符

11、及使用方式(、|、 int *p; p= 則*p表示指針變量p指向變量a,即*p就是a,所以*p=7。 一個(gè)指針變量 p 在程序中通常有如下表示形式: p: 指針變量,它的內(nèi)容是地址量; *p :指針?biāo)赶虻淖兞?,是指針?biāo)赶虻膬?nèi)存空間中的數(shù)據(jù); int *pst_a; printf(n 請(qǐng)輸入 i_a 的值 :); scanf(%d, pst_a = printf(i_a 的值為: %dn,i_a); printf(pst_a 的值為: %xn, pst_a); printf( printf(*pst_a 的值為: %dn,* pst_a); printf( printf(n); 運(yùn)行結(jié)果:

12、 請(qǐng)輸入 i_a 的值 :3 i_a 的值為: 3 pst_a 的值為: 12fe8c Void *free(viod* pointer); malloc的參數(shù)就是需要分配的內(nèi)存字節(jié)數(shù)。如果內(nèi)存池中的可用內(nèi)存可以滿 足這個(gè)需要, malloc 就返回一個(gè)指向被分配的內(nèi)存塊起始位置的指針, 如果系統(tǒng) 無(wú)法向malloc提供更多的內(nèi)存,malloc就會(huì)返回一個(gè)NULL指針。 free的參數(shù)必須要么是NULL ,要么是一個(gè)先前從 malloc或其他空間申請(qǐng)函 數(shù)返回的值。 malloc 的一般用法 基類型*=(基類型)*Malloc (數(shù)量*sizeof (基類型); 7) 動(dòng)態(tài)數(shù)組 動(dòng)態(tài)數(shù)組是指在

13、聲明時(shí)沒(méi)有確定數(shù)組大小的數(shù)組,即忽略方括號(hào)中的下標(biāo); 當(dāng)使用時(shí)可用 malloc 語(yǔ)句重新指出數(shù)組的大小。使用動(dòng)態(tài)數(shù)組的優(yōu)點(diǎn)是可以根 據(jù)用戶需要, 有效利用存儲(chǔ)空間。 動(dòng)態(tài)數(shù)組的內(nèi)存空間是從堆上分配的。 是通過(guò) 執(zhí)行代碼而為其分配空間。 當(dāng)程序執(zhí)行到這些語(yǔ)句時(shí), 才為其分配空間。 程序員 自己釋放內(nèi)存。 遵循原則: 申請(qǐng)的時(shí)候從外層往里層,逐層申請(qǐng); 釋放的時(shí)候從里層往外層,逐層釋放。 【例 2】:一維數(shù)組的動(dòng)態(tài)開(kāi)辟與釋放 : n+*i_Arra.y ;豬向一維數(shù)組的指針 int;/數(shù)組個(gè)數(shù) i_Array=(int*)mallQC (.Ravstsizecaf; for (i_CourL-t

14、=D;i_Count50 : i_Courit-H-) w (i_nTnpAri?a3N-i_Ccurit = i_Caunt : 數(shù)組的釋啟| 【例3】:二維數(shù)組的動(dòng)態(tài)開(kāi)辟: irrt *.i_ArEy:指向二堆埶組的指 int i_Rovs:/丿二毎敎組行 .rrt i_Cclums:二誰(shuí)埶組歹!l print ( 1育輔入行藥與列頻jT ): scanf (兀覗(1“$ .l_Kcws3 ._Arry= (lnt*) nalloc (lRdts+sie;i+) i_Arryi = (ini *)inalloc(i_CDluns*sizeof(int). for (ini i=0: ii_

15、Rr)ws: i+) _ for Cint j=0 ; ji_Colujis ; j+t) i_ArryiJ j=i.+j : / *他!|!|!啊5|!*吐!|!*束二誰(shuí)數(shù)組的 55 Hi*!*/ for (in-t i=0:ii_Rows: i+) frte(i Arry1): fr表示一個(gè)整型、數(shù)組名為 a長(zhǎng)度為6的一維數(shù)組。 (2) 維數(shù)組的引用形式: 下標(biāo)法:數(shù)組名下標(biāo) 例如:ai;或pi ; a為數(shù)組名,p為指向數(shù)組的指針變量。 注:C語(yǔ)言中不能依次引用整個(gè)數(shù)組,只能逐個(gè)引用數(shù)組中的各個(gè)元素。下 標(biāo)就是被訪問(wèn)的數(shù)組元素在所定義的數(shù)組中的相對(duì)位置。下標(biāo)為0表示的是數(shù)組 元素在數(shù)組的第

16、一個(gè)位置上, 下標(biāo)等于 1 表示的是數(shù)組元素在數(shù)組的第二個(gè)位置 上,依次類推。例如: int a10; a0=100; 正確 a10=100;不正確,下標(biāo)越界 例如: 下標(biāo)法: int main() int a10; for(int i=0;i10;i+) ai=2*i; for(int i=0;i10;i+) printf( “%dt ”,ai); return 0; 指針?lè)ǎ? (a+i)或*(p+i) ; a是數(shù)組名,p為指向數(shù)組的指針變量。 例如: 指針?lè)ǎ?int main() int *p=a; int i; for(i=0;i10;i+) ai=2*i; for(i=0;i10;

17、i+) printf(“%dt”,*(p+i) ); return 0; 二維數(shù)組的聲明方式為: 常量表達(dá)式 1 常量表達(dá)式 2: 二維數(shù)組與一維數(shù)組的區(qū)別在于多出 常量表達(dá)式 2。 常量表達(dá)式 1 是第 一維,常稱為行;常量表達(dá)式 2是第二維,也就是列。 例:int a35;表示一個(gè)3行5列的二維數(shù)組;數(shù)組元素的個(gè)數(shù)為:3*5=15 個(gè)。 二維數(shù)組的引用形式: 下標(biāo)法: 數(shù)組名下標(biāo) 下標(biāo) 注:二維數(shù)組在引用時(shí)和一維數(shù)組一樣,只能逐個(gè)引用數(shù)組中的各個(gè)元 素。例如: sz_A56 下標(biāo)可以是整數(shù)表達(dá)式,如 sz_A8-52*3-1。不要寫成sz_A2,3、 sz_A8-5,2*3-1形式。 注意

18、:嚴(yán)格區(qū)分定義數(shù)組時(shí)用的 sz_A56 和引用元素時(shí)用的 sz_A56 sz_A56 的 5和 6 是下 的區(qū)別。前者 sz_A56 用來(lái)定義數(shù)組的維數(shù),后者 標(biāo),代表的是數(shù)組中的某一個(gè)元素。 【例 2】分析程序的運(yùn)行結(jié)果 源程序如下: #include void main() int sz_Array6;/ 一維數(shù)組 int sz_DlArray35;/ 二維數(shù)組 int i_a; int i_dla; int i_dlb; /一維數(shù)組 for (i_a=0;i_a6;i_a+) sz_Arrayi_a=i_a*2+2; printf(n 輸出一維數(shù)組元素為: n); for(i_a=0;i

19、_a6;i_a+) printf(%dt,sz_Arrayi_a); /二維數(shù)組 for(i_dla=0;i_dla3;i_dla+) for(i_dlb=0;i_dlb5;i_dlb+) sz_DlArrayi_dlai_dlb=i_dla+i_dlb; printf(n 輸出二維數(shù)組元素為: n); for(i_dla=0;i_dla3;i_dla+) for(i_dlb;i_dlb5;i_dlb+) printf(%d ,sz_DlArrayi_dlai_dlb); printf(n); 運(yùn)行結(jié)果為: 輸出一維數(shù)組元素為: 2 4 6 8 10 12 輸出二維數(shù)組元素為: 1 2345

20、2 3456 3 4567 4 5678 指針?lè)ǎ?可以通過(guò)行指針來(lái)引用二維數(shù)組元素。 定義行指針變量:int (*p)3,指針p是指向一個(gè)由3個(gè)元素所組成的整型數(shù)組指針 例如: void main() int a34=1,2,3,4,5,6,7,8,9,10,11,12 int (*p)4=a; for(int i=0;i3;i+) for(int j=0;i4;j+) printf( “ dt” ,pij); printf( “ n ” ); 參考書目: 1. C+語(yǔ)言程序設(shè)計(jì)教程與實(shí)驗(yàn)(第二版)溫秀梅丁學(xué)鈞李建華主編 2. C/C+程序設(shè)計(jì)教程 張世民主編 8. 字符數(shù)組 1) 字符數(shù)組

21、的定義與賦值 字符數(shù)組是一串字符的集合,其數(shù)組元素為字符型。 字符數(shù)組的賦值形式: char數(shù)組名常量表達(dá)式=“字符串”; 或char數(shù)組名常量表達(dá)式= “字符串” ; 例:char sz_A5=s ,t , u ,d ,y , ; 定義數(shù)組sz_A,包含5個(gè)元素,其在內(nèi)存中的存放情況為: sz_A0sz_A1sz_A2sz_A3sz_A4 s t u d y 則各元素賦值如下: sz_A0=;sz_A1=;sz_A2=;sz_A3=dsz_A4 =y 如果花括號(hào)中的字符個(gè)數(shù)大于數(shù)組長(zhǎng)度,編譯系統(tǒng)就會(huì)報(bào)錯(cuò),7口果花括號(hào)中 的字符個(gè)數(shù)小于數(shù)組長(zhǎng)度,其余元素則由系統(tǒng)自動(dòng)定義為空字符,即0。 作為字

22、符串的結(jié)束標(biāo)志,因此在定義數(shù)組長(zhǎng)度時(shí),應(yīng)在字符串原有的長(zhǎng) 度上加1,為字符串結(jié)束標(biāo)志預(yù)留空間。 例:char sz_A6=s ,t , u ,d ,y , ; 定義數(shù)組sz_A,包含6個(gè)元素,其在內(nèi)存中的存放情況為: sz_A0sz_A1sz_A2sz_A3sz_A4sz_A5 s t u d y 0 則各元素賦值如下: sz_AO= ;sz_A1=; sz_A2= u sz_A3=sz_A4=sz_A5= 0 【例3】分析程序的運(yùn)行結(jié)果 源程序如下: #include void main() char sz_A10=work hard; int i; for(i=0;i9;i+) print

23、f(%c,sz_Ai); 運(yùn)行結(jié)果: work hard 以上實(shí)例中,逐個(gè)顯示字符數(shù)組的各個(gè)元素,但需注意的是在定義字符數(shù)組 的下標(biāo)時(shí),至少比后面的字符串長(zhǎng)度大 1。其中,字符串長(zhǎng)度應(yīng)包括其中空格的 長(zhǎng)度。 2) 字符串操作函數(shù): a) 字符串復(fù)制函數(shù)strcpy() 格式:strcpy (字符數(shù)組1,字符數(shù)組2) 功能:是將字符數(shù)組2中字符串復(fù)制到字符數(shù)組1中去。 注:字符數(shù)組1的長(zhǎng)度必須大于字符數(shù)組2,從而能夠容納復(fù)制的字符數(shù)組 2的字符串;字符數(shù)組1必須寫成數(shù)組名形式,字符數(shù)組2既可以是字符數(shù)組名, 也可以是字符串;字符數(shù)組之間不能相互賦值。 例如:char sz_str110,sz_s

24、tr2 6=work hard; Strcpy(sz_str1,sz_str2); printf(%sn,sz_str1); 運(yùn)行結(jié)果: work hard b) 字符串連接函數(shù)strcat() strcat字符數(shù)組1,字符數(shù)組2) 功能:將字符數(shù)組1和字符數(shù)組2中的字符串連接起來(lái),字符數(shù)組2中的字 符串2接到字符數(shù)組1中的字符串后面。 注:字符數(shù)組1的長(zhǎng)度必須足夠大,能夠同時(shí)容納字符數(shù)組1中的字符串和 字符數(shù)組2中的字符串。 字符數(shù)組名2中的字符串連接到字符數(shù)組1的字符串時(shí),刪除字符數(shù)組1 中的字符串后面的標(biāo)志0,只在新串的最后保留“ 0”。 例如:char sz_str110=work,s

25、z_str2 6=hard; strcat(sz_str1,sz_str2); printf(%sn,sz_str1); 運(yùn)行結(jié)果: workhard c) 字符串比較函數(shù) strcmp() strcmp (字符數(shù)組1,字符數(shù)組2) 功能:比較字符數(shù)組 1 和字符數(shù)組 2 中字符串, 通過(guò)函數(shù)返回值得出比較結(jié) 果。 若字符數(shù)組1中的字符串 若字符數(shù)組1中的字符串 ,函數(shù)返回值若字符數(shù)組1中的字符串 ,函數(shù)返回值0; 若字符數(shù)組1中的字符串 =若字符數(shù)組1中的字符串 ,函數(shù)返回值=0; 注:比較規(guī)則:比較過(guò)程中,按照從左到右的順序,逐個(gè)比較字符的 ASCII 碼值,直到遇到不相同的字符或“ 0”

26、,即結(jié)束比較。 例如: char sz_str110=work,sz_str210=hard; if (strcmp(sz_str1,sz_str2)0) printf( 大于 n); if (strcmp(sz_str1,sz_str2)0) printf( 小于 n); if (strcmp(sz_str1,sz_str2)=0) printf( 相等 n); 運(yùn)行結(jié)果: 大于 d) sprintf() sprintf( s, ”%s%d%”c , ”text ”,1), ; char 將輸出結(jié)果寫入數(shù)組S中;其函數(shù)返回值為字符串長(zhǎng)度,相當(dāng)于strlen;計(jì) 算長(zhǎng)度時(shí)不計(jì)算“ 0”,而 s

27、izeof 計(jì)算時(shí)是加上“ 0”的。 例如: char sz_str; sprintf(sz_str,%s%d%c,work,6,hard); i_Tmp=sprintf(sz_str,%s%d%c,work,6,hard); printf(sprintf 結(jié)果輸出: %sn,sz_str); printf(sprintf 函數(shù)返回值輸出: %dn,i_Tmp); e) sscanf() sscanf( s, ” %d%f%”s , char sz_str111; sscanf(sz_str,%4s,sz_str1); i_Tmp=sscanf(sz_str,%4s,sz_str1); pri

28、ntf( 輸出結(jié)果 :%sn,sz_str1); printf(sscanf 函數(shù)返回值: %dn,i_Tmp); 運(yùn)行結(jié)果: 輸出結(jié)果: work sscanf 函數(shù)返回值: 1 9. 全局變量與局部變量的定義和區(qū)別 變量的作用域指變量所起的作用范圍, 它可分為全局變量和局部變量。 變量的定義位置決定了變量的作用域, 1) 全局變量 全局變量是指在函數(shù)外部定義的變量, 它不屬于哪一個(gè)函數(shù), 它屬于一個(gè)源 程序文件, 它的作用范圍從定義變量定義的位置開(kāi)始到本源文件的結(jié)束。 在函數(shù) 中使用全局變量, 一般應(yīng)做全局變量聲明。 只有在函數(shù)內(nèi)部經(jīng)過(guò)聲明的全局變量 才能使用。但在一個(gè)函數(shù)之前定義全局變量

29、,在該函數(shù)內(nèi)使用可不加以聲明。 全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。 同一個(gè)文件中的所有函數(shù)都 能引用全局變量的值,當(dāng)一個(gè)函數(shù)改變了全局變量的值,就會(huì)影響到其它函數(shù), 有利于函數(shù)之間信息的傳遞。 2) 局部變量 在函數(shù)中或者復(fù)合語(yǔ)句中定義的變量稱為局部變量, 它的作用范圍只限于該 函數(shù)或者該復(fù)合語(yǔ)句中,在其它位置無(wú)效。 如果全局變量和局部變量重名, 在定義局部變量中的子程序中局部變量起作 用,全局變量失效。 程序在編譯過(guò)程中, 系統(tǒng)并不會(huì)為局部變量分配存儲(chǔ)單元, 而在程序的運(yùn)行 過(guò)程中,當(dāng)局部變量所在函數(shù)被調(diào)用時(shí), 系統(tǒng)才會(huì)為變量分配臨時(shí)內(nèi)存, 函數(shù)調(diào) 用結(jié)束后,釋放空間。 3) 全局變

30、量和局部變量的區(qū)別 1 全局變量的有效范圍從定義該變量的位置開(kāi)始到本源文件的結(jié)束, 局部變 量只在定義該變量的函數(shù)中有效,在函數(shù)外部無(wú)效。 2 局部變量是程序運(yùn)行到該函數(shù)時(shí)給變量分配內(nèi)存空間, 函數(shù)運(yùn)行結(jié)束后釋 放空間,全局變量在程序運(yùn)行時(shí)先分配內(nèi)存空間, 直到本源文件執(zhí)行完以后釋放 空間。 4) 程序?qū)嵗?#include stdafx.h int x=6,y=8; void plus() printf( x=%dt,y=%dn ,x,y); x+; y+; void main() void plus(); int x=2,y; x=2,y=3; printf( x=%dt,y=%dn ,x

31、,y); plus(); printf( x=%dt,y=%dn ,x,y); plus(); S3 _: . ir d o stem i2c md. exe 參考書目: 1.C語(yǔ)言程序設(shè)計(jì)作者 張書云 姜淑菊 朱雷P89-P91 10. 文件操作以處理 1)FILE類型 文件:存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。聲明 FILE結(jié)構(gòu)體類型的信息須聲明 #inclu議案不能定義指向FILE類型變量的指針變量FILE *fp ; 2)fopen 函數(shù) 調(diào)用方式:fopen (文件名,使用文件方式),文件打開(kāi)成功則返回一個(gè)FILE 類型指針,否則返回NULL。 表10-1文件打開(kāi)方式 文件使用方式 含義 “

32、 r(只讀) 為輸入打開(kāi)一個(gè)文本文件 “ w” (只寫) 為輸出打開(kāi)一個(gè)文本文件 “ a” (追加) 向文本文件尾部增加數(shù)據(jù) “ rb ”(只讀) 為輸入打開(kāi)一個(gè)二進(jìn)制文件 “ wb”(只寫) 為輸入打開(kāi)一個(gè)二進(jìn)制文件 “ ab (追加) 向二進(jìn)制文件尾增加數(shù)據(jù) “ r+ ”(讀寫) 為讀/寫打開(kāi)一個(gè)文本文件 “ W+” (讀寫) 為讀/寫建立一個(gè)新的文本文件 “ a+ ”(讀寫) 為讀/寫打開(kāi)一個(gè)文本文件 “ rb+ ” (讀寫) 為讀/寫打開(kāi)一個(gè)二進(jìn)制文件 “ wb+”(讀寫) 為讀/寫建立一個(gè)新的二進(jìn)制文件 “ ab+ ” (讀寫) 為讀/寫打開(kāi)一個(gè)二進(jìn)制文件 fopen(a1,r);

33、FILE *fp ;fp=fopen(a1,r); 將 fopen 函數(shù)的返回值賦給指針變量 fp。 常用下面方法打開(kāi)一個(gè)文件: if(fp=fopen(file1,r)=NULL) printf(cannot open this filen); exit(0); 3) fclose 函數(shù)(文件的關(guān)閉) 關(guān)閉fclose文件指針);當(dāng)順利關(guān)閉文件,則返回0值,否則返回EOF(-1). 4) fprintf 函數(shù)與 fscanf 函數(shù) fprintf函數(shù)、fscanf函數(shù)與printf函數(shù)、seanf函數(shù)相仿都是格式化讀寫函數(shù)。 只有一點(diǎn)不同:fprintf和fscanf函數(shù)的讀寫對(duì)象不是終端而

34、是磁盤文件。它們的一 般調(diào)用方式為: fprintf(文件指針,格式化字符串,輸出列表); fscanf(文件指針,格式化字符串,輸入列表); 例如: fprintf(fp,”%d,%6.2f”,I,t); 它的作用是將變量i與t的值按%d與6.2f的格式輸出到fp指向的文件上。 用fprintf函數(shù)和fscanf函數(shù)對(duì)磁盤文件讀寫,使用方便,容易理解,但由于 在輸入時(shí)要將 ASCII 碼轉(zhuǎn)換為二進(jìn)制形式,在輸出時(shí)又要講二進(jìn)制形式轉(zhuǎn)換成 字符,花費(fèi)時(shí)間較多。因此,在內(nèi)存與磁盤頻繁交換數(shù)據(jù)的情況下,最好不要使 用 fprintf 和 fscanf 函數(shù)。 5) fread 與 fwrite 函數(shù)

35、 ANSI C標(biāo)準(zhǔn)提出設(shè)置兩個(gè)函數(shù)(fread與fwrite),用來(lái)讀寫一個(gè)數(shù)據(jù)塊,它 們的一般調(diào)用形式為 fread( buffer , size, count, fp); fwrite (buffer, size, count, fp); 其中: buffer:是一個(gè)指針。對(duì)于fread來(lái)說(shuō),它是讀入數(shù)據(jù)的存放地址。對(duì)fwrite 來(lái)說(shuō),是要輸出的數(shù)據(jù)的地址。 Size :要讀寫的字節(jié)數(shù)。 Count:要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)。 fp:文件型指針。 如果fread與fwrite調(diào)用成功,則函數(shù)返回值為count的值,即輸入輸出數(shù) 據(jù)項(xiàng)的完整個(gè)數(shù)。 常用 fread 與 fwri

36、te 函數(shù)進(jìn)行文件的讀寫操作 例: Uviod Rtade ( I FILE*fp. if (fAfgen紐施蕊寫方式:ULuNULL/當(dāng)文件無(wú)迭正常打開(kāi)也風(fēng)她; 欣遼 ei!f#(fp)/f Kf (t p)X11OHMM5JK+ 否則返回寧值 typ*XKXX; 土處三gm*nallBc: (#i空色of (typm): f re ad (luff er j 汛血禺 l#p);飆香貝惟回零; 1 J else w I “iirtf(醴打開(kāi)夏件W”); ) JI BTidd friteO FILEfp: if UfpY叩沖刃坯規(guī)二:壞三方武_)二MULL) vrhile (buffer(=N

37、ULU f read (buffer, we1, fp); else: printfCM打開(kāi)文件Vn ); 11. 冒泡排序與折半排序 1)冒泡排序 冒泡排序(Bubble Sort),是一種計(jì)算機(jī)科學(xué)領(lǐng)域的較簡(jiǎn)單的排序算法。它 重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們 交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列 已經(jīng)排序完成。 冒泡排序算法的運(yùn)作如下:(從后往前) a)比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。 b)對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在 這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。 c)針

38、對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。 d)持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需 要比較。 實(shí)例: #include #defineSIZE8 Void Bubble_Sort(int a,int n); Void Bubble_Sort(int a,int n) /n 為數(shù)組 a 的元素個(gè)數(shù) int i,j,temp; for(j=0;jn -1;j+) for(i=0;iai+1)/ 數(shù)組元素大小按升序排列 temp=ai; ai=ai+1; ai+1=temp; int main() int i_NumSIZE=95,45,15,78,84,51,24,12

39、; int i; Bubble_Sort(i_Num,SIZE); for(i=0;ip_Num1) i_Buffer=p_Num0; p_Num0=p_Num1; p_Num1=i_Buffer; for (i_Loop=2;i_Loopi_Len;i_Loop+) i_Left=0; i_Right=i_Loop -1; i_Buffer=p_Numi_Loop; if (i_Buffer=p_Numi_Right) if (i_Buffer=p_Num0) i_Middle=0; else i_Middle=i_Right+1; else while(i_Left=p_Numi_Midd

40、le) i_Left=i_Middle+1; else i_Right=i_Middle -1; / 確定要插入的位置 for (i_Subloop=i_Loop;i_Subloopi_Middle;i_Subloop -)/ 生成新的有序數(shù)組 p_Numi_Subloop=p_Numi_Subloop -1; p_Numi_Middle=i_Buffer; 鏈表實(shí)例: struct _Road* RoadOrder(struct _Road *pst_Road ) struct _Road *pst_Road_Head; pst_Road_Head=pst_Road; struct _Roa

41、d *p_Low,*p_Hight,*p_Mid,*p_Current; p_Low=pst_Road; p_Hight=pst_Road -pst_Next; int i_Low,i_Hight,i_Mid;/ 中數(shù) int i_Len=RoadListLength(pst_Road); if (pst_Road_Head-i_GeoLengthp_Hight -i_GeoLength) pst_Road_Head-pst_Next=p_Hight -pst_Next; p_Hight -pst_Next=pst_Road_Head; pst_Road_Head=p_Hight; for (

42、int i=3;i=i_Len;i+) p_Low=p_Mid=p_Hight=pst_Road_Head; i_Low=1,i_Hight=i -1; for(int j=1;jpst_Next; p_Current=p_Hight -pst_Next; /如果小于頭指針數(shù)據(jù) if (p_Current -i_GeoLengthi_GeoLength) p_Hight - pst_Next=p_Current -pst_Next; p_Current-pst_Next=pst_Road_Head; pst_Road_Head=p_Current; else if (p_Current -i_

43、GeoLengthi_GeoLength) while(i_Low=i_Hight) i_Mid=(i_Low+i_Hight)/2; for(int j=i_Low;jpst_Next; if (p_Current -i_GeoLengthp_Mid -i_GeoLength) i_Low=i_Mid+1; else i_Hight=i_Mid -1; /確定插入位置 /插入數(shù)據(jù) for (i=1;ipst_Next; p_Hight- pst_Next=p_Current -pst_Next; p_Current-pst_Next=p_Mid; p_Low-pst_Next=p_Curre

44、nt; return pst_Road_Head; 參考文獻(xiàn):Kyle Loudon算法精解260-270 12. 單鏈表的使用 1)單鏈表的基礎(chǔ)知識(shí) 線性表(Chain)的連接存儲(chǔ)結(jié)構(gòu)成為單鏈表。為了能夠正確的表示鏈表中 元素之間的邏輯關(guān)系,每一個(gè)存儲(chǔ)單元在存儲(chǔ)數(shù)據(jù)元素的同時(shí), 還必須存儲(chǔ)其后 繼元素所在的地址信息,這個(gè)地址信息成為指針。這兩個(gè)部分組成了數(shù)據(jù)元素的 存儲(chǔ)映像,成為結(jié)點(diǎn)(Cha in Node)。結(jié)構(gòu)如下: data n ext 圖1 其中,data為數(shù)據(jù)域,用來(lái)存放數(shù)據(jù)元素;next為指針域,用來(lái)存放該結(jié)點(diǎn) 的后繼結(jié)點(diǎn)的地址。如下圖所示,為單鏈表的存儲(chǔ)示意圖。從圖中可以看出,

45、除 了最開(kāi)始的結(jié)點(diǎn),其他每個(gè)結(jié)點(diǎn)的存儲(chǔ)地址都存放在其前驅(qū)結(jié)點(diǎn)的next域中。 圖:鏈表有一個(gè)“頭指針”變量,圖中以head表示,它存放一個(gè)地址。該 地址指向一個(gè)元素??梢钥闯觯琱ead指向第一個(gè)元素,第一個(gè)元素又指向第二 個(gè)元素直到指向最后一個(gè)元素,該元素不再指向其他元素,它稱為“表尾”, 它的地址部分存放一個(gè)“ NULL ”(表示“空地址”),鏈表到此結(jié)束。 圖2 a4 NULI 2)單鏈表的實(shí)現(xiàn) 單鏈表上進(jìn)行定位,鏈表結(jié)點(diǎn)的插入、刪除操作算法。 a)定位 在鏈表中查找出第i個(gè)結(jié)點(diǎn),若存在則返回該結(jié)點(diǎn)的地址,否則就返回表頭 結(jié)點(diǎn)的地址。 操作步驟:定義整型變量i_Temp和指針變量p, i_

46、Temp初值為0,p指向表 的頭結(jié)點(diǎn);判斷i_Tempi的時(shí)候,令p指向縣一個(gè)結(jié)點(diǎn),同時(shí)i_Temp加1;反 復(fù)循環(huán)這個(gè)過(guò)程。 b)插入 在第i個(gè)結(jié)點(diǎn)后面插入一個(gè)數(shù)值為x的新結(jié)點(diǎn),用i=0表示將新結(jié)點(diǎn)插在表 頭結(jié)點(diǎn)之后,成為線性表的第一個(gè)結(jié)點(diǎn)。 操作步驟:首先,判斷參數(shù)i是否正確,若i0或者i的長(zhǎng)度超過(guò)鏈表長(zhǎng)度, 則說(shuō)明i不正確,無(wú)法進(jìn)行插入操作;否則,先進(jìn)行定位,確定第i個(gè)結(jié)點(diǎn)的地 址p,在p結(jié)點(diǎn)的后面插入一個(gè)新結(jié)點(diǎn): 為新節(jié)點(diǎn)分配存儲(chǔ)單元 將x存入新結(jié)點(diǎn)的數(shù)值字段中 將p結(jié)點(diǎn)指針字段的值存入新結(jié)點(diǎn)的指針字段中 將新結(jié)點(diǎn)地址存入p結(jié)點(diǎn)的指針字段中 令線性表的長(zhǎng)度值加1. C)刪除 刪除線性表

47、中的第i個(gè)結(jié)點(diǎn) 操作步驟:首先,判斷參數(shù)i是否正確,若il_Num, head=NULL; while(stu1-l_Num!=0) i_Count=i_Count+1; if(i_Count=1)head=stu1; else stu2-next=stu1; stu2=stu1; stu1=(struct student *)malloc(LEN); scanf(%d,%f, stu2-next=NULL; return(head); ; 輸出單表鏈函數(shù) * void print(struct student *head) struct student *stu; printf(nNow,T

48、hese %d records are :n,i_Count); stu=head; if(head!=NULL) do printf(%ld%5.1fn,stu-l_Num,stu-f_Score); stu=stu-next; while (stu!=NULL); 清空單表鏈函數(shù) * void Erase(struct student *head) struct student *stu1,*stu2; stu1=head; while(stu1) stu2=stu1-next; delete stu1; head=stu0;stu0-next=NULL; 刪除單鏈表節(jié)點(diǎn)函數(shù) * stru

49、ct student *Del(struct student *head,long Del_Num) / 刪除節(jié)點(diǎn) struct student *stu1,*stu2; if (head=NULL) printf(nlist null!n);/*goto end;*/ stu1=head; while (Del_Num!=stu1-l_Num stu1=stu1-next; ; if (Del_Num=stu1-l_Num)/ 找到了 if (stu1=head)/ p1 指向的首結(jié)點(diǎn),把第二個(gè)結(jié)點(diǎn)地址賦值給head head=stu1-next; else stu2-next=stu1-n

50、ext; printf(delete:%ldn,Del_Num); i_Count=i_Count-1; else printf(%ld not been found! n,Del_Num);/ 招不到該結(jié)點(diǎn) return(head); /* 插 入單鏈 表節(jié)點(diǎn)函數(shù) ( 按照學(xué)號(hào)順序排序輸入的,存在很大的局限性!) */ struct student *Insert(struct student *head,struct student *stud) / 插入操作(書上插入的代碼有問(wèn) 題!) struct student *stu0,*stu1,*stu2; stu1=head; stu0=s

51、tud; /p0 指向要插入的結(jié)點(diǎn) if (head=NULL) / 如果原來(lái)鏈表是空的 else while (stu0-l_Numstu1-l_Num) /p2 指向剛才 p1 指向的結(jié)點(diǎn) stu1=stu1-next; /p1 向后移動(dòng)一個(gè) if (stu0-l_Numl_Num) if (head=stu1) / 插到第一個(gè)結(jié)點(diǎn)之前 head=stu0; else stu2-next=stu0; / 插到 p2 指向的結(jié)點(diǎn)之后 else stu1-next=stu0; stu0-next=NULL; i_Count=i_Count+1; return(head); 單鏈表技術(shù) * vo

52、id Case_List() struct student *head,stu; long Del_Num; int i_Choice; char c_temp; printf(%s, 第十三層 -鏈表技術(shù): n); printf( 請(qǐng)創(chuàng)建單鏈表! n); printf( 請(qǐng)您輸入信息,輸入 0 表示結(jié)束! n); head=creat(); print(head); fflush(stdin); 請(qǐng)輸入您的選擇: n); printf( 輸入成功! n); printf(1 、刪除結(jié)點(diǎn) 2、插入節(jié)點(diǎn) 3、清空鏈表 c_temp=getchar(); i_Choice=atoi( while

53、(i_Choice!=4) switch(i_Choice) case 1: fflush(stdin); printf( 請(qǐng)輸入您要?jiǎng)h除的學(xué)號(hào): ); scanf(%ld, head=Del(head,Del_Num); print(head); fflush(stdin); break; case 2: fflush(stdin); printf( 請(qǐng)輸入您要插入的學(xué)生信息: ); scanf(%ld,%f, head=Insert(head, print(head); fflush(stdin); break; case 3: fflush(stdin); Erase(head); pr

54、intf( 鏈表清空成功! ); break; default: fflush(stdin); printf( 意外的輸入! ); c_temp=getchar(); i_Choice=atoi( fflush(stdin); 13. 雙向鏈表 在雙鏈表中, 每一個(gè)結(jié)點(diǎn)都包含兩個(gè)指針字段, 分別用于存放前驅(qū)結(jié)點(diǎn)地址 和后繼結(jié)點(diǎn)地址。 與單鏈表相比,雙向鏈表具有更加靈活的優(yōu)點(diǎn), 從表中的任何一個(gè)結(jié)點(diǎn)出發(fā), 既可以順著后繼指針鏈往后查找,又可以順著前驅(qū)指針鏈往前查找。 在雙向鏈表上進(jìn)行插入和刪除操作室, 需要同時(shí)修改兩個(gè)方向上的指針。 假 設(shè)采用動(dòng)態(tài)存儲(chǔ)的結(jié)構(gòu), prior 表示前驅(qū)指針, nex

55、t 表示后驅(qū)指針。 1) 插入 在結(jié)點(diǎn)p的后面插入一個(gè)新的結(jié)點(diǎn)s,需要修改4個(gè)指針: s-prior-p; s-next=p-next; p-next-prior=s; p-next=s; 注:這里要注意指針的修改順序。在修改第二、第三步的指針時(shí),要用到 p-next 來(lái)找到 p 的后繼結(jié)點(diǎn),所以第四步指針的修改要在第二、第三步的指針 修改完成后才能進(jìn)行。 2) 刪除 設(shè)指針 p 指向待刪除結(jié)點(diǎn),刪除操作可通過(guò)以下語(yǔ)句完成: (p-prior)-next=p-next; (p-next)-prior=p-prior; 注:這兩個(gè)語(yǔ)句順序是可以顛倒的。雖然在執(zhí)行上述語(yǔ)句后結(jié)點(diǎn)p的兩個(gè)指 針域扔指

56、向前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn),但是在雙鏈表中已經(jīng)找不到結(jié)點(diǎn) p,而且,執(zhí) 行完刪除操作以后,還要將結(jié)點(diǎn) p所占的存儲(chǔ)空間釋放。 14. struct,union 和預(yù)處理命令的概念及使用 1) struct 概念及使用 數(shù)據(jù)經(jīng)常以成組的形式存在。 例如學(xué)校必須知道每個(gè)學(xué)生的基本情況, 包括 姓名,學(xué)號(hào),出生日期等信息。 如果這些值能夠存儲(chǔ)在一起, 訪問(wèn)時(shí)會(huì)簡(jiǎn)單一些。 但是,如果這些值得類型不同,他們就無(wú)法存儲(chǔ)在同一個(gè)數(shù)組中。在 C 中,就 會(huì)使用結(jié)構(gòu)把不同類型的值存儲(chǔ)在一起。 結(jié)構(gòu)是一種聚合數(shù)據(jù)類型, 也是一些值得集合, 這些值稱為結(jié)構(gòu)的成員, 但 一個(gè)結(jié)構(gòu)的各個(gè)成員可能具有不同的類型。 結(jié)構(gòu)定義:

57、struct TypeName int a; char b; float c; ; 關(guān)鍵字struct引出了結(jié)構(gòu)的定義。標(biāo)識(shí)符TypeName是結(jié)構(gòu)“標(biāo)記”,命名了 結(jié)構(gòu)的定義,與關(guān)鍵字struct一起使用可聲明結(jié)構(gòu)類型的變量,在定義結(jié)構(gòu)體花 括號(hào)內(nèi)部聲明的變量是結(jié)構(gòu)的成員。 同一結(jié)構(gòu)體的成員不能使用相同的名字, 但 是不同結(jié)構(gòu)可包含同名的成員而不會(huì)發(fā)生沖突。 此外,每個(gè)結(jié)構(gòu)定義都要以分號(hào) 結(jié)束。常見(jiàn)的程序設(shè)計(jì)錯(cuò)誤都是忘記結(jié)構(gòu)定義的分號(hào)。 編譯器不為上述結(jié)構(gòu)定義保留任何內(nèi)存空間, 而是建立了用于聲明變量的一 種新的數(shù)據(jù)的類型。聲明結(jié)構(gòu)變量與聲明其他類型變量類似。 聲明語(yǔ)句: struct Ty

58、peName str_Stu,*p_Stu; 把 str_Stu聲明為 struct TypeName類型的變量,p_Stu 是指向 struct TypeName 的指針。 此外,也可以用下述方法聲明給定結(jié)構(gòu)類型的變量: 在結(jié)構(gòu)定義的花括號(hào)之 后用逗號(hào)隔開(kāi)變量名列表,再在最后加上結(jié)束結(jié)構(gòu)定義的分號(hào)。例如: struct TypeName int a; char b; float c; str_Stu,*p_Stu; 如果結(jié)構(gòu)定義中沒(méi)有包含結(jié)構(gòu)標(biāo)記名,那么該結(jié)構(gòu)類型只能在定義結(jié)構(gòu)時(shí)聲明, 而不能單獨(dú)聲明。 我們?cè)谶M(jìn)行代碼設(shè)計(jì)時(shí), 最好在建立結(jié)構(gòu)類型時(shí)提供結(jié)構(gòu)標(biāo)記 名,以后可以方便地用結(jié)構(gòu)標(biāo)記名

59、聲明該結(jié)構(gòu)類型的新的變量。 當(dāng)然我們也可以采用typedef來(lái)方便的標(biāo)記結(jié)構(gòu)類型,例如: Typedef struct TypeName int a; char b; float c; TypeName; 我們?cè)诼暶髟摻Y(jié)構(gòu)體變量時(shí),就可以直接寫為: TypeName str_Stu,*p_Stu; 結(jié)構(gòu)的初始化 和數(shù)組一樣, 結(jié)構(gòu)也可以用初始化值列表初始化, 即在聲明結(jié)構(gòu)變量時(shí), 在 變量名后用等號(hào)連接在花括號(hào)中的初始化值列表來(lái)初始化該結(jié)構(gòu)變量, 初始化值 用逗號(hào)分開(kāi)。例如: 聲明語(yǔ)句 : struct TypeName str_Stu=10,a,1.2; 建立了類型為struct TypeN

60、ame的變量str_Stu,并將成員a,b,c分別初始化為 10,a,12如果初始化的個(gè)數(shù)少于結(jié)構(gòu)中成員變量的數(shù)目,剩余的成員被自動(dòng)初 始化為 0。 2) union 概念及使用 和結(jié)構(gòu)一樣, 聯(lián)合也是一種聚合數(shù)據(jù)類型, 但是其成員共享了同一個(gè)存儲(chǔ)空 間。程序中的變量無(wú)非是兩種情況:某些變量是相關(guān)的,某些是不相關(guān)的。聯(lián)合 是用來(lái)使相關(guān)變量共享存儲(chǔ)空間而不是把空間浪費(fèi)給不使用的變量。 聯(lián)合的成員 可以使任何數(shù)據(jù)類型。 用來(lái)存儲(chǔ)聯(lián)合的字節(jié)至少能夠足以存儲(chǔ)最大成員。 多數(shù)情 況下,聯(lián)合包含了兩種或多種數(shù)據(jù)類型。同一時(shí)候只能引用一個(gè)成員。 聯(lián)合是用關(guān)鍵字 union 聲明的,其格式與結(jié)構(gòu)的聲明是一樣的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論