[電腦基礎(chǔ)知識(shí)]第8 結(jié)構(gòu)體與共用體程序設(shè)計(jì)甘玲_第1頁
[電腦基礎(chǔ)知識(shí)]第8 結(jié)構(gòu)體與共用體程序設(shè)計(jì)甘玲_第2頁
[電腦基礎(chǔ)知識(shí)]第8 結(jié)構(gòu)體與共用體程序設(shè)計(jì)甘玲_第3頁
[電腦基礎(chǔ)知識(shí)]第8 結(jié)構(gòu)體與共用體程序設(shè)計(jì)甘玲_第4頁
[電腦基礎(chǔ)知識(shí)]第8 結(jié)構(gòu)體與共用體程序設(shè)計(jì)甘玲_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第8章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)c語言程序設(shè)計(jì)語言程序設(shè)計(jì)2解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23本章內(nèi)容本章內(nèi)容信息查詢問題信息查詢問題1信息打印問題信息打印問題2約瑟夫環(huán)問題約瑟夫環(huán)問題 3 共用體共用體結(jié)構(gòu)體類型與變量、結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體類型與變量、結(jié)構(gòu)體數(shù)組 共享內(nèi)存問題共享內(nèi)存問題4自引用結(jié)構(gòu)、動(dòng)態(tài)內(nèi)存分配、鏈表自引用結(jié)構(gòu)、動(dòng)態(tài)內(nèi)存分配、鏈表 結(jié)構(gòu)體指針結(jié)構(gòu)體指針位讀取問題位讀取問題5 位運(yùn)算、位段位運(yùn)算、位段3解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序

2、設(shè)計(jì)2021-11-23信息查詢問題信息查詢問題學(xué)號(hào)學(xué)號(hào)姓名姓名性別性別數(shù)學(xué)數(shù)學(xué)英英 語語計(jì)算機(jī)計(jì)算機(jī)c語言語言通信網(wǎng)通信網(wǎng)平均分平均分101張三張三m809098869088.8102李四李四m828994819187.4103王五王五f927886798984.8104何六何六m898178637677.4105周七周七f986991856782106 數(shù)組是非常有用的一種數(shù)據(jù)結(jié)構(gòu),但它的所有元素的數(shù)據(jù)類型都必須相同。數(shù)組是非常有用的一種數(shù)據(jù)結(jié)構(gòu),但它的所有元素的數(shù)據(jù)類型都必須相同。但是,在現(xiàn)實(shí)生活中,將一組異型的數(shù)據(jù)看作一個(gè)整體也很重要。如:但是,在現(xiàn)實(shí)生活中,將一組異型的數(shù)據(jù)看作一個(gè)整

3、體也很重要。如:對(duì)一個(gè)班的所有學(xué)生各課程按平均分排名。對(duì)一個(gè)班的所有學(xué)生各課程按平均分排名。假定輸入某班假定輸入某班30個(gè)學(xué)生信息(包括:學(xué)號(hào)、姓名、性別、個(gè)學(xué)生信息(包括:學(xué)號(hào)、姓名、性別、5門課程成績(jī)、門課程成績(jī)、平均分),要求按平均分由高到低輸出該班學(xué)生信息。我們?cè)撛趺醋瞿兀科骄郑?,要求按平均分由高到低輸出該班學(xué)生信息。我們?cè)撛趺醋瞿兀?解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23問題分析問題分析例例8-1 對(duì)一個(gè)班的學(xué)生成績(jī)進(jìn)行排名。對(duì)一個(gè)班的學(xué)生成績(jī)進(jìn)行排名。假定要求輸入某班假定要求輸入某班30個(gè)學(xué)生的信息

4、(包括學(xué)號(hào)、姓名、個(gè)學(xué)生的信息(包括學(xué)號(hào)、姓名、性別、性別、3門課成績(jī)),求得平均成績(jī),要求按平均成績(jī)門課成績(jī)),求得平均成績(jī),要求按平均成績(jī)由高到低輸出該班學(xué)生信息。由高到低輸出該班學(xué)生信息。 【分析分析】學(xué)生學(xué)生“學(xué)號(hào)學(xué)號(hào)”、“姓名姓名”、“性別性別”使用字符型數(shù)據(jù),使用字符型數(shù)據(jù),幾門課程的幾門課程的“成績(jī)成績(jī)”使用整型數(shù)據(jù),使用整型數(shù)據(jù),“平均分平均分”使用使用實(shí)型數(shù)據(jù),可以分別定義不同的變量來存放這幾個(gè)類實(shí)型數(shù)據(jù),可以分別定義不同的變量來存放這幾個(gè)類型的數(shù)據(jù)。如果要顯示某個(gè)學(xué)生的信息,那么要找到型的數(shù)據(jù)。如果要顯示某個(gè)學(xué)生的信息,那么要找到該學(xué)生的信息就要從這幾個(gè)變量中分別查找,并且

