• /  41
  • 下載費用: 10.00積分  

C語言程序設計教學全套課件 第3版 電子資源演示文稿第8章 結構體與共用體及其應用演示文稿.ppt

'C語言程序設計教學全套課件 第3版 電子資源演示文稿第8章 結構體與共用體及其應用演示文稿.ppt'
第8章 結構體與共用體及其應用本章內容中我們將學習1 使用結構體變量處理“記錄”類數據;2 使用結構體類型數組處理多個“記錄”類數據;3 在函數中使用結構體數據4 使用共用體類型變量什么是結構體?用戶自定義的一組數量固定、類型相同或不同的相關聯的若干個變量的組合。中國第二代身份證8.1 結構體變量的應用學一學結構體是若干個類型相同或不同的數據項的集合。定義一個結構體類型的一般形式為: struct 結構體類型名 { 數據類型 成員1; 數據類型 成員2; …… 數據類型 成員n; }; 結構體變量的定義 struct 結構體類型名 變量名;結構體變量中成員的引用 結構體變量名. 成員名問題 8.1 考試結束后老師登記學生成績,一個學生的基本信息包括姓名(chName)、期中成績(iMiddle)、期末成績(iFinal)和總評成績(fAve),編寫程序存儲成績,并打印出來。解題步驟1.定義一個結構體類型,類型名可取為student2.定義一個結構體變量stStu1并為各個成員初始化賦值3.將學生姓名、期中期末成績輸出到屏幕程序代碼#include "stdio.h"void main(){ struct student{ char chName[8]; int iMiddle,iFinal; float fAve;}; /*定義結構體類型*/ struct student stStu1 = {"Alice",80,100}; /*間接定義法定義結構體變量*/ printf("%s:%d %d", stStu1.chName,stStu1.iMiddle,stStu1.iFinal); getch();}擴展問題8.1,要求輸入兩個同學的期中、期末成績,將平均分數較高的同學的成績單輸出。問題 8.21.定義一個結構體類型,同時定義兩個結構體變量2.從鍵盤輸入兩個變量的chName,iMiddle,iFinal等成員值 3.分別計算平均分數 4.比較平均分,將平均分數較高的同學的成績單輸出到屏幕上解題步驟流程圖程序代碼#include "stdio.h"void main(){ struct student{ char chName[8]; int iMiddle,iFinal; float fAve;}stStu1,stStu2; /*直接定義法定義結構體類型及變量*/ scanf("%s%d%d",stStu1.chName,&stStu1.iMiddle,&stStu1.iFinal); scanf("%s%d%d",stStu2.chName,&stStu2.iMiddle,&stStu2.iFinal); stStu1.fAve=(stStu1.iMiddle+stStu1.iFinal)/2.0; stStu2.fAve=(stStu2.iMiddle+stStu2.iFinal)/2.0; if(stStu1.fAve>stStu2.fAve) printf("%s:%d %d %0.1f",stStu1.chName,stStu1.iMiddle,stStu1.iFinal,stStu1.fAve); else printf("%s:%d %d %0.1f",stStu2.chName,stStu2.iMiddle,stStu2.iFinal,stStu1.fAve); getch();}問題 8.3現有一個同學的原始成績單,內容包括學號、姓名、英語成績、高等數學、程序設計三門課的成績以及出生年月,請將其拷貝入另一個結構體變量進行備份,并且將數據輸出進行核對是否備份正確。 解題步驟1.根據題意,定義結構體struct date 描述出生年月2.定義結構體描述struct student描述學生信息,其中出生年月為struct date類型3.定義兩個struct student變量stOrg和stBak,其中stOrg初始化賦值 4.將stOrg復制到stBak 5.輸出stBak的各成員值,與stOrg的各初始化數據對比程序代碼#include "stdio.h"struct date{ int iYear,iMonth,iDay;}; /*定義日期結構體*/struct student{ char chName[8]; int iEng,iMath,iProg; struct date stBirth;}; /*定義學生信息結構體*/void main(){ struct student stOrg={"Tom",80,90,85,1986,11,30},stBak; stBak=stOrg; printf("%s,%d,%d,%d,%d,%d,%d",stBak.chName,stBak.iEng,stBak.iMath, stBak.iProg,stBak.stBirth.iYear,stBak.stBirth.iMonth,stBak.stBirth.iDay); getch();}小結:結構體類型和結構體變量結構體可以表達類似于數據庫中“記錄”的數據,使用結構體來表達數據,必須先定義結構體類型,再用此類型定義結構體變量。結構體中的每個數據叫做成員,在進行輸入輸出等操作時要用成員引用符號“.”引用到具體成員。定義一個結構體變量,系統分配的內存空間是該結構體變量中所有成員占據內存空間的總和。8.2 結構體數組的應用一個結構體變量只能記錄一條信息如果需要記錄一組記錄就需要用到結構體類型數組8.2 結構體數組的應用 學一學1.結構體數組的定義與結構體變量類似,只需說明其為數組即可。 struct 結構體類型名 { 數據類型 成員1; 數據類型 成員2; …… 數據類型 成員n; }; struct 結構體類型名 數組名[數組長度];2.結構體數組元素也是通過數組名和下標來引用的,但其元素是結構體類型的數據,因此,對結構體數組元素的引用與對結構體變量的引用一樣,也是逐級引用,只能對最低級的成員進行存取和運算。 一般的引用形式為: 數組名[下標].成員名問題 8.4:試一試一個學習小組有N名學生,學生的信息包含學號、姓名、語文、數學、英語三門課的成績,從鍵。省略部分。ar chName[8]; int iMiddle,iFinal; float fAve;};程序代碼:定義用戶函數void fnDispBest(struct student stS1,struct student stS2); /*顯示平均分較高同學的函數*/ void fnDispBest(struct student stS1,struct student stS2) { stS1.fAve=(stS1.iMiddle+stS1.iFinal)/2.0; stS2.fAve=(stS2.iMiddle+stS2.iFinal)/2.0; if(stS1.fAve>stS2.fAve) printf("%s:%d %d %f",stS1.chName,stS1.iMiddle,stS1.iFinal,stS1.fAve); else printf("%s:%d %d %f",stS2.chName,stS2.iMiddle,stS2.iFinal,stS2.fAve); }程序代碼:主函數void main(){ struct student stStu1,stStu2; scanf("%s%d%d",stStu1.chName,&stStu1.iMiddle,&stStu1.iFinal); scanf("%s%d%d",stStu2.chName,&stStu2.iMiddle,&stStu2.iFinal); fnDispBest(stStu1,stStu2); /*調用函數比較并輸出平均分數較高的同學信息*/ getch();}解題步驟定義全局結構體類型 struct student聲明用戶函數 fnInput和 fnDisp編寫fnInput程序實現輸入N個學生信息并計算總分編寫函數fnDisp求N個學生中總分最高的并且顯示編寫主函數定義結構體類型數組,調用函數實現輸入題目要求主函數流程圖想一想在問題8.3的代碼中,如果要求對輸入數據對輸入的年、月、日進行合法性校驗,比如年是在1989-2007年之間,月是在1-12之間,日是1-30之間,怎么解決?如果進一步要求根據月份而確定每月的天數,又該怎么辦呢? 練一練嘗試編寫學生管理系統,定義學生信息的結構體類型,分別用函數實現數據輸入、數據輸出、計算每個人的平均分,進行排序和成績插入等操作。小結:函數中的結構體結構體變量可以傳遞給函數以及由函數返回,作為函數參數的傳遞方式與簡單變量作為函數參數的處理方式完全相同。即采用“值傳遞”方式,形參結構體變量中各成員值的改變,對相應實參結構體變量不產生任何影響。結構體數組作為函數參數,與數組作為函數參數的處理方式完全相同。即采用“地址傳遞”方式,形參結構體變量中各成員值的改變,對相應實參結構體變量產生影響。共用體類型的定義共用體類型定義的一般形式為: union 共用體類型名 { 數據類型 成員1; 數據類型 成員2; …… 數據類型 成員n; }; 共用體變量的定義 union 共用體類型名 變量名;共用體變量中成員的引用 共用體變量名. 成員名 8.4 共用體的應用:學一學試一試 問題8.9:在第7章問題7.4中,我們利用位操作將按鍵的低8位和高8位分離出來進行鍵盤檢測,現在我們使用共用體來檢測鍵盤,如果用戶按下左、右鍵,顯示LEFT &RIGHT,如果用戶按下上、下鍵,顯示UP&DOWN,按ESC鍵退出。解題步驟1.宏定義上、下、左、右鍵和ESC鍵的鍵值2.定義表達鍵盤的共用體keyboard3.定義檢測用戶按鍵的函數int fnGetKey(void)4.在主函數中調用函數int fnGetKey(void),根據用戶按的上、下、左、右鍵顯示不同的信息流程圖程序代碼:宏定義與共用體定義#define LEFT 75#define RIGHT 77#define UPPER 72#define DOWN 80#define ESC 27 union keyboard{ unsigned int iKeyInfo; char chKeyBit[2]; }; /*定義共用體類型*/ 程序代碼:用戶函數int fnGetKey(void){ union keyboard uniKey1; /*定義共用體變量*/ while(bioskey(1) == 0); /*檢測用戶有無按鍵*/ uniKey1.iKeyInfo=bioskey(0); /*讀取按鍵信息*/ return (uniKey1.y[0]==0? uniKey1.chKeyBit[1]: uniKey1.chKeyBit[0]); /*返回ASCII碼或擴充碼*/ }程序代碼:主函數void main() { int iKey; printf("please press direction key"); while(1) { iKey = fnGetKey(); if(iKey==LEFT || iKey==RIGHT) printf("left&right"); /*主菜單左右選擇*/ else if(iKey==UPPER|| iKey==DOWN) printf("up&down");;/*子菜單上下選擇*/ if(iKey==ESC) break; /*執行編輯命令操作*/ }}小結:1.C最初引入共用體的目的,一是節省存儲空間,另外是可以將一種類型的數據不通過顯式類型轉換而作為另一種類型數據使用,如問題8.9的解決方法。2.共用體采用覆蓋技術,實現不同類型的變量存放到同一內存單元,所以在每一時刻,存放和起作用的是最近一次存放的成員值。變量的各個成員使用同一段內存空間,所以對共用體變量的各個成員賦值時,最近的一次賦值才是有效的。3.共用體變量所占用的內存空間,是其占用空間最多的那一個成員所占用的空間,而結構體變量是其各個成員所占內存空間的總和。共用體變量可以出現在結構類型中,結構變量也可以出現在共用體類型中。4.共用體變量不能用作函數的參數,函數也不能返回共用體變量,而在定義共用體變量時,也不能進行初始化賦值。
關 鍵 詞:
演示 文稿 資源 結構 電子 與共 全套 及其 教學 應用
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:C語言程序設計教學全套課件 第3版 電子資源演示文稿第8章 結構體與共用體及其應用演示文稿.ppt
鏈接地址: http://www.476824.live/p-51617296.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 十一选五铁定规律技巧 3d杀码专家 东营股指期货配资 韩国福彩快乐8 山东11选5一天有多少期 黑龙江36选7历史开奖 股票方面的书籍推荐 河北十一选五前三组最大遗漏 金猪配资 青海快3昨天开奖号