




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
十、構造數據類型
結構體
2結構體與函數3共用體6
任務91結構體與指針4鏈表5十、構造數據類型
typedef類型聲明
8小型案例9
枚舉類型7任務分析1
有時需要編寫一個函數print,用來打印一批學生的成績信息,定義一個學生成績數組,假如在該數組中有5個學生的數據記錄,每個記錄又包括num、name、score[3],則可用主函數輸入這些記錄,再用print函數輸出這些記錄。返回首頁任務分析1分析數據需求問題輸入structstudent{charnum[6];charname[8];intscore[3];}stu[N];/*定義一成績數組用來表示學生的成績信息*/問題輸出編寫print函數用以輸出記錄返回首頁任務分析1設計定義一函數,采用結構數組作為函數參數,實現結構體變量作為函數參數的應用方法算法1.先定義一個結構數組2.再引用結構體數組完成一批學生的成績信息的輸入3.最后運用結構數組作為函數參數,實現對這批信息的輸出
返回首頁任務分析1/*編寫一個函數print,打印一個學生的成績數組,該數組中有5個學生的數據記錄,每個記錄包括num、name、score[3],用主函數輸入這些記錄,用print函數輸出這些記錄。*/#include<stdlib.h>#include<stdio.h>#defineN5structstudent{charnum[6];charname[8];intscore[3];}stu[N];返回首頁任務分析1voidprint(structstudentstu[]){inti,j;printf("\nNo.NameScore1Score2Score3\n");for(i=0;i<N;i++){printf("%-6s%-10s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%-8d",stu[i].score[j]);返回首頁任務分析1printf("\n");}}voidmain(){inti,j;for(i=0;i<N;i++){printf("num:");scanf("%s",stu[i].num);printf("name:");返回首頁任務分析1scanf("%s",stu[i].name);for(j=0;j<3;j++){printf("score%d:",j+1);scanf("%d",&stu[i].score[j]);}}print(stu);}返回首頁任務分析1運行結果:Num:Name:Score1:Score2:Score3:……返回首頁結構體1概念提出:
我們已學習了一些簡單數據類型(整型、實型、字符型)的定義和應用,還學習了數組(一維、二維)的定義和應用,從中我們認識到C的基本數據類型及數組這種構造數據類型,認識到構造數據結構作為一個整體在處理多個相關數據時非常方便,然而數組只能按順序組織多個同類型的數據,在實際應用中往往會涉及到一組不同類型的數據的問題。結構體1例如通訊地址表、學生登記表、成績表等,在通訊地址表中我們會寫下姓名、郵編、郵箱地址、電話號碼、E-mail等項目。這些表中集合了各種數據,因此不能用一個數組來存放這一組數,由于數組中各元素的類型和長度須是一致的,為了解決這個問題,C語言引入了一種新的構造數據類型-----“結構體”。它相當于其他高級語言中的記錄(record)。假設程序中用到如下表所示數據結構,C語言中可由用戶在程序中去定義這種類型,即構造一個結構體數據類型。結構體1通訊地址表各數據項姓名工作單位家庭住址郵編電話號碼E-mail字符串字符串字符串長整型字符串或長整型字符串結構體1上述表格用C提供的結構體類型描述如下:通訊地址表:structaddr{charname[20];chardepartment[30];/*部門*/charaddress[30];/*住址*/longbox;/*郵編*/longphone;/*電話號碼*/charemail[30];/*Email*/};結構體1諸如住宿表:structaccommod{charname[20];/*姓名*/charsex;/*性別*/charjob[40];/*職業*/intage;/*年齡*/longnumber;/*身份證號碼*/};等等結構體1這一系列對不同登記表的數據結構的描述類型稱為結構體類型。由于不同的問題有不同的數據成員,也就是說有不同描述的結構體類型。我們也可以理解為結構體類型根據所針對的問題其成員是不同的,可以有任意多的結構體類型描述?!敖Y構體”是一種構造數據類型,它是由若干“成員”所組成的,每個成員可以是一個基本數據類型,也可以是一個構造數據類型,結構體既然是一種“構造”而成的數據類型,就表明了它必須服從先定義(先構造),再使用。結構體1下面給出C對結構體類型的定義形式:struct結構體名{成員項表列};有了結構體類型,我們就可以定義結構體類型變量,以對不同變量的各成員進行引用。而成員項列表由若干個成員組成,每個成員都是該結構的一個組成部分,對每個成員也必須作類型說明,其形式為:類型說明符成員名;結構體1結構體數據類型的特點:1)結構體有關鍵字struct作為其標志;2)結構體由若干個數據項組成,每個數據項都屬于一種已有定義的類型;3)結構體類型并非只有一種,而是成千上萬種,不同于基本數據類型;4)一個結構體的定義并不意味著系統為它分配內存空間來存放其數據項,因為所定義的只是一個數據類型,是不分配內存單元的,只有定義了結構體類型的變量,其變量才占據存儲單元;結構體15)結構體類型可以嵌套定義,即允許結構體中的一個或多個成員是其他結構體類型的變量,如:structworker{charname[20];charsex;intage;floatwage;structbirthday{intyear;intmonth;intday;};char*p_addr;};結構體1在結構體工人中又定義了一個工人出生年月的結構體。注意:結構體的定義只是描述了該結構體的組織形式,結構體的說明不產生內存空間的分配,真正占有存儲空間的是具有相應結構體類型的變量。結構體1結構體變量前面只是指定了一個結構體類型,它相當于一個模型,但其中并無具體數據,系統對它也不分配實際的內存單元。為了能在程序中使用結構體類型的數據,應當定義結構體類型的變量,并在其中存放具體的數據。可采取以下3種方法定義結構體類型的變量。1.先聲明結構體類型再定義變量名結構體1如前面已定義了一結構體類型structstudent,可用它來定義變量。如下:structstu/*定義學生結構體類型*/{charname[20];/*學生姓名*/charsex;/*性別*/longnum;/*學號*/floatscore[3];/*三科考試成績*/};structstustudent1,student2;/*定義結構體類型變量*/structstustudent3,student4;用此結構體類型,可以定義更多的該結構體類型變量。結構體12.定義結構體類型同時定義結構體類型變量:structdata{intday;intmonth;intyear;}time1,time2;也可以再定義如下變量:structdatatime3,time4;用此結構體類型結構體13.直接說明結構變量。例如:Struct{
intnum;
charname[20];
charsex;
floatscore;}boy1,boy2;第三種方法與第二種方法的區別在于第三種方法中省去了結構名,而直接給出結構變量。說明boy1,boy2變量為stu類型后,即可向這兩個變量中的各個成員賦值。在上述stu結構定義中,所有的成員都是基本數據類型或數組類型。結構體1成員也可以又是一個結構,即構成了嵌套的結構。例如:structdate{
intmonth;
intday;
intyear;}struct{
intnum;
charname[20];
charsex;
structdatebirthday;
floatscore;}boy1,boy2;結構體1
首先定義一個結構date,由month(月)、day(日)、year(年)三個成員組成。在定義并說明變量boy1和boy2時,其中的成員birthday被說明為data結構類型。成員名可與程序中其它變量同名,互不干擾。結構變量成員的表示方法在程序中使用結構變量時,往往不把它作為一個整體來使用。結構體1結構體變量的使用在ANSIC中除了允許具有相同類型的結構變量相互賦值以外,一般對結構變量的使用,包括賦值、輸入、輸出、運算等都是通過結構變量的成員來實現的。表示結構變量成員的一般形式是:結構變量名·成員名,其中“·”是結構成員的運算符,在所有運算符中優先級別最高。對于成員運算符的運用例如:boy1.num即第一個人的學號boy2.sex即第二個人的性別,如果成員本身又是一個結構則必須逐級找到最低級的成員才能使用。例如:boy1.birthday.month即第一個人出生的月份成員可以在程序中單獨使用,與普通變量完全相同。結構體1結構變量的賦值前面已經介紹,結構變量的賦值就是給各成員賦值??捎幂斎胝Z句或賦值語句來完成。
結構體1例10.1給結構變量賦值并輸出其值。main(){
structstu
{
intnum;
char*name;
charsex;
floatscore;
}boy1,boy2;
boy1.num=102;
="Zhangping";
結構體1printf("inputsexandscore\n");
scanf("%c%f",&boy1.sex,&boy1.score);
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);}structstu{結構體1intnum;
char*name;
charsex;
floatscore;}boy1,boy2;boy1.num=102;="Zhangping";printf("inputsexandscore\n");scanf("%c%f",&boy1.sex,&boy1.score);boy2=boy1;結構體1printf("Number=%d\nName=%s\n",boy2.num,);printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);本程序中用賦值語句給num和name兩個成員賦值,name是一個字符串指針變量。用scanf函數動態地輸入sex和score成員值,然后把boy1的所有成員的值整體賦予boy2。最后分別輸出boy2的各個成員值。本例表示了結構變量的賦值、輸入和輸出的方法。結構體1結構變量的初始化如果結構變量是全局變量或為靜態變量,則可對它作初始化賦值。對局部或自動結構變量不能作初始化賦值。結構體1例10.2給靜態結構變量初始化。main(){
staticstructstu/*定義靜態結構變量*/
{
intnum;
char*name;
charsex;
floatscore;結構體1}boy2,boy1={102,"Zhangping",'M',78.5};
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);}staticstructstu{
intnum;結構體1char*name;
charsex;
floatscore;}boy2,boy1={102,"Zhangping",'M',78.5};
結構體與函數1和普通變量一樣,結構體變量也可作為函數的參數用于在函數之間傳遞數據,同時函數的返回值也可以是結構變量。10.3.1結構變量與數組結構作函數參數結構變量作為函數參數的傳遞方式與簡單變量作函數參數的處理方式完全相同,即采用值傳遞方式(形參結構變量中各成員值的改變對相應實參結構變量不產生影響,但在函數定義時需要對其類型進行相應的說明),如:intget_month(x)structmonthx;{…x.day=23;…}結構體與函數1它說明了形參x是structmonth型結構變量。在函數調用時,為結構類型的形參分配相應的存儲區,并將對應實參變量中的各成員的值賦值到形參中對應的成員中。10.3.2結構變量作為函數的返回值結構變量也可以作為函數的返回值,這時在函數定義時,需說明返回值的類型為相應的結構類型。如:structdatafunc(n)floatm;{structdataf;結構體與函數1…return(f);}其中,函數名func前面的類型說明符就是用于對函數返回值f的類型進行說明。結構體與函數1例10.3編寫程序,在主程序中為一結構體的各成員賦值,在一函數中顯示結構體變量中各成員的值。#include<stdio.h>structgoods{ charcode; floatprice; };structgoodsg2;voidmain(){ structgoodsg1;結構體與函數1 voidshow(); scanf("%c",&g1.code); scanf("%f",&g1.price); show(g1);}voidshow(structgoodsg2){ printf("code=%c",g2.code); printf("price=%f",g2.price);}結構體與指針1
結構變量被定義后,編譯時就為其在內存中分配一片連續的單元。該內存單元的起始地址就稱為該結構變量的指針??梢栽O立一個指針變量,用來存放這個地址,當把一個結構變量的起始地址賦給一個指針變量時,就稱為該指針變量指向這個結構變量。結構體指針變量還可以用來指向結構體數組中的元素。結構體指針與以前介紹過的指針用法一樣,結構體指針的運算也按照C語言的地址計算規則。結構體與指針1結構體變量指針結構體變量指針是指向結構體變量的指針,結構體變量指針的一般定義格式為:struct結構體類型名*結構體變量名;例如:structstudent{floatave;}stu1;結構體與指針1structstudent*pa;定義stu1是類型為structstudent的結構體變量,pa是可以指向該類型對象的指針變量,但應該注意的是:經過上面的定義,此時pa尚未指向任何具體的對象,為使pa指向stu1,必須把stu1的地址賦給pa;pa=&stu1;注意,在定義了*pa之后,應該知道:(1)*pa不是結構變量,因此不能寫成pa.ave,必須加上圓括號(*pa).ave,為此C語言引入一個指向運算符“->”,連接指針變量與其指向的結構體變量的成員。結構體與指針1“->”為間接成員運算符,其一般引用的格式為:指針變量名->結構成員名說明:運算符“->”是由連字符和大于號組成的字符序列,它們要連在一起使用,C語言把它們作為單個運算符使用,所以可以將(*ps).ave改寫為ps->ave。(2)pa只能指向一個結構體變量,而不能指向結構體變量中的一個成員。(3)指向運算符“->”的優先級別最高,如:ps->ave+1相當于(ps->ave)+1,即返回ps->ave之值加1的結果;結構體與指針1Ps->ave++相當于(ps->ave)++,即將ps所指向的結構體成員的值自增1。由此可知:引用結構體中的成員有如下三種方法結構變量量.成員名(*結構指針變量名).成員名結構指針變量名->成員名例如:structpoint{floatx[2];structpoint*next;}fp,lp,*top;結構體與指針1top=&fplfp.x[0]=3.14;fp.next=&lp;(*fp.next).x[0]=0.369;lp.next=9;top->x[1]=2.698;top->fp.x[0];結構體與指針1結構體數組指針從前面的學習可知,數組和指針有著密切的關系,同樣對于結構數組和結構數組指針也緊密相關,當定義了一個結構數組后,還可以定義一個結構指針變量,使該指針變量指向這個數組,這樣在程序中既可用數組下標訪問一個數組元素,也可通過指針變量的操作來存取結構數組元素。結構體與指針1例如,定義一個結構類型worker和結構數組class:structworker{charname[20];floatsalary;intage;intnum[12];};structworkerclass[10];structworker*pa;pa=&class[0];結構體與指針1使用結構體數組指針pa時應注意如下幾點:(1)當執行pa=&class語句后,指針pa指向class數組的第一個元素;當執行pa++后,表示指針pa指向下一個元素的起始地址。(++pa)->age先將pa增1,然后取得它指向的元素中age的成員的值;若原來pa指向class[0],則表達式返回class[1].age的值,之后pa指向class[1].(pa++)->age先取得pa->age的值,然后再使pa自增1。若原來pa指向class[0],則該表達式返回class[0].age的值,之后pa指向class[1]。(2)pa只能指向該結構體數組中的一個元素,然后再用指向運算符->取其成員之值,而不是直接指向一個成員。結構體與指針1例10.4輸入5本書的名稱和單價,按單價進行排序輸出。/*輸入5本書的名稱和單價,按照單價進行排序后輸出。*/#include<stdio.h>structbook{charname[20];floatprice;};/*形式參數,結構變量term*//*指向結構數組首地址的指針pbook*/結構體與指針1voidsort(structbookterm,structbook*pbook,intcount){inti;structbook*q,*peng=pbook;for(i=0;i<count;i++,peng++)for(;pbook<peng;pbook++)if(pbook->price>term.price)break;結構體與指針1for(q=peng-1;q>=pbook;q--)*(q+1)=term;}voidprintbook(structbook*pbook)/*輸出指針所指向的結構數組元素的值*/{printf("%-20s%6.2f\n",pbook->name,pbook->price);}結構體與指針1voidmain(){structbookterm,books[5];intcount;for(count=0;count<5;){printf("pleaseenterbooknameandprice%d=",count+1);scanf("%s%f",,&term.price);sort(term,books,count++);結構體與指針1/*調用函數,傳給結構變量term和結構數組book數組的首地址*/}printf("----------BOOKLIST--------------\n");for(count=0;count<5;count++)printbook(&books[count]);/*調用函數,傳遞數組中的一個元素的地址*/運行結果:Pleaseenterbooknameandprice1=db10Pleaseenterbooknameandprice2=c20Pleaseenterbooknameandprice3=ds15Pleaseenterbooknameandprice4=os18Pleaseenterbooknameandprice5=java22結構體與指針1輸出結果:--------------------BOOKLIST----------------------Db10.00Ds15.00Os18.00C20.00Java22.00鏈表1
鏈表是C語言中很容易實現且非常有用的數據結構,它是動態地進行存儲分配的一種結構。鏈表有若干種形式,如單鏈表、雙鏈表等,每種形式適合于一定的數據存儲類型。鏈表的一個共同特點是:數據項之間的關聯由包含在數據項自身的信息所定義,就是說在每個數據項內部有指向該數據類型的指針變量。這種數據項恰好要引用自身的結構來實現。以下是單鏈表的學習。鏈表1鏈表概述鏈表是將若干數據項按一定規則連接起來的表,鏈表中的每個數據稱為一個結點,即鏈表是由稱為結點的元素組成的,結點的多少根據需要確定。鏈表連接的規則是:前一個結點指向下一個結點;只有通過前一結點才能找到下一個結點,因此,每個結點都應包括兩個方面的內容:(1)數據部分,該部分可以根據需要由多少個成員組成,它存放的是需要處理的數據。(2)指針部分,該部分存放的是一個結點的地址,鏈表中的每個結點通過指針連接在一起。鏈表1說明:(1)頭指針變量head指向鏈表的首結點(2)每個結點由兩部分組成即數據和指針(3)尾結點的指針域為空NULL,作為鏈表結束的標志鏈表與結構數組有相似之處,即都是由相同數據類型的結構變量組成,結構變量間有一定的順序關系,但它們又有區別:(1)結構數組中各元素是連續存放的,而鏈表中的結點可以是不連續存放的鏈表1(2)結構數組元素可通過下標或相應的指針變量的移動進行順序或隨機的訪問(3)結構數組在定義時就確定其元素的個數,不能動態增長;而鏈表的長度往往是不確定的,根據問題求解過程中的實際需要動態地創建結點并為其分配存儲空間鏈表1鏈表的基本操作對鏈表的基本操作有建立、查找、刪除和修改等。(1)建立鏈表是指從無到有建立一個鏈表,即往空鏈表中依次插入一個結點,并保持結點間的前驅和后繼的關系。(2)查找操作是指在給定的鏈表中,查找具有檢索條件的結點。(3)插入操作是指在某兩個結點間插入一個新的結點。(4)刪除操作是指在給定的鏈表中,刪除某個特定的結點,也就是插入的逆過程。(5)修改操作是指在給定的鏈表中,首先根據某已知的條件查找到該結點,再修改數據域中的某些數據項。鏈表1由于C語言允許結構成員可以是本結構類型的指針,所以鏈表中的每個結點可以用一個結構變量來描述,利用C語言處理鏈表是非常方便的。我們將鏈表中每個結點的結構類型定義如下:Structnode{intdata;/*數據部分*/Structnode*next;/*指針部分*/};共用體1在編程時,有時會碰到這樣的情況,需要把不同數據類型的變量放在同一存儲區域,例如,在編制程序的符號表中,常量可以是整常量,浮點常量或指向字符的指針,它們的類型及大小不同,為了便于管理,可把它們放在足夠大的同一存儲區域,這就用到共用類型,它也是一種數據類型。與結構體類型定義相似,共用體一般定義格式為:Union共用類型名{數據類型成員名1;數據類型成員名2;…數據類型成員名n;};共用體1可以看出,共用體與結構體的定義在形式上非常相似,只是關鍵字變為了nuion,nuion就是定義共用體的標識符。同樣在定義共用體變量時,也可將類型定義和變量定義分開,或直接定義共用變量。其常用形式為:Union共用體類型名共用體變量;例如:(1)直接定義變量(共用體名可以省略);unionnum{charch;共用體1inta;floatf;charc;int*p;}x,y,z,*pa;(2)先定義類型,再定義變量unionunmx,y,z;(3)共用體與結構體可嵌套使用unionstu{intname[10];共用體1floatave;}st;intage;charbir[10];}stu1;要訪問成員ave,,可用stu1.st.ave的形式。定義好共用體后,對其中成員的引用與結構體一樣,滿足三種方式:(1)共用體變量名.成員名;如x.ch、stu1.age(2)共用體指針變量名->成員名;如pa->f共用體1(3)(*共用體指針變量名).成員名;如(*pa).c使用共用體的注意事項如下:(1)由于共用體變量中的所有成員共享存儲空間,因此變量中的所有成員的首址相同(2)由于共用體變量中的所有成員共享存儲空間,所以在任意時刻,只能有一種類型的數據存放在共用體變量中(3)共用體變量不能作為函數參數,在定義共用體變量時不能進行初始化。共用體1例10.5驗證共用體的應用實例#include<stdio.h>voidmain(){union{unsignedintn;unsignedcharc;}u1;u1.c='Z';printf("%c\n",u1.n);}運行結果:Z枚舉類型1所謂枚舉類型,就是將變量的值一一羅列出來,而變量的值只限于在列舉出來的值的范圍內枚舉是一個有名字的整型常量的集合,該類型變量只能是取集合中列舉出來的所有合法值。通常其定義形式:enum類型名{取值表};其中enum是定義枚舉類型的關鍵字,例如:enumcolor{read,blue,yellow,black=green,white};Color是枚舉類型名,花括號中各個標識符是構成該類型的各個成分,即枚舉元素。枚舉變量的定義方式有:(1)在定義枚舉類型的同時定義枚舉變量,例如:枚舉類型1enumdate{mody=1,tuesd=2,wednesd=3,thursd=4,frid=5,saturd=6,sund=7}d1,d2;這里的d1,d2都是枚舉變量,此時枚舉類型名date可省略。(2)先定義枚舉類型,再定義枚舉變量,例如:enumdated3;注意:①枚舉元素也稱枚舉常量,每個枚舉常量都表示一個整數值(稱為序號),系統默認的是0,1,2,……,n-1。枚舉類型1②枚舉元素是常量面不是變量,因此不能為枚舉元素賦值,如以下語句不合法:wednesd=3;saturd=6;(3)可以將一個整數經強制轉換后賦值給枚舉變量,如:enumcolor{read,blue,yellow,black;green,white}c1,c2;C3=(enumcolor)5;相當于:c3=white;枚舉類型1例10.6從鍵盤上輸入一整數,顯示與該整數對應的枚舉常量的英文名。#include<stdio.h>voidmain(){enumdate{mondy=1,tuesd=2,wednesd=3,thursd=4,frid=5,saturd=6,sund=7};enumdated1;inti;printf("Enterthedata:");枚舉類型1scanf("%d",&i);d1=(enumdate)i;switch(d1){casemondy:printf("mondy");break;casetuesd:printf("tuesd");break;casewednesd:printf("wednesd");break;枚舉類型1casethursd:printf("thursd");break;casefrid:printf("frid");break;casesaturd:printf("saturd");break;casesund:printf("sund");break;default:printf("inputerror");break;枚舉類型1}getchar();}運行結果:Enterthedata:2tuesdtypedef類型聲明1C語言允許用typedef說明一種新的數據類型名,其一般形式為:typedef類型名1類型名2;其中,typedef為關鍵字用于給已有類型重新定義新類型名,類型名1為系統提供的標準類型名或是已定義過的其他類型名;類型名2為用戶自定義的新類型名,它往往可簡化程序中變量的類型定義,如:typedefintDB;定義DB等價于數據類型int,此后,就可用DB對變量進行類型說明,如:DBm,n,p,*pi;typedef類型聲明1實際上,C編譯程序把上述變量作為一般的整型變量處理,在這種情況下,變量所表示的含義較為清楚,從而增加了程序的可讀性,又如:typedefstructstudent{charname[10];intage;}stu;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游戲模組制作企業制定與實施新質生產力項目商業計劃書
- 環保古琴材料升級行業跨境出海項目商業計劃書
- 實時數據監控行業深度調研及發展項目商業計劃書
- 單身公寓設計行業深度調研及發展項目商業計劃書
- 雜技表演團行業跨境出海項目商業計劃書
- 教育信息化背景下的數字化辦公策略
- 教育與科技在個人健康管理中的應用
- 教育機構中基于數字孿生的設備管理平臺建設
- 2025年安全員-A證證考試題庫及答案
- 2025年語文中考復習小組計劃
- 2024年湖北省武漢市住房保障管理中心招聘5人歷年高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- Ceph之RADOS設計原理與實現
- 胸腔穿刺術流程圖
- 銷售拜訪流程培訓課件
- 康復設備一覽表
- JJG 643-2024標準表法流量標準裝置
- MH-T 5078.6-2024 運輸機場建設工程資料管理規程 第6部分:供油工程施工資料
- 小學生1-6年級成長檔案模板(絕對原創)
- 《中國人口老齡化》課件
- 創傷性胸腔積液查房
- TBM主要技術參數
評論
0/150
提交評論