5、還該學(xué)生的信息就要從這幾個(gè)變量中分別查找,并且還要同步移動(dòng)數(shù)組元素位置,這給程序員帶來了很多不要同步移動(dòng)數(shù)組元素位置,這給程序員帶來了很多不便。便。5解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23數(shù)組解決方式數(shù)組解決方式v int studentid30; /* 最多可以管理最多可以管理30個(gè)學(xué)生個(gè)學(xué)生, 每個(gè)學(xué)生的學(xué)號(hào)每個(gè)學(xué)生的學(xué)號(hào)用數(shù)組的下標(biāo)表示用數(shù)組的下標(biāo)表示*/v char studentname3010;v int studentsex;v int scoremath30; /*數(shù)學(xué)課的成績(jī)數(shù)學(xué)課的成績(jī)*/v

6、int scoreenglish30; /*英語課的成績(jī)英語課的成績(jī)*/v int scorecomputer30;/*計(jì)算機(jī)原理課的成績(jī)計(jì)算機(jī)原理課的成績(jī)*/v int scorec30; /*c語言課的成績(jī)語言課的成績(jī)*/v int scoretelecomm30; /*通信網(wǎng)的成績(jī)通信網(wǎng)的成績(jī)*/v int aveage30; /*平均成績(jī)平均成績(jī)*/6解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23數(shù)組解決方式數(shù)組解決方式v數(shù)據(jù)的內(nèi)存管理方式數(shù)據(jù)的內(nèi)存管理方式 90788978839272957288988788.

7、887.484.877.4101102103104zhangsanlishiwangwuheliummfm808292897解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23希望的內(nèi)存分配希望的內(nèi)存分配101zhangsanm80909888.8102lisim82899487.4103wangwuf92788684.8104helium89817877.48解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23問題分析問題分析在在c語言中,允許用戶自己構(gòu)造一

8、種新的數(shù)據(jù)類型,它的成員語言中,允許用戶自己構(gòu)造一種新的數(shù)據(jù)類型,它的成員可以包括各種數(shù)據(jù)類型,這種數(shù)據(jù)結(jié)構(gòu)就是結(jié)構(gòu)體可以包括各種數(shù)據(jù)類型,這種數(shù)據(jù)結(jié)構(gòu)就是結(jié)構(gòu)體(structure),它相當(dāng)于其他高級(jí)語言中的),它相當(dāng)于其他高級(jí)語言中的“記錄記錄”。結(jié)構(gòu)。結(jié)構(gòu)體中的元素稱為體中的元素稱為“成員成員”,在,在“記錄記錄”中稱為中稱為“字段字段”,用來,用來存儲(chǔ)所有存儲(chǔ)所有“記錄記錄”的數(shù)據(jù)集合稱為的數(shù)據(jù)集合稱為“數(shù)據(jù)庫數(shù)據(jù)庫”。結(jié)構(gòu)體中的所有成員變量在內(nèi)存中是連續(xù)存儲(chǔ)的,結(jié)構(gòu)體的內(nèi)結(jié)構(gòu)體中的所有成員變量在內(nèi)存中是連續(xù)存儲(chǔ)的,結(jié)構(gòu)體的內(nèi)存空間大小為各成員內(nèi)存空間大小之和。存空間大小為各成員內(nèi)存空

9、間大小之和。本例聲明一個(gè)結(jié)構(gòu)體類型本例聲明一個(gè)結(jié)構(gòu)體類型struct student,它包括:學(xué)號(hào)、,它包括:學(xué)號(hào)、姓名、性別、姓名、性別、3門課成績(jī)、平均成績(jī)共門課成績(jī)、平均成績(jī)共5個(gè)成員。存放一個(gè)學(xué)個(gè)成員。存放一個(gè)學(xué)生的信息定義一個(gè)結(jié)構(gòu)體變量,要存放生的信息定義一個(gè)結(jié)構(gòu)體變量,要存放30個(gè)學(xué)生的信息就要個(gè)學(xué)生的信息就要定義一個(gè)結(jié)構(gòu)體數(shù)組。定義一個(gè)結(jié)構(gòu)體數(shù)組。 9解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-1 實(shí)現(xiàn)代碼實(shí)現(xiàn)代碼/* li8_1.c */#include /* 聲明結(jié)構(gòu)體類型聲明結(jié)構(gòu)體類型 */

