C語言程序設(shè)計案例式教程-第9章 結(jié)構(gòu)體_第1頁
C語言程序設(shè)計案例式教程-第9章 結(jié)構(gòu)體_第2頁
C語言程序設(shè)計案例式教程-第9章 結(jié)構(gòu)體_第3頁
C語言程序設(shè)計案例式教程-第9章 結(jié)構(gòu)體_第4頁
C語言程序設(shè)計案例式教程-第9章 結(jié)構(gòu)體_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章結(jié)構(gòu)體《C語言程序設(shè)計案例式教程(第2版)》學(xué)習(xí)目標(biāo)/Target了解結(jié)構(gòu)體的概念,能夠說出結(jié)構(gòu)體類型的特點掌握結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的定義,能夠定義結(jié)構(gòu)體類型與結(jié)構(gòu)體變量掌握結(jié)構(gòu)體變量的初始化,能夠完成結(jié)構(gòu)體變量的初始化了解結(jié)構(gòu)體變量的存儲方式,能夠說出結(jié)構(gòu)體變量的存儲特點學(xué)習(xí)目標(biāo)/Target掌握結(jié)構(gòu)體變量的成員訪問,能夠使用“.”運算符和“→”運算符實現(xiàn)結(jié)構(gòu)體變量成員的訪問掌握嵌套結(jié)構(gòu)體變量的成員說,能夠使用“.”運算符和“→”運算符實現(xiàn)嵌套結(jié)構(gòu)體變量成員的訪問了解嵌套結(jié)構(gòu)體的內(nèi)存管理,能夠說出嵌套結(jié)構(gòu)體的存儲特點掌握結(jié)構(gòu)體數(shù)組的定義與初始化,能夠完成結(jié)構(gòu)體數(shù)組的定義與初始化學(xué)習(xí)目標(biāo)/Target掌握結(jié)構(gòu)體數(shù)組的訪問,能夠完成結(jié)構(gòu)體數(shù)組的訪問掌握結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)的使用,能夠使用結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針傳遞數(shù)據(jù)掌握typedef關(guān)鍵字的使用,能夠使用typedef關(guān)鍵字簡化構(gòu)造類型的定義與使用了解共用體的概念,能夠說出共用體構(gòu)造類型的特點章節(jié)概述/Summary前面章節(jié)所學(xué)的數(shù)據(jù)類型都是分散的、互相獨立的,例如定義inta和charb兩個變量,這兩個變量是毫無內(nèi)在聯(lián)系的,但在實際生活和工作中,經(jīng)常需要處理一些關(guān)系密切的數(shù)據(jù),例如,描述公司員工信息,包括姓名、部門、職位、電話、E-mail地址等數(shù)據(jù),由于這些數(shù)據(jù)的類型各不相同,因此,要想對這些數(shù)據(jù)進(jìn)行統(tǒng)一管理,僅靠前面所學(xué)的基本類型和數(shù)組很難實現(xiàn)。為此,C語言提供了結(jié)構(gòu)體構(gòu)造類型,它能夠?qū)⑾嗤愋突蛘卟煌愋偷臄?shù)據(jù)組織在一起成為集合,解決更復(fù)雜的數(shù)據(jù)處理問題。本章將圍繞結(jié)構(gòu)體進(jìn)行詳細(xì)地講解。目錄/Contents案例9-1名片制作案例9-2員工生日福利案例9-3計算學(xué)生平均成績目錄/Contents案例9-4打漁曬網(wǎng)案例9-5角色與權(quán)限案例9-6學(xué)生成績管理系統(tǒng)名片制作案例9-1【案例9-1】名片制作(1)了解結(jié)構(gòu)體的概念,能夠說出結(jié)構(gòu)體類型的特點(2)掌握結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的定義,能夠定義結(jié)構(gòu)體類型與結(jié)構(gòu)體變量(3)掌握結(jié)構(gòu)體變量初始化,能夠完成結(jié)構(gòu)體變量的初始化(4)了解結(jié)構(gòu)體變量存儲方式,能夠說出結(jié)構(gòu)體變量存儲特點(5)掌握結(jié)構(gòu)體變量的成員訪問,能夠使用“.”運算符和“→”運算符實現(xiàn)結(jié)構(gòu)體變量成員的訪問學(xué)習(xí)目標(biāo)案例描述本案例要求編寫一個程序,從鍵盤輸入個人信息,在控制臺輸出一張名片,名片內(nèi)容包括姓名、職位、聯(lián)系方式、公司單位、地址,如下圖。知識需求名片不同類型數(shù)據(jù)統(tǒng)一管理結(jié)構(gòu)體知識講解1.結(jié)構(gòu)體類型定義結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型,可以把相同或者不同類型的數(shù)據(jù)整合在一起,這些數(shù)據(jù)稱為該結(jié)構(gòu)體的成員。結(jié)構(gòu)體類型要先定義再使用。struct結(jié)構(gòu)體類型名稱{

數(shù)據(jù)類型

成員名1;

數(shù)據(jù)類型

成員名2; ……

數(shù)據(jù)類型

成員名n;};定義結(jié)構(gòu)體類型的關(guān)鍵字結(jié)構(gòu)體成員注意分號必不可少知識講解1.結(jié)構(gòu)體類型定義假設(shè)定義一個學(xué)生結(jié)構(gòu)體,學(xué)生信息包含學(xué)號(num)、姓名(name)、性別(sex)、年齡(age)、地址(address),定義如下。structStudent{ intnum; charname[10]; charsex; intage; charaddress[30];};結(jié)構(gòu)體名稱結(jié)構(gòu)體Student的成員知識講解1.結(jié)構(gòu)體類型定義1.結(jié)構(gòu)體類型定義以關(guān)鍵字struct開頭,后面的結(jié)構(gòu)體類型名稱命名符合標(biāo)識符命名規(guī)則。注2.結(jié)構(gòu)體類型與整型、浮點類型、字符類型等類似,只是數(shù)據(jù)類型,而非變量。3.定義結(jié)構(gòu)體類型不會分配內(nèi)存,只有通過結(jié)構(gòu)體類型定義了結(jié)構(gòu)體變量,系統(tǒng)才會為變量分配內(nèi)存。4.定義結(jié)構(gòu)體類型時,末尾的分號不可缺少。項意事知識講解2.結(jié)構(gòu)體變量的定義01先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量struct結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名;定義示例。structStudentstu1,stu2;結(jié)構(gòu)體變量stu1與stu2的內(nèi)存分配知識講解2.結(jié)構(gòu)體變量的定義使用結(jié)構(gòu)體類型定義變量時,struct關(guān)鍵字不可少,structStudent作為整體才表示一個結(jié)構(gòu)體類型。Studentstu1;

