資源描述:
《C語言程序設(shè)計 第2版烏云高娃源程序及習(xí)題答案C語言教學(xué)內(nèi)容PPT第8章結(jié)構(gòu)體與共用體及其應(yīng)用.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第8章結(jié)構(gòu)體與共用體及其應(yīng)用學(xué)習(xí)目標(biāo)1使用結(jié)構(gòu)體變量處理“記錄”類數(shù)據(jù);2使用結(jié)構(gòu)體類型數(shù)組處理多個“記錄”類數(shù)據(jù);3在函數(shù)中使用結(jié)構(gòu)體數(shù)據(jù)4使用共用體類型變量8.1結(jié)構(gòu)體變量的應(yīng)用學(xué)一學(xué)結(jié)構(gòu)體是若干個類型相同或不同的數(shù)據(jù)項的集合。定義一個結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體類型名{數(shù)據(jù)類型成員1;數(shù)據(jù)類型成員2;……數(shù)據(jù)類型成員n;};結(jié)構(gòu)體變量的定義struct結(jié)構(gòu)體類型名變量名;結(jié)構(gòu)體變量中成員的引用結(jié)構(gòu)體變量名.成員名問題8.1考試結(jié)束后老師登記學(xué)生成績,一個學(xué)生的基本信息包括姓名(chName)、期中成績(iMiddle)
2、、期末成績(iFinal)和總評成績(fAve),編寫程序存儲成績,并打印出來。上問題8.2:擴展問題8.1,要求輸入兩個同學(xué)的期中、期末成績,將平均分數(shù)較高的同學(xué)的成績單輸出。流程圖問題8.3現(xiàn)有一個同學(xué)的原始成績單,內(nèi)容包括學(xué)號、姓名、英語成績、高等數(shù)學(xué)、程序設(shè)計三門課的成績以及出生年月,請將其拷貝入另一個結(jié)構(gòu)體變量進行備份,并且將數(shù)據(jù)輸出進行核對是否備份正確小結(jié):結(jié)構(gòu)體類型和結(jié)構(gòu)體變量結(jié)構(gòu)體可以表達類似于數(shù)據(jù)庫中“記錄”的數(shù)據(jù),使用結(jié)構(gòu)體來表達數(shù)據(jù),必須先定義結(jié)構(gòu)體類型,再用此類型定義結(jié)構(gòu)體變量。結(jié)構(gòu)體中的每個數(shù)據(jù)叫做成員,在進行輸
3、入輸出等操作時要用成員引用符號“.”引用到具體成員。定義一個結(jié)構(gòu)體變量,系統(tǒng)分配的內(nèi)存空間是該結(jié)構(gòu)體變量中所有成員占據(jù)內(nèi)存空間的總和。8.2結(jié)構(gòu)體數(shù)組的應(yīng)用:學(xué)一學(xué)1.結(jié)構(gòu)體數(shù)組的定義與結(jié)構(gòu)體變量類似,只需說明其為數(shù)組即可。struct結(jié)構(gòu)體類型名{數(shù)據(jù)類型成員1;數(shù)據(jù)類型成員2;……數(shù)據(jù)類型成員n;};struct結(jié)構(gòu)體類型名數(shù)組名[數(shù)組長度];2.結(jié)構(gòu)體數(shù)組元素也是通過數(shù)組名和下標(biāo)來引用的,但其元素是結(jié)構(gòu)體類型的數(shù)據(jù),因此,對結(jié)構(gòu)體數(shù)組元素的引用與對結(jié)構(gòu)體變量的引用一樣,也是逐級引用,只能對最低級的成員進行存取和運算。一般的引用形式
4、為:數(shù)組名[下標(biāo)].成員名問題8.4:試一試一個學(xué)習(xí)小組有N名學(xué)生,學(xué)生的信息包含學(xué)號、姓名、語文、數(shù)學(xué)、英語三門課的成績,從鍵盤上輸入N名學(xué)生的信息,要求統(tǒng)計總成績并顯示總分最高的學(xué)生信息。解題步驟1.以學(xué)生的信息數(shù)據(jù)項為成員,定義結(jié)構(gòu)體類型和相應(yīng)的結(jié)構(gòu)體數(shù)組2.循環(huán)輸入每個學(xué)生的信息,統(tǒng)計總成績,存儲在結(jié)構(gòu)體數(shù)組中3.循環(huán)比較求出總分最高的學(xué)生,并顯示練一練擴展問題8.4,請按總分從高到低將學(xué)生的信息排序輸出,每行輸出一個學(xué)生的信息。小結(jié):結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的每一個元素,都是結(jié)構(gòu)體類型數(shù)據(jù),均含結(jié)構(gòu)體類型的所有成員。結(jié)構(gòu)體數(shù)組元素通
5、過數(shù)組名和下標(biāo)來引用,但其元素是結(jié)構(gòu)體體類型的數(shù)據(jù),因此,對結(jié)構(gòu)體數(shù)組元素的引用與對結(jié)構(gòu)體變量的引用一樣,也是逐級引用,只能對最低級的成員進行存取和運算。一般的引用形式為:數(shù)組名[下標(biāo)].成員名8.3結(jié)構(gòu)體在函數(shù)中的應(yīng)用學(xué)一學(xué)結(jié)構(gòu)體變量作為一個整體可以傳遞給函數(shù)以及由函數(shù)返回,作為函數(shù)參數(shù)時形參實參都應(yīng)是結(jié)構(gòu)體類型,返回值為結(jié)構(gòu)體類型時,函數(shù)應(yīng)定義為結(jié)構(gòu)體類型,聲明方式如下:struct結(jié)構(gòu)體類型函數(shù)名(結(jié)構(gòu)體類型參數(shù),結(jié)構(gòu)體類型參數(shù)2);如無返回值則函數(shù)定義為void類型。試一試問題8.5:修改問題8.2,要求在函數(shù)中實現(xiàn)計算、比較平
6、均分并且顯示平均分數(shù)較高的學(xué)生信息的功能。問題8.6:修改問題8.4,在函數(shù)中將N個學(xué)生的數(shù)據(jù)輸入并統(tǒng)計總分和求出最高分的學(xué)生并顯示。主函數(shù)流程圖想一想在問題8.3的代碼中,如果要求對輸入數(shù)據(jù)對輸入的年、月、日進行合法性校驗,比如年是在1989-2007年之間,月是在1-12之間,日是1-30之間,怎么解決?如果進一步要求根據(jù)月份而確定每月的天數(shù),又該怎么辦呢練一練嘗試編寫學(xué)生管理系統(tǒng),定義學(xué)生信息的結(jié)構(gòu)體類型,分別用函數(shù)實現(xiàn)數(shù)據(jù)輸入、數(shù)據(jù)輸出、計算每個人的平均分,進行排序和成績插入等操作。小結(jié):函數(shù)中的結(jié)構(gòu)體結(jié)構(gòu)體變量可以傳遞給函數(shù)以及
7、由函數(shù)返回,作為函數(shù)參數(shù)的傳遞方式與簡單變量作為函數(shù)參數(shù)的處理方式完全相同。即采用“值傳遞”方式,形參結(jié)構(gòu)體變量中各成員值的改變,對相應(yīng)實參結(jié)構(gòu)體變量不產(chǎn)生任何影響。結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù),與數(shù)組作為函數(shù)參數(shù)的處理方式完全相同。即采用“地址傳遞”方式,形參結(jié)構(gòu)體變量中各成員值的改變,對相應(yīng)實參結(jié)構(gòu)體變量產(chǎn)生影響。共用體類型的定義共用體類型定義的一般形式為:union共用體類型名{數(shù)據(jù)類型成員1;數(shù)據(jù)類型成員2;……數(shù)據(jù)類型成員n;};共用體變量的定義union共用體類型名變量名;共用體變量中成員的引用共用體變量名.成員名8.4共用體的應(yīng)用
8、:學(xué)一學(xué)試一試問題8.9:在第7章問題7.4中,我們利用位操作將按鍵的低8位和高8位分離出來進行鍵盤檢測,現(xiàn)在我們使用共用體來檢測鍵盤,如果用戶按下左、右鍵,顯示LEFT&RIGHT,如果用戶