10、struct student char num5; /* 學(xué)號(hào)學(xué)號(hào) */ char name10; /* 姓名姓名 */ char sex; /* 性別:性別: m男,男,f女女 */ int score3; /* 3門成績(jī)門成績(jī) */ float average; /* 平均成績(jī)平均成績(jī) */; /* 自定義函數(shù)的聲明自定義函數(shù)的聲明 */void enter(struct student a,int n); /* 輸入學(xué)生信息輸入學(xué)生信息 */void sort(struct student a,int n); /* 按平均成績(jī)由高到低排序按平均成績(jī)由高到低排序 */void print(

11、struct student a,int n); /* 輸出學(xué)生信息輸出學(xué)生信息 */* 主函數(shù)主函數(shù) */int main() int n; struct student stu30; /* 定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組 */ printf(請(qǐng)輸入該班學(xué)生人數(shù)請(qǐng)輸入該班學(xué)生人數(shù)n(n=30): ); scanf(%d,&n); enter(stu,n); /* 調(diào)用輸入函數(shù)調(diào)用輸入函數(shù) */ sort(stu,n); /* 調(diào)用排序函數(shù)調(diào)用排序函數(shù) */ print(stu,n); /* 調(diào)用輸出函數(shù)調(diào)用輸出函數(shù) */ return 0;10解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第

12、版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-1程序(續(xù)程序(續(xù)1)/* 輸入函數(shù)輸入函數(shù) */void enter(struct student a,int n) int i,j,sum=0; printf(請(qǐng)輸入請(qǐng)輸入 %d 個(gè)學(xué)生信息個(gè)學(xué)生信息(學(xué)號(hào)學(xué)號(hào),姓名姓名,性別性別,3門課成績(jī)門課成績(jī)): n,n); for(i=0; in; i+) printf(請(qǐng)輸入第請(qǐng)輸入第 %d 個(gè)學(xué)生的學(xué)號(hào)個(gè)學(xué)生的學(xué)號(hào) 姓名姓名 性別性別: n,i+1); scanf(%s %s %c,ai.num,,&ai.sex); /* 引用成員引用

13、成員 */ printf(請(qǐng)輸入第請(qǐng)輸入第 %d 個(gè)學(xué)生的個(gè)學(xué)生的3門課成績(jī)門課成績(jī): n,i+1); sum=0; for(j=0; j3; j+) scanf(%d,&ai.scorej); /* 輸入輸入3門課成績(jī)門課成績(jī) */ sum=sum+ai.scorej; /* 求每個(gè)學(xué)生總成績(jī)求每個(gè)學(xué)生總成績(jī) */ ai.average=sum/3.0; /* 求每個(gè)學(xué)生平均成績(jī)求每個(gè)學(xué)生平均成績(jī) */ 11解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-1程序(續(xù)程序(續(xù)2)/* 選擇法排序函數(shù)選擇法排

14、序函數(shù) */void sort(struct student a,int n) int i,j,p; struct student temp; /* 定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量 */ for(i=0; in-1; i+) p=i; for(j=i+1; jap.average) /* 引用結(jié)構(gòu)體成員引用結(jié)構(gòu)體成員 */ p=j; if(p!=i) temp=ai; ai=ap; ap=temp; /* 輸出函數(shù)輸出函數(shù) */void print(struct student a,int n) int i,j,mc=1; /* mc表示名次表示名次 */ printf(n按平均成績(jī)排名的名次表

15、按平均成績(jī)排名的名次表: n); printf(學(xué)號(hào)學(xué)號(hào)t姓名姓名t性別性別tcj1tcj2tcj3t平均成績(jī)平均成績(jī)t名次名次n); for(i=0; in; i+) printf(%st%st%ct,ai.num,,ai.sex); for(j=0; j3; j+) printf(%dt,ai.scorej); printf(%6.1ft%dn,ai.average,mc+); 12解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-1程序分析程序分析v本例程序定義了一個(gè)結(jié)構(gòu)體類型本例程序定義了一個(gè)結(jié)

16、構(gòu)體類型student,并用它定義了,并用它定義了包括包括30個(gè)元素的個(gè)元素的stu結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體變量結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體變量temp。struct student char num5; /* 學(xué)號(hào)學(xué)號(hào) */ char name10; /* 姓名姓名 */ char sex; /* 性別:性別: m男,男,f女女 */ int score3; /* 3門成績(jī)門成績(jī) */ float average; /* 平均成績(jī)平均成績(jī) */; struct student stu30; /* 定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組 */ struct student temp; /* 定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量

17、 */ v在在“結(jié)構(gòu)體數(shù)組元素之間交換結(jié)構(gòu)體數(shù)組元素之間交換”時(shí),不是對(duì)結(jié)構(gòu)體數(shù)組元時(shí),不是對(duì)結(jié)構(gòu)體數(shù)組元素各成員進(jìn)行交換,而是對(duì)該結(jié)構(gòu)體數(shù)組元素進(jìn)行整體交換。素各成員進(jìn)行交換,而是對(duì)該結(jié)構(gòu)體數(shù)組元素進(jìn)行整體交換。交換語句為:交換語句為:temp=ai; ai=ap; ap=temp; v本程序涉及到結(jié)構(gòu)體類型的聲明、結(jié)構(gòu)體變量和數(shù)組的定本程序涉及到結(jié)構(gòu)體類型的聲明、結(jié)構(gòu)體變量和數(shù)組的定義、結(jié)構(gòu)體成員的引用、結(jié)構(gòu)體的賦值和輸出等知識(shí)點(diǎn)。義、結(jié)構(gòu)體成員的引用、結(jié)構(gòu)體的賦值和輸出等知識(shí)點(diǎn)。13解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)202

18、1-11-23結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)體(結(jié)構(gòu)體(structure)是一個(gè)或多個(gè)相同數(shù)據(jù))是一個(gè)或多個(gè)相同數(shù)據(jù)類型或不同數(shù)據(jù)類型的變量集合在一個(gè)名稱下類型或不同數(shù)據(jù)類型的變量集合在一個(gè)名稱下的用戶自定義數(shù)據(jù)類型。的用戶自定義數(shù)據(jù)類型。由于其成員的類型可以不同,因此,用戶必須由于其成員的類型可以不同,因此,用戶必須先聲明結(jié)構(gòu)體類型,再根據(jù)結(jié)構(gòu)體類型定義結(jié)先聲明結(jié)構(gòu)體類型,再根據(jù)結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量來存放相應(yīng)數(shù)據(jù)。構(gòu)體變量來存放相應(yīng)數(shù)據(jù)。14解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體類型結(jié)構(gòu)體類型&結(jié)構(gòu)體是結(jié)