//錯誤,缺少struct關(guān)鍵字知識講解2.結(jié)構(gòu)體變量的定義02在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量struct結(jié)構(gòu)體類型名稱{

數(shù)據(jù)類型

成員名1;

數(shù)據(jù)類型

成員名2; …

數(shù)據(jù)類型

成員名n;}結(jié)構(gòu)體變量名列表;知識講解2.結(jié)構(gòu)體變量的定義02在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量定義示例。structStudent{ intnum; charname[10]; charsex;}stu1,stu2;知識講解3.結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量初始化,其實就是為結(jié)構(gòu)體變量中的各個成員賦值。結(jié)構(gòu)體初始化有兩種方式。01在定義結(jié)構(gòu)體類型時定義結(jié)構(gòu)體變量,同時對結(jié)構(gòu)體變量初始化。structPerson{ intID; charname[10]; charsex;}p={0001,"ZhangSan",'M'};知識講解3.結(jié)構(gòu)體變量的初始化02先定義結(jié)構(gòu)體類型,之后定義結(jié)構(gòu)體變量并對結(jié)構(gòu)體變量初始化。structPerson{ intID; charname[10]; charsex;};structPersonp={0001,"ZhangSan",'M'};知識講解3.結(jié)構(gòu)體變量的初始化編譯器在初始化結(jié)構(gòu)體變量時,按照成員聲明順序從前往后匹配,而不是按照數(shù)據(jù)類型自動匹配。在初始化成員變量時,如果沒有按順序為成員變量賦值,或者只給一部分成員變量賦值,往往會匹配錯誤。structPerson{ intID; charname[10]; charsex;};structPersonp={"ZhangSan",'M'};“ZhangSan“匹配給ID成員,'M'匹配給name成員錯誤示例。知識講解4.結(jié)構(gòu)體變量的存儲方式結(jié)構(gòu)體變量中各成員在內(nèi)存中的存儲遵循字節(jié)對齊機(jī)制。010203結(jié)構(gòu)體變量的首地址能夠被其最大基本類型成員的大小整除。結(jié)構(gòu)體每個成員相對于結(jié)構(gòu)體首地址的偏移量都是該成員大小的整數(shù)倍,且能夠被最大基本類型成員的大小整除。如有需要,編譯器會在成員之間加上填充字節(jié)。結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最大基本類型成員大小的整數(shù)倍,如有需要,編譯器會在最末一個成員后面加上填充字節(jié)。知識講解4.結(jié)構(gòu)體變量的存儲方式定義一個結(jié)構(gòu)體類型與結(jié)構(gòu)體變量。structNote{ chara; doubleb; intc; shortd;};structNotent;

