版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1函數(shù):程序的最基本單位21
C&C++程序結(jié)構(gòu)2函數(shù)定義3函數(shù)調(diào)用與返回4在函數(shù)之間傳遞數(shù)據(jù)5變量的存儲屬性6函數(shù)的遞歸調(diào)用7庫函數(shù)簡介函數(shù)與變量31C&C++程序結(jié)構(gòu)
模塊化程序結(jié)構(gòu)程序模塊相對獨(dú)立,簡化設(shè)計(jì),限制錯(cuò)誤;集體開發(fā),縮短開發(fā)周期;積木式組裝,共享模塊,減少重復(fù);易于維護(hù)、裁剪、移植和擴(kuò)充。模塊1主模塊模塊11模塊2模塊21模塊22
模塊化程序特點(diǎn)一、程序的模塊化41C&C++程序結(jié)構(gòu)(續(xù))
模塊化是結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)。采用模塊化程序設(shè)計(jì)有很多優(yōu)越性:控制程序設(shè)計(jì)的復(fù)雜性,提高軟件的可靠性,提高軟件開發(fā)的效率,提高軟件的可維護(hù)性,提高程序的重用性。5C&C++程序是函數(shù)的集合體,每個(gè)函數(shù)是一個(gè)獨(dú)立的程序模塊,函數(shù)是C&C++程序的最小單元;有一個(gè)主函數(shù),若干個(gè)子函數(shù),程序總是從主函數(shù)開始執(zhí)行;函數(shù)可集中或分散存放在一個(gè)或多個(gè)源程序文件中;所有子函數(shù)地位平等,可互相調(diào)用、自我調(diào)用。函數(shù)F1()main()F11()F2()F21()F22()1C&C++程序結(jié)構(gòu)(續(xù))二、C&C++程序的結(jié)構(gòu)6數(shù)學(xué)函數(shù)math.h字符和字符串函數(shù)ctype.h,string.hI/O函數(shù)stdio.h動(dòng)態(tài)存儲分配函數(shù)形式無參函數(shù)有參函數(shù)空函數(shù)庫函數(shù)用戶定義函數(shù)1C&C++程序結(jié)構(gòu)(續(xù))三、C&C++函數(shù)的種類7main(){printf(“ThisisCprogram\n”);}函數(shù)main調(diào)用了函數(shù)printfprintf是一個(gè)庫函數(shù)例1為了完成一個(gè)特定的任務(wù),在程序開發(fā)中一般要定義若干函數(shù)。用戶定義函數(shù)1C&C++程序結(jié)構(gòu)(續(xù))8#include<math.h>floatfunc(x,y)floatx,y;{return(pow(x,y));}/*調(diào)用pow庫函數(shù)*/voidmain(){floata,b,c,d;c=func(a,b);/*第一次調(diào)用用戶函數(shù)*/d=func(c,b);/*第二次調(diào)用用戶函數(shù)*/printf(“%f,%f\n”,c,d);}/*調(diào)用格式輸出庫函數(shù)*/例2/*用戶定義函數(shù)*/1C&C++程序結(jié)構(gòu)(完)/*用戶定義函數(shù)*/94.{}括起來的部分是函數(shù)體。{}不可省略一、函數(shù)定義的一般形式2函數(shù)定義
函數(shù)返回值類型
函數(shù)名
(
形式參數(shù)說明表
)
{說明語句執(zhí)行語句}1.函數(shù)返回值類型是說明函數(shù)中return語句返回的值的類型,稱這個(gè)類型為該函數(shù)的類型。2.函數(shù)名是標(biāo)識符,是函數(shù)定義中不可省略。3.形式參數(shù)說明表是用逗號分隔開的一組變量類型和變量名。()不可省略。形式參數(shù)表中的參數(shù)簡稱為形參。10二、無參函數(shù)的定義2函數(shù)定義(續(xù))
函數(shù)名
()
{說明語句執(zhí)行語句}三、有參函數(shù)的定義遵守函數(shù)定義的一般形式四、空函數(shù)的定義
函數(shù)名
()
{}112函數(shù)定義(續(xù))
五、函數(shù)定義實(shí)例voiddummy()
/*函數(shù)名:dummy*/
{}一個(gè)最簡單的函數(shù):空函數(shù)
沒有數(shù)據(jù)類型說明、形參和形參說明
函數(shù)體為空12
long
facto
(
x
)
int
x;
{longy;for(y=1;x>0;--x)y*=x;
return(y);
}函數(shù)名形式參數(shù)列表函數(shù)類型形式參數(shù)說明函數(shù)體函數(shù)返回2函數(shù)定義(續(xù))
求階乘函數(shù)facto的定義13
voidmain(){inta,b,c;printf(”Entera,b\n”);scanf(”%d,%d”,&a,&b);c=max(a,b);printf(”Max=&d”,c);}int
max(
x,y)
intx,y;{
intz;z=x>y?x:y;return(z);}形式參數(shù)列表:是用‘,’分開的一組變量,用來接收調(diào)用時(shí)傳入的數(shù)據(jù)形式參數(shù)說明:在{}
外面對形式參數(shù)的類型進(jìn)行說明函數(shù)調(diào)用2函數(shù)定義(續(xù))
求兩個(gè)變量的最大值142函數(shù)定義(續(xù))
六、函數(shù)定義注意事項(xiàng)1.形式參數(shù)表中給出的形式參數(shù)名和數(shù)量要與形式參數(shù)說明中的參數(shù)名和數(shù)量相同。
要求形式參數(shù)表中的形參與形式參數(shù)說明中的參數(shù)應(yīng)一一對應(yīng)。但對于兩者的排列順序沒有要求。2.形式參數(shù)表中說明的形式參數(shù)只要在形式參數(shù)說明中說明一次即可,在函數(shù)體中不需再說明,可直接使用。152函數(shù)定義(完)
六、函數(shù)定義注意事項(xiàng)3.函數(shù)體內(nèi)部的變量說明與形參說明的含義不一樣。前者說明一個(gè)局部于函數(shù)體的一般變量,后者說明一個(gè)用于函數(shù)間傳送數(shù)據(jù)的形式變量。在概念上截然不同,在函數(shù)中的作用完全不同。在函數(shù)體內(nèi)部一般變量與形參的使用方法完全一樣。163函數(shù)的調(diào)用與返回一、函數(shù)的調(diào)用形式函數(shù)名(實(shí)際參數(shù)表);
實(shí)參的數(shù)量、類型和排列順序必須與函數(shù)定義時(shí)形式參數(shù)表中形參的數(shù)量、類型和排列順序一致,不允許任意改變。173函數(shù)的調(diào)用與返回在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)時(shí),程序?qū)⒖刂茝恼{(diào)用函數(shù)處轉(zhuǎn)移到被調(diào)用函數(shù),并且執(zhí)行被調(diào)用函數(shù)。在執(zhí)行完被調(diào)用函數(shù)的所有語句或者遇到return語句時(shí),程序的控制要返回到調(diào)用函數(shù)中原來調(diào)用函數(shù)的地方繼續(xù)執(zhí)行。二、函數(shù)調(diào)用的過程18三、函數(shù)聲明3函數(shù)的調(diào)用與返回(續(xù))在調(diào)用函數(shù)之前,要先進(jìn)行函數(shù)聲明“聲明”與“定義”的區(qū)別:“聲明”就是聲明函數(shù)返回值的類型?!岸x”是給出函數(shù)的程序體。19
函數(shù)聲明與函數(shù)定義的首部唯一區(qū)別:函數(shù)聲明語句的()之后必須有分號,而函數(shù)定義頭部的()之后沒有分號。3函數(shù)的調(diào)用與返回(續(xù))函數(shù)聲明的一般形式函數(shù)類型
函數(shù)名(形參類型1形參名1,形參類型2形參名2…);函數(shù)類型必須與函數(shù)定義時(shí)的函數(shù)類型一致203函數(shù)的調(diào)用與返回(續(xù))例:調(diào)用max函數(shù)的程序#include”stdio.h”voidmain(){inta,b,c;intmax(inta,intb);scanf("%d,%d",&a,&b);
c=max(a,b);printf("max=%d\n",c);}
函數(shù)聲明21四、函數(shù)原型3函數(shù)的調(diào)用與返回(續(xù))函數(shù)聲明的簡化形式:函數(shù)原型函數(shù)類型
函數(shù)名(形參類型1,形參類型2…);
通常將一個(gè)文件中需調(diào)用的所有函數(shù)原型寫在文件的開始。22五、函數(shù)的返回3函數(shù)的調(diào)用與返回(續(xù))從函數(shù)返回的兩種方法用return語句從被調(diào)函數(shù)中退出,返回調(diào)用它的程序中(也稱為主調(diào)函數(shù));被調(diào)函數(shù)如果沒有return語句,被調(diào)函數(shù)執(zhí)行結(jié)束遇到最外面的
},返回主調(diào)函數(shù)。23控制程序從當(dāng)前函數(shù)(被調(diào)用函數(shù))中退出,返回到調(diào)用函數(shù)中繼續(xù)執(zhí)行;從被調(diào)用函數(shù)向主調(diào)函數(shù)返回一個(gè)值(稱為返回值)。五、函數(shù)的返回3函數(shù)的調(diào)用與返回(續(xù))
return的兩重作用:24返回值規(guī)定
函數(shù)除void類型之外,均有一個(gè)返回值,返回值的類型就是在定義函數(shù)時(shí)的函數(shù)類型。例:當(dāng)返回值類型為整型int時(shí)int
max(
x,y)
intx,y;
{
intz;z=x>y?x:y;return(z);
}3函數(shù)的調(diào)用與返回(續(xù))
25在程序中調(diào)用函數(shù)的時(shí)候,必須先明確地說明被調(diào)用函數(shù)的數(shù)據(jù)類型,然后再使用(調(diào)用)。返回語句
格式1:return;功能:
將控制從被調(diào)函數(shù)返回到主調(diào)函數(shù)。格式2:return(表達(dá)式);
或:
return表達(dá)式
;功能:在被調(diào)函數(shù)中計(jì)算表達(dá)式的值,將計(jì)算結(jié)果按照函數(shù)說明的函數(shù)類型返回到主調(diào)函數(shù),并將控制返回主調(diào)函數(shù)。3函數(shù)的調(diào)用與返回(續(xù))263函數(shù)的調(diào)用與返回(續(xù))
void類型概念又稱為無值類型(或空類型)。void類型的函數(shù)在調(diào)用之后沒有返回值。(void類型的函數(shù)不是調(diào)用函數(shù)之后不返回)
void類型的用途表示一個(gè)函數(shù)沒有返回值;用來指明一個(gè)通用型的指針。27void類型的說明void類型的函數(shù)與有返回值類型的函數(shù)在定義過程中沒有區(qū)別;有返回值的函數(shù)可將函數(shù)調(diào)用放在表達(dá)式的中間,將返回值用于計(jì)算;void類型的函數(shù)不能將函數(shù)調(diào)用放在表達(dá)式之中,只能以單獨(dú)語句形式調(diào)用。3函數(shù)的調(diào)用與返回(續(xù))
28例:調(diào)用max函數(shù)的程序voidmain(){inta,b,c;int
max(int,int);scanf("%d,%d",&a,&b);
c=max(a,b);printf("max=%d\n",c);}
函數(shù)調(diào)用int
max(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;return(z);}實(shí)際參數(shù)形式參數(shù)返回函數(shù)值接收返回值程序執(zhí)行順序?/*1*//*2*//*3*//*4*//*5*//*11*//*12*//*13*//*14*//*15*//*16*/函數(shù)調(diào)用與返回實(shí)例3函數(shù)的調(diào)用與返回(續(xù))
29/*1*//*2*//*3*//*4*//*5*//*11*//*12*//*13*//*14*//*15*//*16*/voidmain(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf(”max=%d\n",c);}intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;return(z);}斷點(diǎn)保護(hù)斷點(diǎn)和現(xiàn)場,轉(zhuǎn)向11入口虛實(shí)結(jié)合a-x,b-y返回?cái)帱c(diǎn)恢復(fù)現(xiàn)場帶回函數(shù)值3函數(shù)的調(diào)用與返回(續(xù))30intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;
return(z);}返回整型函數(shù)值intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;
return;}返回不確定的函數(shù)值
intmax(x,y)intx,y;{intz;if(x>y)z=x;elsez=y;}無返回語句在此返回3函數(shù)的調(diào)用與返回(續(xù))
31例:用函數(shù)facto計(jì)算m階乘。voidmain(){intm;longmm;
long
facto(int);scanf("%d",&m);mm
=facto(m
);printf("%d!=%ld.\n",m,mm);}long
facto
(x
)
int
x;{
longy;for(y=1;x>0;--x)y*=x;
return(y);}
/*函數(shù)定義*//*形式參數(shù)說明*//*
以下為函數(shù)體
*/
/*返回并帶回返回值*//*函數(shù)聲明*/
/*m是實(shí)參數(shù),調(diào)用函數(shù)facto,
返回值送入變量mm中*/函數(shù)執(zhí)行過程
main(){mm=facto(m);}facto(x){
return(y);}調(diào)用返回3函數(shù)的調(diào)用與返回—函數(shù)調(diào)用的執(zhí)行過程32§9-6函數(shù)的嵌套調(diào)用3函數(shù)的調(diào)用與返回—函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用main函數(shù){……
……調(diào)用函數(shù)A;
……}函數(shù)A{……
……
調(diào)用函數(shù)B;
……}函數(shù)B{……
……
……}調(diào)用調(diào)用返回返回334在函數(shù)間的傳遞數(shù)據(jù)在不同的函數(shù)之間傳遞數(shù)據(jù),可以使用的方法:參數(shù):通過形式參數(shù)和實(shí)際參數(shù)返回值:用return語句返回計(jì)算結(jié)果全局變量:外部變量一、函數(shù)間數(shù)據(jù)傳遞方式344在函數(shù)間的傳遞數(shù)據(jù)值傳遞:在調(diào)用函數(shù)時(shí),將實(shí)參變量的值取出來,復(fù)制給形參變量,使形參變量在數(shù)值上與實(shí)參相等。在函數(shù)內(nèi)部使用從實(shí)參中復(fù)制來的值進(jìn)行處理。C中的實(shí)參可以是一個(gè)表達(dá)式,調(diào)用時(shí)先計(jì)算表達(dá)式的值,再將結(jié)果(值)復(fù)制到形參變量中。二、函數(shù)參數(shù)的值傳遞35例4用函數(shù)實(shí)現(xiàn)交換兩個(gè)變量的值。
voidmain(){inta=5,b=10;/*說明兩個(gè)變量并賦初值*/voidswap(int,int);printf("beforeswapa=%d,b=%d\n",a,b);
swap(a,b);/*用變量a和b作為實(shí)際參數(shù)調(diào)用函數(shù)*/
printf("afterswapa=%d,b=%d\n",a,b);}voidswap(x,y)intx,y;{inttemp;/*借助臨時(shí)變量交換兩個(gè)形參變量的值*/
temp=x;x=y;y=temp;printf("inswapx=%d,y=%d\n",x,y);}36main函數(shù){a=5;b
=10;swap(a,
b);}swap(x,y)函數(shù){temp
=x; 語句①
x=y; 語句②
y
=temp;}
語句③510實(shí)參變量a實(shí)參變量b510形參變量x形參變量
y變量
temp復(fù)制復(fù)制①temp
=x②x=y③y
=temp105
5swap函數(shù)的執(zhí)行過程和各個(gè)變量的變化過程
調(diào)用swap函數(shù)調(diào)用swap函數(shù)調(diào)用swap函數(shù)執(zhí)行swap函數(shù)執(zhí)行swap函數(shù)執(zhí)行swap函數(shù)4在函數(shù)間的傳遞數(shù)據(jù)(續(xù))
37main函數(shù){a=5;b
=10;swap(a,
b);}swap(x,y
)函數(shù){temp
=x; 語句①
x=y; 語句②
y
=temp;}
語句③swap函數(shù)的執(zhí)行過程和各個(gè)變量的變化過程main函數(shù)swap函數(shù)510變量a變量b形參x形參y105變量temp5105swap(a,b);main函數(shù)變量a5變量b10temp=x;x=y;y=temp;函數(shù)執(zhí)行結(jié)束返回4在函數(shù)間的傳遞數(shù)據(jù)(續(xù))38值傳遞方式的特點(diǎn)
值傳遞方式也稱數(shù)據(jù)復(fù)制方式。 函數(shù)間形參變量與實(shí)參變量的值的傳遞過程類似于日常生活中的“復(fù)印”操作。
值傳遞的優(yōu)點(diǎn)
被調(diào)用的函數(shù)不可能改變調(diào)用函數(shù)中變量的值,而只能改變它的局部的臨時(shí)副本。這樣就可以避免被調(diào)用函數(shù)的操作對調(diào)用函數(shù)中的變量可能產(chǎn)生的副作用。
值傳遞的缺點(diǎn)
在值傳遞方式下,每個(gè)形式參數(shù)僅能傳遞一個(gè)數(shù)據(jù),當(dāng)需要在函數(shù)之間傳遞大量數(shù)據(jù)時(shí),值傳遞方式顯然不適用。4在函數(shù)間的傳遞數(shù)據(jù)(續(xù))
39變量的三個(gè)屬性變量的名稱:編寫程序時(shí)使用變量名。變量的值:程序運(yùn)行時(shí)使用變量的值參加運(yùn)算。變量的地址:
程序運(yùn)行時(shí),要將變量的值保存在計(jì)算機(jī)的存儲單元中,每個(gè)存儲單元都有唯一的內(nèi)存地址。變量在內(nèi)存中占據(jù)的存儲單元的地址就是變量的地址。 通過變量名存取變量的值,稱為直接訪問。 通過變量地址存取變量的值,稱為間接訪問。三、在函數(shù)間傳遞變量的地址40在函數(shù)之間傳遞變量的地址在函數(shù)間通過一般的變量可以傳遞變量的值要在函數(shù)間傳遞變量地址必須通過指針變量 即要在函數(shù)之間傳遞指向變量的指針。在函數(shù)間傳遞變量地址時(shí),變量的地址在調(diào)用函數(shù)時(shí)要作為實(shí)際參數(shù),被調(diào)用函數(shù)使用指針變量作為形式參數(shù)接收傳遞的地址。 注意:實(shí)參的數(shù)據(jù)類型要與作為形參的指針?biāo)傅膶ο蟮臄?shù)據(jù)類型一致。41指針及其引用
C&C++提供了另一種方式,將變量k的地址存放在另一個(gè)變量處(假定為pk),通過訪問pk,可以間接地訪問變量k,這種方式稱為間接訪問。變量intk;變量pk中存放k在內(nèi)存中的地址
變量pk就是一個(gè)指針變量,指向變量k,存放k的地址。100intk=100&k&kint*pk因此:指針就是地址。421指針及其引用(續(xù))一、指針變量的說明
格式:其中:類型說明符,是指針?biāo)傅淖兞康念愋?為指針說明符,說明后面的變量為指針變量(也叫間接訪問符)例如:inta,*pa;
pa=&a;將變量a的地址賦給指針paprintf(“%d”,*pa);通過間接訪問符可以訪問變量a類型說明符*變量名;43指針及其引用(續(xù))一、指針變量的說明
說明:(1)一個(gè)指針指向類型說明符所說明的變量類型
(2)*和&在C中有兩個(gè)作用:*:乘號(雙目)和指針說明符(單目)&:取址符(單目14)和位操作中的“與”441指針的及其引用(續(xù))二、指針變量的初始化
指針變量使用前必須有值
指針變量的初值必須是地址值
方法:intk,*pk;pk=&k;(2)intk;int*pk=&k;
可以為指針賦空值(NULL),此時(shí)指針不指向任何變量pk=NULL;45指針及其引用(續(xù))三、指針變量的引用
定義指針后,對變量的訪問就可以有兩種方法:
間接訪問:通過指針
*pk=0;與k=0;*pk+=1;與k+=1;(*pk)++與k++;
區(qū)別:定義指針時(shí)的*pk
和引用指針時(shí)的*pk
直接訪問:通過變量名例:intk
,
*pk;
pk=&k;printf(“%d”,k);與printf(“%d”,*pk);完全等價(jià)46例:使用函數(shù)plus求兩個(gè)數(shù)的和。
#include<stdio.h>
main(){
int
a,b,c;printf("EnterAandB");scanf("%d%d",&a,&b);c=plus(&a,
&b);/*實(shí)參為變量a和b的地址*/
printf("A+B=%d",c);}plus(px,py)int*px,*py;/*形式參數(shù)為指向整型的指針*/
{return(
*px
+
*py
);/*返回兩個(gè)整數(shù)的和*/}4在函數(shù)間的傳遞數(shù)據(jù)(續(xù))47例:用函數(shù)交換兩個(gè)變量的值。#include<stdio.h>voidmain(){inta,b;a=5;b=10;printf("brfortswapa=%d,b=%d\n",a,b);swap(&a,&b);/*實(shí)參為變量a和b的地址*/
printf("afterswapa=%d,b=%d\n",a,b);}swap(px,py)
int*px,*py;/*形參為指向整型的指針*/{inttemp;/*說明函數(shù)內(nèi)部使用的臨時(shí)變量*/
temp=*px;/*將指針變量px的內(nèi)容賦給變量temp*/
*px=*py;/*將指針py的內(nèi)容賦給指針px的內(nèi)容*/
*py=temp;/*將變量temp的值賦給指針py的內(nèi)容*/
printf("inswapx=%d,y=%d\n",*px,*py);}4在函數(shù)間的傳遞數(shù)據(jù)(續(xù))
48main函數(shù){a
=5;b
=10;swap(&a,&b);
}swap(*px,*py)函數(shù){temp=*px; 語句①*px
=*py;語句②*py
=temp; }語句③swap函數(shù)的執(zhí)行過程和各個(gè)變量的變化過程510變量a變量b&a&b形參變量px形參變量py&a&b
變量
temp調(diào)用swap函數(shù)調(diào)用swap函數(shù)調(diào)用swap函數(shù)執(zhí)行swap函數(shù)執(zhí)行swap函數(shù)執(zhí)行swap函數(shù)①
temp=*px②*px=
*py③*py=temp10554數(shù)據(jù)在函數(shù)間的傳遞(續(xù))
49◆向函數(shù)傳遞數(shù)組元素的值:
實(shí)參為數(shù)組元素(a[k]),
形參為一般變量(x)◆向函數(shù)傳遞數(shù)組元素的地址(指針)
實(shí)參為數(shù)組元素的地址 形參為指針變量4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)一、數(shù)組與函數(shù)的關(guān)系
在函數(shù)之間傳遞數(shù)組中的單個(gè)元素在函數(shù)之間傳遞整個(gè)數(shù)組二、在函數(shù)之間傳遞數(shù)組中的元素50123456789數(shù)組a數(shù)組元素a[5]6變量x傳遞數(shù)組中的元素123456789數(shù)組a數(shù)組元素a[0]的地址20AFH指針變量p傳遞整個(gè)數(shù)組20AFH4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)51例5分析程序的執(zhí)行過程。#include”stdio.h”
voidmain(){inta[10],b,i;
/*在主調(diào)函數(shù)內(nèi)定義數(shù)組*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);/*為數(shù)組元素賦值*/
b=0;
for(i=0;i<10;i++)
b=max(b,a[i]);
/*循環(huán)調(diào)用函數(shù),依次使用數(shù)組的每一個(gè)元素做實(shí)參*/
printf(“%d”,b);}4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)1.向函數(shù)傳遞數(shù)組元素的值52
2.在函數(shù)之間傳遞整個(gè)數(shù)組4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)
格式:函數(shù)名(數(shù)組名);
數(shù)組名表示數(shù)組在內(nèi)存中的起始地址。
例:數(shù)組
a,printf(“%d”,a);顯示地址量。
數(shù)組元素
a[0]、a[1]……,表示內(nèi)存中該單元存放的數(shù)據(jù)(數(shù)組元素的值)。53實(shí)參是數(shù)組名,形參是一個(gè)能接收實(shí)參數(shù)組首地址的變量名。
注意:形參本身不是重新建立一個(gè)數(shù)組,實(shí)際是接受了實(shí)參傳給的地址。
聲明形參的格式是在數(shù)組名后加一對方括弧[]。4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)544數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)#include"stdio.h"#defineN5main(){inti,j,a[N];
voidsort(int,int);for(i=0;i<N;i++)/*讀數(shù)組*/{printf("\nEnterNo.%d:",i+1);scanf("%d",&a[i]);}
sort(a,N);
/*函數(shù)調(diào)用*/
for(i=0;i<N;i++)printf("%d",a[i]);}sort(b,m)/*定義函數(shù)*/intm,b[];/*形參的說明*/{inti,j,t;/*排序*/
for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(b[j]>b[j+1]){t=b[j];b[j]=b[j+1];b[j+1]=t;}}形參是數(shù)組55運(yùn)行結(jié)果
在調(diào)用函數(shù)過程中改變了原數(shù)組的值,即:實(shí)參數(shù)組與形參數(shù)組共享一組存儲空間。a數(shù)組b數(shù)組地址傳遞4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)56main函數(shù)sort函數(shù)
a[0]a[1]a[2]a[3]a[4]a[5]2000數(shù)組名就是首元素的地址2000a2000b形參b實(shí)質(zhì)是一個(gè)變量,內(nèi)容是數(shù)組a的起始地址對數(shù)組名作為參數(shù)的解釋4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)57三、多維數(shù)組作函數(shù)的參數(shù)多維數(shù)組元素作函數(shù)參數(shù)時(shí),與一維數(shù)組元素作函數(shù)實(shí)參相同;二維數(shù)組名作函數(shù)參數(shù):類型說明符形參名[][常量表達(dá)式M]4數(shù)據(jù)在函數(shù)間的傳遞——數(shù)組作函數(shù)參數(shù)584數(shù)組做函數(shù)參數(shù)——多維數(shù)組作函數(shù)的參數(shù)例6給定日期,將其轉(zhuǎn)換成該年的第幾天并輸出。voidmain() {staticintday_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};inty,m,d;intday_of_year(intoday_tab[2][12],year,month,day);scanf("%d%d%d",&y,&m,&d);printf("%d\n",day_of_year(day_tab,y,m,d));}int
day_of_year(day_tab,year,month,day)intday_tab[][13];/*形參是二維數(shù)組形式*/
intyear,month,day;{inti,j;i=(year%4==0&&year%100!=0)||year%400==0;/*判定為閏年還是平年,i=0為平年,i=1為閏年*/
for(j=1;j<month;j++)day+=day_tab[i][j];return(day);}數(shù)組名在函數(shù)之間傳遞多維數(shù)組59一、變量的數(shù)據(jù)類型
char型
int型
float型
double型總結(jié):數(shù)據(jù)類型決定為變量分配的內(nèi)存單元的長度,數(shù)據(jù)的存放
形式。(從程序設(shè)計(jì)角度,決定了可以表示的數(shù)的范圍)問題:1.何時(shí)為變量分配內(nèi)存單元?
2.變量位于內(nèi)存的什么位置?
3.變量的有效作用范圍?5變量的存儲屬性605變量的存儲屬性一個(gè)函數(shù)一個(gè)文件一個(gè)程序變量的作用域是指變量的有效使用范圍靜態(tài)存儲:整個(gè)程序運(yùn)行期間動(dòng)態(tài)存儲:函數(shù)調(diào)用期間變量的生存期是指變量值的保留期限61變量存貯說明的一般形式:
存貯類型說明符類型說明符變量名稱;5變量的存儲屬性(續(xù))變量存貯類型有四種:自動(dòng)變量(auto)靜態(tài)變量(static)外部變量(extern)寄存器變量(register)
auto、static、extern和register為存貯類型說明符。625變量的存儲屬性(續(xù))二、自動(dòng)變量auto1最常見的一種變量:autointa;
autofloatpi;
“auto”可以省略。以前所使用的全部變量都是自動(dòng)變量。2說明
說明自動(dòng)變量必須在一個(gè)函數(shù)體的內(nèi)部。
函數(shù)的形參也是自動(dòng)變量。635變量的存儲屬性(續(xù))3
作用域自動(dòng)變量的作用域是在所說明的函數(shù)內(nèi)部。只有在函數(shù)被調(diào)用時(shí)才存在,從函數(shù)中返回時(shí)即消失。
值也僅限于說明它的函數(shù),在其它的函數(shù)中不能存取。
在兩個(gè)不同的函數(shù)中可以分別使用同名的變量而互不影響。64例7分析程序運(yùn)行結(jié)果。#include<stdio.h>voidmain(){intx
=1;/*函數(shù)main中的自動(dòng)變量x*/voidf1(),f2(int);f1(); f2(x);/*分別調(diào)用函數(shù)f1和f2*/printf("x=%d\n",x);}voidf1(){intx=3;/*函數(shù)f1中的自動(dòng)變量x*/printf("x=%d\t",x);}
voidf2(x)intx;/*函數(shù)f2中的形參x也是自動(dòng)變量*/{printf("x=%d\t",++x);/*x加1*/}5變量的存儲屬性(續(xù))
程序中有三個(gè)x分別在三個(gè)不同的函數(shù)中,這三個(gè)“x”都是自動(dòng)變量,所以三個(gè)“x”分別局部于三不同的函數(shù),在三個(gè)函數(shù)中對“x”的操作互不影響。655變量的存儲屬性(續(xù))三、外部變量extern
定義在所有函數(shù)之外,故稱外部變量??杀凰械暮瘮?shù)訪問。函數(shù)之間可通過外部變量傳遞數(shù)據(jù)。
外部變量如果沒有明確的初值,則初值為0;自動(dòng)變量沒有明確賦初值,則值不定。外部變量與自動(dòng)變量的區(qū)別:
外部變量在編譯時(shí)由系統(tǒng)分配永久性的存儲空間;自動(dòng)變量則是在函數(shù)被調(diào)用時(shí)才分配臨時(shí)性的存儲空間。extern類型說明符變量名;66例8分析程序運(yùn)行結(jié)果。intx
=0;/*說明外部變量x*/voidmain(){voidaddone(),subone();
x=1;/*為外部變量x賦值*/
printf("xbeginsis%d\n",x);addone();subone();subone();addone();addone();printf("xwindsupas%d\n",x);}voidaddone(){x
++;/*使用外部變量x*/printf("add1tomake%d\n",x);}voidsubone(){x--;/*使用外部變量x*/printf("substract1tomake%d\n",x);}5變量的存儲屬性(續(xù))67自動(dòng)變量x
的輸出不定;外部變量x
的輸出為
0。
#include<stdio.h> voidmain() {intx;
/*自動(dòng)變量*/
printf(”x=%d”,x): }#include<stdio.h> intx;
/*外部變量*/
voidmain() {printf(”x=%d”,x): }
5變量的存儲屬性(續(xù))68如果外部變量的說明與使用在同一個(gè)文件中,則該文件中的函數(shù)在使用外部變量時(shí),不需要再進(jìn)行說明,可直接使用。在不同的文件中使用外部變量
當(dāng)外部變量的說明與使用在不同的文件,要使用在其它文件中說明的外部變量,就必須在使用該外部變量之前,使用“extern”存儲類型說明符進(jìn)行變量“外部”說明。5變量的存儲屬性(續(xù))69在不同的文件中使用外部變量
extern僅僅是說明變量是“外部的”,以及它的類型,并不真正分配存儲空間。在將若干個(gè)文件連接生成一個(gè)完整的可運(yùn)行程序時(shí),系統(tǒng)會將不同文件中使用的同一外部變量連在一起,使用同一個(gè)系統(tǒng)分配的存儲單元。5變量的存儲屬性(續(xù))70例9下列程序由兩個(gè)文件組成,請分析運(yùn)行結(jié)果。/*文件一*/
intx=10;/*定義外部變量x和y*/inty=10;voidadd(){y=10+x;x*=2;}voidmain(){externvoidsub();/*說明sub是void型的外部函數(shù)*/
x+=5;add();sub();/*分別調(diào)用函數(shù)*/
printf("x=%d;y=%d\n",x,y);}/*文件二*/
void
sub
()
/*函數(shù)sub定義在另一個(gè)文件中*/
{
extern
int
x;/*說明在另一個(gè)文件中的外部變量x*/
x
-=5;}5變量的存儲屬性(續(xù))71例10分析運(yùn)行結(jié)果。/*文件一*/intx=10;/*說明外部變量x和y*/inty
=10;externvoidsub();/*在函數(shù)外說明外部函數(shù)sub,則在每個(gè)調(diào)用外部函數(shù)sub的函數(shù)中,不再需要進(jìn)行外部函數(shù)說明*/voidadd(){inty=5;/*說明自動(dòng)變量y*/y=10+x;x*=2;printf("add:y=%d;",y);}5變量的存儲屬性(續(xù))72voidmain(){x+=5;add();sub();printf("main:x=%d;main:y=%d\n",x,y);}/*文件二*/externint
x;
/*說明另一文件中的外部變量x*/voidsub(){int
y
=5;
/*說明自動(dòng)變量y*/
x
-=
y;
printf("sub:y=%d;",y);}5變量的存儲屬性(續(xù))73靜態(tài)變量的說明是在變量說明前加static。靜態(tài)變量有兩種:外部靜態(tài)變量,內(nèi)部靜態(tài)變量。靜態(tài)變量與外部變量的相同點(diǎn):具有永久的存儲空間;由編譯器進(jìn)行初始化。外部靜態(tài)變量與外部變量的區(qū)別:外部靜態(tài)變量僅僅在定義它的一個(gè)文件中有效,而外部變量作用于整個(gè)程序。四、靜態(tài)變量static
5變量的存儲屬性(續(xù))74內(nèi)部靜態(tài)變量與外部靜態(tài)變量的區(qū)別:內(nèi)部靜態(tài)變量作用于定義它的當(dāng)前函數(shù)。外部靜態(tài)變量作用于定義它的當(dāng)前的文件。內(nèi)部靜態(tài)變量與自動(dòng)變量的區(qū)別:內(nèi)部靜態(tài)變量占用永久性的存儲單元,在每次調(diào)用的過程中能夠保持?jǐn)?shù)據(jù)的連續(xù)性;自動(dòng)變量不能。四、靜態(tài)變量static
5變量的存儲屬性(續(xù))75
例11分析下列程序的運(yùn)行結(jié)果。
/*文件一*/
staticintx=2;/*說明外部靜態(tài)變量x*/inty=3;/*說明外部變量y*/externvoidadd2();/*說明外部函數(shù)add2*/voidadd1();main(){add1();add2();add1();add2();printf("x=%d;y=%d\n",x,y);}voidadd1()/*定義函數(shù)add1*/{x+=2;y+=3;printf("inadd1x=%d\n",x);}5變量的存儲屬性(續(xù))76/*文件二*/
staticint
x=10;
/*說明外部靜態(tài)變量x*/
voidadd2();
/*定義函數(shù)add2*/
{externint
y;
/*說明另一個(gè)文件中的外部變量y*/
x
+=10;
y
+=2;
printf("inadd2x=%d\n",
x);}5變量的存儲屬性(續(xù))77例12分析下列程序的運(yùn)行結(jié)果。#include<stdio.h>voidmain(){voidinc1(),inc2();inc1();inc1();inc1();inc2();inc2();inc2();}voidinc1(){intx=0;/*說明自動(dòng)變量x并賦初值*/
x++;printf("ininc1x=%d\n",x);}voidinc2(){staticintx=0;/*說明內(nèi)部靜態(tài)變量x并初始化*/
x++;printf("ininc2x=%d\n",
x);}5變量的存儲屬性(續(xù))785變量的存儲屬性(續(xù))五、寄存器變量register寄存器變量是使用中央處理器(CPU)的通用寄存器存儲的變量。當(dāng)變量使用非常頻繁時(shí),將變量定義為寄存器變量可以提高程序運(yùn)行速度。795變量的存儲屬性(續(xù))五、寄存器變量register寄存器是與機(jī)器硬件密切相關(guān)的,不同的計(jì)算機(jī),寄存器的數(shù)目不一樣,通常為2到3個(gè),若在一個(gè)函數(shù)中說明多于2到3個(gè)寄存器變量,編譯程序會自動(dòng)地將它們變?yōu)樽詣?dòng)變量。寄存器變量只能是char、int或指針型。寄存器說明符只能用于說明函數(shù)中的變量和函數(shù)中的形式參數(shù),外部變量或靜態(tài)變量不能是register。80
變量的初始化工作是由編譯系統(tǒng)控制。在編譯程序時(shí),系統(tǒng)為外部變量和靜態(tài)變量分配永久性的存儲單元并進(jìn)行初始化。在運(yùn)行程序時(shí),外部變量和靜態(tài)變量的初值是一定的。六、變量初始化變量初始化與賦初值的區(qū)別
變量的初始化要在運(yùn)行時(shí),由賦值操作進(jìn)行。在剛進(jìn)入一個(gè)函數(shù)時(shí),函數(shù)中說明的自動(dòng)變量和寄存器變量的值是不定的。對于自動(dòng)變量和寄存器變量對于外部變量和靜態(tài)變量5變量的存儲屬性(續(xù))81在函數(shù)中說明外部變量或靜態(tài)變量時(shí),可使用這樣的語句:
intx1=2,x2;staticinty=3;main(){staticintz=10;......}
這時(shí)編譯程序會自動(dòng)為x1、x2、y和z進(jìn)行初始化。不需要程序在運(yùn)行時(shí)再做賦值操作了。
5變量的存儲屬性(續(xù))82
對于變量x2在說明時(shí)沒指定初值的外部變量或靜態(tài)變量,編譯系統(tǒng)自動(dòng)將初值置為0。 這點(diǎn)與自動(dòng)變量和寄存器變量是根本不同的。5變量的存儲屬性(續(xù))83
這不是給自動(dòng)變量或寄存器變量初始化,是在運(yùn)行時(shí)執(zhí)行賦值操作為自動(dòng)變量或寄存器變量賦初值。
在函數(shù)中說明自動(dòng)變量或寄存器變量時(shí),可使用這樣的語句:
main(){intx=3;registerinty=4;...}5變量的存儲屬性(續(xù))84
性能自動(dòng)變量外部變量外部靜態(tài)內(nèi)部靜態(tài)寄存器變量 記憶能力無有有有無 多個(gè)函數(shù)共享否可可否否 在不同文件共享性否可否否否 未顯示賦值的取值不定000不定 變量初始化程序控制編譯器編譯器編譯器程序控制 作用域當(dāng)前函數(shù)整個(gè)程序文件函數(shù)當(dāng)前函數(shù)
存儲類型小結(jié)5變量的存儲屬性(完)85
遞歸是一種常用的程序設(shè)計(jì)技術(shù),在一個(gè)程序中,若存在程序自己調(diào)用自己的現(xiàn)象就是構(gòu)成了遞歸。 如果函數(shù)funA在執(zhí)行過程又調(diào)用函數(shù)funA自己,則稱函數(shù)funA為直接遞歸。 如果函數(shù)funA在執(zhí)行過程中先調(diào)用函數(shù)funB,函數(shù)funB在執(zhí)行過程中又調(diào)用函數(shù)funA,則稱函數(shù)funA為間接遞歸。一、遞歸的概念6函數(shù)的遞歸調(diào)用86
例13用遞歸函數(shù)求n!。
已知:n階乘的遞歸定義為:
n!=1當(dāng)n=0時(shí)
n!=n*(n-1)!當(dāng)n>=1時(shí)
voidmain(){intn,p;printf("N=?");scanf("%d",&n);p=facto(n);printf("%d!=%d\n",n,p);}facto(n)intn;{intr;if(n==0)r=1;elser=n*facto(n-1);/*遞歸調(diào)用*/
return(r);}二、遞歸程序的執(zhí)行過程6函數(shù)的遞歸調(diào)用87主函數(shù)第一次調(diào)用第二次第三次第四次
n=3p=facto(3)
調(diào)用└─→n=3r=3*facto(2)
調(diào)用└─→n=2r=2*facto(1)
調(diào)用└─→n=1r=1*facto(0)└─→n=0,r=1return(1)┌←─────┘返回
r=1*1=1
return(1)┌←─────┘返回
r=2*1=2return(2)┌←─────┘返回
r=3*2=6return(6)┌←──────┘返回
p=6
打印6facto(n)intn;{intr;if(n==0)r=1;elser=n*facto(n-1);return(r);}遞歸返回過程遞歸調(diào)用過程6函數(shù)的遞歸調(diào)用88遞歸調(diào)用的執(zhí)行過程facto(n)intn;{intr;if(n==0)r=1;elser=n*facto(n-1);return(r);}facto
(intn
){intr;if(n==0
)r=1;else{r=facto
(n-1);r=n*r;}return(r);}等價(jià)于當(dāng)n=0時(shí)n!=1當(dāng)n>=1時(shí)n!=n*(n-1)!6函數(shù)的遞歸調(diào)用89facto(intn){intr;if(n==0)r=1;else{r=facto(n-1);r=n*r;}return(r);}facto(intn)intr;if(n==0)facto(intn){intr;if(n==0)r=1;else{r=facto(n-1);r=n*r;}return(r);}r=facto(n-1)facto(intn)intr;if(n==0)facto(intn){intr;if(n==0)r=1;else{r=facto(n-1);r=n*r;}return(r);}r=facto(n-1)facto(intn){intr;if(n==0)r=1;else{r=facto(n-1);r=n*r;}return(r);}facto(intn)facto(intn)intr;intr;if(n==0)if(n==0)r=facto(n-1)r=1return(1)r=n*r=1*1return(1)return(2)r=n*r=2*1r=n*r=3*2return(6)1調(diào)用234調(diào)用調(diào)用321返回返回返回N=3N=2N=1N=06函數(shù)的遞歸調(diào)用90
例:求自然數(shù)1到n之和。 建立問題的遞歸定義:
f(n)=1 當(dāng)n=1時(shí)
f(n)=n+f(n-1)當(dāng)n>1時(shí) 程序:int
add(n) intn;{if(n==1)return(1);/*遞歸結(jié)束條件*/
if(n>1)return(n+add(n-1));}遞歸結(jié)束條件遞歸算法三、數(shù)值型問題的遞歸求解一般方法
從數(shù)學(xué)公式入手:推導(dǎo)出問題的遞歸定義;確定問題的邊界條件;再得到問題的遞歸算法和遞歸結(jié)束條件。6函數(shù)的遞歸調(diào)用91七、非數(shù)值型問題的遞歸求解一般方法
將問題化簡:分析在最簡單情況下問題的求解方法。此時(shí),求解的方法一定是非遞歸的算法,而且十分簡單。
分解:將一般的問題分解為兩個(gè)(或多個(gè))小問題,且每個(gè)分解后的小問題與原來的問題仍然是相似的,具有相同的性質(zhì),只是在問題的規(guī)模上有所縮小。6函數(shù)的遞歸調(diào)用92由第1步可以產(chǎn)生遞歸結(jié)束條件,由第3步可以推出遞歸算法。
七、非數(shù)值型問題的遞歸求解一般方法
建立模型:假設(shè)分解后的小問題已經(jīng)全部可以解決,將每個(gè)小問題看作一個(gè)整體,不再對小問題進(jìn)行分解,建立用小問題解決一般問題的算法。6函數(shù)的遞歸調(diào)用93
1. 若n為1位整數(shù)(0≤n≤9):則可直接輸出。 2. 將任一個(gè)整數(shù)n(****+)(n>=10)分為兩部分: ◆個(gè)位(+) ◆除個(gè)位以外的其余部分(****) 3. 將分解后的兩部分分別看成整體,則解決原來問題的算法可以描述為: ①輸出n的個(gè)位(+) ②反序輸出
n的除個(gè)位以外的其余部分(****) 由1推出遞歸終止條件。 由3得到遞歸算法。例14反序輸出整數(shù)n(n>=0)。
例如:n=12345,輸出54321。問題分析:941
2
3
4551
2
3441
23312211遞歸算法描述: 若:整數(shù)n只有1位數(shù)字 則:輸出該整數(shù)n;
否則:輸出n的個(gè)位; 反序輸出n的除個(gè)位以外的其余部分。進(jìn)行遞歸n/10printn(n)6函數(shù)的遞歸調(diào)用95程序:voidprintn(intn){if(0<=n&&n<=9)
printf(”%d”,n);
else{
printf(”%d”,n%10);/*輸出個(gè)位*/
printn(n/10);/*遞歸*/
}}6函數(shù)的遞歸調(diào)用96例15漢諾塔問題據(jù)說在約十九世紀(jì)末歐洲的商店中出售一種智力玩具,在一塊銅板上有三根桿,最左邊的桿上自上而下、由小到大順序串著由64個(gè)圓盤構(gòu)成的塔。 游戲的目的是將最左邊A桿上的圓盤,借助最右邊的C桿,全部移到中間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026浙江杭州市廣播電視監(jiān)測中心招聘編外工作人員1人備考題庫及一套參考答案詳解
- 2025福建三明市皮膚病醫(yī)院招聘1人備考題庫及參考答案詳解
- 2026廣東茂名市電白區(qū)城鎮(zhèn)公益性崗位招聘2人備考題庫(第一批)帶答案詳解
- 2026廣西百色城市產(chǎn)業(yè)發(fā)展集團(tuán)有限公司招聘19人備考題庫附答案詳解
- 2026年湖南衡陽衡東縣選調(diào)118名事業(yè)單位工作人員備考題庫及一套答案詳解
- 2026國投種業(yè)科創(chuàng)中心有關(guān)崗位社會招聘備考題庫及完整答案詳解一套
- 2025年西安市第83中學(xué)浐灞第二分校教師招聘備考題庫含答案詳解
- 2025年品保課長考試題及答案
- 2025年高頻羅森便利店面試題及答案
- 2025年造林學(xué)期末考試題及答案
- 北京通州產(chǎn)業(yè)服務(wù)有限公司招聘備考題庫必考題
- 2026南水北調(diào)東線山東干線有限責(zé)任公司人才招聘8人筆試模擬試題及答案解析
- 伊利實(shí)業(yè)集團(tuán)招聘筆試題庫2026
- 2026年基金從業(yè)資格證考試題庫500道含答案(完整版)
- 動(dòng)量守恒定律(教學(xué)設(shè)計(jì))-2025-2026學(xué)年高二物理上冊人教版選擇性必修第一冊
- 老年照護(hù)初級理論知識測試題庫與答案
- 二級建造師繼續(xù)教育題庫帶答案(完整版)
- 地下儲氣庫建設(shè)的發(fā)展趨勢
- 臺州市街頭鎮(zhèn)張家桐村調(diào)研報(bào)告
- 壓力排水管道安裝技術(shù)交底
- 糖代謝紊亂生物化學(xué)檢驗(yàn)
評論
0/150
提交評論