第十章:結(jié)構(gòu)與共用_第1頁(yè)
第十章:結(jié)構(gòu)與共用_第2頁(yè)
第十章:結(jié)構(gòu)與共用_第3頁(yè)
第十章:結(jié)構(gòu)與共用_第4頁(yè)
第十章:結(jié)構(gòu)與共用_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第十章 結(jié)構(gòu)與共用楊麗波 朱迅 湯承林 編著劉長(zhǎng)榮 主審本章目標(biāo)v理解為什么使用結(jié)構(gòu)與共用v掌握結(jié)構(gòu)和結(jié)構(gòu)變量的定義方法v結(jié)構(gòu)變量的賦值和引用、結(jié)構(gòu)數(shù)組和指向結(jié)構(gòu)變量的指針的用法v共用的概念和共用變量的引用v動(dòng)態(tài)存儲(chǔ)分配的方法為什么要使用結(jié)構(gòu)v例如:存儲(chǔ)一個(gè)班級(jí)中5名同學(xué)的信息:學(xué)號(hào)、姓名、性別、年齡。1.使用數(shù)組存儲(chǔ)?張三李四王五錢(qián)六趙四FMFMF01020304052323243221 “結(jié)構(gòu)” 是一種構(gòu)造數(shù)據(jù)類(lèi)型,它是由若干數(shù)據(jù)類(lèi)型的數(shù)據(jù)項(xiàng)組合而成的復(fù)雜數(shù)據(jù)對(duì)象,這些數(shù)據(jù)項(xiàng)稱(chēng)為結(jié)構(gòu)的成員。10.1 結(jié)構(gòu)與結(jié)構(gòu)變量10.1.1結(jié)構(gòu)的定義結(jié)構(gòu)的定義 在在C語(yǔ)言中,結(jié)構(gòu)是一種由不同數(shù)據(jù)類(lèi)型的變

2、量組成的集合。組成語(yǔ)言中,結(jié)構(gòu)是一種由不同數(shù)據(jù)類(lèi)型的變量組成的集合。組成結(jié)構(gòu)的變量稱(chēng)為結(jié)構(gòu)元素或結(jié)構(gòu)成員。結(jié)構(gòu)的變量稱(chēng)為結(jié)構(gòu)元素或結(jié)構(gòu)成員。 結(jié)構(gòu)定義的一般形式為:結(jié)構(gòu)定義的一般形式為: struct 結(jié)構(gòu)名結(jié)構(gòu)名 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 成員名成員名1; 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 成員名成員名2; 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 成員名成員名n; ; 其中,其中,struct是關(guān)鍵字,每個(gè)結(jié)構(gòu)都可以含有多個(gè)不同類(lèi)型的成員,是關(guān)鍵字,每個(gè)結(jié)構(gòu)都可以含有多個(gè)不同類(lèi)型的成員,結(jié)構(gòu)中的成員也稱(chēng)結(jié)構(gòu)中的元素,結(jié)構(gòu)定義以分號(hào)結(jié)構(gòu)中的成員也稱(chēng)結(jié)構(gòu)中的元素,結(jié)構(gòu)定義以分號(hào)“;”結(jié)束。結(jié)束。定義結(jié)構(gòu)struct studentint i

3、d;char name20;char sex;int age;結(jié)構(gòu)成員結(jié)構(gòu)名C 語(yǔ)言中的有效數(shù)據(jù)類(lèi)型 結(jié)構(gòu)定義放置在程序的開(kāi)始部分,位于頭文件聲明之后 結(jié)構(gòu)定義并不預(yù)留內(nèi)存,結(jié)構(gòu)定義僅描述了一個(gè)結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu),需要聲明結(jié)構(gòu)變量。結(jié)構(gòu)變量的定義struct student int num; char name20; char sex; int age; ;2.在定義結(jié)構(gòu)類(lèi)型的同時(shí)定義結(jié)構(gòu)變量在定義結(jié)構(gòu)類(lèi)型的同時(shí)定義結(jié)構(gòu)變量 1.先定義結(jié)構(gòu),再定義結(jié)構(gòu)變量先定義結(jié)構(gòu),再定義結(jié)構(gòu)變量 struct student stu1,stu2;stu1,stu2;3.直接定義結(jié)構(gòu)變量直接定

4、義結(jié)構(gòu)變量 結(jié)構(gòu)變量的內(nèi)存分配v聲明一個(gè)結(jié)構(gòu)變量以后,將會(huì)為該變量分配內(nèi)存,聲明一個(gè)結(jié)構(gòu)變量以后,將會(huì)為該變量分配內(nèi)存,大小是大于或等于其所有成員變量的大小之和。大小是大于或等于其所有成員變量的大小之和。圖圖10-1 結(jié)構(gòu)變量的存儲(chǔ)形式結(jié)構(gòu)變量的存儲(chǔ)形式 struct student int id; char name20; char sex; int age;嵌套結(jié)構(gòu)的定義struct birthday int month; int day; int year;struct student int id; char name20; char sex; struct birthday birt

5、h;stu1,stu2; 在結(jié)構(gòu)在結(jié)構(gòu)student中定義的成員中定義的成員birth是結(jié)構(gòu)是結(jié)構(gòu)birthday類(lèi)型的變量。類(lèi)型的變量。 注意:在一個(gè)結(jié)構(gòu)類(lèi)型的定義中包含的另一種結(jié)構(gòu)類(lèi)型必須是已經(jīng)注意:在一個(gè)結(jié)構(gòu)類(lèi)型的定義中包含的另一種結(jié)構(gòu)類(lèi)型必須是已經(jīng)定義的。定義的。結(jié)構(gòu)變量的引用與賦值一般有兩種方式引用結(jié)構(gòu)變量成員:一般有兩種方式引用結(jié)構(gòu)變量成員:1.使用成員運(yùn)算符:結(jié)構(gòu)變量名使用成員運(yùn)算符:結(jié)構(gòu)變量名.成員名成員名例如:例如:stu1.id stu2.sex對(duì)于嵌套結(jié)構(gòu)成員,必須逐級(jí)找到最低級(jí)的成員。對(duì)于嵌套結(jié)構(gòu)成員,必須逐級(jí)找到最低級(jí)的成員。例如:例如:stu1.birth.mont

