![東南大學(xué)統(tǒng)計(jì)信號(hào)處理實(shí)驗(yàn)一_第1頁(yè)](http://file4.renrendoc.com/view/d4c2b8df227970216c084d4230fb68d0/d4c2b8df227970216c084d4230fb68d01.gif)
![東南大學(xué)統(tǒng)計(jì)信號(hào)處理實(shí)驗(yàn)一_第2頁(yè)](http://file4.renrendoc.com/view/d4c2b8df227970216c084d4230fb68d0/d4c2b8df227970216c084d4230fb68d02.gif)
![東南大學(xué)統(tǒng)計(jì)信號(hào)處理實(shí)驗(yàn)一_第3頁(yè)](http://file4.renrendoc.com/view/d4c2b8df227970216c084d4230fb68d0/d4c2b8df227970216c084d4230fb68d03.gif)
![東南大學(xué)統(tǒng)計(jì)信號(hào)處理實(shí)驗(yàn)一_第4頁(yè)](http://file4.renrendoc.com/view/d4c2b8df227970216c084d4230fb68d0/d4c2b8df227970216c084d4230fb68d04.gif)
![東南大學(xué)統(tǒng)計(jì)信號(hào)處理實(shí)驗(yàn)一_第5頁(yè)](http://file4.renrendoc.com/view/d4c2b8df227970216c084d4230fb68d0/d4c2b8df227970216c084d4230fb68d05.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、統(tǒng)計(jì)信號(hào)處理實(shí)驗(yàn)一一、實(shí)驗(yàn)?zāi)康模?、掌握噪聲中信號(hào)檢測(cè)的方法;2、熟悉Matlab的使用;3、掌握用計(jì)算機(jī)進(jìn)行數(shù)據(jù)分析的方法。二、實(shí)驗(yàn)內(nèi)容:假設(shè)信號(hào)為波形如下圖所示:在有信號(hào)到達(dá)時(shí)接收到的信號(hào)為,在沒(méi)有信號(hào)到達(dá)時(shí)接收到的信號(hào)為。其中是均值為零、方差為(可自行調(diào)整)的高斯白噪聲。假設(shè)有信號(hào)到達(dá)的概率P(H1)=0.6,沒(méi)有信號(hào)到達(dá)的概率P(H0)=0.4。對(duì)接受到的信號(hào)分別在t = 0ms, 1ms, , 301ms上進(jìn)行取樣,得到觀測(cè)序列。1、利用似然比檢測(cè)方法(最小錯(cuò)誤概率準(zhǔn)則),對(duì)信號(hào)是否到達(dá)進(jìn)行檢測(cè);2、假設(shè),。利用基于Bayes準(zhǔn)則的檢測(cè)方法,對(duì)信號(hào)是否到達(dá)進(jìn)行檢測(cè);3、通過(guò)計(jì)算機(jī)產(chǎn)生
2、的仿真數(shù)據(jù),對(duì)兩種方法的檢測(cè)概率、虛警概率、漏警概率和Bayes風(fēng)險(xiǎn)進(jìn)行仿真計(jì)算;4、通過(guò)改變P(H1)和P(H0)來(lái)改變判決的門限(風(fēng)險(xiǎn)系數(shù)和不變),觀察檢測(cè)方法的、和Bayes風(fēng)險(xiǎn)的變化;5、改變?cè)肼暤姆讲?,觀察檢測(cè)方法的、和Bayes風(fēng)險(xiǎn)的變化;6、將信號(hào)取樣間隔減小一倍(相應(yīng)的取樣點(diǎn)數(shù)增加一倍),觀察似然比檢測(cè)方法的、和Bayes風(fēng)險(xiǎn)的變化;7、根據(jù)設(shè)計(jì)一個(gè)離散匹配濾波器,并觀察經(jīng)過(guò)該濾波器以后的輸出。三、實(shí)驗(yàn)要求:1、設(shè)計(jì)仿真計(jì)算的Matlab程序,給出軟件清單;2、完成實(shí)驗(yàn)報(bào)告,對(duì)實(shí)驗(yàn)過(guò)程進(jìn)行描述,并給出實(shí)驗(yàn)結(jié)果,對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行分析,給出結(jié)論。四、設(shè)計(jì)過(guò)程:1、產(chǎn)生信號(hào)s(t),n
3、(t),x(t),t = 0ms, 1ms, , 301ms;其中:2、根據(jù)定義似然比函數(shù),門限,如果,則判定;否則,判定。這就是似然比檢測(cè)準(zhǔn)則。假設(shè)似然比為x,在某取樣率的條件下,假設(shè)得到的隨機(jī)變量分布為x1,x2,xN。 則沒(méi)有信號(hào)時(shí)的概率密度函數(shù)為:有信號(hào)時(shí)的概率密度函數(shù)為:由此可以得到似然比函數(shù)為:相應(yīng)的似然比判決準(zhǔn)則為:時(shí)判定;否則,判定?;颍簳r(shí)判定;否則,判定。其中,是判決門限,本題中=。Bayes判決準(zhǔn)則如下,風(fēng)險(xiǎn)函數(shù)是各個(gè)概率的線形組合:很多情況下,可以令,即正確判斷是不具有風(fēng)險(xiǎn)的,此時(shí)判決公式為:如果,判為;否則,判為。本題中,故判決門限為。做M=100000次統(tǒng)計(jì),在有信號(hào)
4、到達(dá)的情況下,即,每次出現(xiàn)signal is detected時(shí),檢測(cè)到信號(hào)的次數(shù)n0加1,出現(xiàn)no signal時(shí),沒(méi)有檢測(cè)到信號(hào)的次數(shù)n1加1;在沒(méi)有信號(hào)到達(dá)的情況下,即,每次出現(xiàn)signal is detected時(shí),檢測(cè)到信號(hào)的次數(shù)n2加1,出現(xiàn)no signal時(shí),沒(méi)有檢測(cè)到信號(hào)的次數(shù)n3加1。則:檢測(cè)概率=n0/M;虛警概率=n2/M;漏警概率=n1/M;Bayes風(fēng)險(xiǎn) =5、用相同的方法,通過(guò)改變判決的門限,觀察檢測(cè)方法的、和Bayes風(fēng)險(xiǎn)的變化。 6、用相同的方法,通過(guò)改變?cè)肼暤姆讲?,觀察檢測(cè)方法的、和Bayes風(fēng)險(xiǎn)的變化。7、設(shè)計(jì)匹配濾波器h(t)=c*s(T-t),通過(guò)使待
5、檢測(cè)信號(hào)x(t)經(jīng)過(guò)匹配濾波器,即和h(t)進(jìn)行卷積,得到濾波以后的輸出X(t)。 五、實(shí)驗(yàn)結(jié)果及分析:1、利用似然比檢測(cè)方法(最小錯(cuò)誤概率準(zhǔn)則),對(duì)信號(hào)是否到達(dá)進(jìn)行檢測(cè)。實(shí)驗(yàn)得到的波形如下:對(duì)302個(gè)抽樣點(diǎn)進(jìn)行了五次檢測(cè),得到結(jié)果如下:檢測(cè)到信號(hào)的次數(shù)C平均值275257276272267270分析:可能由于高斯白噪聲的影響較大,故有些信號(hào)沒(méi)有被檢測(cè)出來(lái)。假設(shè),。利用基于Bayes準(zhǔn)則的檢測(cè)方法,對(duì)信號(hào)是否到達(dá)進(jìn)行檢測(cè)。同樣地,對(duì)302個(gè)抽樣點(diǎn)進(jìn)行了五次檢測(cè),得到結(jié)果如下:檢測(cè)到信號(hào)的次數(shù)C平均值253236244236243242分析:比較可得,在本題設(shè)定的風(fēng)險(xiǎn)系數(shù)下,基于Bayes準(zhǔn)則的
6、檢測(cè)方法沒(méi)有似然比檢測(cè)方法可靠。通過(guò)計(jì)算機(jī)產(chǎn)生的仿真數(shù)據(jù),對(duì)兩種方法的檢測(cè)概率、虛警概率、漏警概率和Bayes風(fēng)險(xiǎn)進(jìn)行仿真計(jì)算。采用似然比檢測(cè)方法得到的仿真結(jié)果如下: pd=0.8855,pf=0.2140,pm=0.1145,r=0.5424。利用基于Bayes準(zhǔn)則的檢測(cè)方法得到的仿真結(jié)果如下: Pd=0.8032,Pf=0.1264,Pm=0.1968,r=0.4496。比較可得: 采用似然比檢測(cè)方法得到的檢測(cè)概率較大,漏警概率較??;基于Bayes準(zhǔn)則的檢測(cè)方法得到的虛警概率較小,風(fēng)險(xiǎn)系數(shù)較小。4、通過(guò)改變P(H1)和P(H0)來(lái)改變判決的門限(風(fēng)險(xiǎn)系數(shù)和不變),觀察檢測(cè)方法的、和Baye
7、s風(fēng)險(xiǎn)的變化。(1)似然比檢測(cè)方法Bayes風(fēng)險(xiǎn)0.88550.21400.11450.54240.84250.15810.15760.47380.78990.11620.21010.44240.45950.01760.54050.5758 由表格可以看出當(dāng)門限升高時(shí)檢測(cè)概率降低,虛警概率降低,漏警概率升高,bayes風(fēng)險(xiǎn)值變化不大。沒(méi)有信號(hào)到達(dá)的概率越高,檢測(cè)概率和虛警概率就越低,漏警概率越高,實(shí)際值符合理論分析。(2)基于Bayes準(zhǔn)則的檢測(cè)方法Bayes風(fēng)險(xiǎn)0.80320.12640.19680.44960.74640.08860.25360.43090.67480.06100.3252
8、0.44720.32840.00710.67160.6858 由表格可以看出當(dāng)門限升高時(shí)檢測(cè)概率降低,虛警概率降低,漏警概率升高。沒(méi)有信號(hào)到達(dá)的概率越高,檢測(cè)概率和虛警概率就越低,漏警概率越高,實(shí)際值符合理論分析。由于虛警概率降低,并且相乘得出風(fēng)險(xiǎn)時(shí)前面系數(shù)較大,所以風(fēng)險(xiǎn)先降低,后來(lái)由于漏警概率的升高已經(jīng)大過(guò)于虛警概率對(duì)風(fēng)險(xiǎn)的影響,所以后來(lái)風(fēng)險(xiǎn)又升高。5、改變?cè)肼暤姆讲?,觀察檢測(cè)方法的、和Bayes風(fēng)險(xiǎn)的變化。(1)似然比檢測(cè)方法Bayes風(fēng)險(xiǎn)90.95400.05990.03600.1559250.88550.21400.11450.5424360.85820.27850.14180.698
9、8490.83930.33310.16070.8268(2)基于Bayes準(zhǔn)則的檢測(cè)方法Bayes風(fēng)險(xiǎn)90.94320.03010.05680.1170250.80320.12640.19680.4496360.74480.10570.25520.4666490.69490.11380.30510.5327 由表格可以看出當(dāng)噪聲方差增大時(shí),兩種檢測(cè)方法得到的檢測(cè)概率均降低,虛警概率均升高,漏警概率均升高,風(fēng)險(xiǎn)值均增大。這是因?yàn)樵肼暦讲钤酱?,?duì)信號(hào)的干擾越大,檢測(cè)信號(hào)越困難,即兩種方法的可靠性越差。將信號(hào)取樣間隔減小一倍(相應(yīng)的取樣點(diǎn)數(shù)增加一倍),觀察似然比檢測(cè)方法的、和Bayes風(fēng)險(xiǎn)的變化。之
10、前的結(jié)果:pd=0.8855,pf=0.2140,pm=0.1145,r=0.5424取樣點(diǎn)數(shù)增加一倍后的結(jié)果為:pd=0.9397,pf=0.1007,pm=0.0603,r=0.2617比較可得,取樣點(diǎn)數(shù)增加一倍后,檢測(cè)可信度大為提高。7、根據(jù)設(shè)計(jì)一個(gè)離散匹配濾波器,并觀察經(jīng)過(guò)該濾波器以后的輸出。設(shè)計(jì)的濾波器波形如下:有信號(hào)和無(wú)信號(hào)狀態(tài)下的x(t)經(jīng)過(guò)濾波器后的輸出分別如下:分析:當(dāng)t=300時(shí),有信號(hào)時(shí)的輸出值達(dá)到最大,無(wú)信號(hào)時(shí)的輸出值為0,這說(shuō)明匹配濾波器對(duì)有用信號(hào)分量有放大作用,對(duì)干擾信號(hào)有抑制作用,有利于信號(hào)的檢測(cè)。源程序:%1%產(chǎn)生信號(hào)s(t),n(t),x(t)t=0:29;s
11、1=t/30;t=30:89;s2=-t/30+2;t=90:139;s3=t/25-4.6;t=140:189;s4=-t/25+6.6;t=190:229;s5=t/20-10.5;t=230:269;s6=-t/20+12.5;t=270:289;s7=t/10-28;t=290:301;s8=-t/10+30;s=s1 s2 s3 s4 s5 s6 s7 s8;p0=0.4;p1=0.6;for t=1:302 n=5.*randn(1,302); x=s+n;figure(1);subplot(3,1,1);grid;plot(s);axis(0,301,-1,1);xlabel(t
12、/ms);ylabel(s(t);subplot(3,1,2);grid;plot(n);axis(0,301,-20,20);xlabel(t/ms);ylabel(n(t);subplot(3,1,3);grid;plot(x);axis(0,301,-20,20);xlabel(t/ms);ylabel(x(t);%利用似然比檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)x1=x.*s;x2=s.*s;if sum(x1)25*log(p0/p1)+0.5*sum(x2) count(t)=1; signal is detectedelse count(t)=0; no signalend;end;C=sum
13、(count);C%2%產(chǎn)生信號(hào)s(t),n(t),x(t)t=0:29;s1=t/30;t=30:89;s2=-t/30+2;t=90:139;s3=t/25-4.6;t=140:189;s4=-t/25+6.6;t=190:229;s5=t/20-10.5;t=230:269;s6=-t/20+12.5;t=270:289;s7=t/10-28;t=290:301;s8=-t/10+30;s=s1 s2 s3 s4 s5 s6 s7 s8;p0=0.4;p1=0.6;for t=1:302 n=5.*randn(1,302); x=s+n;figure(1);subplot(3,1,1);
14、grid;plot(s);axis(0,301,-1,1);xlabel(t/ms);ylabel(s(t);subplot(3,1,2);grid;plot(n);axis(0,301,-20,20);xlabel(t/ms);ylabel(n(t);subplot(3,1,3);grid;plot(x);axis(0,301,-20,20);xlabel(t/ms);ylabel(x(t);%利用基于Bayes準(zhǔn)則的檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)x1=x.*s;x2=s.*s;if sum(x1)25*log(4/3)+0.5*sum(x2) count(t)=1; signal is dete
15、ctedelse count(t)=0; no signalend;end;C=sum(count);C%3%4%5p0=0.4;p1=0.6; /修改p0、p1以實(shí)現(xiàn)第四問(wèn)c10=2;c01=1;n0=0;n1=0;n2=0;n3=0;M=100000;for i=1:100001 t=0:29; s1=t/30; t=30:89; s2=-t/30+2; t=90:139; s3=t/25-4.6; t=140:189; s4=-t/25+6.6; t=190:229; s5=t/20-10.5; t=230:269; s6=-t/20+12.5; t=270:289; s7=t/10-2
16、8; t=290:301; s8=-t/10+30; s=s1 s2 s3 s4 s5 s6 s7 s8; n=5.*randn(1,302); /修改系數(shù)以實(shí)現(xiàn)第五問(wèn) x=s+n;%有信號(hào)到達(dá),利用似然比檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)x1=x.*s;x2=s.*s;if sum(x1)25*log(p0/p1)+0.5*sum(x2) /修改系數(shù)以實(shí)現(xiàn)第五問(wèn) n0=n0+1; signal is detectedelse n1=n1+1; no signalend;end;for i=1:100001 n=5.*randn(1,302); x=n;%沒(méi)有信號(hào)到達(dá),利用似然比檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)
17、x1=x.*s;x2=s.*s;if sum(x1)25*log(p0/p1)+0.5*sum(x2) n2=n2+1; signal is detectedelse n3=n3+1; no signalend;end;pd1=n0/M;pf1=n2/M;pm1=n1/M;r1=c01*pm1+c10*pf1;pd1pf1pm1r1for i=1:100001 t=0:29; s1=t/30; t=30:89; s2=-t/30+2; t=90:139; s3=t/25-4.6; t=140:189; s4=-t/25+6.6; t=190:229; s5=t/20-10.5; t=230:2
18、69; s6=-t/20+12.5; t=270:289; s7=t/10-28; t=290:301; s8=-t/10+30; s=s1 s2 s3 s4 s5 s6 s7 s8; n=5.*randn(1,302); %修改系數(shù)以實(shí)現(xiàn)第五問(wèn) x=s+n;%有信號(hào)到達(dá),利用基于Bayes準(zhǔn)則的檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)x1=x.*s;x2=s.*s;if sum(x1)25*log(4/3)+0.5*sum(x2) %修改系數(shù)以實(shí)現(xiàn)第五問(wèn) n0=n0+1; signal is detectedelse n1=n1+1; no signalend;end;for i=1:100001 n=5.
19、*randn(1,302); %修改系數(shù)以實(shí)現(xiàn)第五問(wèn) x=n;%沒(méi)有信號(hào)到達(dá),利用基于Bayes準(zhǔn)則的檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)x1=x.*s;x2=s.*s;if sum(x1)25*log(4/3)+0.5*sum(x2) %修改系數(shù)以實(shí)現(xiàn)第五問(wèn) n2=n2+1; signal is detectedelse n3=n3+1; no signalend;end;pd2=n0/M;pf2=n2/M;pm2=n1/M;r2=c01*pm2+c10*pf2;pd2pf2pm2r2%6%產(chǎn)生信號(hào)s(t),n(t),x(t)t=0:0.5:29.5;s1=t/30;t=30:0.5:89.5;s2=-
20、t/30+2;t=90:0.5:139.5;s3=t/25-4.6;t=140:0.5:189.5;s4=-t/25+6.6;t=190:0.5:229.5;s5=t/20-10.5;t=230:0.5:269.5;s6=-t/20+12.5;t=270:0.5:289.5;s7=t/10-28;t=290:0.5:301;s8=-t/10+30;s=s1 s2 s3 s4 s5 s6 s7 s8;p0=0.4;p1=0.6;for t=1:302*2 n=5.*randn(1,302*2); x=s+n;figure(1);subplot(3,1,1);grid;plot(s);axis(0
21、,301,-1,1);xlabel(t/ms);ylabel(s(t);subplot(3,1,2);grid;plot(n);axis(0,301,-20,20);xlabel(t/ms);ylabel(n(t);subplot(3,1,3);grid;plot(x);axis(0,301,-20,20);xlabel(t/ms);ylabel(x(t);%有信號(hào)到達(dá),利用似然比檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)x1=x.*s;x2=s.*s;if sum(x1)25*log(p0/p1)+0.5*sum(x2) n0=n0+1; signal is detectedelse n1=n1+1; no
22、signalend;end;for i=1:100001 n=5.*randn(1,302); x=n;%沒(méi)有信號(hào)到達(dá),利用似然比檢測(cè)方法檢測(cè)信號(hào)是否到達(dá)x1=x.*s;x2=s.*s;if sum(x1)25*log(p0/p1)+0.5*sum(x2) n2=n2+1; signal is detectedelse n3=n3+1; no signalend;end;pd1=n0/M;pf1=n2/M;pm1=n1/M;r1=c01*pm1+c10*pf1;pd1pf1pm1r1%7t=0:29;s1=t/30;t=30:89;s2=-t/30+2;t=90:139;s3=t/25-4.6
23、;t=140:189;s4=-t/25+6.6;t=190:229;s5=t/20-10.5;t=230:269;s6=-t/20+12.5;t=270:289;s7=t/10-28;t=290:301;s8=-t/10+30;s=s1 s2 s3 s4 s5 s6 s7 s8;for i=1:301 h(i)=s(302-i);endn=5.*randn(1,302);x1=s+n;x2=n;figure(1);subplot(2,1,1);plot(s);grid;axis(0,301,-1,1);xlabel(t/ms);ylabel(s(t);subplot(2,1,2);plot(h
24、);grid;axis(0,301,-1,1);xlabel(t/ms);ylabel(匹配濾波器h(t);X1=conv(h,x1);X2=conv(h,x2);figure(2);subplot(2,1,1);plot(x1);grid;axis(0,301,-20,20);xlabel(t/ms);ylabel(x(t);title(有信號(hào))subplot(2,1,2);plot(X1);grid;axis(0,650,-150,150);xlabel(t/ms);ylabel(輸出信號(hào));figure(3);subplot(2,1,1);plot(x2);grid;axis(0,301
25、,-20,20);xlabel(t/ms);ylabel(x(t);title(無(wú)信號(hào))subplot(2,1,2);plot(X2);grid;axis(0,650,-150,150);xlabel(t/ms);ylabel(輸出信號(hào));附錄資料:不需要的可以自行刪除Pascal/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;
26、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ù)以前的是頭文件,樣例中C為stdio.h,C+除了iostream還有第二行的using namespace std,這個(gè)是打開(kāi)命名空間的,NOIP不會(huì)考這個(gè),可以不管,只要知道就行了。 此外說(shuō)明 注釋單行用/,段落的話Pascal為,C/C+為/* */。* 常用頭文件(模板)#include #include
27、#include #include #include #include using namespace std;int main() system(“pause”);return 0;二、數(shù)據(jù)類型及定義 這里只列出常用的類型。1、整型PascalC/C+范圍shortint-128 127integershort-32768 32767longintInt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordu
28、nsigned int0 4294967295qwordunsigned long long0 18446744073709551615 * 當(dāng)對(duì)long long 變量賦值時(shí),后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Linux: 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ǔ)言中
29、都為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,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 in
30、t a = 60;const int b = - a + 30;const string d = “”;define MAXN 501 /這個(gè)是宏 * 宏定義其實(shí)就是直接在程序相應(yīng)的位置替換: #define randomize srand(unsigned time(NULL) #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)
31、 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; /作用臨時(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;輸出
32、: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è)double型實(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(in
33、put);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, 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()
34、;因?yàn)镃+的讀入較慢,個(gè)人建議C+的話使用C的輸入方式。當(dāng)然也有人用C的讀入,C+的輸出的,這種方式我們稱之為城鄉(xiāng)結(jié)合。*中國(guó)計(jì)算機(jī)學(xué)會(huì)競(jìng)賽須知發(fā)布的C讀寫程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b; 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
35、”,”w”,stdout);ios:sync_with_stdio(false); 取消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下擴(kuò)充c/c+混用是可行的:#include #include using namespace std;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,&
36、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)算左移(*2)shl且and&或or|非not異或xor其他增一inc(x)x+減一dec(x)x- 在C/C+中對(duì)某個(gè)變量自身進(jìn)行運(yùn)算可以簡(jiǎn)寫為 變量名 運(yùn)算符號(hào)= 改變量 如 x += 8 就表示 x = x + 8, 即 inc(x, 8)。 在 C/C+里還存在一種三目運(yùn)算 變量名 = 條件 ? 值A(chǔ) : 值B
37、如 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 flag := 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 *
38、x;end;switch (x) case 1: x +; break; case 2: x -; break; default: x *= x; 切記C/C+中一定要寫break,后果你可以去掉break,運(yùn)行看看就知道了。六、循環(huán)語(yǔ)句1、forPascalC/C+for 變量名 := 初始值 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-
39、;/*只要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(“%d”, p - k);2、whilePascalC/C+while 條件 dowhile (條件)while i 0 do dec(i);while (i != 0) i-;/也可寫作 while (i) i-;/在C/C+中非0即為真。3、repeat-until & do-whilePascalC/C+r
40、epeat 語(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+定義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ù)組,合
41、法下標(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, 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: me
42、mset(a,-1,sizeof(a)八、字符串 C風(fēng)格的字符串就是字符數(shù)組。 C+和Pascal的字符串使用基本相同,只是C+中字符串下標(biāo)以0開(kāi)始,Pascal以1開(kāi)始。字符串處理很多這里不一一列舉,只寫最常用的幾個(gè)。PascalC (包含)定義用:char sC+(包含)定義用:string s輸入輸出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能輸入輸出c+的字符串Cins;Couts = s 的區(qū)別: getline(cin,s)cins一次性整行讀入,直至行末尾。只讀入一個(gè)“單詞”,遇空格和行末停止。例如輸入;How a
43、re you?s=” How are you?”讀入整串含空格例如輸入;How are you?s=”How”如果三個(gè)都讀:cins1s2s3*C+ 數(shù)字與數(shù)值之間的轉(zhuǎn)換:#include #include #include /必須加入using namespace std;int 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+
44、中沒(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ò)程名(形參表)過(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
45、 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) HYPERLINK 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)
46、調(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=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 Bo
47、ol 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ì)列(以堆排為例)#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()
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶山中學(xué)九年級(jí)數(shù)學(xué)試卷
- 部編八下歷史第五單元國(guó)防建設(shè)與外交成就第17課《外交事業(yè)的發(fā)展》聽(tīng)課評(píng)課記錄
- 湘教版數(shù)學(xué)九年級(jí)下冊(cè)《2.5.2圓切線》聽(tīng)評(píng)課記錄4
- 湘教版數(shù)學(xué)九年級(jí)上冊(cè)第二章《一元二次方程》復(fù)習(xí)聽(tīng)評(píng)課記錄
- 2025年度裝配式建筑預(yù)制構(gòu)件生產(chǎn)與安裝合同
- 五年級(jí)上冊(cè)數(shù)學(xué)聽(tīng)評(píng)課記錄《植樹(shù)問(wèn)題》人教版
- 2025年度供水供電設(shè)備租賃與維護(hù)合同范本
- 課題研究聽(tīng)評(píng)課記錄表
- 蘇科版數(shù)學(xué)七年級(jí)上冊(cè)4.2.4《解一元一次方程》聽(tīng)評(píng)課記錄
- 2025年度綠色節(jié)能型凱悅酒店智能消防系統(tǒng)升級(jí)改造合同
- 水土保持方案中沉沙池的布設(shè)技術(shù)
- 安全生產(chǎn)技術(shù)規(guī)范 第25部分:城鎮(zhèn)天然氣經(jīng)營(yíng)企業(yè)DB50-T 867.25-2021
- 現(xiàn)代企業(yè)管理 (全套完整課件)
- 走進(jìn)本土項(xiàng)目化設(shè)計(jì)-讀《PBL項(xiàng)目化學(xué)習(xí)設(shè)計(jì)》有感
- 高中語(yǔ)文日積月累23
- 彈簧分離問(wèn)題經(jīng)典題目
- 金屬材料與熱處理全套ppt課件完整版教程
- 《網(wǎng)店運(yùn)營(yíng)與管理》整本書(shū)電子教案全套教學(xué)教案
- 教師信息技術(shù)能力提升培訓(xùn)課件希沃的課件
- 高端公寓住宅項(xiàng)目營(yíng)銷策劃方案(項(xiàng)目定位 發(fā)展建議)
- 執(zhí)業(yè)獸醫(yī)師聘用協(xié)議(合同)書(shū)
評(píng)論
0/150
提交評(píng)論