19、構(gòu)體是一種構(gòu)造數(shù)據(jù)類型一種構(gòu)造數(shù)據(jù)類型&用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體-自定義數(shù)據(jù)類型自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義格式:結(jié)構(gòu)體類型定義格式:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; .;成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識(shí)符可省:無名結(jié)構(gòu)體15解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23聲明結(jié)構(gòu)體類型聲明結(jié)構(gòu)體類型例 struct student int num; cha

20、r name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字節(jié)字節(jié)2字節(jié)字節(jié)20字節(jié)字節(jié)1字節(jié)字節(jié)4字節(jié)字節(jié)30字節(jié)字節(jié).結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存,不能初始化結(jié)構(gòu)體類型定義的作用域16解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23使用使用typedef定義數(shù)據(jù)類型的別名定義數(shù)據(jù)類型的別名功能功能:用自定義名字為已有數(shù)據(jù)類型命名:用自定義名字為已有數(shù)據(jù)類型命名類型定義簡(jiǎn)單形式:類型定義簡(jiǎn)單形式: typ

21、edef type name;類型定義語句關(guān)鍵字類型定義語句關(guān)鍵字已有數(shù)據(jù)類型名已有數(shù)據(jù)類型名用戶定義的類型名用戶定義的類型名例例 typedef int integer;例例 typedef float real;類型定義后類型定義后, ,與已有類型一樣使用與已有類型一樣使用例例 integer a,b,c; real f1,f2; int a,b,c; float f1,f2; 說明說明: :1.typedef 1.typedef 沒有創(chuàng)造新數(shù)據(jù)類型沒有創(chuàng)造新數(shù)據(jù)類型2.2.typedef typedef 是定義類型是定義類型, ,不能定義變量不能定義變量3.typedef 3.typed

22、ef 與與 define define 不同不同 define typedefdefine typedef預(yù)編譯時(shí)處理預(yù)編譯時(shí)處理 編譯時(shí)處理編譯時(shí)處理簡(jiǎn)單字符置換簡(jiǎn)單字符置換 為已有類型命名為已有類型命名 17解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23聲明一個(gè)新的類型別名的方法聲明一個(gè)新的類型別名的方法1 1、按定義變量方法先寫出定義體、按定義變量方法先寫出定義體 如如 int i;int i;2 2、將變量名換成新類型名將變量名換成新類型名 如如 int integer;int integer;3 3、最前面加最

23、前面加typedef typedef 如如 typedef int integer;typedef int integer;4 4、用新類型名定義變量用新類型名定義變量 如如 integer i,j;integer i,j;類型定義可嵌套類型定義可嵌套例例 定義數(shù)組類型定義數(shù)組類型 int a100; int array100; typedef int array100; array a,b,c; int a100,b100,c100;例例 定義指針類型定義指針類型 char *str; char *string; typedef char *string; string p,s10; cha

24、r *p; char *s10;例例 定義函數(shù)指針類型定義函數(shù)指針類型 int (*p)(); int (*power)(); typedef int (*power)(); power p1,p2; int (*p1)(),(*p2)();例例 定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型 struct date int month; int day; int year; d;例例 定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型 struct date int month; int day; int year; date;例例 定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型typedef struct date int month; int

25、day; int year; date;例例 定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型 date birthday, *p; struct date int month; int day; int year; birthday, *p;例例 typedef struct club char name20; int size; int year; group; typedef group *pg; pg pclub; group為結(jié)構(gòu)體類型pg為指向group的指針類型 group *pclub; struct club *pclub;18解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用

26、體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量v一般形式:第一種形式第一種形式例例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2; struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量名表列;變量名表列;例例 #define student struct