6、h stu1.birth.year2.使用指針訪(fǎng)問(wèn)結(jié)構(gòu)變量的成員:結(jié)構(gòu)指針變量名使用指針訪(fǎng)問(wèn)結(jié)構(gòu)變量的成員:結(jié)構(gòu)指針變量名-成員名成員名例如:例如:struct student stu,*p; p=&stu; p-id=1;結(jié)構(gòu)成員的賦值 可以使用輸入語(yǔ)句或賦值語(yǔ)句來(lái)給結(jié)構(gòu)變量的各個(gè)成員賦值:可以使用輸入語(yǔ)句或賦值語(yǔ)句來(lái)給結(jié)構(gòu)變量的各個(gè)成員賦值: 例如:例如: =“王五王五”; /使用賦值語(yǔ)句為成員賦值使用賦值語(yǔ)句為成員賦值 stu1.sex=M; 或者:或者: printf(“請(qǐng)輸入請(qǐng)輸入年齡年齡:n); scanf(“%f”,&stu1.age); /使用

7、輸入語(yǔ)句賦值使用輸入語(yǔ)句賦值 或者:或者: stu2 = stu1; /將將stu1的各成員的值分別賦給的各成員的值分別賦給stu2的各成員的各成員結(jié)構(gòu)變量的引用與賦值#includevoid main()struct studentint id;char name9;int age;char sex;struct student stu1;printf(請(qǐng)輸入學(xué)號(hào)、姓名、年齡、性別請(qǐng)輸入學(xué)號(hào)、姓名、年齡、性別:n); scanf(%d%s%d,&stu1.id,,&stu1.age); getchar(); stu1.sex=getchar(); print

8、f(“學(xué)號(hào)學(xué)號(hào):%d 姓名姓名:%s 年齡年齡:%d 性別性別:%cn,stu1.id,,stu1.age,stu1.sex);例例10.1 編寫(xiě)程序,使用結(jié)構(gòu)變量存儲(chǔ)一個(gè)學(xué)生的信息并輸出編寫(xiě)程序,使用結(jié)構(gòu)變量存儲(chǔ)一個(gè)學(xué)生的信息并輸出結(jié)構(gòu)變量的引用與賦值【注意】【注意】(1)結(jié)構(gòu)類(lèi)型可以定義在主函數(shù)之外,也可以定義主函數(shù)之內(nèi)。)結(jié)構(gòu)類(lèi)型可以定義在主函數(shù)之外,也可以定義主函數(shù)之內(nèi)。(2)在)在scanf()語(yǔ)句中()語(yǔ)句中不能加不能加“&”,因?yàn)?,因?yàn)閚ame是字符數(shù)組,是字符數(shù)組,name本身表示數(shù)組的首地址。本身表示數(shù)組的首地址。(3)使用)使用s

9、canf()輸入字符串時(shí),中間不能有空格??梢允褂幂斎胱址畷r(shí),中間不能有空格??梢允褂胓ets()輸入,要以回車(chē)符結(jié)束輸入。輸入,要以回車(chē)符結(jié)束輸入。(4)語(yǔ)句)語(yǔ)句getchar();表示接收輸入年齡的值后輸入的間隔符,語(yǔ)句表示接收輸入年齡的值后輸入的間隔符,語(yǔ)句stu1.sex=getchar();將輸入的性別的值賦給結(jié)構(gòu)成員將輸入的性別的值賦給結(jié)構(gòu)成員sex。結(jié)構(gòu)變量的初始化結(jié)構(gòu)變量與其他類(lèi)型變量一樣,可以在定義的時(shí)候進(jìn)行初始化。結(jié)構(gòu)變量與其他類(lèi)型變量一樣,可以在定義的時(shí)候進(jìn)行初始化。例如:例如: struct student int id; char name20;

10、 int age; char sex;注意:注意: 1.初始化數(shù)據(jù)的順序要與定義結(jié)構(gòu)類(lèi)型時(shí)成員的順序一致。初始化數(shù)據(jù)的順序要與定義結(jié)構(gòu)類(lèi)型時(shí)成員的順序一致。 2.初始化數(shù)據(jù)的數(shù)量可以比定義結(jié)構(gòu)類(lèi)型時(shí)成員的數(shù)量少。初始化數(shù)據(jù)的數(shù)量可以比定義結(jié)構(gòu)類(lèi)型時(shí)成員的數(shù)量少。結(jié)構(gòu)變量的初始化#includestruct student int id; char name9; int age; char sex; int score3;stu1=2,李明李明,22,m,92,85,88;void main() printf(學(xué)號(hào):學(xué)號(hào):%d 姓名:姓名:%s 年齡:年齡:%d 性別:性別:%c ,stu1.i

11、d, ,stu1.age,stu1.sex); printf(成績(jī)是:成績(jī)是:); for(int i=0;i3;i+) printf(%d ,stu1.scorei); printf(n); 【例【例10-210-2】初始化結(jié)構(gòu)變量后輸出每個(gè)成員的值?!砍跏蓟Y(jié)構(gòu)變量后輸出每個(gè)成員的值。結(jié)構(gòu)變量的初始化程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-3所示:所示: 圖圖10-3 例例10-2運(yùn)行結(jié)果運(yùn)行結(jié)果10.2 結(jié)構(gòu)數(shù)組1.結(jié)構(gòu)數(shù)組的定義結(jié)構(gòu)數(shù)組的定義例如:例如: struct student int id; char name20; /定義含義三個(gè)元素的結(jié)構(gòu)數(shù)組,分別定義含