//定義structNote結(jié)構(gòu)體變量內(nèi)存分配知識講解5.結(jié)構(gòu)體變量的成員訪問訪問結(jié)構(gòu)體變量成員的方式有兩種:直接訪問、通過指針訪問。01直接訪問結(jié)構(gòu)體變量的成員直接訪問結(jié)構(gòu)體變量的成員可以通過“.”運算符實現(xiàn)。結(jié)構(gòu)體變量名.成員名;知識講解5.結(jié)構(gòu)體變量的成員訪問訪問結(jié)構(gòu)體變量成員的方式有兩種:直接訪問、通過指針訪問。01直接訪問結(jié)構(gòu)體變量的成員應(yīng)用示例:structPerson{ //定義結(jié)構(gòu)體類型structPerson intID;

charname[10];

charsex;};intmain(){ structPersonp={0001,"ZhangSan",'M'};//定義結(jié)結(jié)構(gòu)體變量p printf("name:%s\n",);}知識講解5.結(jié)構(gòu)體變量的成員訪問訪問結(jié)構(gòu)體變量成員的方式有兩種:直接訪問、通過指針訪問。01直接訪問結(jié)構(gòu)體變量的成員通過“.”運算符可以訪問結(jié)構(gòu)體變量成員,那么也可以通過這種方式修改結(jié)構(gòu)體成員變量的值。chararr[20]="lisi"; //定義字符數(shù)組p.ID=002; //修改成員ID的值strcpy(,arr); //修改成員name的值p.sex='F'; //修改成員sex的值知識講解5.結(jié)構(gòu)體變量的成員訪問訪問結(jié)構(gòu)體變量成員的方式有兩種:直接訪問、通過指針訪問。01直接訪問結(jié)構(gòu)體變量的成員通過“.”運算符也可以初始化結(jié)構(gòu)體變量,這就解決了未按照順序初始化各成員變量時編譯器匹配錯誤的問題。structPersonp={.name="chenwu",.sex='F',.ID=0006}; //未按順序初始化structPersonp={.name="chenwu",.sex='F'}; //只初始化一部分成員知識講解5.結(jié)構(gòu)體變量的成員訪問訪問結(jié)構(gòu)體變量成員的方式有兩種:直接訪問、通過指針訪問。02通過指針訪問結(jié)構(gòu)體變量的成員定義指向結(jié)構(gòu)體變量的指針后,可以通過“指針名→成員變量名”的方式訪問結(jié)構(gòu)體變量中的成員。知識講解5.結(jié)構(gòu)體變量的成員訪問應(yīng)用示例。structPerson{ //定義結(jié)構(gòu)體類型structPerson intID;

charname[10];

charsex;};intmain() { structPersonp={0002,"zhouli",'F'};//定義結(jié)結(jié)構(gòu)體變量p structPerson*ptr=&p; //定義指向變量p的指針ptr printf("%04d\n",ptr->ID);

//輸出成員ID的值

printf("%s\n",ptr->name); //輸出成員name的值

printf("%c\n",ptr->sex); //輸出成員sex的值 return0;

}案例實現(xiàn)1.案例設(shè)計名片內(nèi)容包括姓名、職位、聯(lián)系方式、公司單位、地址,這些內(nèi)容都需要使用字符串存儲,可以定義一個結(jié)構(gòu)體structCard,在結(jié)構(gòu)體內(nèi)定義5個字符數(shù)組,分別用于存儲姓名、職位、聯(lián)系方式、公司單位、地址,從鍵盤輸入相應(yīng)數(shù)據(jù),再整理格式以名片形式輸出。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例9-1完整代碼}代碼實現(xiàn)員工生日福利案例9-2【案例9-2】員工生日福利(1)掌握嵌套結(jié)構(gòu)體變量的成員說,能夠使用“.”運算符和“→”運算符實現(xiàn)嵌套結(jié)構(gòu)體變量成員的訪問(2)了解嵌套結(jié)構(gòu)體的內(nèi)存管理,能夠說出嵌套結(jié)構(gòu)體的存儲特點學(xué)習(xí)目標(biāo)案例描述近日,公司為加強(qiáng)員工對企業(yè)的歸屬感與認(rèn)同感,讓每位員工都感受到公司大家庭的溫暖,同時也為進(jìn)一步推動公司企業(yè)文化建設(shè),特為員工提供生日福利。在系統(tǒng)中錄入員工的生日信息,當(dāng)某個員工生日時,系統(tǒng)會自動彈出提示消息。本案例要求編寫一個程序,在員工信息中添加員工生日信息,并在生日時祝福員工生日快樂,通知員工領(lǐng)取生日禮物。知識需求員工信息員工信息結(jié)構(gòu)體員工生日員工生日結(jié)構(gòu)體添加嵌套結(jié)構(gòu)體知識講解1.訪問嵌套結(jié)構(gòu)體變量成員結(jié)構(gòu)體中定義另一個結(jié)構(gòu)作為其成員,這樣的結(jié)構(gòu)體稱為嵌套結(jié)構(gòu)體。訪問嵌套結(jié)構(gòu)體變量成員時,需要使用兩次“.”運算符。嵌套結(jié)構(gòu)體變量成員訪問示例。structA{ intnum;

}; //定義結(jié)構(gòu)體類型structAstructB{

