版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)郁金香技術(shù)論壇課程網(wǎng)站: 程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)結(jié)構(gòu)體、共用體與枚舉類型 31.結(jié)構(gòu)概念C語(yǔ)言允許將一組邏輯上聯(lián)系的不同類型的數(shù)據(jù)組織起來(lái)作為一個(gè)整體使用保證了數(shù)據(jù)之間的內(nèi)在聯(lián)系用同一個(gè)名字引用的相關(guān)變量的集合提供了將相關(guān)信息組合在一起的一種手段語(yǔ)言提供了一種新的稱為結(jié)構(gòu)的構(gòu)造型數(shù)據(jù)類型概念結(jié)構(gòu)是一組相關(guān)的不同類型的數(shù)據(jù)的集合結(jié)構(gòu)類型為處理復(fù)雜的數(shù)據(jù)提供了便利的手段結(jié)構(gòu)體類型的變量可以擁有不同數(shù)據(jù)類型的成員是不同數(shù)據(jù)類型成員的集合4例如:學(xué)生成績(jī)表由下面的項(xiàng)目組成: 班級(jí) 學(xué)號(hào) 姓名 操作系統(tǒng) 數(shù)據(jù)結(jié)構(gòu) C程序設(shè)計(jì) 網(wǎng)絡(luò)工程(字符串) (長(zhǎng)整) (字符串) (實(shí)型) (實(shí)
2、型) (實(shí)型) (實(shí)型)通訊錄有下列數(shù)據(jù)項(xiàng)組成: 姓名 工作單位 家庭住址 郵編 電話號(hào)碼 E_mail(字符串) (字符串) (字符串) (長(zhǎng)整) (字符串或長(zhǎng)整) (字符串)成績(jī)表: struct score char grade20;/*班級(jí)*/ long number ; /*學(xué)號(hào)*/ char name20;/*姓名*/ float os; /*操作系統(tǒng)*/ float datastru; /*數(shù)據(jù)結(jié)構(gòu)*/ float cprog; /*C語(yǔ)言程序設(shè)計(jì)*/ float compnet; /*網(wǎng)絡(luò)工程*/ ;通訊錄表: struct addr char name20; /*姓名*/ c
3、har department30;/*部門*/ char f_address50;/*家庭住址*/ long box; /*郵編*/ long phone; /*電話*/ char email20;/*Email*/ ;1.結(jié)構(gòu)概念51.結(jié)構(gòu)概念結(jié)構(gòu)體與數(shù)組組成方式都是由若干分量組成的數(shù)組是由相同類型的數(shù)組元素組成結(jié)構(gòu)的分量可以是不同類型的結(jié)構(gòu)中的分量稱為結(jié)構(gòu)的成員訪問(wèn)方式數(shù)組中的分量(元素)是通過(guò)數(shù)組的下標(biāo)訪問(wèn)結(jié)構(gòu)中的成員是通過(guò)成員的名字結(jié)構(gòu)體的成員可以分別引用利用結(jié)構(gòu)體可以組織復(fù)雜的緊湊的數(shù)據(jù)結(jié)構(gòu)如:鏈表、隊(duì)列、堆棧和數(shù)等62.結(jié)構(gòu)的定義在程序中使用結(jié)構(gòu)之前,必須做的工作定義結(jié)構(gòu)體類型建立
4、一個(gè)可用于定義結(jié)構(gòu)類型變量的模型其組成的各個(gè)要素稱為結(jié)構(gòu)體的成員結(jié)構(gòu)的定義說(shuō)明了該結(jié)構(gòu)的組成成員,以及每個(gè)成員的數(shù)據(jù)類型變量在計(jì)算機(jī)中的存在格式定義結(jié)構(gòu)體變量要使用該結(jié)構(gòu)就必須說(shuō)明結(jié)構(gòu)類型的變量根據(jù)結(jié)構(gòu)體類型為所定義的變量分配內(nèi)存空間提示不同的問(wèn)題有不同數(shù)據(jù)成員,即不同描述的結(jié)構(gòu)體類型可以理解為結(jié)構(gòu)體類型根據(jù)所針對(duì)的問(wèn)題不同而使得其結(jié)構(gòu)體的成員是不同的可以有任意多的結(jié)構(gòu)體類型描述使得C語(yǔ)言可以解決的問(wèn)題范圍擴(kuò)大72.結(jié)構(gòu)的定義結(jié)構(gòu)定義的形式說(shuō)明struct為關(guān)鍵字結(jié)構(gòu)的標(biāo)識(shí)符結(jié)構(gòu)類型名稱是所定義的結(jié)構(gòu)的類型標(biāo)識(shí)由用戶自己定義 中包圍的是組成該結(jié)構(gòu)的成員項(xiàng)每個(gè)成員的數(shù)據(jù)類型既可以是簡(jiǎn)單的數(shù)據(jù)類型
5、,也可以是復(fù)雜的數(shù)據(jù)類型整個(gè)定義作為一個(gè)完整的語(yǔ)句用分號(hào)結(jié)束提示結(jié)構(gòu)體類型的說(shuō)明只是列出了該結(jié)構(gòu)的組成情況標(biāo)志這種類型的結(jié)構(gòu)模式已存在編譯系統(tǒng)并沒(méi)有因此而分配存儲(chǔ)空間struct 結(jié)構(gòu)類型名稱 數(shù)據(jù)類型 成員名1; 數(shù)據(jù)類型 成員名2; 數(shù)據(jù)類型 成員名n; ;82.結(jié)構(gòu)的定義結(jié)構(gòu)定義的形式例當(dāng)一個(gè)成員項(xiàng)是一個(gè)結(jié)構(gòu)體時(shí),就形成了結(jié)構(gòu)體的嵌套在數(shù)據(jù)處理時(shí)有時(shí)要用到結(jié)構(gòu)體嵌套處理組織復(fù)雜的數(shù)據(jù)集合常見(jiàn)的錯(cuò)誤是忘記終止結(jié)構(gòu)定義的“;”例:定義一個(gè)日期結(jié)構(gòu)體類型 struct date int year; int mouth; int day;例:定義一個(gè)teacher 類型的結(jié)構(gòu)體 struct d
6、ate int year; int mouth; int day; ; strcut teacher char name20 ; struct date birthday; char depart20 ; ;92.結(jié)構(gòu)的定義結(jié)構(gòu)定義的形式提示結(jié)構(gòu)體必須有struct開(kāi)始結(jié)構(gòu)體的成員可以是基本數(shù)據(jù)類型,也可以是數(shù)組和其它結(jié)構(gòu)類型的變量結(jié)構(gòu)體不能遞歸定義在結(jié)構(gòu)體類型說(shuō)明中不能有該結(jié)構(gòu)體變量允許有指向該結(jié)構(gòu)體的指針成員(自引用結(jié)構(gòu))結(jié)構(gòu)的定義可以在一個(gè)函數(shù)的內(nèi)部,也可以在所有函數(shù)的外部在函數(shù)內(nèi)部定義的結(jié)構(gòu),僅在該函數(shù)內(nèi)部有效定義在外部的結(jié)構(gòu),在所有函數(shù)中都可以使用定義結(jié)構(gòu)體類型后可以定義該結(jié)構(gòu)體類型
7、的變量通過(guò)變量使用該結(jié)構(gòu),以對(duì)不同變量的成員進(jìn)行引用102.結(jié)構(gòu)的定義結(jié)構(gòu)體變量定義的形式struct 結(jié)構(gòu)類型名稱 結(jié)構(gòu)變量名; 說(shuō)明說(shuō)明結(jié)構(gòu)變量的作用類似于說(shuō)明一個(gè)類型變量一樣系統(tǒng)為所說(shuō)明的結(jié)構(gòu)變量按照結(jié)構(gòu)定義時(shí)組成分配存儲(chǔ)數(shù)據(jù)的實(shí)際內(nèi)存單元結(jié)構(gòu)變量的成員在內(nèi)存中占用連續(xù)存儲(chǔ)區(qū)域,所占內(nèi)存大小為結(jié)構(gòu)中每個(gè)成員的長(zhǎng)度之和 例:struct date int year; int mouth; int day; ; struct date today,days20,*day;struct 結(jié)構(gòu)類型名 成員1類型標(biāo)識(shí) 成員1名; 成員2類型標(biāo)識(shí) 成員2名; 成員n類型標(biāo)識(shí) 成員n名; ; stru
8、ct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量列表;112.結(jié)構(gòu)的定義結(jié)構(gòu)體變量提示在程序中,結(jié)構(gòu)的定義要先于結(jié)構(gòu)變量的說(shuō)明不能用尚未定義的結(jié)構(gòu)類型對(duì)變量進(jìn)行說(shuō)明結(jié)構(gòu)的定義和說(shuō)明可以同時(shí)進(jìn)行被說(shuō)明的結(jié)構(gòu)變量可直接在結(jié)構(gòu)定義的“ ”后給出例如說(shuō)明結(jié)構(gòu)變量today可以使用下面的語(yǔ)句 struct date int year, month, day; today;使用sizeof計(jì)算一個(gè)結(jié)構(gòu)變量占用內(nèi)存的實(shí)際大小使用的一般形式為:sizeof(變量或類型說(shuō)明符)122.結(jié)構(gòu)的定義結(jié)構(gòu)體變量提示結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是兩個(gè)不同的概念編譯系統(tǒng)不為結(jié)構(gòu)體類型分配內(nèi)存空間,只為結(jié)構(gòu)體變量分配內(nèi)存空間內(nèi)存的大小依據(jù)結(jié)構(gòu)體類
9、型的定義(結(jié)構(gòu)體類型的變量占內(nèi)存長(zhǎng)度不定長(zhǎng))結(jié)構(gòu)體中的成員名可以和程序中的其他變量同名,互不影響,也可以與結(jié)構(gòu)變量名相同但應(yīng)盡量避免在不同的結(jié)構(gòu)中使用相同的結(jié)構(gòu)名雖然允許,但會(huì)造成混淆結(jié)構(gòu)體變量的成員(域)可以單獨(dú)使用(相當(dāng)于基本變量)成員也可以是指向本結(jié)構(gòu)體類型的指針struct teacher char name20 ; int age; char sex; char depart20 ; struct teacher *next; ; 133.使用結(jié)構(gòu)體結(jié)構(gòu)成員的引用結(jié)構(gòu)作為若干成員的集合是一個(gè)整體可對(duì)結(jié)構(gòu)整體進(jìn)行操作可訪問(wèn)結(jié)構(gòu)中的每個(gè)成員使用結(jié)構(gòu)中成員的方法結(jié)構(gòu)變量名.成員名稱運(yùn)算符“
10、.”的含義是訪問(wèn)結(jié)構(gòu)中的成員“.”操作的優(yōu)先級(jí)最高結(jié)合性為從左到右指針變量名-成員名在結(jié)構(gòu)體指針變量情況下使用運(yùn)算符“-”143.使用結(jié)構(gòu)體結(jié)構(gòu)成員的引用例對(duì)于結(jié)構(gòu)體變量today有效的結(jié)構(gòu)體成員是year,month,daytoday.year,today.mouth,today.day是對(duì)結(jié)構(gòu)體變量today的合法引用打印today的成員year printf(“%d” ,today.year);將today的成員 month置為12 today.month=12;struct date int year; int month; int day; today,tomorrow ;153.使
11、用結(jié)構(gòu)體結(jié)構(gòu)成員的引用提示結(jié)構(gòu)的成員可以象一般變量一樣參與各種操作和運(yùn)算進(jìn)行結(jié)構(gòu)變量的整體操作就有很多限制由于結(jié)構(gòu)中各個(gè)成員的邏輯意義不同,類型不同,對(duì)結(jié)構(gòu)變量整體的操作的物理意義不是十分明顯C語(yǔ)言中能夠?qū)Y(jié)構(gòu)進(jìn)行整體操作的運(yùn)算只有賦值“=”和取地址“&”操作例如: struct date day1=1999,10,12; struct date day2;day2= day1;/*將day1的所有成員值賦值給 day2;*/可以引用結(jié)構(gòu)體成員的地址也可以引用結(jié)構(gòu)體變量的地址主要作用于函數(shù)的參數(shù)傳遞(傳遞結(jié)構(gòu)體的地址)163.使用結(jié)構(gòu)體結(jié)構(gòu)成員的引用提示C語(yǔ)言不允許將兩個(gè)結(jié)構(gòu)體變量整體比較,只
12、能是逐個(gè)成員之間進(jìn)行比較例如 struct date d1=1994,11,20,d2;d2=d1;d2.day=7;if ( d1.year= =d2.year )&( d1.month= =d2.month ) &( d1.day= =d2.day ) printf(“same day”); else printf(“diffierent day”);17struct date int year; int mouth; int day; struct student int num; char name20; char sex; int age; struct date birthday;
13、 char addr30 ; stud1,stud2;3.使用結(jié)構(gòu)體結(jié)構(gòu)成員的引用提示對(duì)于嵌套定義的結(jié)構(gòu)體成員的引用,要逐級(jí)找到最后一級(jí)的結(jié)構(gòu)體成員,只能對(duì)這個(gè)成員進(jìn)行引用用成員運(yùn)算符“.”自左向右的將內(nèi)外層連接起來(lái)對(duì)中間過(guò)程所涉及的成員不能引用合法引用一個(gè)學(xué)生的生日: stud1.birthday.day; stud1.birthday.month; stud1.birthday.year;183.使用結(jié)構(gòu)體結(jié)構(gòu)的初始化在結(jié)構(gòu)說(shuō)明的同時(shí),可以對(duì)每個(gè)成員置初值,稱為結(jié)構(gòu)的初始化結(jié)構(gòu)初始化的一般形式說(shuō)明初始化數(shù)據(jù)的個(gè)數(shù)與結(jié)構(gòu)成員的個(gè)數(shù)應(yīng)相同它們是按成員的先后順序一一對(duì)應(yīng)賦值的每個(gè)初始化數(shù)據(jù)必須符
14、合與其對(duì)應(yīng)的成員的數(shù)據(jù)類型例如struct date nextday=2000,12,27 ;struct 結(jié)構(gòu)類型名 結(jié)構(gòu)變量名=成員1的值,成員2的值,19【例】調(diào)式程序 struct person char name20 ; int age; char sex; ; void main() struct person a=“l(fā)iming” ,23,m; struct person b; b=a; b.age=21; b.sex=f ; printf(“%s,%d year old.n” ,,b.age); if (b.sex= = m) printf(“%s is a man
15、.n” ,); else printf(“%s is a woman.n” ,); jgt1.c3.使用結(jié)構(gòu)體20結(jié)構(gòu)體數(shù)組 1.結(jié)構(gòu)體數(shù)組的定義 結(jié)構(gòu)體數(shù)組中的所有元素都具有相同的結(jié)構(gòu)體類型。 三種定義方式:(1)先定義結(jié)構(gòu)體類型再定義結(jié)構(gòu)體數(shù)組 struct teacher char name20 ; int age; char sex; char depart20 ; ; struct teacher teach40 ;(2)同時(shí)定義結(jié)構(gòu)體類型和結(jié) 構(gòu)體數(shù)組 struct teacher char name20 ; int age; char sex; char
16、depart20 ; teach40 ; 所謂結(jié)構(gòu)數(shù)組,就是將一個(gè)已定義的結(jié)構(gòu)體的結(jié)構(gòu)變量定義為數(shù)組變量,對(duì)它的定義與定義一個(gè)一般的結(jié)構(gòu)變量一樣,可以采用直接定義、同時(shí)定義或先定義結(jié)構(gòu)再定義變量的方法。21(3)直接定義結(jié)構(gòu)體數(shù)組而不 需要定義結(jié)構(gòu)體類型名struct char name20 ; int age; char sex; char depart20 ; teach40 ; 三種方法都實(shí)現(xiàn)了一個(gè)結(jié)構(gòu)體數(shù)組的定義,結(jié)構(gòu)體數(shù)組中有40個(gè)元素,每個(gè)元素的類型為結(jié)構(gòu)體類型struct teacher。可用teach0 、teach1 、teach39表示數(shù)組元素。在內(nèi)存中的存放方式:teac
17、h43個(gè)字節(jié)name(20)age(2)sex(1)depart(20) teach0 teach1 teach39name(20)age(2)sex(1)depart(20)22結(jié)構(gòu)體數(shù)組的引用 對(duì)結(jié)構(gòu)體數(shù)組的引用就是指對(duì)結(jié)構(gòu)體數(shù)組元素的引用,由于結(jié)構(gòu)體數(shù)組元素相對(duì)于結(jié)構(gòu)體變量,因此對(duì)結(jié)構(gòu)體變量的引用方法也同樣適用與結(jié)構(gòu)體數(shù)組元素。 引用形式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名例如:struct char name20 ; int age; char sex; char depart20 ; teach40 ; 則:teach2.age表示teach數(shù)組的第3個(gè)元素的age成員項(xiàng)。必須帶有下標(biāo),以表
18、明要訪問(wèn)結(jié)構(gòu)數(shù)組中某個(gè)元素對(duì)應(yīng)的結(jié)構(gòu)中的成員。23結(jié)構(gòu)體數(shù)組元素的賦值A(chǔ)NSI C標(biāo)準(zhǔn)允許將一個(gè)結(jié)構(gòu)體數(shù)組元素賦值給同一結(jié)構(gòu)體數(shù)組的其它元素,或者賦值給同一類型的變量。例如:前面的teach結(jié)構(gòu)體數(shù)組定義后,可以進(jìn)行這樣的賦值: teach3=teach0 ;結(jié)構(gòu)體數(shù)組的輸入輸出 不能對(duì)結(jié)構(gòu)體數(shù)組變量和結(jié)構(gòu)體數(shù)組元素作為一個(gè)整體直接進(jìn)行輸入輸出,只能對(duì)數(shù)組元素的單個(gè)成員進(jìn)行輸入輸出。例如:scanf(“%d” ,&teach3.age); printf(“%c” ,teach0.sex);24結(jié)構(gòu)體數(shù)組的初始化 C語(yǔ)言規(guī)定只能對(duì)全局的或靜態(tài)的結(jié)構(gòu)體數(shù)組進(jìn)行初始化,由于數(shù)組中的每個(gè)元素都是一個(gè)結(jié)
19、構(gòu)體類型,因此要將其成員的值依次放在一對(duì)中,以便區(qū)分各個(gè)元素。例如: struct depart int no; char depname; dp3 =3, “人事處”, 6, “財(cái)務(wù)處”, 10,“計(jì)算中心” ;可以看出:初始化的一般形式: struct 結(jié)構(gòu)名 結(jié)構(gòu)數(shù)組名=初始值;初值表內(nèi)的的作用主要是區(qū)別不同數(shù)組元素的數(shù)據(jù),系統(tǒng)會(huì)順序地按照每對(duì)將數(shù)據(jù)賦給每一個(gè)數(shù)組元素。有關(guān)數(shù)組的規(guī)定對(duì)結(jié)構(gòu)體數(shù)組都適用。25【例】有4個(gè)學(xué)生,每個(gè)學(xué)生包括考號(hào)、成績(jī)、姓名,求出成績(jī)最好 的學(xué)生的姓名和成績(jī)。 struct syudent int num; char name10 ; floart score
20、 ; stud4=1,“ny” ,89, 2,“tz” ,91, 3,“l(fā)m” ,75,4,“sn” ,89 ; main() float max;int i,k; max=stud0.score; k=0; for (i=1;i=4;i+) if (max” ,用于連接指針變量與其指向的結(jié)構(gòu)體成員。如: ( *pt ).age可寫(xiě)成pt -age的形式。結(jié)構(gòu)體變量名.成員名(*結(jié)構(gòu)體類型指針).成員名結(jié)構(gòu)體類型指針-成員名例如:teach.age(*pt).agept-age下面三種引用方式是等價(jià)的。 與普通指針變量一樣,給結(jié)構(gòu)指針變量賦值時(shí),也應(yīng)賦予同類型的結(jié)構(gòu)變量的地址值,而不是某種基類
21、型的數(shù)據(jù)值。并當(dāng)?shù)刂奉愋筒煌瑫r(shí)需要使用強(qiáng)制類型轉(zhuǎn)換。30pt只能指向一個(gè)結(jié)構(gòu)體變量,如:pt=&teach;而不能指向結(jié)構(gòu)體變 量的一個(gè)成員。如:pt=&teach.age;是非法的。雖然&teach.age也 有地址,但這個(gè)地址存放的數(shù)據(jù)類型為整型數(shù)據(jù)而非結(jié)構(gòu)體類型數(shù)據(jù)。pt只能指向一個(gè)結(jié)構(gòu)體數(shù)組的一個(gè)元素(相當(dāng)于變量),然后用-指 向運(yùn)算符取其成員的值,而不能直接指向一個(gè)數(shù)組元素的成員。-運(yùn)算符的優(yōu)先級(jí)最高。例如:struct int numb; char *name; *p;則有表達(dá)式: +p-numb:表示numb的值增加1。而不是p指針向下移動(dòng)。 等價(jià)于+(p-numb)。 (+p)
22、-numb:表示p指針增加操作后,再訪問(wèn)其成員numb。 (p+)-numb:先對(duì)numb操作,再對(duì)指針p加1。31同理: *p-name:是取 name所指向的值; *p-name+:先取name所指向的值,在將name加1。 (*p-name)+:是將name所指向的值加1。 *p+-name:先取name所指向的值,再將指針p加1。例題:對(duì)結(jié)構(gòu)體變量的使用。輸入一個(gè)結(jié)構(gòu)體變量成員并輸出。 #include struct data int day,month,year; ; struct stud char name20; long num; struct data birthday; ;
23、程序中使用結(jié)構(gòu)體類型指針引用結(jié)構(gòu)體類型變量的成員,需要通過(guò)C語(yǔ)言提供的庫(kù)函數(shù) malloc()來(lái)為指針?lè)峙浒踩牡刂贰:瘮?shù)sizeof()返回值是計(jì)算給定數(shù)據(jù)類型所占內(nèi)存的字節(jié)數(shù)。指針?biāo)赶蚋鱾€(gè)成員的形式為: studptr-name, studptr-num, studptr-birthday.32 main() struct stud *studptr; studptr=malloc(sizeof(struct stud); printf(“input name,number,year,month,day:n”); scanf(“%s”,studptr-name); scanf(“%ld”
24、,&studptr-num); scanf(“%d%d%d”,&studptr- birthday.year, &studptr- birthday.month, &studptr-birthday.day); printf(“noutput name,number,birthday:n”); printf(“%20s%10ld%10d/%d/%d”, studptr-name,studptr-num, studptr-birthday.year, studptr-birthday.month, studptr-birthday.day); jgt3.c33指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用定義結(jié)構(gòu)體
25、類型的指針指向數(shù)組元素指向數(shù)組名但在使用時(shí)要加以區(qū)分例如:對(duì)上例定義成結(jié)構(gòu)體數(shù)組以及指向結(jié)構(gòu)體類型的指針。 struct stu student40,*studptr; 當(dāng) studptr=student時(shí),指針studptr指向了結(jié)構(gòu)體數(shù)組student。對(duì)數(shù)組元素的引用方法有三種:地址法: student+i和studptr +i 均表示數(shù)組第i個(gè)元素的地址,數(shù)組元素各成員的引用形式為: ( student+i )-name、 ( student+i )-num和 ( studptr +i ) -name、 ( studptr +i ) -num等。 student+i和p+i 與&stu
26、denti的意義相同.34 常見(jiàn)錯(cuò)誤在結(jié)構(gòu)指針運(yùn)算符和之間插入空格試圖只用成員名引用結(jié)構(gòu)的成員。(必須給出結(jié)構(gòu)名)在用指針和結(jié)構(gòu)成員運(yùn)算符引用結(jié)構(gòu)成員時(shí)沒(méi)有() 就是說(shuō)*是一種語(yǔ)法錯(cuò)誤。指針的數(shù)組表示法 當(dāng)指針studptr指向了數(shù)組student, studptri表示數(shù)組的第i個(gè)元素。其效果與student i相同。對(duì)數(shù)組成員的引用描述為: 、 studptri.num等。指針?lè)?若studptr指向某個(gè)元素,則studptr +就是指向其后續(xù)元素.35【例】利用指向結(jié)構(gòu)體的指針編制一程序,實(shí)現(xiàn)輸入三個(gè)學(xué)生的學(xué)號(hào)、 數(shù)學(xué)期中和期末成績(jī),然后計(jì)算平均成績(jī)
27、并輸出成績(jī)表。 #include struct student int num;int mid;int end;int aver;s3 ; main() int i; struct student *p; for (p=s;pnum),&(p-mid), &(p-end); p-aver=(p-mid+p-end)/2; for (p=s;pnum,p-mid, p-end,p-aver); 36結(jié)構(gòu)體與函數(shù) 注意 結(jié)構(gòu)變量作為參數(shù)傳遞時(shí),其實(shí)參與形參的結(jié)構(gòu)類型必須一致,傳遞時(shí)其實(shí)參只需指定其結(jié)構(gòu)變量名即可。當(dāng)實(shí)參為數(shù)組時(shí),其形參可以定義為同類型結(jié)構(gòu)的結(jié)構(gòu)數(shù)組或結(jié)構(gòu)指針。與普通變量一樣,結(jié)構(gòu)變
28、量在函數(shù)內(nèi)部定義時(shí)為局部的,其值只在本函數(shù)范圍內(nèi)有效,不會(huì)影響其它函數(shù) 將結(jié)構(gòu)傳遞給函數(shù)的方式有三種傳遞單個(gè)成員傳遞整個(gè)結(jié)構(gòu)傳遞指向結(jié)構(gòu)的指針傳遞結(jié)構(gòu)變量的地址可以實(shí)現(xiàn)結(jié)構(gòu)的傳址調(diào)用。 在早期的C語(yǔ)言中,不允許將結(jié)構(gòu)變量作為函數(shù)的參數(shù)傳遞,只有在較高版本的C語(yǔ)言中才支持這種傳遞。與結(jié)構(gòu)變量一樣,結(jié)構(gòu)數(shù)組作為函數(shù)參數(shù)傳遞也只在C的高版本中才支持。37 #define FORMAT “%dn%sn%6.2fn” struct student int num; char name20; float score; ; main() void print (); struct student stud;
29、 stud.num=1001; strcopy(,”michell”); stud.score=90.9; print(&stud); void print(p) struct student *p; printf(FORMAT,p-num,p-name,p-score); printf(“n”); 在調(diào)用print時(shí), &stud做實(shí)參,將stud的地址傳遞給函數(shù)的形參p,這時(shí)p指向了結(jié)構(gòu)變量 stud的成員值。38【例】設(shè)有下面的定義, struct aa int i;char c;t; struct ccint m,struct aa *n; struct cc w,*p=&w;要建立右圖的結(jié)構(gòu)應(yīng)如何操作?(用指針實(shí)現(xiàn)) 0 p w m n1A i c t
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)模板筆試
- 2025年度泰康企業(yè)客戶協(xié)議存款管理合同3篇
- 二零二五年度房產(chǎn)租賃反擔(dān)保合同(住宅租賃)6篇
- 二零二五年度智慧校園建設(shè)項(xiàng)目9A等級(jí)施工合同3篇
- 課程設(shè)計(jì)直齒
- 課程設(shè)計(jì)屋面防水怎么算
- 自動(dòng)干手電路課程設(shè)計(jì)
- 水泥車間發(fā)貨員安全生產(chǎn)職責(zé)模版(3篇)
- 辦公室人員考核細(xì)則(二篇)
- 項(xiàng)目經(jīng)理部主要崗位職責(zé)(2篇)
- 創(chuàng)傷關(guān)節(jié)骨科年度總結(jié)
- 2022-2023學(xué)年江蘇省鹽城第一學(xué)期高一期末考試數(shù)學(xué)試卷及答案解析-普通用卷
- 醫(yī)師病理知識(shí)定期考核試題與答案
- 履約情況證明(共6篇)
- 礦井提升容器課件
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 《潔凈工程項(xiàng)目定額》(征求意見(jiàn)稿)
- 城鎮(zhèn)燃?xì)庠O(shè)計(jì)規(guī)范
- 年零售藥店操作規(guī)程版
- 日有所誦(二年級(jí))
- 搞笑個(gè)性YY娛樂(lè)頻道分組設(shè)計(jì)圖
評(píng)論
0/150
提交評(píng)論