12、義三個(gè)元素的結(jié)構(gòu)數(shù)組,分別 char sex; /是是stud1、stud2、stud3 int age; stud3; q 數(shù)組中的元素都是同一種結(jié)構(gòu)類(lèi)型的變量,稱(chēng)為結(jié)構(gòu)數(shù)組。數(shù)組中的元素都是同一種結(jié)構(gòu)類(lèi)型的變量,稱(chēng)為結(jié)構(gòu)數(shù)組。q 在許多實(shí)際應(yīng)用中,經(jīng)常使用結(jié)構(gòu)數(shù)組來(lái)表示具有相同數(shù)據(jù)結(jié)構(gòu)和特在許多實(shí)際應(yīng)用中,經(jīng)常使用結(jié)構(gòu)數(shù)組來(lái)表示具有相同數(shù)據(jù)結(jié)構(gòu)和特征的一個(gè)群體,例如一個(gè)班級(jí)學(xué)生的信息、一個(gè)部門(mén)成員的檔案等等。征的一個(gè)群體,例如一個(gè)班級(jí)學(xué)生的信息、一個(gè)部門(mén)成員的檔案等等。10.2 結(jié)構(gòu)數(shù)組2.結(jié)構(gòu)數(shù)組的初始化結(jié)構(gòu)數(shù)組的初始化例如:例如: struct student int id; char

13、 name20; char sex; int age; stud3=1,”張三張三”,m,21,2,”李四李四”,m,20,3,”王五王五”,f,22; /定義含有三個(gè)元素的結(jié)構(gòu)數(shù)組,并且逐一進(jìn)行初始化。定義含有三個(gè)元素的結(jié)構(gòu)數(shù)組,并且逐一進(jìn)行初始化。注意:在為全部元素進(jìn)行初始化時(shí),可以省略數(shù)組長(zhǎng)度。注意:在為全部元素進(jìn)行初始化時(shí),可以省略數(shù)組長(zhǎng)度。結(jié)構(gòu)數(shù)組的應(yīng)用【例【例10-3】編寫(xiě)程序,使用結(jié)構(gòu)數(shù)組存儲(chǔ)學(xué)生信息,輸入三門(mén)課程的成績(jī),輸出】編寫(xiě)程序,使用結(jié)構(gòu)數(shù)組存儲(chǔ)學(xué)生信息,輸入三門(mén)課程的成績(jī),輸出每門(mén)課程的平均分,并按個(gè)人總分輸出最高分和最低分。每門(mén)課程的平均分,并按個(gè)人總分輸出最高分和最

14、低分。 #include struct studentint id;char name20;char sex;int age;float score3;float sum;void main()struct student stu3=1,張三張三,m,21,2,李四李四,m,20,3,王五王五,f,22;int i,j;float m,n;float aver3=0,0,0;printf(請(qǐng)輸入學(xué)生三門(mén)課程的成績(jī)請(qǐng)輸入學(xué)生三門(mén)課程的成績(jī):n);printf(課程課程1 課程課程2 課程課程3n);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%f,&stui.sc

15、orej);for(stui.sum=0,j=0;j3;j+)stui.sum+=stui.scorej;for(j=0;j3;j+)averj=averj+stui.scorej; int min,max,mink,maxk;min=max=stu0.sum;for(int k=0;kmax)max=stuk.sum;maxk=k;if(stuk.summin)min=stuk.sum; mink=k;printf(學(xué)號(hào)學(xué)號(hào) 姓名姓名 性別性別 年齡年齡 課程課程1 課程課程2 課程課程3 總分總分n);for(i=0;i3;i+) printf(%3d %6s %3c %5d ,stui.

16、id,, stui.sex,stui.age);for(j=0;j3;j+) printf(%8.1f,stui.scorej);printf(%8.1f,stui.sum);printf(n);printf(總分最高者是:總分最高者是:%d號(hào)號(hào) %5s %8.1fn,stumaxk.id, ,stumaxk.sum); printf(總分最低者是:總分最低者是:%d號(hào)號(hào) %5s %8.1fn,stumink.id, ,stumink.sum);printf(每門(mén)課程成績(jī)平均分每門(mén)課程成績(jī)平均分:n);printf(成績(jī)成績(jī)1

17、成績(jī)成績(jī)2 成績(jī)成績(jī)3:n);for(j=0;j成員名成員名例如:例如: (*p)id (*p)name或者或者 p-id p-name指向結(jié)構(gòu)變量的指針【例【例10-4】使用結(jié)構(gòu)指針變量訪(fǎng)問(wèn)結(jié)構(gòu)】使用結(jié)構(gòu)指針變量訪(fǎng)問(wèn)結(jié)構(gòu)#includestruct student int id; char name20; char sex; int age; float score3;void main() struct student stu=1,王五王五,m,21,*p; p=&stu; printf(請(qǐng)輸入該同學(xué)的成績(jī):請(qǐng)輸入該同學(xué)的成績(jī):);指向結(jié)構(gòu)變量的指針 for(int i=0;iid

18、,p-name,p-sex,p-age); for(int j=0;jscorej); printf(n);指向結(jié)構(gòu)變量的指針程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-5所示:所示: 圖圖10-5 例例10-4運(yùn)行結(jié)果運(yùn)行結(jié)果指向結(jié)構(gòu)數(shù)組的指針 可以使用指針變量指向一個(gè)結(jié)構(gòu)數(shù)組,這時(shí),指針變量的值就是該結(jié)可以使用指針變量指向一個(gè)結(jié)構(gòu)數(shù)組,這時(shí),指針變量的值就是該結(jié)構(gòu)數(shù)組的首地址,即數(shù)組的構(gòu)數(shù)組的首地址,即數(shù)組的0號(hào)元素地址,可通過(guò)指針的移動(dòng),指向結(jié)構(gòu)數(shù)號(hào)元素地址,可通過(guò)指針的移動(dòng),指向結(jié)構(gòu)數(shù)組中的其它元素。組中的其它元素。 例如,結(jié)構(gòu)指針例如,結(jié)構(gòu)指針p指向一個(gè)結(jié)構(gòu)數(shù)組,則指向一個(gè)結(jié)構(gòu)數(shù)組,則