//…;

structAa; }; //嵌套structA類型變量astructBb={10}; //定義structB類型變量bprintf("%d",b.a.num); //訪問嵌套結(jié)構(gòu)體變量a的成員num知識講解1.訪問嵌套結(jié)構(gòu)體變量成員結(jié)構(gòu)體不能嵌套自身結(jié)構(gòu)體類型的變量,因為嵌套自身結(jié)構(gòu)體類型變量時,結(jié)構(gòu)體類型還未定義,編譯器無法確定自身類型的變量需要分配多少內(nèi)存空間。知識講解1.訪問嵌套結(jié)構(gòu)體變量成員structPerson //定義結(jié)構(gòu)體類型structPerson{ intID; charname[10]; charsex;

structPersonp1;//錯誤,嵌套自身結(jié)構(gòu)體類型的變量};知識講解1.訪問嵌套結(jié)構(gòu)體變量成員雖然結(jié)構(gòu)體不能嵌套自身類型的變量,但可以自身結(jié)構(gòu)體類型的指針變量,因為指針大小是固定的。structPerson //定義結(jié)構(gòu)體類型structPerson{ intID; charname[10]; charsex;

structPerson*ptr; //正確,嵌套自身結(jié)構(gòu)體類型的指針變量};嵌套自身結(jié)構(gòu)體類型的指針變量,定義示例。知識講解1.訪問嵌套結(jié)構(gòu)體變量成員雖然結(jié)構(gòu)體不能嵌套自身類型的變量,但可以自身結(jié)構(gòu)體類型的指針變量,因為指針大小是固定的。structPersonp1={0010,"lisi",'M'};structPersonp2={0007,"wangwu",'F',&p1}; //取變量p1的地址賦值給ptr//通過變量p2中的指針ptr可以訪問到變量p1中的成員p2.ptr->ID; //訪問structPerson結(jié)構(gòu)體變量p1的成員IDp2.ptr->name; //訪問structPerson結(jié)構(gòu)體變量p1的成員namep2.ptr->sex;