27、student student int num; char name20; char sex; int age; float score; char addr30; ; student stu1,stu2; 19解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量一般形式:一般形式:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; .變量名表列;變量名表列;例例 st

28、ruct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 第二種形式第二種形式20解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義第三種形式第三種形式直接定義結(jié)構(gòu)體變量直接定義結(jié)構(gòu)體變量一般形式:一般形式:struct 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; .變量名表列;變量名表列;例例 struct int num; char

29、 name20; char sex; int age; float score; char addr30; stu1,stu2; 用無名結(jié)構(gòu)體直接定義變量,只用無名結(jié)構(gòu)體直接定義變量,只能使用一次,不能再用該結(jié)構(gòu)體能使用一次,不能再用該結(jié)構(gòu)體定義變量名表列以外的其他變量定義變量名表列以外的其他變量21解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體說明結(jié)構(gòu)體說明v結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同l類型:不分配內(nèi)存;類型:不分配內(nèi)存; 變量:分配內(nèi)存變量:分配內(nèi)存l類型:不能賦值、存取、運(yùn)算

30、類型:不能賦值、存取、運(yùn)算; ; 變量:可以變量:可以v結(jié)構(gòu)體可嵌套結(jié)構(gòu)體可嵌套v結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆v結(jié)構(gòu)體類型及變量的作用域與生存期結(jié)構(gòu)體類型及變量的作用域與生存期例例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例例 struct student int num; char name20; struct

31、date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyear22解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用引用規(guī)則v 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員v可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量v結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用成員成員(分量分量)運(yùn)算符運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí): 1結(jié)合性結(jié)合性:從左向右從左向右引用方式:引用方式: 結(jié)構(gòu)體變量

32、名結(jié)構(gòu)體變量名. .成員名成員名例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%sn”,st

33、u1); ( )stu1=101,“wan lin”,m,19,87.5,“dalian”; ( )例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1,stu2;numnamebirthdaymonthdayyearstu1.birthd

34、ay.month=12;例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; if(stu1=stu2). ( )23解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化形式一形式一struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)

35、據(jù)初始數(shù)據(jù);例例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“wang lin”,m,19, “200 beijing road”;24解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例

36、struct student int num; char name20; char sex; int age; char addr30; stu1=112,“wang lin”,m,19, “200 beijing road”; 形式二形式二25解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化struct 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名;成員名; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct int num; char name20;

37、 char sex; int age; char addr30; stu1=112,“wang lin”,m,19, “200 beijing road”; 形式三形式三26解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-2 輸出輸出3門課平均成績(jī)門課平均成績(jī)【分析分析】學(xué)生的基本信息包括學(xué)號(hào)、姓名、性別、地址、學(xué)生的基本信息包括學(xué)號(hào)、姓名、性別、地址、3門門課程成績(jī)、平均成績(jī),假設(shè)這個(gè)學(xué)生的課程成績(jī)、平均成績(jī),假設(shè)這個(gè)學(xué)生的3門課程的成門課程的成績(jī)分別為數(shù)學(xué)績(jī)分別為數(shù)學(xué)90分、英語分、英語80分、分、c語言語言8

38、5分,分,3門門課程成績(jī)用整型數(shù)組表示,平均成績(jī)用浮點(diǎn)數(shù)表示。課程成績(jī)用整型數(shù)組表示,平均成績(jī)用浮點(diǎn)數(shù)表示。27解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-2程序程序/* li8_2.c */* 聲明結(jié)構(gòu)體類型聲明結(jié)構(gòu)體類型struct scoretype */#include struct scoretype int score3; /* 3門課成績(jī)門課成績(jī) */ float average; /* 平均成績(jī)平均成績(jī) */;/* 聲明結(jié)構(gòu)體類型聲明結(jié)構(gòu)體類型struct student */typedef s

39、truct scoretype score;struct student char num5; /* 學(xué)號(hào)學(xué)號(hào) */ char name10; /* 姓名姓名 */ char sex; /* 性別:性別: m-男,男,f-女女 */ char *addr; /* 地址地址 */ score a; /* 成績(jī)成績(jī) */;typedef struct student student;int main() int i,sum=0; student s=101,zhangjuan, f,beijing,90,85,80,0.0; for(i=0; i3; i+) sum+=s.a.scorei; /*

40、 求總成績(jī)求總成績(jī) */ /* 求平均成績(jī)求平均成績(jī) */ s.a.average=sum/5.0; /* 輸出學(xué)生信息輸出學(xué)生信息 */ printf(num=%s,name=%s, sex=%c,addr=%s, average=%fn, s.num,, s.sex,s.addr, s.a.average); return 0;28解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體變量作函數(shù)參數(shù)結(jié)構(gòu)體變量作函數(shù)參數(shù) 結(jié)構(gòu)體變量作為函數(shù)的參數(shù),系統(tǒng)采用結(jié)構(gòu)體變量作為函數(shù)的參數(shù),系統(tǒng)采用“數(shù)據(jù)復(fù)制數(shù)據(jù)復(fù)制”

