版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 實(shí)驗(yàn)一 繪制二進(jìn)熵函數(shù)曲線(2個(gè)學(xué)時(shí))一、實(shí)驗(yàn)?zāi)康模赫莆誆xcel的數(shù)據(jù)填充、公式運(yùn)算和圖表制作掌握Matlab繪圖函數(shù)掌握、理解熵函數(shù)表達(dá)式及其性質(zhì)二、實(shí)驗(yàn)要求:提前預(yù)習(xí)實(shí)驗(yàn),認(rèn)真閱讀實(shí)驗(yàn)原理以及相應(yīng)的參考書(shū)。在實(shí)驗(yàn)報(bào)告中給出二進(jìn)制熵函數(shù)曲線圖三、實(shí)驗(yàn)原理:Excel的圖表功能信源熵的概念及性質(zhì)單位為 比特/符號(hào) 或 比特/符號(hào)序列。當(dāng)某一符號(hào)xi的概率p(xi)為零時(shí),p(xi)log p(xi) 在熵公式中無(wú)意義,為此規(guī)定這時(shí)的 p(xi)log p(xi) 也為零。當(dāng)信源X中只含有一個(gè)符號(hào)x時(shí),必有p(x)=1,此時(shí)信源熵H(X)為零。四、實(shí)驗(yàn)內(nèi)容:用Excel和Matlab軟件制作
2、二進(jìn)熵函數(shù)曲線。根據(jù)曲線說(shuō)明信源熵的物理意義。Excel具體步驟如下:1、啟動(dòng)Excel應(yīng)用程序。2、準(zhǔn)備一組數(shù)據(jù)p。在Excel的一個(gè)工作表的A列(或其它列)輸入一組p,取步長(zhǎng)為0.01,從0至100產(chǎn)生101個(gè)p(利用Excel填充功能)。3、取定對(duì)數(shù)底c,在B列計(jì)算H(x) ,注意對(duì)p=0與p=1兩處,在B列對(duì)應(yīng)位置直接輸入0。Excel中提供了三種對(duì)數(shù)函數(shù)LN(x),LOG10(x)和LOG(x,c),其中LN(x)是求自然對(duì)數(shù),LOG10(x)是求以10為底的對(duì)數(shù),LOG(x,c)表示求對(duì)數(shù)。選用c=2,則應(yīng)用函數(shù)LOG(x,2)。在單元格B2中輸入公式:=-A2*LOG(A2,2)
3、-(1-A2)*LOG(1-A2,2)雙擊B2的填充柄,即可完成H(p)的計(jì)算。4、使用Excel的圖表向?qū)?,圖表類型選“XY散點(diǎn)圖”,子圖表類型選“無(wú)數(shù)據(jù)點(diǎn)平滑散點(diǎn)圖”,數(shù)據(jù)區(qū)域用計(jì)算出的H(p)數(shù)據(jù)所在列范圍,即$B$1:$B$101。在“系列”中輸入X值(即p值)范圍,即$A$1:$A$101。在X軸輸入標(biāo)題概率,在Y軸輸入標(biāo)題信源熵。(二)用matlab軟件繪制二源信源熵函數(shù)曲線p = 0.0001:0.0001:0.9999;h = -p.*log2(p)-(1-p).*log2(1-p);plot(p,h)五、實(shí)驗(yàn)結(jié)果二元信源熵函數(shù)信源熵為信息的不確定度,概率的大小反映了信息量的大
4、小,如果二元信源的輸出符號(hào)是確定的,即p=1,則該信源不提供任何信息,當(dāng)二元信源符號(hào)0和1以等概率發(fā)生時(shí),信源熵達(dá)到極大值,等于1bit信息量。實(shí)驗(yàn)二:驗(yàn)證二元離散對(duì)稱信道的互信息的性質(zhì)(4學(xué)時(shí))(課后做)一、實(shí)驗(yàn)?zāi)康?掌握離散對(duì)稱信道互信息的計(jì)算及性質(zhì)特點(diǎn)。2練習(xí)應(yīng)用matlab軟件進(jìn)行互信息的函數(shù)曲線的繪制,并從曲線上理解其物理意義。二、參看定理4.2.1及4.2.2三、實(shí)驗(yàn)內(nèi)容1驗(yàn)證固定信道,I(X;Y)是信源分布的上凸函數(shù);2驗(yàn)證固定信源,I(X;Y)是信道傳遞概率的下凸函數(shù);3 I(X;Y)的三維分布繪制(自行學(xué)習(xí)三維圖形的繪制函數(shù))四、實(shí)驗(yàn)結(jié)果(1)I(X;Y)是信源分布的上凸函數(shù)
5、(2)I(X;Y)是信道傳遞概率的下凸函數(shù)(3)I(X;Y)的三維分布繪制 五、源代碼(1)驗(yàn)證固定信道,I(X;Y)是信源分布的上凸函數(shù)symsw;x=w,1-w;p=0.90.1;0.10.9;pxy=x(1,1)*p(1,:);x(1,2)*p(2,:);py=x*p(:,1),x*p(:,2);px_y=pxy(:,1)/py(1,1),pxy(:,2)/py(1,2);Ix_y=sum(sum(pxy.*log2(p./py;py);ezplot(w,Ix_y,0,1,0,1);xlabel(變量w);ylabel(平均互信息量I);title(平均互信息量與w的關(guān)系);gridon
6、 (2)驗(yàn)證固定信源,I(X;Y)是信道傳遞概率的下凸函數(shù)m=10.50;figureholdon%設(shè)置為疊加繪圖模式fori=1:5w=m(i);p=0:0.01:1;I=(w.*(1-p)+(1-w).*p).*log2(1./(w.*(1-p)+(1-w).*p)+(w.*p+(1-w).*(1-p).*log2(1./(w.*p+(1-w).*(1-p)-(p.*log2(1./p)+(1-p).*(log2(1./(1-p);plot(p,I,b);title(曲線圖);xlabel(信道轉(zhuǎn)移概率p);ylabel(平均互信息量I);end (3)I(X;Y)的三維分布繪制p,q=m
7、eshgrid(0.000001:0.01:1,0.000001:0.01:1);Hnoise=-p.*log2(p)-(1-p).*log2(1-p);%噪聲熵x=(1-p).*q+p.*(1-q);I=-x.*log2(x)-(1-x).*log2(1-x)-Hnoise;mesh(p,q,I) 實(shí)驗(yàn)三:離散信道容量(1學(xué)時(shí))一、實(shí)驗(yàn)?zāi)康恼莆针x散信道容量的計(jì)算。理解離散信道容量的物理意義。練習(xí)應(yīng)用matlab軟件進(jìn)行函數(shù)曲線的繪制,并從曲線上理解其物理意義。二、實(shí)驗(yàn)原理二元對(duì)稱信道BSC(Binary Symmetric Channel)二進(jìn)制離散信道模型有一個(gè)允許輸入值的集合X=0,1和
8、可能輸出值的集合Y=0,1,以及一組表示輸入和輸出關(guān)系的條件概率(轉(zhuǎn)移概率)組成。如果信道噪聲和其他干擾導(dǎo)致傳輸?shù)亩M(jìn)序列發(fā)生統(tǒng)計(jì)獨(dú)立的差錯(cuò),且條件概率對(duì)稱,即這種對(duì)稱的二進(jìn)制輸入、二進(jìn)制輸出信道稱做二元對(duì)稱信道(或二進(jìn)制對(duì)稱信道,簡(jiǎn)稱BSC信道),如下圖所示:信道容量公式:三、實(shí)驗(yàn)內(nèi)容BSC信道是DMC信道對(duì)稱信道的特例,對(duì)于轉(zhuǎn)移概率為P(0/1)=P(1/0)=p,P(0/0)=P(1/01)=1-p,求出其信道容量公式,并在matlab上繪制信道容量C與p的曲線。根據(jù)曲線說(shuō)明其物理意義。參考代碼: p = linspace(0,1,50);c = 1+p.*log2(p)+(1-p).*
9、log2(1-p);plot(p,c)xlabel(p)ylabel(c)四、實(shí)驗(yàn)結(jié)果C=1+plogp+(1-p)log(1-p)無(wú)噪聲干擾時(shí)(p=0),損失熵H(X/Y)=0,信道容量等于信源發(fā)出的碼元速率。P=1/2時(shí),C=0,信道已無(wú)傳輸能力。實(shí)驗(yàn)四:Huffman編碼軟件實(shí)現(xiàn)(4個(gè)學(xué)時(shí))一、實(shí)驗(yàn)?zāi)康模?)進(jìn)一步熟悉Huffman編碼過(guò)程;(2)練習(xí)matlab中哈夫曼編碼函數(shù)的調(diào)用;(3)掌握Matlab中Huffman編碼的思想;(4)掌握平均碼長(zhǎng),編碼效率的計(jì)算。二、實(shí)驗(yàn)原理二元哈夫曼編碼的具體步驟歸納如下:統(tǒng)計(jì)n個(gè)信源消息符號(hào),得到n個(gè)不同概率的信息符號(hào)。將這n個(gè)信源信息符號(hào)按
10、其概率大小依次排序: p(x1) p(x2) p(xn)取兩個(gè)概率最小的信息符號(hào)分別配以0和1兩個(gè)碼元,并將這兩個(gè)概率相加作為一個(gè)新的信息符號(hào)的概率,和未分配的信息符號(hào)構(gòu)成新的信息符號(hào)序列。將剩余的信息符號(hào),按概率大小重新進(jìn)行排序。重復(fù)步驟3,將排序后的最后兩個(gè)小概論相加,相加和與其他概率再排序。如此反復(fù)重復(fù)n-2次,最后只剩下兩個(gè)概率。從最后一級(jí)開(kāi)始,向前返回得到各個(gè)信源符號(hào)所對(duì)應(yīng)的碼元序列,即相應(yīng)的碼字,構(gòu)成霍夫曼編碼字。編碼結(jié)束。編碼之后,哈夫曼編碼的平均碼長(zhǎng)為:哈夫曼編碼的效率為:三、實(shí)驗(yàn)內(nèi)容(一)直接調(diào)用matlab哈夫曼編碼函數(shù)進(jìn)行編碼,與人工編碼結(jié)果做比較。huffmandict
11、函數(shù): 為已知概率分布的信源模型生成哈夫曼編解碼索引表。調(diào)用方法如下:dict ,L = huffmandict (symbols, p)調(diào)用Huffmandict函數(shù),使用數(shù)組s(編碼符號(hào))及其概率數(shù)組P進(jìn)行Huffman編碼,編碼后產(chǎn)生一個(gè)編碼詞典dict,以及平均碼長(zhǎng)L。求出熵H,并計(jì)算其效率H/L基本參考:symbols = 1: ;p = ;dict,L = huffmandict(symbols,p)code1= dict1,2. dict ,2(二)根據(jù)編碼思想編寫(xiě)要求(1)輸入:信源的概率分布P;(2)輸出:每個(gè)信源符號(hào)對(duì)應(yīng)的Huffman編碼的碼字。(3)計(jì)算平均碼長(zhǎng) 、信源
12、熵 及編碼效率并對(duì):輸入的概率數(shù)組中有小于0的值輸入的概率數(shù)組總和大于1作出判斷實(shí)驗(yàn)結(jié)果(一) (二) 五、哈夫曼編碼的MATLAB實(shí)現(xiàn)(基于0、1編碼):clc;clear;A=5,3,1,6,2;%原概率序列A=A/sum(A);A=fliplr(sort(A);%按降序排列T=A;m,n=size(A);B=zeros(n,n-1);%空的編碼表(矩陣)for i=1:n B(i,1)=T(i);%生成編碼表的第一列endr=B(i,1)+B(i-1,1);%最后兩個(gè)元素相加T(n-1)=r;T(n)=0;T=fliplr(sort(T);t=n-1;for j=2:n-1%生成編碼表的
13、其他各列 for i=1:t B(i,j)=T(i); end K=find(T=r); B(n,j)=K(end);%從第二列開(kāi)始,每列的最后一個(gè)元素記錄特征元素在該列的位置 r=(B(t-1,j)+B(t,j);%最后兩個(gè)元素相加 T(t-1)=r; T(t)=0; T=fliplr(sort(T); t=t-1;endB;%輸出編碼表END1=sym(0,1);%給最后一列的元素編碼END=END1;t=3;d=1;for j=n-2:-1:1%從倒數(shù)第二列開(kāi)始依次對(duì)各列元素編碼 for i=1:t-2 if i1 & B(i,j)=B(i-1,j) d=d+1; else d=1; e
14、nd B(B(n,j+1),j+1)=-1; temp=B(:,j+1); x=find(temp=B(i,j); END(i)=END1(x(d); end y=B(n,j+1); END(t-1)=char(END1(y),0; END(t)=char(END1(y),1; t=t+1; END1=END;end A%排序后的原概率序列 END%編碼結(jié)果for i=1:n a,b=size(char(END(i); L(i)=b;endavlen=sum(L.*A)%平均碼長(zhǎng)H1=log2(A);H=-A*(H1)%熵P=H/avlen%編碼效率附錄資料:不需要的可以自行刪除Pascal/
15、C/C+語(yǔ)句對(duì)比(補(bǔ)充版)一、Hello world 先看三種語(yǔ)言的樣例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello world!n); return 0;C+#include using namespace std;int main()cout Hello world! endl; return 0; 從這三個(gè)程序可以看到一些最基本的東西。在Pascal中的begin和end,在C/C+里就是;Pascal主程序沒(méi)有返回值,而C/C+返回0(好像在C中可以為NULL)。在C/C+中,main函數(shù)
16、以前的是頭文件,樣例中C為stdio.h,C+除了iostream還有第二行的using namespace std,這個(gè)是打開(kāi)命名空間的,NOIP不會(huì)考這個(gè),可以不管,只要知道就行了。 此外說(shuō)明 注釋單行用/,段落的話Pascal為,C/C+為/* */。* 常用頭文件(模板)#include #include #include #include #include #include using namespace std;int main() system(“pause”);return 0;二、數(shù)據(jù)類型及定義 這里只列出常用的類型。1、整型PascalC/C+范圍shortint-128
17、127integershort-32768 32767longintInt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 4294967295qwordunsigned long long0 18446744073709551615 * 當(dāng)對(duì)long long 變量賦值時(shí),后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Li
18、nux: printf(“%lldn”,x);* Windows: printf(“%I64dn”,x);2、實(shí)型PascalC/C+范圍realfloat2.9E-39 1.7E38single-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三種語(yǔ)言中都為char,C里沒(méi)有字符串,只有用字符數(shù)組來(lái)代替字符串,Pascal和C+均為string。Pascal中字符串長(zhǎng)度有限制,為255,C+則沒(méi)有。 字符串和字符在Pascal中均用單引號(hào)注明,在C/C+中字符用單引號(hào),字符串用雙引號(hào)。4、布爾類型 Pascal 中為 boolean
19、,C/C+ 為 bool。值均為True 或 False。C/C+中除0外bool都為真。5、定義 常量的定義均為 const,只是在C/C+中必須要注明常量的類型。在C/C+中還可以用宏來(lái)定義常量,此時(shí)不注明類型。PascalC/C+const a = 60; b = -a + 30; d = ;const int a = 60;const int b = - a + 30;const string d = “”;define MAXN 501 /這個(gè)是宏 * 宏定義其實(shí)就是直接在程序相應(yīng)的位置替換: #define randomize srand(unsigned time(NULL) #
20、define wait for(int w=0;w a;cout a;cout a endl;特別說(shuō)明C+中cin一個(gè)字符的話會(huì)自動(dòng)跳過(guò)空格和回車,Pascal和C則會(huì)讀入空格和回車。在Pascal中writeln(a:n:m) 表示在n個(gè)字符寬的輸出域上輸出a保留m位小數(shù)。例如:pascal write(a:6) c/c+ printf(“%6d”,a) Pascal write(a:6:2) c/c+ printf(“%6.2f”,a) C+ 如果用 cout ? (繁瑣!) 需要加頭文件 #inlude cout setprecision(2)a; /作用永久 cout setw(6)a
21、; /作用臨時(shí) 以下三個(gè)進(jìn)制設(shè)定都是永久作用: cout deca; 相當(dāng) printf(“%d”,a); /十進(jìn)制 cout hexa; 相當(dāng) printf(“%X”,a); /十六進(jìn)制 cout octa; 相當(dāng) printf(“%o”,a); /八進(jìn)制例如:cout 12hex12oct1212endl;輸出:12c1414 C 的輸入輸出里面的字符串中%表示變量,%后面的字目表示變量類型。下面是類型表:%hd1個(gè)short型整數(shù)%d1個(gè)int型整數(shù)%u1個(gè)unsigned int型整數(shù)%I64d1個(gè)long long型整數(shù)%c1個(gè)字符%s1個(gè)C字符串%f1個(gè)float型實(shí)數(shù)%lf1個(gè)d
22、ouble型實(shí)數(shù)%10.4f輸出1個(gè)總寬度為10,保留4位小數(shù)的實(shí)數(shù) 文件輸入輸出:Pascalassign(input, test.in);assign(output, test.out);reset(input);rewrite(output);read(a, b);writeln(a, b);close(input);close(output);CFILE *fin = fopen(“test.in”, “r”);FILE *fout = fopen(“test.out”, “w”);fscanf(fin, “%d%d”, &a, &b);fprintf(fout, “%d%d”, a,
23、 b);fclose(fin); fclose(fout);C+#include using namespace std;ifstream fin(“test.in”);ofstream fout(“test.out”);fin a b;fout a b endl;fin.close(); fout.close();因?yàn)镃+的讀入較慢,個(gè)人建議C+的話使用C的輸入方式。當(dāng)然也有人用C的讀入,C+的輸出的,這種方式我們稱之為城鄉(xiāng)結(jié)合。*中國(guó)計(jì)算機(jī)學(xué)會(huì)競(jìng)賽須知發(fā)布的C讀寫(xiě)程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b
24、; freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout); scanf(“%d%d”,&a,&b); printf(“%dn”,a+b); return 0; 或者:freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout);ios:sync_with_stdio(false); 取消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下擴(kuò)充c/c+混用是可行的:#include #include using namespace s
25、td;int main() int a,b,c,d; freopen(sum.in,r,stdin); freopen(sum.out,w,stdout); scanf(%d%d,&a,&b); cincd; printf(%dn,a+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、賦值語(yǔ)句及運(yùn)算符號(hào) 一一對(duì)應(yīng)的關(guān)系PascalC/C+賦值運(yùn)算賦值:=基本運(yùn)算加+減-乘*除(實(shí)數(shù))/ (double)除法取整div(int) / (int)取余mod%比較等于=不等于!=大于大于等于=小于小于等于=邏輯且and&或or|非not!位運(yùn)算左移
26、(*2)shl且and&或or|非not異或xor其他增一inc(x)x+減一dec(x)x- 在C/C+中對(duì)某個(gè)變量自身進(jìn)行運(yùn)算可以簡(jiǎn)寫(xiě)為 變量名 運(yùn)算符號(hào)= 改變量 如 x += 8 就表示 x = x + 8, 即 inc(x, 8)。 在 C/C+里還存在一種三目運(yùn)算 變量名 = 條件 ? 值A(chǔ) : 值B 如 x = x 0 ? x : -x; /表示若x 0 則取 x, 否則取 x, 同 if x 0 then x := x else x := -x;五、條件語(yǔ)句1、if C/C+中if 語(yǔ)句的條件必須要用括號(hào)括起來(lái),后面不使用then。PascalC/C+if a b then f
27、lag := true else flag := false;if (a b) flag = true;else flag = false;2、多種分支 C/C+中為switch,Pascal為case:PascalC/C+case x of 1: inc(x); 2: dec(x); else x := x * x;end;switch (x) case 1: x +; break; case 2: x -; break; default: x *= x; 切記C/C+中一定要寫(xiě)break,后果你可以去掉break,運(yùn)行看看就知道了。六、循環(huán)語(yǔ)句1、forPascalC/C+for 變量名
28、:= 初始值 to(downto) 終止值 dofor (變量名=初始值;條件;改變方式)for i := 5 to 10 do dec(a);/終止值大于初始值用 tofor i := 5 downto 1 do dec(a);/終止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 滿足條件就會(huì)一直循環(huán)。C/C+中i是實(shí)數(shù)、指針都可以*/C/C+中for的特殊用法:/變量為實(shí)數(shù)for (double i = 1; i 符號(hào)為間接引用,后面會(huì)提到。for (type1 *p = head - next; p; p = p - next) printf
29、(“%d”, p - k);2、whilePascalC/C+while 條件 dowhile (條件)while i 0 do dec(i);while (i != 0) i-;/也可寫(xiě)作 while (i) i-;/在C/C+中非0即為真。3、repeat-until & do-whilePascalC/C+repeat 語(yǔ)句 until 結(jié)束條件;do while (運(yùn)行條件)repeat int(i) until i 100;do i+; while (i = 100);七、數(shù)組 Pascal中數(shù)組的下標(biāo)可以隨意定義,而C/C+下標(biāo)始終為從0開(kāi)始到(數(shù)組大小1)。PascalC/C+定
30、義a : array 1.100 of integer;b :array 1.10,1.10 of int64;int a100;int b1010;含義a 為大小為100的integer數(shù)組,合法下標(biāo)為1到100b 為大小為10*10的int64數(shù)組,合法下標(biāo)為1,1到10,10a 為大小為100的int數(shù)組,合法下標(biāo)為0到99b 為大小為10*10的int數(shù)組,合法下標(biāo)為0,0到9,9;使用inc(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 數(shù)組清零PascalC/C+Fillchar(a, sizeof(a), 0);memset(a,
31、 0, sizeof(a);/頭文件包含 string.h*如果要填最大: memset(a,127,sizeof(a) (但達(dá)不到 INT_MAX) 如果要填最小: memset(a,128,sizeof(a) (但達(dá)不到 INT_MIN) 如果填0: memset(a,0,sizeof(a) 如果填-1: memset(a,-1,sizeof(a)八、字符串 C風(fēng)格的字符串就是字符數(shù)組。 C+和Pascal的字符串使用基本相同,只是C+中字符串下標(biāo)以0開(kāi)始,Pascal以1開(kāi)始。字符串處理很多這里不一一列舉,只寫(xiě)最常用的幾個(gè)。PascalC (包含)定義用:char sC+(包含)定義用:
32、string s輸入輸出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能輸入輸出c+的字符串Cins;Couts = s 的區(qū)別: getline(cin,s)cins一次性整行讀入,直至行末尾。只讀入一個(gè)“單詞”,遇空格和行末停止。例如輸入;How are you?s=” How are you?”讀入整串含空格例如輸入;How are you?s=”How”如果三個(gè)都讀:cins1s2s3*C+ 數(shù)字與數(shù)值之間的轉(zhuǎn)換:#include #include #include /必須加入using namespace std;int
33、main() string text = 152; int number; stringstream ss;ss number; /string - int coutnumber+100endl; ss string string str = ss.str(); return 0;九、過(guò)程和函數(shù)1、過(guò)程 在C/C+中沒(méi)有過(guò)程,但可以把返回值為“空”的函數(shù)理解為過(guò)程。PascalC/C+無(wú)參過(guò)程procedure 過(guò)程名;說(shuō)明部分begin 語(yǔ)句部分 end;/說(shuō)明部分、begin、end語(yǔ)句部分統(tǒng)稱為過(guò)程體void 函數(shù)名(); 主體部分; return ;帶參過(guò)程procedure 過(guò)程名(
34、形參表)過(guò)程體void 函數(shù)名(形參表)過(guò)程體 值傳和址傳:當(dāng)一個(gè)參數(shù)是值傳時(shí),形參在子過(guò)程中相當(dāng)于一個(gè)局部變量,對(duì)它的改變不影響實(shí)在的參數(shù)值。址傳則會(huì)影響。下例中a為值傳,b為址傳。初始a = 5,b = 5,運(yùn)行后a = 5,b = 10;PascalC/C+var a, b:integer;procedure doit(a:integer; var b:integer);begin b := a + b; a := a + b;end;begina := 5;b := 5;doit(a, b);writeln(a, , b);end.void doit(int a, int &b) HY
35、PERLINK a a認(rèn)為值參,b認(rèn)為變量傳參 b += a; a += b; return ;int main()int a = 5, b = 5;doit(a, b);cout a b;return 0;* 用若干地址傳參可以給調(diào)用者傳回若干值 Void tryit(int &x,int &y,int &z) 調(diào)用時(shí): tryit(a,b,c) ,可以傳回 a,b,c的值。* 用數(shù)組名(也是地址)傳參可以傳回整組的數(shù)據(jù) Void tryit( int a) 調(diào)用時(shí): tryit(x),可以傳回整個(gè)數(shù)組。例如:void tryit(int a) for(int i=0;i=10;i+) ai
36、=i*2; return; int main() int x10; tryit(x); for(int i=0;i=10;i+) coutxiendl; system(pause); return 0;*用指向函數(shù)的指針作為參數(shù),可以執(zhí)行指定的函數(shù)。(略)STL 的兩個(gè)應(yīng)用:* C+ 快排函數(shù)#include Bool com(int a,int b) Return ab;Int main() Int a10=5,7,3,2,6,8,4,3,5,7;Sort(a,a+10,com); /如果升序可以省略com.For(int i=0;i10;i+) Coutai” “;* 優(yōu)先隊(duì)列(以堆排為例
37、)#include #include using namespace std;priority_queue Q;int main() int n,a; cinn; while (n-) cina; Q.push(a); while (!Q.empty() cout Q.top() ; Q.pop(); return 0;* 隊(duì)列、棧、優(yōu)先隊(duì)列 三種數(shù)據(jù)結(jié)構(gòu)匯總:#include #include priority_queue Q;queue Q1;stack S;int main()Q.push(5); x = Q.top(); Q.pop();Q.empty();Q.size()Q1.push(5); Q1.size(); Q1.front(); Q1.empty(); Q1.pop();S.push(5); S.size(); S.top(); S.emtpy(); S.pop();2、函數(shù) . PascalC/C+funtion 函數(shù)名(形參表):返回值類型;函數(shù)體返回值類型 函數(shù)名(形參表) 主體; return 返回值; 注意在Pascal中: 在函數(shù)體的語(yǔ)句部分中,必須有對(duì)應(yīng)的函數(shù)標(biāo)識(shí)符賦值的語(yǔ)句,并且這些語(yǔ)句在函數(shù)被引用時(shí)至少要有一句被執(zhí)行,最后賦給函數(shù)標(biāo)識(shí)符的值就是函數(shù)值。或者exit(返回值);下面為求n階乘的樣例:PascalC/C+fun
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024預(yù)制板購(gòu)銷合同
- 2025年度瓷磚研發(fā)中心實(shí)驗(yàn)室建設(shè)與運(yùn)營(yíng)合同3篇
- 2025年度危險(xiǎn)化學(xué)品儲(chǔ)存安全管理承包合同4篇
- 2025年度智能物流中心建設(shè)與運(yùn)營(yíng)管理合同4篇
- 2025年度商業(yè)地產(chǎn)租賃代理服務(wù)合同模板4篇
- 2024物業(yè)項(xiàng)目策劃2024委托代理合同
- 2025年度醫(yī)療器械代生產(chǎn)加工合同范本4篇
- 2025年度特殊用途車牌租賃與押金管理協(xié)議4篇
- 2025年度展會(huì)現(xiàn)場(chǎng)安保及應(yīng)急預(yù)案服務(wù)合同3篇
- 2024鐵路鋼軌鋪設(shè)及維護(hù)工程協(xié)議細(xì)則
- 勞動(dòng)合同續(xù)簽意見(jiàn)單
- 大學(xué)生國(guó)家安全教育意義
- 2024年保育員(初級(jí))培訓(xùn)計(jì)劃和教學(xué)大綱-(目錄版)
- 河北省石家莊市2023-2024學(xué)年高二上學(xué)期期末考試 語(yǔ)文 Word版含答案
- 企業(yè)正確認(rèn)識(shí)和運(yùn)用矩陣式管理
- 分布式光伏高處作業(yè)專項(xiàng)施工方案
- 陳閱增普通生物學(xué)全部課件
- 檢驗(yàn)科主任就職演講稿范文
- 人防工程主體監(jiān)理質(zhì)量評(píng)估報(bào)告
- 20225GRedCap通信技術(shù)白皮書(shū)
- 燃?xì)庥邢薰究蛻舴?wù)規(guī)范制度
評(píng)論
0/150
提交評(píng)論