//訪問structPerson結(jié)構(gòu)體變量p1的成員sex定義structPerson結(jié)構(gòu)體類型的變量p1和p2,并對它們進(jìn)行初始化。知識講解2.嵌套結(jié)構(gòu)體內(nèi)存管理嵌套結(jié)構(gòu)體在內(nèi)存中的存儲依舊遵循內(nèi)存對齊機(jī)制,此時結(jié)構(gòu)體以其普通成員和結(jié)構(gòu)體成員中的最長數(shù)據(jù)類型為準(zhǔn),對各成員進(jìn)行對齊。知識講解2.嵌套結(jié)構(gòu)體內(nèi)存管理structBirth{intyear;

intmonth;

intday;};structPerson{ intID; charname[10]; charsex;

structBirthbirthDate;

};內(nèi)存分配案例實現(xiàn)1.案例設(shè)計010203定義表示生日的結(jié)構(gòu)體類型structBirth。定義員工結(jié)構(gòu)體類型structEmployee,在structEmployee結(jié)構(gòu)體中定義一個structBirth變量birth。定義兩個int類型變量month、day,從鍵盤輸入變量month和變量day的值,模擬系統(tǒng)日期。如果變量month、day的值與員工生日日期相同,則輸出提示信息。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例9-2完整代碼}代碼實現(xiàn)計算學(xué)生平均成績案例9-3【案例9-3】計算學(xué)生平均成績(1)掌握結(jié)構(gòu)體數(shù)組的定義與初始化,能夠完成結(jié)構(gòu)體數(shù)組的定義與初始化(2)掌握結(jié)構(gòu)體數(shù)組的訪問,能夠完成結(jié)構(gòu)體數(shù)組的訪問學(xué)習(xí)目標(biāo)案例描述每次考試結(jié)束之后,老師都會對學(xué)生成績進(jìn)行各個維度的評估,以判定學(xué)生的學(xué)習(xí)情況,假設(shè)一個小組中有3個學(xué)生,每個學(xué)生有3門課程的成績需要統(tǒng)計。本案例要求編寫一個程序,對這3個學(xué)生的成績進(jìn)行統(tǒng)計,具體要求如下。(1)從鍵盤輸入學(xué)生的學(xué)號、姓名和三門課程的成績。(2)計算出每個學(xué)生的平均成績,并依次把每個學(xué)生的學(xué)號、姓名和平均成績打印在屏幕上。知識需求學(xué)生信息與學(xué)生成績使用結(jié)構(gòu)體存儲。多個學(xué)生的信息使用數(shù)組存儲。存儲結(jié)構(gòu)體的數(shù)組稱為結(jié)構(gòu)體數(shù)組。所以,需要學(xué)習(xí)結(jié)構(gòu)體數(shù)組。知識講解1.結(jié)構(gòu)體數(shù)組的定義與初始化結(jié)構(gòu)體數(shù)組的定義方式有兩種。01先定義結(jié)構(gòu)體類型,后定義結(jié)構(gòu)體數(shù)組structStudent{ //定義structStudent結(jié)構(gòu)體類型 intnum; charname[10]; charsex;};structStudentstus[20];

//定義structStudent結(jié)構(gòu)體數(shù)組stus知識講解1.結(jié)構(gòu)體數(shù)組的定義與初始化結(jié)構(gòu)體數(shù)組的定義方式有兩種。02在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體數(shù)組structStudent{ //定義structStudent結(jié)構(gòu)體類型 intnum; charname[10]; charsex;}stus[20];知識講解1.結(jié)構(gòu)體數(shù)組的定義與初始化結(jié)構(gòu)體數(shù)組中的每個元素都是一個結(jié)構(gòu)體變量,因此,在為結(jié)構(gòu)體數(shù)組中的元素賦值時,需要將值依次放到一對大括號{}中。結(jié)構(gòu)體數(shù)組初始化有兩種方式:先定義結(jié)構(gòu)體類型,然后定義結(jié)構(gòu)體數(shù)組并初始化結(jié)構(gòu)體數(shù)組。在定義結(jié)構(gòu)體類型的同時,定義結(jié)構(gòu)體數(shù)組并初始化結(jié)構(gòu)體數(shù)組。知識講解1.結(jié)構(gòu)體數(shù)組的定義與初始化1先定義結(jié)構(gòu)體類型,然后定義結(jié)構(gòu)體數(shù)組并初始化結(jié)構(gòu)體數(shù)組structStudent{ intnum; charname[10]; charsex;};structStudentstudents[3]={{0001,"ZhangSan",'M'}, {0002,"LiSi",'W'}, {0003,"ZhaoLiu",'M'}};知識講解1.結(jié)構(gòu)體數(shù)組的定義與初始化2在定義結(jié)構(gòu)體類型的同時,定義結(jié)構(gòu)體數(shù)組并初始化結(jié)構(gòu)體數(shù)組structStudent{ intnum; charname[10]; charsex;}students[3]={{0001,"ZhangSan",'M'}, {0002,"LiSi",'W'}, {0003,"ZhaoLiu",'M'}};知識講解1.結(jié)構(gòu)體數(shù)組的定義與初始化初始化結(jié)構(gòu)體數(shù)組時,也可以不指定數(shù)組大小,系統(tǒng)根據(jù)元素個數(shù)分配內(nèi)存。structStudent{ intnum; charname[10]; charsex;}students[]={{0001,"ZhangSan",'M'}, {0002,"LiSi",'W'}, {0003,"ZhaoLiu",'M'}};知識講解2.結(jié)構(gòu)體數(shù)組的訪問結(jié)構(gòu)體數(shù)組的訪問其實是對數(shù)組中結(jié)構(gòu)體變量的成員進(jìn)行訪問,訪問格式如下。結(jié)構(gòu)體數(shù)組[索引].成員名知識講解2.結(jié)構(gòu)體數(shù)組的訪問結(jié)構(gòu)體數(shù)組訪問示例。structStudent{

intnum;

charname[10];

charsex;

};structStudentstudents[3]={{0001,"ZhangSan",'M'}, {0002,"LiSi",'W'}, {0003,"ZhaoLiu",'M'}};for(inti=0;i<3;i++) { printf("%04d%s%c\n",

students[i].num,students[i].name,students[i].sex);}案例實現(xiàn)1.案例設(shè)計12定義一個結(jié)構(gòu)體數(shù)組,用來存放3個學(xué)生的信息;用for循環(huán)依次讀取3個學(xué)生的信息,再用for循環(huán)分別計算成績總和并求出平均值。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例9-3完整代碼}代碼實現(xiàn)打漁曬網(wǎng)案例9-4【案例9-4】打漁曬網(wǎng)掌握結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針作為函數(shù)參數(shù)的使用,能夠使用結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針傳遞數(shù)據(jù)學(xué)習(xí)目標(biāo)案例描述俗語三天打漁兩天曬網(wǎng),用來比喻學(xué)習(xí)或做事時斷時續(xù),沒有恒心,不能堅持下去。但是對于我們來說,學(xué)習(xí)是一件持之以恒的事情,日積月累,才能有質(zhì)的飛躍,正所謂不積跬步,無以至千里;不積小流,無以成江海。所以要想在某一方面有所成就,必得經(jīng)過堅持不懈的努力,不能三天打漁兩天曬網(wǎng)。三天打漁兩天曬網(wǎng)案例描述在本案例中,我們要對三天打漁兩天曬網(wǎng)進(jìn)行一次深入分析,假設(shè)某人從2000年1月1日起開始三天打漁兩天曬網(wǎng),請編寫一個程序?qū)崿F(xiàn)如下功能,從鍵盤輸入2000年1月1日開始的任意一天,判斷這一天此人是打漁還是曬網(wǎng)。知識需求打漁曬網(wǎng)的日期使用結(jié)構(gòu)體進(jìn)行存儲。定義函數(shù)計算結(jié)構(gòu)體中的日期距離2000年1月1日有多少天。結(jié)構(gòu)體作為函數(shù)參數(shù)知識講解1.結(jié)構(gòu)體變量作為函數(shù)參數(shù)結(jié)構(gòu)體變量作為函數(shù)參數(shù)的用法與普通變量類似,都需要保證調(diào)用函數(shù)的實參類型和被調(diào)用函數(shù)的形參類型相同。結(jié)構(gòu)體變量作為函數(shù)參數(shù)時,也是值傳遞,被調(diào)函數(shù)中改變結(jié)構(gòu)體成員變量的值,主調(diào)函數(shù)中的結(jié)構(gòu)體變量不受影響。知識講解2.結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)函數(shù)間還可以傳遞結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)與普通數(shù)組作為函數(shù)參數(shù)一樣,都是傳遞的數(shù)組首地址,在被調(diào)函數(shù)中改變結(jié)構(gòu)體數(shù)組元素的成員變量,主調(diào)函數(shù)中的結(jié)構(gòu)體數(shù)組也會跟著改變。知識講解3.結(jié)構(gòu)體指針作為函數(shù)參數(shù)結(jié)構(gòu)體指針變量用于存放結(jié)構(gòu)體變量的首地址,將結(jié)構(gòu)體指針作為函數(shù)參數(shù)傳遞時,其實就是傳遞結(jié)構(gòu)體變量的首地址,在被調(diào)函數(shù)中改變結(jié)構(gòu)體變量成員的值,那么主調(diào)函數(shù)中結(jié)構(gòu)體變量成員的值也會被改變。知識講解4.typedeftypedef關(guān)鍵字用于為現(xiàn)有數(shù)據(jù)類型取別名,使用typedef關(guān)鍵字可以方便程序的移植,減少對硬件的依賴性。typedef數(shù)據(jù)類型別名;知識講解4.typedef01為基本類型取別名使用typedef關(guān)鍵字為unsignedint類型取別名。typedefunsignedintuint;uinti,j,k;02為數(shù)組類型取別名使用typedef關(guān)鍵字為數(shù)組類型取別名。typedefcharNAME[10];NAMEclass1,class2;知識講解4.typedef03為結(jié)構(gòu)體取別名使用typedef關(guān)鍵字為結(jié)構(gòu)體類型structStudent取別名。typdef關(guān)鍵字最常用的就是為結(jié)構(gòu)體取別名。typedefstructStudent{intnum; charname[10]; charsex;}STU;STUstu1; //等同于structStudentstu1知識講解4.typedef使用typedef關(guān)鍵字只是對已存在的數(shù)據(jù)類型取別名,而不是定義新的數(shù)據(jù)類型。案例實現(xiàn)1.案例設(shè)計(1)利用循環(huán)求出指定日期距2000年1月1日的天數(shù)。(2)注意問題:閏年。閏年二月29天,平年二月28天。(3)怎么判斷閏年?能被4整除且不能被100整除,或者能被400整除,則該年是閏年,否則不是閏年。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例9-4完整代碼}代碼實現(xiàn)角色與權(quán)限案例9-5【案例9-5】角色與權(quán)限了解共用體的概念,能夠說出共用體構(gòu)造類型的特點學(xué)習(xí)目標(biāo)案例描述假設(shè)學(xué)校購買一個學(xué)生信息管理系統(tǒng),該系統(tǒng)有3個角色,教務(wù)員、老師、學(xué)生,3個角色的權(quán)限分別如下。教務(wù)員:管理學(xué)生信息,如對姓名、年齡、性別、學(xué)號、籍貫、班級、宿舍等信息進(jìn)行添加、修改、刪除等操作。老師:管理學(xué)生成績,如添加成績、修改成績、對成績進(jìn)行排序等。學(xué)生:查看自己的個人信息,并添加、修改手機(jī)號。案例描述本案例要求編寫一個程序,模擬用戶登錄,如果是教務(wù)員,就提示進(jìn)入學(xué)生信息管理頁面,為學(xué)生添加學(xué)號;如果是老師,就提示進(jìn)入學(xué)生成績管理頁面,為學(xué)生添加成績;如果是學(xué)生,就提示進(jìn)入個人信息查看頁面,添加自己的手機(jī)號。知識需求老師教務(wù)員學(xué)生用戶登錄角色關(guān)聯(lián)單選共用體知識講解1.共用體類型共用體也是構(gòu)造類型,它的定義與結(jié)構(gòu)體類似。union共用體類型名稱{