41、的方式,系統(tǒng)的方式,系統(tǒng)開銷大,影響程序的執(zhí)行效率,因此一般采用結(jié)構(gòu)體指針作為函數(shù)的開銷大,影響程序的執(zhí)行效率,因此一般采用結(jié)構(gòu)體指針作為函數(shù)的參數(shù)。參數(shù)。 1 1、用結(jié)構(gòu)體變量的成員作函數(shù)參數(shù)、用結(jié)構(gòu)體變量的成員作函數(shù)參數(shù) 如用:如用:stu1.numstu1.num、2等作函數(shù)實(shí)參,將實(shí)參傳給形等作函數(shù)實(shí)參,將實(shí)參傳給形參。用法和用普通變量作實(shí)參是一樣的,屬于參。用法和用普通變量作實(shí)參是一樣的,屬于“值傳遞值傳遞”方式。應(yīng)當(dāng)方式。應(yīng)當(dāng)注意實(shí)參與形參的類型保持一致。注意實(shí)參與形參的類型保持一致。 2 2、用結(jié)構(gòu)體變量作函數(shù)實(shí)參、用結(jié)構(gòu)體變量作函數(shù)實(shí)參 老

42、版本的老版本的c c系統(tǒng)不允許用結(jié)構(gòu)體變量作實(shí)參,而系統(tǒng)不允許用結(jié)構(gòu)體變量作實(shí)參,而ansicansic取消了這一限取消了這一限制。用結(jié)構(gòu)體變量作實(shí)參時(shí),采取的是制。用結(jié)構(gòu)體變量作實(shí)參時(shí),采取的是“值傳遞值傳遞”方式,應(yīng)當(dāng)注意實(shí)方式,應(yīng)當(dāng)注意實(shí)參與形參必須是同類型的結(jié)構(gòu)體變量。由于參與形參必須是同類型的結(jié)構(gòu)體變量。由于“值傳遞值傳遞”時(shí)系統(tǒng)開銷比時(shí)系統(tǒng)開銷比較大,一般不采用這種方式。較大,一般不采用這種方式。 29解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23函數(shù)的返回值為結(jié)構(gòu)體類型函數(shù)的返回值為結(jié)構(gòu)體類型v一個(gè)函數(shù)可以

43、帶回一個(gè)函數(shù)值,這個(gè)函數(shù)值可以一個(gè)函數(shù)可以帶回一個(gè)函數(shù)值,這個(gè)函數(shù)值可以是整型、實(shí)型、字符型、指針等,也可以是結(jié)構(gòu)是整型、實(shí)型、字符型、指針等,也可以是結(jié)構(gòu)體變量或結(jié)構(gòu)體指針。體變量或結(jié)構(gòu)體指針。30解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-3 輸出學(xué)生成績(jī)等信息輸出學(xué)生成績(jī)等信息/* li8_3.c */#include #include #define format %st%st%fn%ft%fn/* 聲明結(jié)構(gòu)體類型聲明結(jié)構(gòu)體類型struct student */struct student char n

44、um5; /* 學(xué)號(hào)學(xué)號(hào) */ char name10; /* 姓名姓名 */ int score3; /* 3門成績(jī)門成績(jī) */; typedef struct student student;void print(student stu);int main() student stu; strcpy(stu.num,106); /* 給結(jié)構(gòu)體成員賦值給結(jié)構(gòu)體成員賦值 */ strcpy(,li lin); stu.score0=67; stu.score1=89; stu.score2=78; print(stu); return 0;void print(student

45、stu) /* 結(jié)構(gòu)體變量作函數(shù)參數(shù)結(jié)構(gòu)體變量作函數(shù)參數(shù) */ printf(format,stu.num,,stu.score0, stu.score1,stu.score2); 31解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23思考題思考題例例8-3只輸出了一個(gè)學(xué)生的信息,如果需要輸出只輸出了一個(gè)學(xué)生的信息,如果需要輸出200個(gè)學(xué)生的信息,又怎樣實(shí)現(xiàn)呢?個(gè)學(xué)生的信息,又怎樣實(shí)現(xiàn)呢?32解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-2