19、p的值就是該數(shù)組的的值就是該數(shù)組的0號(hào)元素的號(hào)元素的地址,地址,p+1就是就是1號(hào)元素的地址,號(hào)元素的地址,p+i就是就是i號(hào)元素的地址,這與指向普通數(shù)號(hào)元素的地址,這與指向普通數(shù)組的指針是一樣的。組的指針是一樣的。 結(jié)構(gòu)指針變量還可以指向數(shù)組元素,這時(shí),該指針變量的值就是所指結(jié)構(gòu)指針變量還可以指向數(shù)組元素,這時(shí),該指針變量的值就是所指向的數(shù)組元素的首地址。向的數(shù)組元素的首地址。指向結(jié)構(gòu)數(shù)組的指針【例【例10-5】使用指向結(jié)構(gòu)數(shù)組的指針變量訪(fǎng)問(wèn)數(shù)組元素?!渴褂弥赶蚪Y(jié)構(gòu)數(shù)組的指針變量訪(fǎng)問(wèn)數(shù)組元素。#include struct student int id; char name20; char

20、sex; int age; float score3; float sum;void main() struct student stu3=1,張三張三,m,21,2,李四李四, m,20,3,王五王五,f,22,*p; int j; printf(請(qǐng)輸入學(xué)生的成績(jī)請(qǐng)輸入學(xué)生的成績(jī):n學(xué)號(hào)學(xué)號(hào) 成績(jī)成績(jī)1 成績(jī)成績(jī)2 成績(jī)成績(jī)3n);for(p=stu;pid);for(j=0;jscorej);for(p-sum=0,j=0;jsum+=p-scorej;printf(輸出成績(jī)單如下輸出成績(jī)單如下:n);printf(學(xué)號(hào)學(xué)號(hào) 姓名姓名 性別性別 年齡年齡 成績(jī)成績(jī)1 成績(jī)成績(jī)2 成績(jī)成績(jī)3

21、 總分總分n);for(p=stu;pid,p-name,p-sex,p-age);for(j=0;jscorej);printf(%9.1f,p-sum);printf(n);指向結(jié)構(gòu)數(shù)組的指針程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-6所示:所示: 圖圖10-6 例例10-5運(yùn)行結(jié)果運(yùn)行結(jié)果指向結(jié)構(gòu)變量的指針作函數(shù)參數(shù) 在在C語(yǔ)言中,可以使用結(jié)構(gòu)變量作函數(shù)參數(shù)進(jìn)行整體傳送,但是這種語(yǔ)言中,可以使用結(jié)構(gòu)變量作函數(shù)參數(shù)進(jìn)行整體傳送,但是這種傳送要將全部成員逐個(gè)傳送,時(shí)間和空間開(kāi)銷(xiāo)很大,嚴(yán)重地降低了程序的傳送要將全部成員逐個(gè)傳送,時(shí)間和空間開(kāi)銷(xiāo)很大,嚴(yán)重地降低了程序的執(zhí)行效率。執(zhí)行效率。 使用指

22、針變量作函數(shù)參數(shù)進(jìn)行傳送可以解決這個(gè)問(wèn)題。這時(shí)由實(shí)參傳使用指針變量作函數(shù)參數(shù)進(jìn)行傳送可以解決這個(gè)問(wèn)題。這時(shí)由實(shí)參傳向形參的只是地址,從而減少了時(shí)間和空間的開(kāi)銷(xiāo)。向形參的只是地址,從而減少了時(shí)間和空間的開(kāi)銷(xiāo)。指向結(jié)構(gòu)變量的指針作函數(shù)參數(shù)【例【例10-6】使用指向結(jié)構(gòu)變量的指針作為函數(shù)參數(shù)?!渴褂弥赶蚪Y(jié)構(gòu)變量的指針作為函數(shù)參數(shù)。#include struct student /定義結(jié)構(gòu)定義結(jié)構(gòu)int id;char *name;char sex;int age;int score;void func(struct student *ps)int i;printf(該學(xué)生的信息如下該學(xué)生的信息如下:

23、n); /輸出結(jié)構(gòu)變量各成員的信息輸出結(jié)構(gòu)變量各成員的信息printf(學(xué)號(hào)學(xué)號(hào):%d 姓名姓名:%s 性別性別:%c 年齡年齡:%d 成績(jī):成績(jī):%d,ps-id,ps-name,ps-sex,ps-age,ps-score);指向結(jié)構(gòu)變量的指針作函數(shù)參數(shù)printf(n);void main() /初始化結(jié)構(gòu)變量,定義一個(gè)結(jié)構(gòu)指針變量初始化結(jié)構(gòu)變量,定義一個(gè)結(jié)構(gòu)指針變量struct student stu=3,張三張三,m,23,90,*p;p=&stu; func(p); /指向結(jié)構(gòu)變量指向結(jié)構(gòu)變量程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-7所示:所示: 圖圖10-7 例例10-

24、6運(yùn)行結(jié)果運(yùn)行結(jié)果指向結(jié)構(gòu)數(shù)組的指針作函數(shù)參數(shù) 【例【例10-7】編寫(xiě)程序,使用結(jié)構(gòu)指針作為函數(shù)參數(shù),計(jì)算并輸出一組學(xué)生】編寫(xiě)程序,使用結(jié)構(gòu)指針作為函數(shù)參數(shù),計(jì)算并輸出一組學(xué)生成績(jī)的總分、平均分和不及格人數(shù)。成績(jī)的總分、平均分和不及格人數(shù)。#include struct student int num; char *name; char sex; int score;stu5=11,李穎李穎,M,55, 12,何平何平,M,75, 13,張芳張芳,F,92, 14,陳龍陳龍,F,85, 15,王瑩王瑩,M,48;void main() struct student *ps;指向結(jié)構(gòu)數(shù)組的指針作