數(shù)據(jù)類型

成員名1;

數(shù)據(jù)類型

成員名2;

……

數(shù)據(jù)類型

成員名n;};定義共用體的關(guān)鍵字共用體成員分號不可少知識講解1.共用體類型共用體類型定義示例。union

data{

intm;

floatx;

charc;};知識講解2.共用體變量的定義共用體類型的變量定義方式有3種。1先定義共用體類型,再定義共用體變量uniondata{intm;

floatx;charc;};uniondataa,b;2在定義共用體類型的同時定義共用體變量uniondata{intm;floatx;charc;}a,b;知識講解2.共用體變量的定義共用體類型的變量定義方式有3種。3直接定義共用體類型變量union{intm;Doublex;charc;}a,b;知識講解共用體內(nèi)存分配共用體的內(nèi)存分配必須要符合以下兩項準(zhǔn)則。(1)共用體的內(nèi)存必須大于或等于其成員變量中大數(shù)據(jù)類型(包括基本數(shù)據(jù)類型和數(shù)組)的大小。(2)共用體的內(nèi)存必須是最大基本數(shù)據(jù)類型的整數(shù)倍,如果不是,則填充字節(jié)。接下來通過兩個共用體的內(nèi)存分析來解釋上述準(zhǔn)則。知識講解共用體內(nèi)存分配示例1:成員變量都是基本數(shù)據(jù)類型的共用體變量。union{intm;floatx;charc;}a;知識講解共用體內(nèi)存分配示例2:成員變量包含數(shù)組的共用體變量。union{intm;floatx;charc;charname[5];}b;知識講解3.共用體變量的初始化和引用在共用體變量定義的同時,只能對其中一個成員的類型值進(jìn)行初始化,這與它的內(nèi)存分配也是相應(yīng)的。union共用體類型名共用體變量={其中一個成員的類型值};共用體變量初始化示例。uniondataa={8};知識講解3.共用體變量的初始化和引用共用體變量的成員訪問也通過“.”運算符與->指針運算符。uniondata{intm;floatx;charc;};uniondataa={12},*p=&a;a.m; //引用共用體變量a中的成員mp->m; //引用共用體指針變量p所指向的變量成員m知識講解3.共用體變量的初始化和引用VS結(jié)構(gòu)體在程序執(zhí)行的任何時刻,結(jié)構(gòu)體變量中的所有成員是同時駐留在該結(jié)構(gòu)體變量所占用的內(nèi)存空間中共用體在程序執(zhí)行的任何時刻,共用體變量僅有一個成員駐留在共用體變量所占用的內(nèi)存空間中。案例實現(xiàn)1.案例設(shè)計聲明登錄結(jié)構(gòu)體,在結(jié)構(gòu)體中定義登錄需要的數(shù)據(jù),姓名、角色,需要進(jìn)行的操作以共用體形式存儲。第1步第2步從鍵盤輸入登錄用戶姓名、角色,根據(jù)角色判斷要執(zhí)行的操作。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例9-5完整代碼}代碼實現(xiàn)學(xué)生成績管理系統(tǒng)案例9-6【案例9-6】學(xué)生成績管理系統(tǒng)鞏固前面所學(xué)知識,能夠利用前面所學(xué)知識實現(xiàn)案例9-6。學(xué)習(xí)目標(biāo)案例描述本案例就要求讀者模擬開發(fā)一個學(xué)生成績管理系統(tǒng),該系統(tǒng)的功能需求如下所示。(1)添加學(xué)生信息,包括學(xué)號、姓名、語文、數(shù)學(xué)成績。(2)顯示學(xué)生信息,將所有學(xué)生信息打印輸出。(3)修改學(xué)生信息,可以根據(jù)姓名查找到學(xué)生,然后可以修改學(xué)生姓名、成績項。(4)刪除學(xué)生信息,根據(jù)學(xué)號查找到學(xué)生,將其信息刪除。(5)查找學(xué)生信息,根據(jù)學(xué)生姓名,將其信息打印輸出。(6)按學(xué)生總成績進(jìn)行從高到低排序。案例實現(xiàn)1.案例設(shè)計學(xué)生信息可以使用結(jié)構(gòu)體數(shù)組進(jìn)行存儲,學(xué)生成績

溫馨提示

  • 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

提交評論