46、3結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v定義一個(gè)整型變量可以表示一個(gè)學(xué)生的某門課程的成績(jī),如定義一個(gè)整型變量可以表示一個(gè)學(xué)生的某門課程的成績(jī),如果存儲(chǔ)果存儲(chǔ)200個(gè)學(xué)生的某門課程的成績(jī),就必須使用具有個(gè)學(xué)生的某門課程的成績(jī),就必須使用具有200個(gè)元素的一維數(shù)組來處理。個(gè)元素的一維數(shù)組來處理。v結(jié)構(gòu)體變量只能表示一個(gè)學(xué)生(二維表中的一行)的數(shù)據(jù),結(jié)構(gòu)體變量只能表示一個(gè)學(xué)生(二維表中的一行)的數(shù)據(jù),即一個(gè)學(xué)生的信息,如果要表示若干個(gè)學(xué)生(行)的數(shù)據(jù),即一個(gè)學(xué)生的信息,如果要表示若干個(gè)學(xué)生(行)的數(shù)據(jù),可以使用結(jié)構(gòu)體數(shù)組??梢允褂媒Y(jié)構(gòu)體數(shù)組。v結(jié)構(gòu)體數(shù)組的每個(gè)元素仍是結(jié)構(gòu)體類型,每個(gè)元素可以存儲(chǔ)結(jié)構(gòu)體數(shù)組的每個(gè)元素

47、仍是結(jié)構(gòu)體類型,每個(gè)元素可以存儲(chǔ)一個(gè)學(xué)生的數(shù)據(jù),具有一個(gè)學(xué)生的數(shù)據(jù),具有200個(gè)元素的結(jié)構(gòu)體數(shù)組就可以存放個(gè)元素的結(jié)構(gòu)體數(shù)組就可以存放200個(gè)學(xué)生信息。個(gè)學(xué)生信息。33解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組的定義形式一形式一: : struct student int num; char name20; char sex; int age; ;struct student stu2;形式二形式二: : struct student int num; char name20; char s

48、ex; int age; stu2;形式三形式三: struct int num; char name20; char sex; int age; stu2;numnamesexagenumnamesexagestu0stu125b34解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組的引用 struct student int num; char name20; char sex; int age; str3,hu,wu;stu1.age+;strcpy(,”zhaoda”);引

49、用方式:引用方式: 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名下標(biāo)下標(biāo).成員名成員名v相同結(jié)構(gòu)體變量可以相互賦值:相同結(jié)構(gòu)體變量可以相互賦值:hu=str2;str0=wu;v結(jié)構(gòu)體數(shù)組元素的輸入輸出:結(jié)構(gòu)體數(shù)組元素的輸入輸出: scanf(“%d,%s”,&str1.num,); printf(“%d,%s”,str1.num,);35解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化例 struct int num; char name20; char sex

50、; int age; stu =,;順序初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“wang lin”,m,20, 101,“l(fā)i gang”,m,19, 110,“l(fā)iu yan”,f,19; 例 struct student int num; char name20; char sex; int age; stu =,;分行初始化分行初始化: struct student int num; char name20; char sex; int age; ;str

51、uct student stu =100,“wang lin”,m,20, 101,“l(fā)i gang”,m,19, 110,“l(fā)iu yan”,f,19; 全部初始化時(shí)維數(shù)可省全部初始化時(shí)維數(shù)可省36解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)v結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)與一般數(shù)組作函數(shù)參結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)與一般數(shù)組作函數(shù)參數(shù)一樣,它是數(shù)一樣,它是“地址傳遞地址傳遞”的。的。v在主調(diào)函數(shù)中,只需要將結(jié)構(gòu)體數(shù)組名帶入在主調(diào)函數(shù)中,只需要將結(jié)構(gòu)體數(shù)組名帶入即可,在被調(diào)函數(shù)中使用結(jié)構(gòu)體數(shù)組

52、的方法即可,在被調(diào)函數(shù)中使用結(jié)構(gòu)體數(shù)組的方法與主調(diào)函數(shù)一樣。與主調(diào)函數(shù)一樣。37解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-4 設(shè)計(jì)一個(gè)洗牌和發(fā)牌的程序設(shè)計(jì)一個(gè)洗牌和發(fā)牌的程序【分析分析】一幅撲克一幅撲克52張牌,分為張牌,分為4種花色,用種花色,用h代表紅桃,代表紅桃,d代表方塊,代表方塊,c代表梅花,代表梅花,s代表黑桃,每種花色又有代表黑桃,每種花色又有13張牌:張牌:a、2、3、10、j、q、k。顯然,每一張牌由兩個(gè)元素組成:花色和牌面,我們可以定義顯然,每一張牌由兩個(gè)元素組成:花色和牌面,我們可以定義

53、一個(gè)結(jié)構(gòu)體表示一張牌。一個(gè)結(jié)構(gòu)體表示一張牌。發(fā)牌的過程就是將發(fā)牌的過程就是將52張牌按照隨機(jī)順序存放。我們可以定義一張牌按照隨機(jī)順序存放。我們可以定義一個(gè)結(jié)構(gòu)體數(shù)組存放個(gè)結(jié)構(gòu)體數(shù)組存放52張牌,然后用張牌,然后用for循環(huán)排列循環(huán)排列52張牌(數(shù)組張牌(數(shù)組下標(biāo)下標(biāo)051),第),第i次循環(huán),程序選擇一個(gè)次循環(huán),程序選擇一個(gè)051的隨機(jī)數(shù)的隨機(jī)數(shù)j,然后將第然后將第i張牌和第張牌和第j張牌交換,從而完成洗牌的過程。張牌交換,從而完成洗牌的過程。發(fā)牌的過程就是將發(fā)牌的過程就是將52張牌按照隨機(jī)順序發(fā)放。張牌按照隨機(jī)順序發(fā)放。 38解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共

