




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第章結構體第章結構體第章結構體第章結構體1本章主要內容結構體類型的概念與定義。結構體變量的定義、初始化及結構成員的引用。結構體數(shù)組的定義及其使用。結構體類型指針的定義及其使用。結構體變量作為函數(shù)的參數(shù)。返回結構體類型值的函數(shù)。單鏈表及其應用。本章主要內容結構體類型的概念與定義。2本章學習目標理解結構體類型的概念及其定義方法。掌握結構體變量的定義和初始化。掌握結構體成員的引用方法。掌握結構體數(shù)組的定義和使用。掌握結構體在函數(shù)中的應用。理解鏈表的概念及其基本操作。本章學習目標理解結構體類型的概念及其定義方法。3目錄引例結構體的概念與定義結構體變量的定義和引用結構體數(shù)組結構體變量與指針結構體與函數(shù)單鏈表及其應用實例目錄引例4引例引例:假設學生的基本信息包括學號、姓名、三門課程成績以及個人平均成績。要求輸入n個學生信息,計算并輸出平均分最高的學生信息。學生n學生2學生1學號姓名英語數(shù)學物理平均問題:不能用二維數(shù)組,因為每個成員的類型不一致。問題:如果定義多個相互獨立的一維數(shù)組,則難以反映出同一名學生各成員數(shù)據(jù)之間的內在聯(lián)系。內存分布圖解決方案:引入結構體數(shù)據(jù)類型引例引例:假設學生的基本信息包括學號、姓名、三門課程成績以5結構體的概念與定義結構體是一種允許程序員把一些數(shù)據(jù)分量(結構成員)聚合成一個整體的數(shù)據(jù)類型。學號姓名英語數(shù)學物理平均成員單元數(shù)組的所有元素的數(shù)據(jù)類型必須相同,而結構體類型所包含的成員數(shù)據(jù)類型可以互不相同。結構體類型的概念結構體與數(shù)組的區(qū)別結構體類型的定義結構體類型名{類型名成員名;類型名成員名;……類型名成員名;};
{[];;; ;[];};練習結構體的概念與定義結構體是一種允許程序員把一些數(shù)據(jù)分量(結6結構體的概念與定義嵌套定義增加一個結構體生日類型結構體類型嵌套定義
{;;;};
{[];;;;;[];};練習結構體的概念與定義嵌套定義增加一個結構體生日類型結構體類型7結構體變量的定義和引用定義
{;[];;;};[],*;先定義結構體類型,然后定義結構體變量
{;[];;;}[],*;結構體變量定義同時定義結構體類型和結構體變量直接定義結構體變量{;[];,,;;}[],*;推薦使用這種形式的定義結構體變量的定義和引用定義先定義結構體類型,然后定義結8結構體變量的定義和引用初始化結構體變量初始化
{;[];,,;;}{,""};
{;[];;;};{,""};結構體變量的定義和引用初始化結構體變量初始化9;(,"");"";;;結構體變量的定義和引用引用
{;[];;;};;結構體變量成員引用s成員如何表示?結構體變量名.成員名s.maths.average舉例說明結構體成員賦值801Zhang808992結構體變量賦值;;結構體變量的定義和引用引用結構體變量成員引用s成員如10結構體變量的定義和引用例例閱讀程序,理解結構體變量的定義和引用,給出運行結果<><>{[];;;;;};(){{"",''};("");;(,"");;; ("\");("\");("\");;}18M1.7570.5ZhangSanp118M1.7268WangMingp3結構體變量的定義和引用例例閱讀程序,理解結構體變量的定11結構體變量的定義和引用輸入輸出("",);結構體變量數(shù)據(jù)輸入
{;[];;;};;s數(shù)據(jù)如何輸入輸出?結構體變量數(shù)據(jù)輸出("",);注意:沒有符號結構體變量的定義和引用輸入輸出("",結構體變量數(shù)據(jù)輸入12結構體變量的定義和引用例分析例假設學生的基本信息包括學號、姓名、三門課程成績以及個人平均成績。輸入n個學生的成績信息,計算并輸出平均分最高的學生信息。學生n學生2學生1學號姓名英語數(shù)學物理平均所有學生共用存儲單元存儲分析算法設計定義結構體類型和變量循環(huán)輸入每一個學生的信息,計算平均成績,判斷是否是最高分輸出最高分的學生信息結構體變量的定義和引用例分析例假設學生的基本信息包括學13結構體變量的定義和引用例程序例假設學生的基本信息包括學號、姓名、三門課程成績以及個人平均成績。輸入n個學生的成績信息,計算并輸出平均分最高的學生信息。<>{[];};(){;,;("");("\",,);;}(<){}();(<);("",);();練習結構體變量的定義和引用例程序例假設學生的基本信息包括學14結構體數(shù)組結構體數(shù)組定義結構體類型名數(shù)組名[數(shù)組長度];
{[];;;;;};[];結構體數(shù)組初始化[]{{"",,'',,},{"",,'',,},{"",,'',,},{"",,'',,},{"",,'',,}};結構體數(shù)組結構體數(shù)組定義結構體類型名數(shù)組名[數(shù)組長度]15結構體數(shù)組例分析例編寫一個可以統(tǒng)計候選人得票數(shù)的程序。設有個候選人,人投票,每次輸入一個得票的候選人的名字,要求最后輸出各人得票結果。候選人3候選人2候選人1姓名票數(shù)存儲分析算法設計定義結構體類型、結構體數(shù)組并初始化循環(huán)輸入每個人投票的候選人姓名,根據(jù)姓名增加對應的選票數(shù)循環(huán)輸出每個候選人的得姓名及其選票數(shù)結構體數(shù)組例分析例編寫一個可以統(tǒng)計候選人得票數(shù)的程序。16結構體數(shù)組例程序<><>{[];}[]{{""},{""},{""}};(){;[];
;}(<){}(<)("\"[][]);("");(<)(([])) [];例編寫一個可以統(tǒng)計候選人得票數(shù)的程序。設有個候選人,人投票,每次輸入一個得票的候選人的名字,要求最后輸出各人得票結果。練習結構體數(shù)組例程序<><>()(<)(<)(""17結構體變量與指針結構體變量
{;[];;;};;s結構體變量指針的定義結構體類型名*結構體指針變量名;*;;sp如何間接訪問?(*sp).num(*sp).name(*sp).math(*sp).average成員引用sp->numsp->namesp->mathsp->average結構體變量與指針結構體變量s結構體變量指針的定義結構體類18結構體變量與指針結構體數(shù)組
{;[];;;};[];s結構體變量指針的定義結構體類型名*結構體指針變量名;*;;sp如何間接訪問?成員引用(*sp).num(*sp).name(*sp).math(*sp).averagesp->numsp->namesp->mathsp->average;結構體變量與指針結構體數(shù)組s結構體變量指針的定義結構體類19結構體變量與指針例例閱讀程序,理解指向結構體數(shù)組指針的應用,給出運行結果<><>{[];};(){;[]{{"",''},{"",''},{"",''},{"",''},{"",''}};;*;;}(<){}(";\\",,)>;>;spspspspsp練習結構體變量與指針例例閱讀程序,理解指向結構體數(shù)組指針的應20t分配新空間結構體與函數(shù)結構體變量作為函數(shù)參數(shù)主調函數(shù)被調函數(shù)回顧函數(shù)的傳值調用
{;[];;;};;s1001t分配新空間結構體與函數(shù)結構體變量作為函數(shù)參數(shù)主調函21結構體與函數(shù)例例一個復數(shù)包括實部和虛部,請定義一個復數(shù)結構體,并調用(,)計算并返回兩個復數(shù)的乘積。算法設計定義結構體類型定義主函數(shù)完成變量定義、輸入、調用函數(shù)、結果輸出定義子函數(shù)計算兩個復數(shù)的乘積并返回結果<>{;};(){{}{};();("\");;}(,){;**;**;;}結構體與函數(shù)例例一個復數(shù)包括實部和虛部,請定義一個復數(shù)22結構體與函數(shù)結構體指針變量作為函數(shù)參數(shù)回顧函數(shù)的傳地址調用
{;[];;;};;主調函數(shù)被調函數(shù)s1001sp分配一個地址空間實現(xiàn)間接訪問優(yōu)點:分配少量空間以及傳遞少量的數(shù)據(jù)可以傳遞結構體數(shù)組名EX9.9EX9.8結構體與函數(shù)結構體指針變量作為函數(shù)參數(shù)回顧函數(shù)的傳地23結構體與函數(shù)例例輸入個學生的成績信息,再輸入一個學生的學號、課程序號以及成績,在自定義函數(shù)中修改該學生指定課程的成績。算法設計定義結構體類型定義主函數(shù)完成變量定義、輸入、調用函數(shù)、結果輸出定義子函數(shù)完成修改學生指定課程的成績<>{[];};(){……;();……;;}(*){;(<)(>);()>;()>;>;;}pppp練習結構體與函數(shù)例例輸入個學生的成績信息,再輸入一個學生的24單鏈表及其應用動態(tài)存儲分配25動態(tài)存儲分配[];√;(“”);[];?無法實現(xiàn)按需分配存儲單元舉例說明(*)(*());(*)(,());(*)(*());();p01234567#include<stdlib.h>freemalloc,calloc,realloc0127879單鏈表及其應用動態(tài)存儲分配25動態(tài)存儲分配[];√;單鏈表及其應用例算法設計定義結構體類型和指針變量申請空間數(shù)據(jù)輸入、數(shù)據(jù)輸出釋放空間<><>{;*;;;};(){*;
("">>>>);();;}(*)(());>;>"";>'';>;例動態(tài)分配一塊區(qū)域,輸入輸出一個學生數(shù)據(jù)。單鏈表及其應用例算法設計定義結構體類型和指針變量申請空間數(shù)單鏈表及其應用單鏈表基本概念27[];01234567存在問題存儲空間不能進行動態(tài)伸縮插入、刪除元素需要移動大量的元素使用鏈式存儲結構:鏈表(本教材只介紹單鏈表)單鏈表基本概念結點頭指針空指針數(shù)據(jù)域指針域問題結點類型如何定義?單鏈表如何建立?單鏈表如何遍歷?A135612491249headB14751356C10211475DNULL10211021tail尾指針單鏈表及其應用單鏈表基本概念27[];0存在問題存儲空間單鏈表及其應用結點類型定義結點數(shù)據(jù)域指針域A135612491249headB14751356C10211475DNULL1021
{;*;};遞歸定義課堂練習:定義一個結點類型,要求有學生的學號、姓名和成績成員。
{;[];;*;};單鏈表及其應用結點類型定義結點數(shù)據(jù)域指針域A1356124單鏈表及其應用建立鏈表算法設計29{;[];;*;};學生結點類型定義*();函數(shù)首部算法設計定義頭指針變量和尾指針變量并進行初始化輸入數(shù)據(jù)申請空間并賦值尾部插入(分情況)返回頭指針循環(huán)處理A135612491249headB14751356C10211475DNULL10211021tail單鏈表及其應用建立鏈表算法設計29{;[];;單鏈表及其應用建立鏈表函數(shù)代碼30*(){*,*,*;;[];();
;}("");(){(*)();>;(>);>;>;
("");}();>;;NULLNULLheadpNULLheadtailNULLpNULLtail單鏈表及其應用建立鏈表函數(shù)代碼30*()("");(單鏈表及其應用鏈表遍歷算法設計31A135612491249headB14751356C10211475DNULL10211021tail31*(*);函數(shù)首部算法設計定義指針變量初始化指針變量輸出數(shù)據(jù)移動指針變量循環(huán)處理headheadheadhead單鏈表及其應用鏈表遍歷算法設計31鏈表及其應用鏈表遍歷函數(shù)代碼(*){*;
}(;;>){}("\\\">>>);(){*;; }();();單鏈表及其應用鏈表遍歷函數(shù)代碼(*)(;;>)(本章小結本章主要內容有結構體類型的概念與定義,結構體變量的定義和使用,結構體數(shù)組的定義和使用,結構體類型指針變量的定義和使用,結構體變量、結構體指針變量和數(shù)組作為函數(shù)的參數(shù)和返回值,單鏈表的基本概念及其建立和遍歷操作等。通過本章的學習,使學生掌握定義結構體類型的方法,能夠根據(jù)需要正確定義和使用結構體變量、結構體數(shù)組和結構體指針,能夠使用結構體和鏈表編寫較復雜的綜合程序。本章小結本章主要內容有結構體類型的概念與定義,結構體變量的定33第章結構體第章結構體第章結構體第章結構體34本章主要內容結構體類型的概念與定義。結構體變量的定義、初始化及結構成員的引用。結構體數(shù)組的定義及其使用。結構體類型指針的定義及其使用。結構體變量作為函數(shù)的參數(shù)。返回結構體類型值的函數(shù)。單鏈表及其應用。本章主要內容結構體類型的概念與定義。35本章學習目標理解結構體類型的概念及其定義方法。掌握結構體變量的定義和初始化。掌握結構體成員的引用方法。掌握結構體數(shù)組的定義和使用。掌握結構體在函數(shù)中的應用。理解鏈表的概念及其基本操作。本章學習目標理解結構體類型的概念及其定義方法。36目錄引例結構體的概念與定義結構體變量的定義和引用結構體數(shù)組結構體變量與指針結構體與函數(shù)單鏈表及其應用實例目錄引例37引例引例:假設學生的基本信息包括學號、姓名、三門課程成績以及個人平均成績。要求輸入n個學生信息,計算并輸出平均分最高的學生信息。學生n學生2學生1學號姓名英語數(shù)學物理平均問題:不能用二維數(shù)組,因為每個成員的類型不一致。問題:如果定義多個相互獨立的一維數(shù)組,則難以反映出同一名學生各成員數(shù)據(jù)之間的內在聯(lián)系。內存分布圖解決方案:引入結構體數(shù)據(jù)類型引例引例:假設學生的基本信息包括學號、姓名、三門課程成績以38結構體的概念與定義結構體是一種允許程序員把一些數(shù)據(jù)分量(結構成員)聚合成一個整體的數(shù)據(jù)類型。學號姓名英語數(shù)學物理平均成員單元數(shù)組的所有元素的數(shù)據(jù)類型必須相同,而結構體類型所包含的成員數(shù)據(jù)類型可以互不相同。結構體類型的概念結構體與數(shù)組的區(qū)別結構體類型的定義結構體類型名{類型名成員名;類型名成員名;……類型名成員名;};
{[];;; ;[];};練習結構體的概念與定義結構體是一種允許程序員把一些數(shù)據(jù)分量(結39結構體的概念與定義嵌套定義增加一個結構體生日類型結構體類型嵌套定義
{;;;};
{[];;;;;[];};練習結構體的概念與定義嵌套定義增加一個結構體生日類型結構體類型40結構體變量的定義和引用定義
{;[];;;};[],*;先定義結構體類型,然后定義結構體變量
{;[];;;}[],*;結構體變量定義同時定義結構體類型和結構體變量直接定義結構體變量{;[];,,;;}[],*;推薦使用這種形式的定義結構體變量的定義和引用定義先定義結構體類型,然后定義結41結構體變量的定義和引用初始化結構體變量初始化
{;[];,,;;}{,""};
{;[];;;};{,""};結構體變量的定義和引用初始化結構體變量初始化42;(,"");"";;;結構體變量的定義和引用引用
{;[];;;};;結構體變量成員引用s成員如何表示?結構體變量名.成員名s.maths.average舉例說明結構體成員賦值801Zhang808992結構體變量賦值;;結構體變量的定義和引用引用結構體變量成員引用s成員如43結構體變量的定義和引用例例閱讀程序,理解結構體變量的定義和引用,給出運行結果<><>{[];;;;;};(){{"",''};("");;(,"");;; ("\");("\");("\");;}18M1.7570.5ZhangSanp118M1.7268WangMingp3結構體變量的定義和引用例例閱讀程序,理解結構體變量的定44結構體變量的定義和引用輸入輸出("",);結構體變量數(shù)據(jù)輸入
{;[];;;};;s數(shù)據(jù)如何輸入輸出?結構體變量數(shù)據(jù)輸出("",);注意:沒有符號結構體變量的定義和引用輸入輸出("",結構體變量數(shù)據(jù)輸入45結構體變量的定義和引用例分析例假設學生的基本信息包括學號、姓名、三門課程成績以及個人平均成績。輸入n個學生的成績信息,計算并輸出平均分最高的學生信息。學生n學生2學生1學號姓名英語數(shù)學物理平均所有學生共用存儲單元存儲分析算法設計定義結構體類型和變量循環(huán)輸入每一個學生的信息,計算平均成績,判斷是否是最高分輸出最高分的學生信息結構體變量的定義和引用例分析例假設學生的基本信息包括學46結構體變量的定義和引用例程序例假設學生的基本信息包括學號、姓名、三門課程成績以及個人平均成績。輸入n個學生的成績信息,計算并輸出平均分最高的學生信息。<>{[];};(){;,;("");("\",,);;}(<){}();(<);("",);();練習結構體變量的定義和引用例程序例假設學生的基本信息包括學47結構體數(shù)組結構體數(shù)組定義結構體類型名數(shù)組名[數(shù)組長度];
{[];;;;;};[];結構體數(shù)組初始化[]{{"",,'',,},{"",,'',,},{"",,'',,},{"",,'',,},{"",,'',,}};結構體數(shù)組結構體數(shù)組定義結構體類型名數(shù)組名[數(shù)組長度]48結構體數(shù)組例分析例編寫一個可以統(tǒng)計候選人得票數(shù)的程序。設有個候選人,人投票,每次輸入一個得票的候選人的名字,要求最后輸出各人得票結果。候選人3候選人2候選人1姓名票數(shù)存儲分析算法設計定義結構體類型、結構體數(shù)組并初始化循環(huán)輸入每個人投票的候選人姓名,根據(jù)姓名增加對應的選票數(shù)循環(huán)輸出每個候選人的得姓名及其選票數(shù)結構體數(shù)組例分析例編寫一個可以統(tǒng)計候選人得票數(shù)的程序。49結構體數(shù)組例程序<><>{[];}[]{{""},{""},{""}};(){;[];
;}(<){}(<)("\"[][]);("");(<)(([])) [];例編寫一個可以統(tǒng)計候選人得票數(shù)的程序。設有個候選人,人投票,每次輸入一個得票的候選人的名字,要求最后輸出各人得票結果。練習結構體數(shù)組例程序<><>()(<)(<)(""50結構體變量與指針結構體變量
{;[];;;};;s結構體變量指針的定義結構體類型名*結構體指針變量名;*;;sp如何間接訪問?(*sp).num(*sp).name(*sp).math(*sp).average成員引用sp->numsp->namesp->mathsp->average結構體變量與指針結構體變量s結構體變量指針的定義結構體類51結構體變量與指針結構體數(shù)組
{;[];;;};[];s結構體變量指針的定義結構體類型名*結構體指針變量名;*;;sp如何間接訪問?成員引用(*sp).num(*sp).name(*sp).math(*sp).averagesp->numsp->namesp->mathsp->average;結構體變量與指針結構體數(shù)組s結構體變量指針的定義結構體類52結構體變量與指針例例閱讀程序,理解指向結構體數(shù)組指針的應用,給出運行結果<><>{[];};(){;[]{{"",''},{"",''},{"",''},{"",''},{"",''}};;*;;}(<){}(";\\",,)>;>;spspspspsp練習結構體變量與指針例例閱讀程序,理解指向結構體數(shù)組指針的應53t分配新空間結構體與函數(shù)結構體變量作為函數(shù)參數(shù)主調函數(shù)被調函數(shù)回顧函數(shù)的傳值調用
{;[];;;};;s1001t分配新空間結構體與函數(shù)結構體變量作為函數(shù)參數(shù)主調函54結構體與函數(shù)例例一個復數(shù)包括實部和虛部,請定義一個復數(shù)結構體,并調用(,)計算并返回兩個復數(shù)的乘積。算法設計定義結構體類型定義主函數(shù)完成變量定義、輸入、調用函數(shù)、結果輸出定義子函數(shù)計算兩個復數(shù)的乘積并返回結果<>{;};(){{}{};();("\");;}(,){;**;**;;}結構體與函數(shù)例例一個復數(shù)包括實部和虛部,請定義一個復數(shù)55結構體與函數(shù)結構體指針變量作為函數(shù)參數(shù)回顧函數(shù)的傳地址調用
{;[];;;};;主調函數(shù)被調函數(shù)s1001sp分配一個地址空間實現(xiàn)間接訪問優(yōu)點:分配少量空間以及傳遞少量的數(shù)據(jù)可以傳遞結構體數(shù)組名EX9.9EX9.8結構體與函數(shù)結構體指針變量作為函數(shù)參數(shù)回顧函數(shù)的傳地56結構體與函數(shù)例例輸入個學生的成績信息,再輸入一個學生的學號、課程序號以及成績,在自定義函數(shù)中修改該學生指定課程的成績。算法設計定義結構體類型定義主函數(shù)完成變量定義、輸入、調用函數(shù)、結果輸出定義子函數(shù)完成修改學生指定課程的成績<>{[];};(){……;();……;;}(*){;(<)(>);()>;()>;>;;}pppp練習結構體與函數(shù)例例輸入個學生的成績信息,再輸入一個學生的57單鏈表及其應用動態(tài)存儲分配58動態(tài)存儲分配[];√;(“”);[];?無法實現(xiàn)按需分配存儲單元舉例說明(*)(*());(*)(,());(*)(*());();p01234567#include<stdlib.h>freemalloc,calloc,realloc0127879單鏈表及其應用動態(tài)存儲分配25動態(tài)存儲分配[];√;單鏈表及其應用例算法設計定義結構體類型和指針變量申請空間數(shù)據(jù)輸入、數(shù)據(jù)輸出釋放空間<><>{;*;;;};(){*;
("">>>>);();;}(*)(());>;>"";>'';>;例動態(tài)分配一塊區(qū)域,輸入輸出一個學生數(shù)據(jù)。單鏈表及其應用例算法設計定義結構體類型和指針變量申請空間數(shù)單鏈表及其應用單鏈表基本概念60[];01234567存在問題存儲空間不能進行動態(tài)伸縮插入、刪除元素需要移動大量的元素使用鏈式存儲結構:鏈表(本教材只介紹單鏈表)單鏈表基本概念結點頭指針空指針數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論