25、函數(shù)參數(shù)void ave(struct student *ps); ps=stu; ave(ps);void ave(struct student *ps) int c=0,i,ave,s=0; for(i=0;iscore; if(ps-score60) c+=1; printf(總分:總分:%d ,s); ave=s/5; printf(平均分:平均分:%d 不及格人數(shù):不及格人數(shù):%dn,ave,c);指向結(jié)構(gòu)數(shù)組的指針作函數(shù)參數(shù)程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-8所示:所示: 圖圖10-8 例例10-7運(yùn)行結(jié)果運(yùn)行結(jié)果10.4 動(dòng)態(tài)內(nèi)存分配 C語(yǔ)言提供了內(nèi)存管理函數(shù),可以按需要

26、動(dòng)態(tài)地分配內(nèi)存空間,也可語(yǔ)言提供了內(nèi)存管理函數(shù),可以按需要?jiǎng)討B(tài)地分配內(nèi)存空間,也可以把不再使用的空間釋放待用,從而更加有效的利用了內(nèi)存空間。常用的以把不再使用的空間釋放待用,從而更加有效的利用了內(nèi)存空間。常用的內(nèi)存管理函數(shù)有如下三個(gè):內(nèi)存管理函數(shù)有如下三個(gè):1.分配內(nèi)存空間函數(shù)分配內(nèi)存空間函數(shù)malloc() 調(diào)用調(diào)用malloc()函數(shù)的一般形式為:函數(shù)的一般形式為: (類(lèi)型說(shuō)明符(類(lèi)型說(shuō)明符 *)malloc(size)例如:例如: char *p; p=(char *)malloc(12);10.4 動(dòng)態(tài)內(nèi)存分配 2.分配內(nèi)存空間函數(shù)分配內(nèi)存空間函數(shù)calloc() calloc()函數(shù)

27、也用于動(dòng)態(tài)的分配內(nèi)存空間。調(diào)用該函數(shù)的一般形式為:函數(shù)也用于動(dòng)態(tài)的分配內(nèi)存空間。調(diào)用該函數(shù)的一般形式為: (類(lèi)型說(shuō)明符(類(lèi)型說(shuō)明符 *)calloc(n,size) 例如:例如: struct student *p; p=(struct student *)calloc(5,sizeof(struct student);10.4 動(dòng)態(tài)內(nèi)存分配【例例10-8】使用使用calloc()函數(shù)動(dòng)態(tài)分配內(nèi)存空間。函數(shù)動(dòng)態(tài)分配內(nèi)存空間。#include#includevoid main()struct studentint id;char name20;struct student *p; p=(stru

28、ct student *)calloc(5,sizeof(struct student);printf(該連續(xù)區(qū)域的地址分別是:該連續(xù)區(qū)域的地址分別是:n);for(int i=0;i5;i+)printf(%pn,p+i);10.4 動(dòng)態(tài)內(nèi)存分配程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-9所示:所示:圖10-9 例10-8運(yùn)行結(jié)果 3.釋放內(nèi)存空間函數(shù)釋放內(nèi)存空間函數(shù)free() free()函數(shù)釋放由函數(shù)釋放由malloc()函數(shù)和函數(shù)和calloc()函數(shù)分配的內(nèi)存空間。函數(shù)分配的內(nèi)存空間。調(diào)用該函數(shù)的一般形式為:調(diào)用該函數(shù)的一般形式為: free(void *p);10.4 動(dòng)態(tài)內(nèi)存分

29、配【例例10-9】動(dòng)態(tài)分配一塊區(qū)域存儲(chǔ)結(jié)構(gòu)變量實(shí)現(xiàn)對(duì)結(jié)構(gòu)變量成員的訪(fǎng)問(wèn)。動(dòng)態(tài)分配一塊區(qū)域存儲(chǔ)結(jié)構(gòu)變量實(shí)現(xiàn)對(duì)結(jié)構(gòu)變量成員的訪(fǎng)問(wèn)。#include#includevoid main() struct student int id; char *name; char sex; float score3; *ps; ps=(struct student*)malloc(sizeof(struct student); ps-id=20; ps-name=Zhang Jing; ps-sex=M;printf(請(qǐng)輸入三門(mén)課程的成績(jī):請(qǐng)輸入三門(mén)課程的成績(jī):);10.4 動(dòng)態(tài)內(nèi)存分配 for(int i=0;

30、iscorei); printf(學(xué)號(hào):學(xué)號(hào):%d 姓名:姓名:%s 性別:性別:%cn成績(jī):成績(jī):,ps-id,ps-name,ps-sex); for(int j=0;jscorej);printf(n); free(ps);程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-1010-10所示:所示:圖圖10-10 例例10-9運(yùn)行結(jié)果運(yùn)行結(jié)果 10.5 結(jié)構(gòu)與鏈表 在上一節(jié)中介紹了使用在上一節(jié)中介紹了使用malloc()函數(shù)可以為變量動(dòng)態(tài)分配一塊內(nèi)存空函數(shù)可以為變量動(dòng)態(tài)分配一塊內(nèi)存空間,這塊空間可以存放一個(gè)變量的數(shù)據(jù),在計(jì)算機(jī)專(zhuān)業(yè)詞匯中,將這樣的間,這塊空間可以存放一個(gè)變量的數(shù)據(jù),在計(jì)算機(jī)專(zhuān)業(yè)詞

31、匯中,將這樣的一塊單元稱(chēng)為一個(gè)一塊單元稱(chēng)為一個(gè)“結(jié)點(diǎn)結(jié)點(diǎn)”。要存放多少個(gè)變量的數(shù)據(jù),就需要建立多少。要存放多少個(gè)變量的數(shù)據(jù),就需要建立多少個(gè)個(gè)結(jié)點(diǎn)。結(jié)點(diǎn)。 鏈表是一種常見(jiàn)的、重要的數(shù)據(jù)結(jié)構(gòu),它是通過(guò)動(dòng)態(tài)分配存儲(chǔ)空間而建鏈表是一種常見(jiàn)的、重要的數(shù)據(jù)結(jié)構(gòu),它是通過(guò)動(dòng)態(tài)分配存儲(chǔ)空間而建立的一種結(jié)構(gòu),是利用指針將多個(gè)結(jié)點(diǎn)鏈在一起的線(xiàn)性結(jié)構(gòu)。在鏈表中,立的一種結(jié)構(gòu),是利用指針將多個(gè)結(jié)點(diǎn)鏈在一起的線(xiàn)性結(jié)構(gòu)。在鏈表中,添加、刪除一個(gè)結(jié)點(diǎn)非常方便,只需要在每個(gè)結(jié)點(diǎn)中存放下一個(gè)結(jié)點(diǎn)的地添加、刪除一個(gè)結(jié)點(diǎn)非常方便,只需要在每個(gè)結(jié)點(diǎn)中存放下一個(gè)結(jié)點(diǎn)的地址(指針),用以把所有結(jié)點(diǎn)址(指針),用以把所有結(jié)點(diǎn)“鏈鏈”成一

32、串。成一串。 10.5 結(jié)構(gòu)與鏈表 可以從第一個(gè)結(jié)點(diǎn)開(kāi)始,依次找到下一個(gè)結(jié)點(diǎn)的地址,直到最后一個(gè)可以從第一個(gè)結(jié)點(diǎn)開(kāi)始,依次找到下一個(gè)結(jié)點(diǎn)的地址,直到最后一個(gè)結(jié)點(diǎn),而不能夠反向查找的鏈表,稱(chēng)為單向鏈表。單向鏈表的示意圖如圖結(jié)點(diǎn),而不能夠反向查找的鏈表,稱(chēng)為單向鏈表。單向鏈表的示意圖如圖10-11所示:所示: 圖圖10-11(b)單向鏈表結(jié)構(gòu)示意圖)單向鏈表結(jié)構(gòu)示意圖 圖圖10-11(a)單向鏈表結(jié)點(diǎn)的結(jié)構(gòu))單向鏈表結(jié)點(diǎn)的結(jié)構(gòu)10.5 結(jié)構(gòu)與鏈表例如,一個(gè)存放學(xué)生信息的結(jié)點(diǎn)具有如下形式:例如,一個(gè)存放學(xué)生信息的結(jié)點(diǎn)具有如下形式:struct student int id; char name20;

