版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課 程 設(shè) 計(jì) 說 明 書學(xué)生姓名:學(xué) 號:學(xué) 院:班 級:題 目:頻帶最佳接收系統(tǒng)的仿真實(shí)現(xiàn)并比較其性能指導(dǎo)教師: 一 設(shè)計(jì)題目頻帶最佳接收系統(tǒng)的仿真實(shí)現(xiàn)并比較其性能二 設(shè)計(jì)任務(wù)及要求利用所學(xué)數(shù)字通信原理的基礎(chǔ)知識,通過matlab實(shí)現(xiàn)頻帶最佳接收系統(tǒng)的仿真,并通過對2ASK ,2PSK,2FSK不同接收方式進(jìn)行仿真得出實(shí)際接收機(jī)與最佳接收機(jī)誤碼率性能的比較。三 分析信道的特性和傳輸過程中引入的噪聲干擾是影響通信系統(tǒng)性能的兩個(gè)主要因素。在發(fā)送端,考慮的是如何設(shè)計(jì)信號;在接收端,考慮的是如何從噪聲干擾中正確地接收信號,即最佳接收。在數(shù)字通信系統(tǒng)中,更關(guān)心的是錯(cuò)誤概率,因?yàn)殄e(cuò)誤概率是衡量數(shù)字通信
2、傳輸質(zhì)量的主要指標(biāo)。信號的檢測概率與信噪比有直接的關(guān)系,信噪比越大,正確檢測的概率也就越大,錯(cuò)誤概率越小;反之,信噪比越小,正確檢測的概率就越小,錯(cuò)誤概率也就越大。確知信號的最佳接收所謂確知信號是指其取值在任何時(shí)間都是確定的,可以預(yù)知的。實(shí)際中在恒參信道(恒參信道是指其傳輸特性的變化量基本不變)中接收到的數(shù)字信號可以認(rèn)為是確知信號。S2(t)U1U2S1(t)y(t)積分器積分器比較判決器二進(jìn)制確知信號最佳接收機(jī)原理圖二進(jìn)制確知數(shù)字信號最佳接收機(jī)的總誤碼率為 Pe=P(s1)P(s2/s1)+P(s2)P(s1/s2)經(jīng)推導(dǎo)計(jì)算可得: 式中:為互相關(guān)函數(shù),n0為噪聲功率譜密度;Eb為信號的能量
3、;erfc(x)為誤差函數(shù)。(1)當(dāng)互相關(guān)函數(shù)=-1時(shí),即相關(guān)系數(shù)最小,誤碼率Pe最小,此時(shí)發(fā)送的二進(jìn)制信號s1(t)和s2(t)的波形為最佳波形,其誤碼率為 Pe=(2)當(dāng)互相關(guān)函數(shù)=0時(shí),即s1(t)和s2(t)正交,其誤碼率為Pe= (3)當(dāng)發(fā)送信號s1(t)和s2(t)中有一個(gè)能量為0,此時(shí)的誤碼率為Pe= 比較式(1)、(2)、(3),它們之間的性能相差3dB,即2ASK信號的性能比2FSK信號的性能差3dB,而2FSK信號的性能又比2PSK信號的性能差3dB。由于2PSK信號能使互相關(guān)函數(shù)=-1,因此2PSK信號是最佳信號波形;2FSK和2ASK信號的互相關(guān)系數(shù)=0,因此2PSK系
4、統(tǒng)的性能優(yōu)于2FSK和2ASK系統(tǒng);2FSK信號是等能量信號,而2ASK信號是不等能量信號,因此2FSK系統(tǒng)的性能優(yōu)于2ASK。二進(jìn)制隨相數(shù)字信號最佳接收機(jī)的誤碼率Pe= exp(-)由于隨機(jī)信號的相位具有隨機(jī)性,因此二進(jìn)制隨相數(shù)字信號最佳接收機(jī)是一種非相干接收機(jī)。實(shí)際接收機(jī)與最佳接收機(jī)誤碼率性能功能的比較接收方式 實(shí)際接收機(jī)誤碼率Pe 最佳接收機(jī)誤碼率Pe 相干2PSK 相干2FSK 非相干2FSK exp(-) exp(-)相干2ASK 非相干ASK exp(-) exp(-)各模塊的仿真實(shí)現(xiàn)一、2ASK2ASK信號的解調(diào)分為相干解調(diào)和非相干解調(diào)兩種,如圖所示。相干解調(diào)需要將載頻位置的已調(diào)
5、信號頻譜重新搬回原始基帶位置,因此用相乘器與載波相乘來實(shí)現(xiàn)。輸入 輸出 帶通濾波器半波或全波整流器低通濾波器抽樣判決器 (a)非相干解調(diào)輸入 輸出 帶通濾波器相乘器低通濾波器抽樣判決器 Coswct (b)相干解調(diào)仿真程序rs=1e3; %時(shí)間軸頻率步進(jìn)fc=1e2; %載波頻率100HZtzd=1e2;t=0:1/rs:(tzd-1/rs); %碼元周期0.1s,即碼元速率10for snrb=0:1:10 %不同信噪比 ratio=0; %初始誤碼數(shù)設(shè)為0,累計(jì)十次得到總誤碼數(shù) for k=1:10 %十次循環(huán)產(chǎn)生10000碼元n=1e3; %1次產(chǎn)生碼元數(shù)g=randint(1,n);
6、%產(chǎn)生1000個(gè)碼元tz=g(ceil(10*t+(1/rs).*cos(2*pi*fc*t); %得到已調(diào)信號tz,100個(gè)點(diǎn)表示1個(gè)碼元 signal=awgn(tz,snrb); %信號通過白噪聲信道Fs=1e3; %采樣頻率 b,a=butter(2,80,120*2/Fs); %設(shè)計(jì)巴特沃斯帶通濾波器,2階,系數(shù)為a,bsg1=filter(b,a,signal); %信號通過該BPFsg2=abs(sg1); %信號通過全波整流器Fs=1e3; %采樣頻率 b,a=butter(2,10*2/Fs) %設(shè)計(jì)巴特沃斯低通濾波器 sg3=filter(b,a,sg2); %信號通過該L
7、PFb=0.4; %判決門限LL=tzd/2;for i=1:n if sg3(i-1)*tzd+LL)0.4; %取sg2的中間的點(diǎn)作為判決點(diǎn) sg4(i)=1; else sg4(i)=0; endend %得到判決信號 numbers,pe =symerr(g,sg4); %利用函數(shù)得到誤碼率和誤碼數(shù)ratio=ratio+numbers;endr1=ratio/(n*10); %誤碼數(shù)除以總點(diǎn)數(shù)為誤碼率pel(1,snrb+1)=r1; %11個(gè)信噪比對應(yīng)的11個(gè)誤碼率存入數(shù)組pelendfigure; %畫圖x=0:1:10;x1=10.(x+7)./10); %分貝值轉(zhuǎn)化為真值y=
8、0.5*(erfc(sqrt(x1/4); %2ASK信號非相關(guān)解調(diào)理論誤碼率計(jì)算semilogy(x,pel,-r,x,y,-b);legend(simulation,theoritical case);xlabel(信噪比)ylabel(誤碼率);grid on;title(2ASK信號非相干解調(diào)時(shí)信噪比與誤碼率的關(guān)系);rs=1e3;%時(shí)間軸頻率步進(jìn)fc=1e2;%載波頻率100HZtzd=1e2;%1個(gè)碼元用100個(gè)點(diǎn)模擬t=0:1/rs:(tzd-1/rs);for snrb=0:1:10 %不同信噪比 ratio=0;%初始誤碼數(shù)設(shè)為0,累計(jì)十次得到總誤碼數(shù) for k=1:10
9、%十次循環(huán)產(chǎn)生10000碼元n=1e3;%一次產(chǎn)生碼元數(shù)g=randint(1,n);%產(chǎn)生1000個(gè)碼元tz=g(ceil(10*t+(1/rs).*cos(2*pi*fc*t);%得到調(diào)制信號tz,100個(gè)點(diǎn)表示1個(gè)碼元 signal=awgn(tz,snrb);%信號通過白噪聲信道Fs=1e3;%采樣頻率 b,a=butter(2,80,120*2/Fs);%設(shè)計(jì)巴特沃斯帶通濾波器,2階,系數(shù)為a,bsg1=filter(b,a,signal);%信號通過該BPFsg2=2*sg1.*cos(2*pi*fc*t);%信號通過相乘器Fs=1e3;%采樣頻率 b,a=butter(2,10*
10、2/Fs)%設(shè)計(jì)巴特沃斯低通濾波器 sg3=filter(b,a,sg2);%信號通過該LPFb=0.4;%判決門限LL=tzd/2;for i=1:n if sg3(i-1)*tzd+LL)b;%取sg2的中間的點(diǎn)作為判決點(diǎn) sg4(i)=1; else sg4(i)=0; endend%得到判決后信號sg4numbers,pe =symerr(g,sg4);%利用函數(shù)得到誤碼率和誤碼數(shù)ratio=ratio+numbers;endr1=ratio/(n*10);%誤碼數(shù)除以總點(diǎn)數(shù)為誤碼率pel(1,snrb+1)=r1;%11個(gè)信噪比對應(yīng)的11個(gè)誤碼率存入數(shù)組pelendfigure;%畫
11、圖x=0:1:10;x1=10.(x+7)./10);%分貝值轉(zhuǎn)化為真值y=0.5*(erfc(sqrt(x1/4);%2ASK信號相干解調(diào)理論誤碼率計(jì)算semilogy(x,pel,-r,x,y,-b);legend(simulation,theoritical case);xlabel(信噪比)ylabel(誤碼率);grid on;title(2ASK信號相干解調(diào)時(shí)信噪比與誤碼率的關(guān)系);仿真結(jié)果:2ASK非相干解調(diào)誤碼率統(tǒng)計(jì)2ASK相干解調(diào)誤碼率統(tǒng)計(jì)二、2PSK2PSK信號的解調(diào)通常采用相干解調(diào),如圖所示輸出輸入 低通濾波器帶通濾波器相乘器抽樣判決器本地載波恢復(fù)位定時(shí)恢復(fù)2PSK信號的
12、相干解調(diào)仿真程序clear;close all;Fd=10; %消息序列的采樣頻率Fs=3*Fd; %已調(diào)信號的采樣頻率M=2;SNR_db=0:12; %仿真信噪比范圍SNR1_db=0:0.1:12; %理論信噪比范圍%誤碼情況仿真for n=1:length(SNR_db) Eb_N0=10(SNR_db(n)/10); sgma=sqrt(1/(2*Eb_N0); %nc,ns的均方差 x=randint(10000,1,M); %產(chǎn)生隨機(jī)消息序列 y=dmodce(x,Fd,Fs,psk,M); %PSK調(diào)制ynoise=y+sqrt(Fs/Fd)*sgma*(randn(lengt
13、h(y),1)+j*randn(length(y),1); %加噪 z=ddemodce(ynoise,Fd,Fs,psk,M); %解調(diào) numbers,pm(n)=symerr(x,z); %計(jì)算誤符號率end;for m=1:length(SNR1_db) Eb_N0=10(SNR1_db(m)/10); pm_theory(m)=Qfunct(sqrt(2*Eb_N0); %理論誤符號率 0.5erfc(x/sqrt(2) pe_theory(m)=pm_theory(m)/log2(M); endsemilogy(SNR_db,pm,*,SNR1_db,pm_theory); %作圖
14、xlabel(信噪比(dB);ylabel(誤符號率);legend(仿真得到的誤符號率,理論符號誤碼曲線);仿真結(jié)果:2PSK誤碼率統(tǒng)計(jì)三、2FSK2FSK調(diào)制方式有非相干解調(diào)和相干解調(diào):1 非相干解調(diào)經(jīng)過調(diào)制后的2FSK數(shù)字信號通過兩個(gè)頻率不同的帶通濾波器f1、f2濾出不需要的信號,然后再將這兩種經(jīng)過濾波的信號分別通過包絡(luò)檢波器檢波,最后將兩種信號同時(shí)輸入到抽樣判決器同時(shí)外加抽樣脈沖,最后解調(diào)出來的信號就是調(diào)制前的輸入信號。其原理圖如下圖所示:帶通濾波器f2抽樣脈沖帶通濾波器抽樣判決器帶通濾波器f1包絡(luò)檢波器包絡(luò)檢波器非相干解調(diào)2 相干解調(diào)根據(jù)已調(diào)信號由兩個(gè)載波f1、f2調(diào)制而成,則先用兩
15、個(gè)分別對f1、f2帶通的濾波器對已調(diào)信號進(jìn)行濾波,然后再分別將濾波后的信號與相應(yīng)的載波f1、f2相乘進(jìn)行相干解調(diào),再分別低通濾波、用抽樣信號進(jìn)行抽樣判決器即可.帶通濾波器f1低通濾波器相乘器Cosw1t抽樣判決器 抽樣脈沖帶通濾波器f2低通濾波器相乘器cosw2t (b)相干解調(diào)仿真程序function FSKFc=10; %載頻Fs=40; %系統(tǒng)采樣頻率Fd=1; %碼速率N=Fs/Fd;df=10;numSymb=25;%進(jìn)行仿真的信息代碼個(gè)數(shù)M=2; %進(jìn)制數(shù)SNRpBit=60;%信噪比SNR=SNRpBit/log2(M);seed=12345 54321;numPlot=15;%
16、產(chǎn)生25個(gè)二進(jìn)制隨機(jī)碼x=randsrc(numSymb,1,0:M-1);%產(chǎn)生25個(gè)二進(jìn)制隨機(jī)碼%調(diào)制y=dmod(x,Fc,Fd,Fs,fsk,M,df);numModPlot=numPlot*Fs;t=0:numModPlot-1./Fs;%在已調(diào)信號中加入高斯白噪聲r(shí)andn(state,seed(2);y=awgn(y,SNR-10*log10(0.5)-10*log10(N),measured,dB);%在已調(diào)信號中加入高斯白噪聲%相干解調(diào)z1=ddemod(y,Fc,Fd,Fs,fsk/eye,M,df);%非相干解調(diào)z2=ddemod(y,Fc,Fd,Fs,fsk/eye/n
17、oncoh,M,df);%誤碼率統(tǒng)計(jì)errorSym ratioSym=symerr(x,z1);figure(1)simbasebandex(0:1:5);title(相干解調(diào)后誤碼率統(tǒng)計(jì))errorSym ratioSym=symerr(x,z2); figure(2)simbasebandex(0:1:5);title(非相干解調(diào)后誤碼率統(tǒng)計(jì))仿真結(jié)果:2FSK相干解調(diào)誤碼率統(tǒng)計(jì)2FSK非相干解調(diào)誤碼率統(tǒng)計(jì)2ASK相干與非相干、2FSK相干與非相干、2PSK誤碼率比較仿真程序clear;a=0.001 %信號幅度SNR_dB=-6:0.3:20; %信噪比范圍(單位分貝)SNR=10.(
18、SNR_dB./10); %信噪比(由分貝轉(zhuǎn)化而來 10lg(SNR)=SNR_dB)SNR2=a.2./(2*SNR); %信號幅度為a時(shí)的噪聲功率for i=1:length(SNR_dB) ask_pe0=0.5*erfc(sqrt(a.2./(8*SNR2); %ASK相關(guān)解調(diào)時(shí)的誤碼率(給定信號幅度a和噪聲方差2時(shí)的信噪比r=a2/2*2,而這里的噪聲功率是SNR2) ask_pe1=0.25*erfc(sqrt(a.2./(8*SNR2)+0.5*exp(-a.2./(8*SNR2); %ASK非相干解調(diào)時(shí)的誤碼率 fsk_pe0=0.5*erfc(sqrt(a.2./(4*SNR
19、2); %FSK相關(guān)解調(diào)時(shí)的誤碼率 fsk_pe1=0.5*exp(-0.25*a.2./SNR2); %FSK非相干解調(diào)時(shí)的誤碼率 psk_pe=0.5*erfc(sqrt(0.5*a.2./SNR2); %PSK解調(diào)時(shí)的誤碼率 endsemilogy(SNR_dB,ask_pe0,.); %這些都是繪制信噪比誤碼率曲線hold on;semilogy(SNR_dB,ask_pe1);hold on;semilogy(SNR_dB,fsk_pe0,+);hold on;semilogy(SNR_dB,fsk_pe1,*);hold on;semilogy(SNR_dB,psk_pe,om);
20、legend( 相干2ASK,非相干2ASK, 相干2FSK,非相干2FSK,2PSK);axis(-6,20,1/1e7,1);xlabel(SNR_dB);ylabel(Pe);a = 1.0000e-003仿真結(jié)果:2ASK相干與非相干、2FSK相干與非相干、2PSK誤碼率比較根據(jù)以上仿真結(jié)果可以看出,若要獲得相同的誤碼率Pe,所需信噪比:2ASK2FSK2PSK,在信噪比相同的情況下,誤碼率的關(guān)系為:2PSK2FSK2ASK.實(shí)際接收機(jī)的性能總是比最佳接收機(jī)的性能差。相干接收機(jī)的誤碼率性能優(yōu)于非相干接收機(jī)。心得體會 經(jīng)過將近一周多的時(shí)間,我們終于完成了這次課程設(shè)計(jì)。從起初的查閱資料,重
21、新學(xué)習(xí)使用matlab,到編輯各個(gè)模塊的子程序并進(jìn)行仿真調(diào)試。每一個(gè)細(xì)節(jié)的成功都會給我們帶來一番欣喜。在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的能力。在設(shè)計(jì)過程中,與同學(xué)分工設(shè)計(jì),和同學(xué)們相互探討,給我的不僅僅是一種經(jīng)歷,也是一種快樂。課程設(shè)計(jì)是我們專業(yè)知識綜合應(yīng)用的實(shí)踐訓(xùn)練,是我們邁向社會,從事職業(yè)工作前一個(gè)必不少的過程”千里之行始于足下”,通過這次課程設(shè)計(jì),我深深體會到這句話的真正含義通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合的重要性,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能
22、真正有所收獲,并且從中提高自己的動手能力和獨(dú)立思考的能力。其實(shí)課程設(shè)計(jì)的目的不在于我們做出了什么,而在于我們獲得了什么。有些看似很簡單的東西或事情,你經(jīng)歷了就是你一生的收獲。參考文獻(xiàn):1 樊昌信. 通信原理(第6版).國防工業(yè)出版社,2006,092 黎洪松. 數(shù)字通信原理.西安電子系科技大學(xué)出版社,2005,073 任嘉偉.數(shù)字頻帶通信系統(tǒng)計(jì)算機(jī)仿真.電腦知識與技術(shù),2008.074 呂躍廣 通信系統(tǒng)仿真.電子工業(yè)出版社,2010.03附錄資料:不需要的可以自行刪除Pascal/C/C+語句對比(補(bǔ)充版)一、Hello world 先看三種語言的樣例:Pascalbegin writeln(
23、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主程序沒有返回值,而C/C+返回0(好像在C中可以為NULL)。在C/C+中,main函數(shù)以前的是頭文件,樣例中C為stdio.h,C+除了iostream還有第二行的using namespace st
24、d,這個(gè)是打開命名空間的,NOIP不會考這個(gè),可以不管,只要知道就行了。 此外說明 注釋單行用/,段落的話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 127integershort-32768 32767longintInt -2147483648 2147483
25、647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 4294967295qwordunsigned long long0 18446744073709551615 * 當(dāng)對long long 變量賦值時(shí),后要加LLLong long x=6327844632743269843LL* 如果位移 x2LL* Linux: printf(“%lldn”,x);* Windows: printf(“%I64dn”,x);2、實(shí)型
26、PascalC/C+范圍realfloat2.9E-39 1.7E38single-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三種語言中都為char,C里沒有字符串,只有用字符數(shù)組來代替字符串,Pascal和C+均為string。Pascal中字符串長度有限制,為255,C+則沒有。 字符串和字符在Pascal中均用單引號注明,在C/C+中字符用單引號,字符串用雙引號。4、布爾類型 Pascal 中為 boolean,C/C+ 為 bool。值均為True 或 False。C/C+中除0外bool都為真。5、定義 常量的定義均為
27、 const,只是在C/C+中必須要注明常量的類型。在C/C+中還可以用宏來定義常量,此時(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) #define wait for(int w=0;w a;cout a;cout a endl;特別說明C+中cin
28、一個(gè)字符的話會自動跳過空格和回車,Pascal和C則會讀入空格和回車。在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; /作用臨時(shí) 以下三個(gè)進(jìn)制設(shè)定都是永久作用: cout deca; 相當(dāng) printf(“%d”,a); /十進(jìn)
29、制 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è)double型實(shí)數(shù)%10.4f輸出1個(gè)總寬度為10,保留4位小數(shù)的實(shí)數(shù) 文件輸入輸出:Pascalassign(in
30、put, 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, b);fclose(fin); fclose(fout);C+#include using namespace
31、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é)合。*中國計(jì)算機(jī)學(xué)會競賽須知發(fā)布的C讀寫程序:(C+ 也能用,cin,cout,scanf,printf 可混用)#include int main() int a,b; freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdou
32、t); 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 std;int main() int a,b,c,d; freopen(sum.in,r,stdin); freop
33、en(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ùn)算符號 一一對應(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+中對某個(gè)
34、變量自身進(jìn)行運(yùn)算可以簡寫為 變量名 運(yùn)算符號= 改變量 如 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;五、條件語句1、if C/C+中if 語句的條件必須要用括號括起來,后面不使用then。PascalC/C+if a b then flag := true else flag := false;if (a b) flag = true;else
35、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+中一定要寫break,后果你可以去掉break,運(yùn)行看看就知道了。六、循環(huán)語句1、forPascalC/C+for 變量名 := 初始值 to(downto) 終止值 dofor (變量名=初始值;條件;改變方式)for i := 5 t
36、o 10 do dec(a);/終止值大于初始值用 tofor i := 5 downto 1 do dec(a);/終止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 滿足條件就會一直循環(huán)。C/C+中i是實(shí)數(shù)、指針都可以*/C/C+中for的特殊用法:/變量為實(shí)數(shù)for (double i = 1; i 符號為間接引用,后面會提到。for (type1 *p = head - next; p; p = p - next) printf(“%d”, p - k);2、whilePascalC/C+while 條件 dowhile (條件)while
37、 i 0 do dec(i);while (i != 0) i-;/也可寫作 while (i) i-;/在C/C+中非0即為真。3、repeat-until & do-whilePascalC/C+repeat 語句 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開始到(數(shù)組大小1)。PascalC/C+定義a : array 1.100 of integer;b :array 1.10,1.10 of int64;i
38、nt 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, 0, sizeof(a);/頭文件包含 string.h*如果要填最大: memset(a,127,sizeof
39、(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開始,Pascal以1開始。字符串處理很多這里不一一列舉,只寫最常用的幾個(gè)。PascalC (包含)定義用:char sC+(包含)定義用:string s輸入輸出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%s
40、n”,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 main() string text = 152; int number; stringstream ss;ss
41、number; /string - int coutnumber+100endl; ss string string str = ss.str(); return 0;九、過程和函數(shù)1、過程 在C/C+中沒有過程,但可以把返回值為“空”的函數(shù)理解為過程。PascalC/C+無參過程procedure 過程名;說明部分begin 語句部分 end;/說明部分、begin、end語句部分統(tǒng)稱為過程體void 函數(shù)名(); 主體部分; return ;帶參過程procedure 過程名(形參表)過程體void 函數(shù)名(形參表)過程體 值傳和址傳:當(dāng)一個(gè)參數(shù)是值傳時(shí),形參在子過程中相當(dāng)于一個(gè)局部變量,
42、對它的改變不影響實(shí)在的參數(shù)值。址傳則會影響。下例中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) HYPERLINK a a認(rèn)為值參,b認(rèn)為變量傳參 b += a; a += b; return ;int main(
43、)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=i*2; return; int main() int x10; tryit(x); for(int i=0;i
44、=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ì)列(以堆排為例)#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.pus
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 補(bǔ)充協(xié)議對合同的完善作用
- 購買樹木合同
- 輕型配送合同
- 企業(yè)貸款合同解除
- 公立學(xué)校教師勞動合同
- 政府采購合同的產(chǎn)業(yè)合作發(fā)展趨勢
- 工業(yè)礦石買賣合同
- 班組分包勞務(wù)合作協(xié)議
- 安全物業(yè)保安清潔合作協(xié)議
- 樓板加固拆除改造合同
- 【自然辯證法在醫(yī)學(xué)中的運(yùn)用探究3700字(論文)】
- 2022-2023第一學(xué)期杭州市蕭山區(qū)六年級上冊科學(xué)期末教學(xué)質(zhì)量監(jiān)測(含答案)
- 汽車電路分析與檢測題庫帶答案解析復(fù)習(xí)題練習(xí)題
- 馬屬動物常見寄生蟲病演示文稿
- 《經(jīng)絡(luò)腧穴學(xué)總論》
- 七年級上冊古詩文言文練習(xí)
- 2023年預(yù)制箱梁施工總結(jié)(5篇)
- 2023屆高三英語二輪復(fù)習(xí)讀后續(xù)寫情感描寫素材(比賽收獲脫困脫險(xiǎn))
- 室內(nèi)滑冰館建設(shè)工程項(xiàng)目實(shí)施建議書
- 年產(chǎn)10000立方米聚酰亞胺泡沫項(xiàng)目環(huán)境影響報(bào)告表
- 旋挖鉆孔灌注樁施工作業(yè)指導(dǎo)書
評論
0/150
提交評論