54、用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-4程序程序/* li8_4.c */#include #include #include #include /* 聲明結(jié)構(gòu)體類型聲明結(jié)構(gòu)體類型 */struct card char suit2; /* 花色花色 */ char face3; /* 牌面牌面 */;typedef struct card card;/* 自定義函數(shù)的聲明自定義函數(shù)的聲明 */void initcard(card deck,char s2,char f3);void shuffle(card deck);void print(card deck);int

55、 main() card deck52; /* 定義一副紙牌有定義一副紙牌有52張張 */ char s42=h,d,c,s; /* 花色:花色: 紅紅h方方d梅梅c黑黑s */ char f133=a,2,3,4,5,6,7,8,9,10,j,q,k; /* 牌面牌面 */ initcard(deck,s,f); /* 按順序初始化一副牌按順序初始化一副牌 */ srand(unsigned)time(null); /* 產(chǎn)生隨機(jī)數(shù)的種子函數(shù)產(chǎn)生隨機(jī)數(shù)的種子函數(shù) */ shuffle(deck); /* 洗牌洗牌 */ print(deck); /* 輸出發(fā)牌結(jié)果輸出發(fā)牌結(jié)果 */ retu

56、rn 0;39解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-4程序(續(xù)程序(續(xù)1)/* 洗牌:隨機(jī)產(chǎn)生一副牌洗牌:隨機(jī)產(chǎn)生一副牌 */void shuffle(card deck) int i,j; card temp; for(i=0; i52; i+) j=rand()%52; /* 產(chǎn)生產(chǎn)生051的隨機(jī)數(shù)的隨機(jī)數(shù) */ temp=decki; /* 將第將第i張牌與第張牌與第j張牌交換位置張牌交換位置 */ decki=deckj; deckj=temp; /* 輸出發(fā)牌結(jié)果輸出發(fā)牌結(jié)果 */void pr

57、int(card deck) int i; for(i=0; i52; i+) /* 輸出一張牌的花色和牌面輸出一張牌的花色和牌面 */ printf(%2s-%-2s,decki.suit,decki.face); printf(%c,(i+1)%4 ? t : n); /* 條件運(yùn)算符的應(yīng)用條件運(yùn)算符的應(yīng)用 */ 40解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-4程序(續(xù)程序(續(xù)2)/* 按順序初始化一副牌按順序初始化一副牌 h-a,h-2,h-k,d-a,s-k */void initcard(card

58、deck,char s2,char f3) int i; for(i=0; i52; i+) strcpy(decki.suit,si/13); /* 4種花色種花色 */ strcpy(decki.face,fi%13); /* 13種牌面種牌面 */ 41解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23舉一反三舉一反三例例8-5 計(jì)算某日是本年的第幾天。計(jì)算某日是本年的第幾天?!痉治龇治觥恳荒暌荒?2個(gè)月,除了個(gè)月,除了2月份有閏年和非閏年相差月份有閏年和非閏年相差1天外,其它月天外,其它月份均是不變的,份均是不變的,

59、1月份月份31天,天,2月份月份28天(閏年天(閏年29天),天),3月月份份31天,天,4月份月份30天,天,5月份月份31天,天,6月份月份30天,天,7月份月份31天,天,8月份月份31天,天,9月份月份30天,天,10月份月份31天,天,11月份月份30天,天,12月份月份31天。如果當(dāng)前月份在天。如果當(dāng)前月份在3月之后,并且該年度是閏年,月之后,并且該年度是閏年,則總天數(shù)加則總天數(shù)加1。42解析解析c程序設(shè)計(jì)(第程序設(shè)計(jì)(第2版)第版)第8章章 結(jié)構(gòu)體與共用體程序設(shè)計(jì)結(jié)構(gòu)體與共用體程序設(shè)計(jì)2021-11-23例例8-5程序程序/* li8_5.c */#include /* 聲明結(jié)構(gòu)

60、體類型聲明結(jié)構(gòu)體類型struct date */struct date int year; /* 年年 */ int month; /* 月月 */ int day; /* 日日 */; typedef struct date ymd; /* 聲明結(jié)構(gòu)體別名聲明結(jié)構(gòu)體別名 */* 自定義函數(shù)的聲明自定義函數(shù)的聲明 */int countdays(ymd date); int main() ymd date; /* 用別名定義結(jié)構(gòu)體變量用別名定義結(jié)構(gòu)體變量 */ int days; printf(input year,month,day: ); scanf(%d,%d,%d,&date.year,&date.month,&date.day); /*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論