33、 char sex; struct student *next;其中前面其中前面3個(gè)成員組成數(shù)據(jù)域,最后一個(gè)成員個(gè)成員組成數(shù)據(jù)域,最后一個(gè)成員next構(gòu)成指針域,它是指向構(gòu)成指針域,它是指向student結(jié)構(gòu)類(lèi)型變量的指針。結(jié)構(gòu)類(lèi)型變量的指針。鏈表操作 鏈表的基本操作包括建立鏈表、對(duì)鏈表的訪(fǎng)問(wèn)和遍歷以及向鏈表中插鏈表的基本操作包括建立鏈表、對(duì)鏈表的訪(fǎng)問(wèn)和遍歷以及向鏈表中插入或刪除一個(gè)結(jié)點(diǎn)。入或刪除一個(gè)結(jié)點(diǎn)。 由于鏈表的結(jié)點(diǎn)所占的內(nèi)存是動(dòng)態(tài)的,在程序運(yùn)行過(guò)程中,需要添加由于鏈表的結(jié)點(diǎn)所占的內(nèi)存是動(dòng)態(tài)的,在程序運(yùn)行過(guò)程中,需要添加一個(gè)結(jié)點(diǎn)的時(shí)候就動(dòng)態(tài)申請(qǐng)一個(gè)結(jié)點(diǎn)的內(nèi)存空間,不需要使用這個(gè)結(jié)點(diǎn)時(shí)一個(gè)

34、結(jié)點(diǎn)的時(shí)候就動(dòng)態(tài)申請(qǐng)一個(gè)結(jié)點(diǎn)的內(nèi)存空間,不需要使用這個(gè)結(jié)點(diǎn)時(shí)就釋放它所占用的內(nèi)存空間。就釋放它所占用的內(nèi)存空間。例如:例如: struct student *p=malloc(sizeof(struct student); p-id=20; p-name=”Wang wu”; ps-sex=M; p-score=90; free(p);就是申請(qǐng)一個(gè)結(jié)點(diǎn),為結(jié)點(diǎn)的成員賦值和釋放該結(jié)點(diǎn)的過(guò)程。就是申請(qǐng)一個(gè)結(jié)點(diǎn),為結(jié)點(diǎn)的成員賦值和釋放該結(jié)點(diǎn)的過(guò)程。鏈表操作【例【例10-10】建立鏈表,存放一個(gè)小組中三名學(xué)生的信息,包括學(xué)號(hào)、姓】建立鏈表,存放一個(gè)小組中三名學(xué)生的信息,包括學(xué)號(hào)、姓名、性別和一門(mén)課程的

35、成績(jī)。名、性別和一門(mén)課程的成績(jī)。#include#includestruct studentint id;char name20;char sex;float score;struct student *next;*p;struct student *createlinkedlist(int n)struct student *head,*p,*q;printf(請(qǐng)輸入學(xué)號(hào)、姓名、性別、成績(jī):請(qǐng)輸入學(xué)號(hào)、姓名、性別、成績(jī):n);for(int i=0;iid,p-name);getchar();p-sex=getchar();scanf(%f,&p-score)if(i=0) /i=0

36、時(shí),該結(jié)點(diǎn)地址作為頭指針時(shí),該結(jié)點(diǎn)地址作為頭指針head=p; q=p; elseq-next=p; /i!=0時(shí),將該結(jié)點(diǎn)的地址賦給上一個(gè)結(jié)點(diǎn)指針域時(shí),將該結(jié)點(diǎn)的地址賦給上一個(gè)結(jié)點(diǎn)指針域 q=p;q-next=NULL; /設(shè)置最后一個(gè)結(jié)點(diǎn)的指針域?yàn)樵O(shè)置最后一個(gè)結(jié)點(diǎn)的指針域?yàn)镹ULLreturn head;void main()int n;printf(請(qǐng)輸入學(xué)生人數(shù)請(qǐng)輸入學(xué)生人數(shù)n:);scanf(%d,&n);p=createlinkedlist(n);鏈表操作printf(您輸入的信息是:您輸入的信息是:n);for(int i=0;iid,p-name,p-sex,p-sco

37、re);p=p-next;程序的運(yùn)行結(jié)果如圖10-13所示:圖圖10-12 例例10-10運(yùn)行結(jié)果運(yùn)行結(jié)果 鏈表操作【例【例10-11】編寫(xiě)函數(shù),在鏈表中查找成績(jī)?yōu)椤烤帉?xiě)函數(shù),在鏈表中查找成績(jī)?yōu)?0分的同學(xué),并輸出該同學(xué)的信息。分的同學(xué),并輸出該同學(xué)的信息。void find(struct student *head) struct student *p; for(p=head;p!=NULL;p=p-next) if(p-score=90) printf(您查找的學(xué)生是:您查找的學(xué)生是:); printf(%d %s %c %fn,p-id,p-name,p-sex,p-score); /省

38、略例省略例10-10中定義結(jié)構(gòu)中定義結(jié)構(gòu)student和定義函數(shù)和定義函數(shù)createlinkedlist(n)等代碼等代碼 void main() struct student *px; px=p=createlinkedlist(n); find(px);鏈表操作程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖10-13所示:所示:圖圖10-13 例例10-11運(yùn)行結(jié)果運(yùn)行結(jié)果 鏈表操作【例【例10-12】編寫(xiě)函數(shù),刪除鏈表中指定的結(jié)點(diǎn)。】編寫(xiě)函數(shù),刪除鏈表中指定的結(jié)點(diǎn)。 /省略例省略例10-10中定義結(jié)構(gòu)中定義結(jié)構(gòu)student和定義函數(shù)和定義函數(shù)createlinkedlist(n)等代碼等代碼v

39、oid deletejd(struct student *head,int xid)struct student *p,*q;q=head;if(q-id=xid) /判斷要被刪除結(jié)點(diǎn)是否是頭指針指向的結(jié)點(diǎn)判斷要被刪除結(jié)點(diǎn)是否是頭指針指向的結(jié)點(diǎn)head=q-next;elsefor(p=q,q=q-next;q!=NULL;p=p-next,q=q-next)if(q-id=xid) break;if(q!=NULL) /如果如果q!=NULL說(shuō)明已經(jīng)找到要?jiǎng)h除的結(jié)點(diǎn)說(shuō)明已經(jīng)找到要?jiǎng)h除的結(jié)點(diǎn)p-next=q-next; /刪除刪除q結(jié)點(diǎn)結(jié)點(diǎn)free(q); /釋放釋放q結(jié)點(diǎn)所占的內(nèi)存結(jié)點(diǎn)所占的

40、內(nèi)存else /如果如果q=NULL說(shuō)明沒(méi)有找到要?jiǎng)h除的結(jié)點(diǎn)說(shuō)明沒(méi)有找到要?jiǎng)h除的結(jié)點(diǎn)printf(沒(méi)有找到要?jiǎng)h除的結(jié)點(diǎn)!沒(méi)有找到要?jiǎng)h除的結(jié)點(diǎn)!n);void main()int n;struct student *px,*qs;printf(請(qǐng)輸入學(xué)生人數(shù)請(qǐng)輸入學(xué)生人數(shù)n:);scanf(%d,&n);qs=px=p=createlinkedlist(n);printf(您輸入的信息是:您輸入的信息是:n);for(int i=0;iid,p-name,p-sex,p-score); p=p-next;int x;printf(請(qǐng)輸入要?jiǎng)h除的學(xué)號(hào):請(qǐng)輸入要?jiǎng)h除的學(xué)號(hào):);scanf(%

41、d,&x); deletejd(px,x);for(int j=0;jid,qs-name,qs-sex,qs-score); qs=qs-next;鏈表操作程序的運(yùn)行結(jié)果如圖10-14所示:圖圖10-14 例例10-12運(yùn)行結(jié)果運(yùn)行結(jié)果 鏈表操作【例【例10-13】編寫(xiě)函數(shù),在按學(xué)號(hào)由小到大排列的鏈表中插入一個(gè)結(jié)點(diǎn)。】編寫(xiě)函數(shù),在按學(xué)號(hào)由小到大排列的鏈表中插入一個(gè)結(jié)點(diǎn)。 【解題思路】【解題思路】 在鏈表中插入一個(gè)結(jié)點(diǎn),要求鏈表本身必須是按某種規(guī)律排好序的。本例中,在鏈表中插入一個(gè)結(jié)點(diǎn),要求鏈表本身必須是按某種規(guī)律排好序的。本例中,鏈表中的結(jié)點(diǎn)是按照學(xué)號(hào)由小到大排序的,則插入可分以下四

42、種情況考慮:鏈表中的結(jié)點(diǎn)是按照學(xué)號(hào)由小到大排序的,則插入可分以下四種情況考慮:(1)原表為空表。只需要將)原表為空表。只需要將head指向被插入的結(jié)點(diǎn)即可,被插入的結(jié)點(diǎn)的指針指向被插入的結(jié)點(diǎn)即可,被插入的結(jié)點(diǎn)的指針域置為域置為NULL。(2)被插入的結(jié)點(diǎn)數(shù)據(jù)最小,應(yīng)插入到頭指針之后。這種情況下,使)被插入的結(jié)點(diǎn)數(shù)據(jù)最小,應(yīng)插入到頭指針之后。這種情況下,使head指向指向被插入結(jié)點(diǎn),被插入結(jié)點(diǎn)的指針域指向原來(lái)頭指針之后的那個(gè)結(jié)點(diǎn)。被插入結(jié)點(diǎn),被插入結(jié)點(diǎn)的指針域指向原來(lái)頭指針之后的那個(gè)結(jié)點(diǎn)。(3)被插入的結(jié)點(diǎn)數(shù)據(jù)最大,應(yīng)插入到表尾。這種情況下,使原來(lái)最后一個(gè)結(jié))被插入的結(jié)點(diǎn)數(shù)據(jù)最大,應(yīng)插入到表尾。

43、這種情況下,使原來(lái)最后一個(gè)結(jié)點(diǎn)的指針域指向被插入結(jié)點(diǎn),被插入結(jié)點(diǎn)的指針域置為點(diǎn)的指針域指向被插入結(jié)點(diǎn),被插入結(jié)點(diǎn)的指針域置為NULL。(4)在中間某位置插入。這種情況下,使插入位置的前一個(gè)結(jié)點(diǎn)的指針域指向)在中間某位置插入。這種情況下,使插入位置的前一個(gè)結(jié)點(diǎn)的指針域指向被插入結(jié)點(diǎn),使被插入結(jié)點(diǎn)的指針域指向插入位置的后一個(gè)結(jié)點(diǎn)。被插入結(jié)點(diǎn),使被插入結(jié)點(diǎn)的指針域指向插入位置的后一個(gè)結(jié)點(diǎn)。 /省略例省略例10-10中定義結(jié)構(gòu)中定義結(jié)構(gòu)student和定義函數(shù)和定義函數(shù)createlinkedlist(n)等代碼等代碼void insertjd(struct student *head,int xid

44、) struct student *p,*q,*pf; p=head; q=(struct student*)malloc(sizeof(struct student); /根據(jù)給定的學(xué)號(hào)創(chuàng)建新結(jié)點(diǎn)根據(jù)給定的學(xué)號(hào)創(chuàng)建新結(jié)點(diǎn) q-id=xid; printf(“請(qǐng)輸入姓名、性別、成績(jī):請(qǐng)輸入姓名、性別、成績(jī):n”); scanf(%s,q-name);getchar();q-sex=getchar();scanf(%f,&q-score); if(head=NULL) /如果是空表,將插入結(jié)點(diǎn)的地址賦給頭指針如果是空表,將插入結(jié)點(diǎn)的地址賦給頭指針 head=q; q-next=NULL;

45、 else while(q-idp-id) & (p-next!=NULL) /p從從head開(kāi)始,依次向后移動(dòng),尋找第一個(gè)開(kāi)始,依次向后移動(dòng),尋找第一個(gè)idxid的結(jié)點(diǎn)的結(jié)點(diǎn) pf=p; /pf一直指向一直指向p的前一個(gè)結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn) p=p-next; if(q-idid) if(head=p) /在頭指針之后位置插入在頭指針之后位置插入 head=q; q-next=p; else /在中間某位置插入在中間某位置插入 pf-next=q; q-next=p; else /在表尾插入在表尾插入 p-next=q; q-next=NULL; void main() int n; s

46、truct student *px,*qs; printf(請(qǐng)輸入學(xué)生人數(shù)請(qǐng)輸入學(xué)生人數(shù)n:); scanf(%d,&n); qs=px=p=createlinkedlist(n); printf(您輸入的信息是:您輸入的信息是:n); for(int i=0;iid,p-name,p-sex,p-score);p=p-next;鏈表操作 int x;printf(請(qǐng)輸入要插入的學(xué)號(hào):請(qǐng)輸入要插入的學(xué)號(hào):);scanf(%d,&x); insertjd(px,x); for(int j=0;jid,qs-name,qs-sex,qs-score); qs=qs-next;鏈表操

47、作程序的運(yùn)行結(jié)果如圖10-15所示: 圖圖10-15 例例10-13運(yùn)行結(jié)果運(yùn)行結(jié)果 10.6 共用1. 共用的概念共用的概念 與結(jié)構(gòu)相似,共用是一種由不同數(shù)據(jù)類(lèi)型構(gòu)造出的類(lèi)型,在共用內(nèi),與結(jié)構(gòu)相似,共用是一種由不同數(shù)據(jù)類(lèi)型構(gòu)造出的類(lèi)型,在共用內(nèi),可以定義多種不同數(shù)據(jù)類(lèi)型的成員,不同的是,共用類(lèi)型的變量的所有成可以定義多種不同數(shù)據(jù)類(lèi)型的成員,不同的是,共用類(lèi)型的變量的所有成員共用一塊內(nèi)存空間。雖然共用變量的每個(gè)成員都可以賦值,但前面賦予員共用一塊內(nèi)存空間。雖然共用變量的每個(gè)成員都可以賦值,但前面賦予的成員值被后面賦予的成員值所覆蓋,只有最后一次賦予的成員值能夠保的成員值被后面賦予的成員值所覆蓋

48、,只有最后一次賦予的成員值能夠保存且有意義。存且有意義。 共用類(lèi)型定義的一般形式為:共用類(lèi)型定義的一般形式為: union 共用類(lèi)型名共用類(lèi)型名 成員序列;成員序列; 變量序列;變量序列;共用例如:例如: union data1 int i; double d; char c; m; 定義包括定義包括3個(gè)成員的共用,分別是個(gè)成員的共用,分別是int型的型的i、double型的型的d和和char型的型的c。定義。定義m為該共用類(lèi)型的變量。為該共用類(lèi)型的變量。 既然共用變量的所有成員共同占用一塊內(nèi)存空間,這塊空間的大小應(yīng)該能夠存放所有成員中占用空間長(zhǎng)度最大者。 共用 下面定義含有相同成員的共用和結(jié)

49、構(gòu),比較它們之間的區(qū)別:下面定義含有相同成員的共用和結(jié)構(gòu),比較它們之間的區(qū)別: struct data2 int i; double d; char c;n; union data1 int i; double d; char c; m;圖圖10-16 共用和結(jié)構(gòu)的區(qū)別共用和結(jié)構(gòu)的區(qū)別 共用【例【例10-14】輸出共用變量和結(jié)構(gòu)變量空間占用的大小?!枯敵龉灿米兞亢徒Y(jié)構(gòu)變量空間占用的大小。#includeunion data1 int i; double d; char c;m;struct data2 int i; double d; char c;n;void main() printf(各

50、種類(lèi)型變量所占字節(jié)數(shù):各種類(lèi)型變量所占字節(jié)數(shù):n); printf(共用變量:共用變量:%d ,sizeof(m);共用 printf(結(jié)構(gòu)變量:結(jié)構(gòu)變量:%dn,sizeof(n); printf(成員類(lèi)型所占字節(jié)數(shù):成員類(lèi)型所占字節(jié)數(shù): n); printf(int:%d ,sizeof(int); printf(double:%d ,sizeof(double); printf(char:%dn,sizeof(char);圖圖10-17 例例10-14運(yùn)行結(jié)果運(yùn)行結(jié)果 程序的運(yùn)行結(jié)果如圖10-17所示: 共用變量的引用 2.共用變量的引用共用變量的引用 對(duì)共用變量的賦值和使用都是對(duì)變量的成員進(jìn)行的,其一般形式為:對(duì)共用變量的賦值和使用都是對(duì)變量的成員進(jìn)行的,其一般形式為: 共用變量名共用變量名.成員名成員名使用共用類(lèi)型數(shù)據(jù)時(shí)應(yīng)注意以下幾點(diǎn):使用共用類(lèi)型數(shù)據(jù)時(shí)應(yīng)注意以下幾點(diǎn):(1)同一段空間內(nèi)可以存放不

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論