版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目 錄 TOC o 1-3 h z u HYPERLINK l _Toc297887131 前 言 PAGEREF _Toc297887131 h 1 HYPERLINK l _Toc297887132 第一章 設(shè)計(jì)任務(wù) PAGEREF _Toc297887132 h 2 HYPERLINK l _Toc297887133 1.2 設(shè)計(jì)內(nèi)容 PAGEREF _Toc297887133 h 2 HYPERLINK l _Toc297887134 1.2 設(shè)計(jì)要求 PAGEREF _Toc297887134 h 2 HYPERLINK l _Toc297887135 1.3 系統(tǒng)框圖 PAGERE
2、F _Toc297887135 h 2 HYPERLINK l _Toc297887136 第二章 序列的分析 PAGEREF _Toc297887136 h 4 HYPERLINK l _Toc297887137 2.1 序列的含義 PAGEREF _Toc297887137 h 4 HYPERLINK l _Toc297887138 2.2 序列產(chǎn)生的原理 PAGEREF _Toc297887138 h 5 HYPERLINK l _Toc297887139 2.2 序列的性質(zhì) PAGEREF _Toc297887139 h 6 HYPERLINK l _Toc297887140 2.3
3、自相關(guān)特性 PAGEREF _Toc297887140 h 7 HYPERLINK l _Toc297887141 第三章 序列的設(shè)計(jì) PAGEREF _Toc297887141 h 8 HYPERLINK l _Toc297887142 3.1 特征多項(xiàng)式確定 PAGEREF _Toc297887142 h 8 HYPERLINK l _Toc297887143 3.2 本原多項(xiàng)式的確定 PAGEREF _Toc297887143 h 9 HYPERLINK l _Toc297887144 3.3 序列的發(fā)生 PAGEREF _Toc297887144 h 10 HYPERLINK l _T
4、oc297887145 第四章 程序調(diào)試及結(jié)果分析 PAGEREF _Toc297887145 h 11 HYPERLINK l _Toc297887146 4.1 序列的仿真結(jié)果及分析 PAGEREF _Toc297887146 h 12 HYPERLINK l _Toc297887147 4.2 該設(shè)計(jì)的序列相關(guān)性仿真結(jié)果及分析 PAGEREF _Toc297887147 h 13 HYPERLINK l _Toc297887148 結(jié) 論 PAGEREF _Toc297887148 h 14 HYPERLINK l _Toc297887149 參考文獻(xiàn) PAGEREF _Toc29788
5、7149 h 15 HYPERLINK l _Toc297887150 附錄:程序代碼 PAGEREF _Toc297887150 h 16前 言擴(kuò)頻通信因其具有抗干擾、抗多徑衰落、抗偵察等優(yōu)點(diǎn)在通信領(lǐng)域中得到廣泛應(yīng)用。擴(kuò)頻序列的設(shè)計(jì)和選擇是擴(kuò)頻通信的關(guān)鍵技術(shù),擴(kuò)頻序列性能的優(yōu)劣在很大程度上決定了通信系統(tǒng)的多址干擾和符號(hào)間干擾的大小,從而直接影響到系統(tǒng)的性能。因此,深入研究擴(kuò)頻序列的性質(zhì),構(gòu)造設(shè)計(jì)具有良好相關(guān)性的擴(kuò)頻序列,來(lái)滿足擴(kuò)頻系統(tǒng)的要求,是直接序列擴(kuò)頻系統(tǒng)的核心課題。白噪聲是一種隨機(jī)過(guò)程,它有極其優(yōu)良的相關(guān)特性。但至今無(wú)法實(shí)現(xiàn)白噪聲的放大、調(diào)制、檢測(cè)、同步及控制等,而只能用類似于白噪聲統(tǒng)
6、計(jì)特性的偽隨機(jī)序列來(lái)逼近它,并作為擴(kuò)頻系統(tǒng)的擴(kuò)頻碼。常見(jiàn)的偽隨機(jī)序列有m 序列、GOLD 序列、M 序列、Walsh 序列等。m 序列是目前研究最為徹底的偽隨機(jī)序列,m 序列容易產(chǎn)生, 有優(yōu)良的自相關(guān)和互相關(guān)特性。序列是偽隨機(jī)序列的一種情況。他可以在很多領(lǐng)域中都有重要應(yīng)用。 由n級(jí)移位寄存器所能產(chǎn)生的周期最長(zhǎng)的序列。這種序列必須由非線性移位寄存器產(chǎn)生,并且周期為2n(n為移位寄存器的級(jí)數(shù))。通過(guò)對(duì)偽隨機(jī)碼中常用的m序列的結(jié)構(gòu)和性質(zhì)進(jìn)行了分析,本文給出了基于MATLAB平臺(tái)的m序列生成算法及代碼偽隨機(jī)序列分析。第一章 設(shè)計(jì)任務(wù)1.2 設(shè)計(jì)內(nèi)容掌握PN序列的相關(guān)知識(shí),掌握m序列的產(chǎn)生原理及其在ma
7、tlab中的產(chǎn)生方法,對(duì)特定長(zhǎng)度的m序列,分析其性質(zhì),及其用來(lái)構(gòu)造其它序列的方法;研究偽隨機(jī)序列在跳頻通信中的應(yīng)用方法。1.2 設(shè)計(jì)要求m序列的本原多項(xiàng)式為:,移位寄存器結(jié)構(gòu)如圖1.1圖1.1 移位寄存器結(jié)構(gòu)各寄存器初值分別為,參照該移位寄存器的結(jié)構(gòu)圖,用Matlab語(yǔ)言編寫程序,生成m序列。1.3 系統(tǒng)框圖產(chǎn)生m序列的框圖如下初始化寄存器m序列的長(zhǎng)度移位寄存器寄存器前移1位輸出m序列m序列NNYi=1圖1.2 系統(tǒng)框圖第二章 序列的分析2.1 序列的含義m序列是最長(zhǎng)線性移位寄存器的簡(jiǎn)稱。顧名思義,m序列是由多級(jí)移位寄存器中,若N為移位寄存器的級(jí)數(shù),n級(jí)移位寄存器共有個(gè)狀態(tài),除去全0狀態(tài)外還剩
8、下不種狀態(tài),因此它能產(chǎn)生的最大長(zhǎng)度的碼序列為位。產(chǎn)生m序列的線性反饋移們寄存器稱作最長(zhǎng)線性移位寄存器。產(chǎn)生m序列的移位寄存器的電路結(jié)構(gòu),其反饋線連接不是隨意的,m序列的周期P也不能取任意值,而必須滿足,式中,n是移位寄存器的級(jí)數(shù)。m序列碼發(fā)生器是一種反饋移位型結(jié)構(gòu)的電路,它由n位移位寄存器加異或反饋網(wǎng)絡(luò)組成,其序列長(zhǎng)度,只有一個(gè)多余狀態(tài)即全0狀態(tài),所以稱為最大線性序列碼發(fā)生器。由于其結(jié)構(gòu)已定型,且反饋函數(shù)和連接形式都有一定的規(guī)律,因此利用查表的方式就設(shè)計(jì)出m序列碼。列出部分m序列碼的反饋函數(shù)F和移存器位數(shù)n的對(duì)應(yīng)關(guān)系。如果給定一個(gè)序列信號(hào)長(zhǎng)度M,則根據(jù)求出n,由n查表2-1便可以得到相應(yīng)的反饋
9、函數(shù)F。表2-1 反饋函數(shù)Fn反饋函數(shù)F37,4155316637127825595111010231120471240952.2 序列產(chǎn)生的原理移位寄存器的后續(xù)狀態(tài)可以用當(dāng)前狀態(tài)及特定矩陣來(lái)表示,這個(gè)矩陣是階矩陣,稱為A矩陣,A矩陣的第r行對(duì)應(yīng)移位寄存器第r級(jí)反饋輸入狀態(tài)。對(duì)于一個(gè)n級(jí)移位寄存器序列產(chǎn)生器,其A矩陣的第一個(gè)元素必定為1,否則,該序列發(fā)生器就必然退化為級(jí)數(shù)小于n的移位寄存器序列發(fā)生器。一個(gè)n級(jí)簡(jiǎn)單線性移位寄存器序列發(fā)生器,其A矩陣有如下形式在給定移位寄存器的初始狀態(tài)后,可由A矩陣求出后續(xù)狀態(tài),即因此,且當(dāng)單位矩陣時(shí),有,即移位寄存器中的內(nèi)容在第個(gè)狀態(tài)和第個(gè)狀態(tài)是相同的,即序列發(fā)
10、生器從第個(gè)狀態(tài)開(kāi)始,經(jīng)過(guò)次狀態(tài)轉(zhuǎn)移后,又回到了第個(gè)狀態(tài),產(chǎn)生的序列長(zhǎng)度就為。因此,對(duì)于最大長(zhǎng)度線性移位寄存器序列發(fā)生器,必然有 (2-1)對(duì)于階矩陣A,若x為其特征值,則有,由于在二進(jìn)制系統(tǒng)中,整理化簡(jiǎn)得 (2-2)定義特征方程和特征多項(xiàng)式分別為 (2-3) (2-4)其中。2.2 序列的性質(zhì)擴(kuò)展頻譜通信要求擴(kuò)頻序列應(yīng)具有較好的隨機(jī)特性,而序列既具有一定的隨機(jī)特性,又具有一定的周期性,因而它是一種偽隨機(jī)序列,序列應(yīng)具有移位相加特性、平衡特性和游程特性。1.移位相加特性(線性疊加性)一個(gè)m序列與其經(jīng)任意次延遲移位后產(chǎn)生的另一個(gè)不同序列模2 相加,得到是仍是該m序列的延遲移位序列。例如111010
11、0與向右移3 位后的序列1001110逐位模2相加后的序列為0111010 ,相當(dāng)于原序列向右移1位后的序列,仍是m 序列。2.平衡特性在m序列的每個(gè)周期中,“1”碼元出現(xiàn)的數(shù)目為次,“0”碼元出現(xiàn)的數(shù)目為次,即“0”的個(gè)數(shù)比“1”的個(gè)數(shù)少一個(gè)。偽隨機(jī)序列的平衡性是指序列中“1”的數(shù)目只比“0” 的數(shù)目多l(xiāng)。碼的平衡性由碼序列中的直流分量決定。平衡性好,則載波抑制度大,從而有利擴(kuò)頻通信的抗干擾能力以及保密和抗偵破能力。其物理意義是不平衡碼會(huì)使擴(kuò)頻后的信號(hào)中出現(xiàn)一些穩(wěn)定的信號(hào),從而易于被檢測(cè)而導(dǎo)致保密能力的降低。3.游程特性游程是指在一個(gè)序列周期中連續(xù)排列的取值相同的碼元的合稱 ,所謂的游程長(zhǎng)度
12、就是一個(gè)游程中碼元的個(gè)數(shù)。而m序列的分布特性為m序列的一個(gè)周期()中,游程總數(shù)為;當(dāng),且1 游程長(zhǎng)度k n-2,長(zhǎng)度為k的游程占游程總數(shù)的 ,其中0游程和1游程各占一半;長(zhǎng)度為的游程只有一個(gè),是0游程;長(zhǎng)度為的游程只有一個(gè),是1有游程。 2.3 自相關(guān)特性周期為p 的m序列的自相關(guān)函數(shù)為: (2-5) 其中:A 該序列與其j次移位序列一個(gè)周期中對(duì)應(yīng)元素相同數(shù)目D 該序列與其j次移位序列一個(gè)周期中對(duì)應(yīng)元素不同數(shù)目P 序列周期上式可改寫為: (2-6)由移位相加特性和均衡特性,可知m序列的自相關(guān)函數(shù)為: (2-7)對(duì)于一個(gè)周期為的m序列(取值1或0),其自相關(guān)函數(shù)如圖1-5所示。由圖可見(jiàn),當(dāng)時(shí),m
13、序列的自相關(guān)函數(shù)出現(xiàn)峰值1;當(dāng)偏離0時(shí),相關(guān)函數(shù)曲線很快下降;當(dāng),相關(guān)函數(shù)值為;當(dāng)時(shí),又出現(xiàn)峰值;如此周而復(fù)始。當(dāng)周期P很大時(shí),m序列的自相關(guān)函數(shù)與白噪聲類似。這一特性很重要,相關(guān)檢測(cè)就是利用這一特性,在有或無(wú)信號(hào)相關(guān)函數(shù)值的基礎(chǔ)上識(shí)別信號(hào),檢測(cè)自相關(guān)函數(shù)值為1的碼序列。從m 序列的自相關(guān)系數(shù)可以看出,m 序列是一個(gè)狹義偽隨機(jī)碼。知當(dāng)m序列的移位值為其周期的整數(shù)倍時(shí),其自相關(guān)值取得最大值為1,移位值取其他值時(shí),其自相關(guān)值恒為。其自相關(guān)函數(shù)如圖2.1所示。圖2.1 m序列的自相關(guān)函數(shù)第三章 序列的設(shè)計(jì)3.1 特征多項(xiàng)式確定n級(jí)線性移位寄存器的如圖3.1所示:圖3.1 n級(jí)線性移位寄存器圖中表示反
14、饋線的兩種可能連接方式,=1表示連線接通,第n-i級(jí)輸出加入反饋中;=0表示連接線斷開(kāi),第n-i級(jí)輸出未參加反饋。因此,一般形式的線性反饋邏輯表達(dá)式為: (3-1)將上式左面的移至右面,并將代入上式,則上式可改寫為 (3-2)定義一個(gè)與上式相對(duì)應(yīng)的多項(xiàng)式 (3-3)根據(jù)上式可以確定m序列的特征多項(xiàng)式: (3-4)的次數(shù)n表示移存器的級(jí)數(shù)。Ci取值(1或0)確定反饋線連接狀態(tài)。線性移位寄存器的相繼狀態(tài)具有周期性,周期。用多項(xiàng)式f(x)來(lái)描述線性反饋移位寄存器的反饋連接狀態(tài)。其中x的冪次表示元素的相應(yīng)位置。上式稱為線性反饋移位寄存器的特征多項(xiàng)式。3.2 本原多項(xiàng)式的確定特征多項(xiàng)式與輸出序列的周期有
15、密切關(guān)系。當(dāng)滿足下列三個(gè)條件時(shí),就一定能產(chǎn)生m序列:(1) 是不可約的,即不能再分解多項(xiàng)式;(2) 可整除,這里;(3) 不能整除,這里。滿足上述3個(gè)條件的多項(xiàng)式稱為本原多項(xiàng)式。一個(gè)本原多項(xiàng)式對(duì)應(yīng)一個(gè)最大長(zhǎng)度移位m序列,只要知道或找到了本原多項(xiàng)式,就能由它構(gòu)造m序列發(fā)生器,這樣產(chǎn)生m序列的充要條件就變成了如何尋找本原多項(xiàng)式。尋找本原多項(xiàng)式是一件繁瑣的工作,計(jì)算的到的結(jié)果已列表。表3-1 本原多項(xiàng)式系數(shù)n本原多項(xiàng)式的八進(jìn)制系數(shù)表達(dá)式代數(shù)式 27313423545610372118435910211020111140051210123表3-1給出其中部分結(jié)果,每個(gè)n只給出一個(gè)本原多項(xiàng)式為了使序列發(fā)
16、生器盡量簡(jiǎn)單,常用的只有3項(xiàng)的本原多項(xiàng)式表中列出的本原多項(xiàng)式都是項(xiàng)數(shù)最少的,為了簡(jiǎn)便起見(jiàn),用八進(jìn)制數(shù)字記載本原多項(xiàng)式的系數(shù)。由系數(shù)寫出本原多項(xiàng)式非常方便。本文探討時(shí),本多項(xiàng)式系數(shù)的八進(jìn)制表示為45,將45寫為二進(jìn)制碼100 101,從右向左第一個(gè)1對(duì)應(yīng)于,按系數(shù)可寫出。從左向右的第一個(gè)1對(duì)應(yīng)于,按系數(shù)可寫出對(duì)應(yīng)的寄存器函數(shù)。3.3 序列的發(fā)生根據(jù)m 序列的特征方程: (3-5)m序列可知本原多項(xiàng)式為的5階移位寄存器為 ,移位寄存器結(jié)構(gòu)為圖3.2 移位寄存器結(jié)構(gòu)圖初始化寄存器為,寄存器首先左移位可知=0,這時(shí)依據(jù)圖3.2可得知反饋。由于為5階寄存器,碼長(zhǎng)。故要循環(huán)31次,得到所需的m序列。用Ma
17、tlab仿真程序如下:function mseq= m_sequence(fbconnection);n = length(fbconnection);N = 2n-1; %m序列的長(zhǎng)度register = zeros(1,n - 1) 1; %定義移位寄存器的初始狀態(tài)mseq(1)= register(n); %m序列的第一個(gè)輸出碼元for i = 2:Nnewregister(1)= mod(sum(fbconnection.*register),2);%寄存器與反饋的模2和for j = 2:nnewregister(j)= register(j-1);end;register = ne
18、wregister; %移位后的寄存器mseq(i) = register(n); %新的寄存器輸出end將以上代碼命名為m_sequence.m以上可根據(jù)階位不同而做出不同的m序列生成自相關(guān)函數(shù)程序:cleara=1 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 0 0 0 1 0;b=0 1 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 0 0 0 1;L=length(b);N=120; x=1:N; for k=1:Nc=xor(a,b);D=sum(c);A=L-D; R(k)
19、=(A-D)/(A+D);b=b(L),b(1:L-1);plot(k,R(k); hold onendplot(x,R); grid第四章 程序調(diào)試及結(jié)果分析4.1 序列的仿真結(jié)果及分析在MATLAB的command window里輸入clear;fbconnection=0 1 0 0 1;m_sequence=m_sequence(fbconnection);stairs(m_sequence); %對(duì)m序列繪圖axis(0 35 -0.2 1.2);grid on;得到圖4.1所示:圖4.1 運(yùn)行結(jié)果通過(guò)運(yùn)行結(jié)果可以看出是由0、1組成的階梯形圖形,Stairs函數(shù)功能是畫階梯形,生成一
20、系列的m序列,成功實(shí)現(xiàn)了要求。由于m序列全為0 1的集合,直接的stairs繪制使得0 1的位置不清楚,使用stem(m_sequence)重新運(yùn)行得到圖4.2。這樣就明顯看到m序列的位置?;蛘呤褂胊xis (xmin xmax ymin ymax);調(diào)整圖形在面板中的位置。圖4.2 新運(yùn)行圖形得到m序列返回值為: m_sequence = Columns 1 through 10 1 0 0 0 0 1 0 1 0 1 Columns 11 through 20 1 1 0 1 1 0 0 0 1 1 Columns 21 through 31 1 1 1 0 0 1 1 0 1 0 0由以
21、上仿真結(jié)果可以看出:對(duì)于不同的初始狀態(tài),輸出序列的初始位置就不同。移位寄存器的反饋邏輯決定是否產(chǎn)生m序列。起始狀態(tài)僅僅決定序列的起始點(diǎn),而不同的反饋系數(shù)產(chǎn)生不同的碼序列。4.2 該設(shè)計(jì)的序列相關(guān)性仿真結(jié)果及分析所得自相關(guān)函數(shù)圖形如圖4.3圖4.3 自相關(guān)函數(shù)由以上仿真結(jié)果可以看出:m序列的自相關(guān)系數(shù)出現(xiàn)在處出現(xiàn)尖峰,并以P為周期重復(fù)出現(xiàn)。尖峰底寬為。越小,相關(guān)峰越尖銳。周期P越大,就越小。在這種情況下,m序列的自相關(guān)性就越好。兩個(gè)長(zhǎng)度周期相同,由不同反饋系數(shù)產(chǎn)生的m序列,其互相關(guān)與自相性相比沒(méi)有尖銳的二值特性,是多值的。作為地址碼而言,希望選擇的互相關(guān)函數(shù)越小越好,這樣便于區(qū)分不同的用戶,或者
22、說(shuō),抗干擾能力強(qiáng)。結(jié) 論本文設(shè)計(jì)的題目是m序列發(fā)生器的設(shè)計(jì),文中介紹的擴(kuò)頻偽隨機(jī)碼m序列的Matlab生成源程序是基于線性反饋移位寄存器結(jié)構(gòu)而編寫的,更清楚的描述了m序列的生成過(guò)程中的數(shù)字邏輯。本方法應(yīng)用移位寄存器理論,從m序列的本原多項(xiàng)式出發(fā),其算法核心是找到m序列本原多項(xiàng)式與線性m序列移位寄存器反饋邏輯式之間的關(guān)系。 m 序列是目前應(yīng)用最廣泛的偽隨機(jī)序列,本文通過(guò)利用Matlab 工具對(duì)m 序列進(jìn)行了生成及相關(guān)性分析,仿真結(jié)果表明,該方法是可行的。分析得出m 序列具有良好的相關(guān)特性,符合偽隨機(jī)序列的基本性質(zhì),用m 序列可以構(gòu)造出合適的擴(kuò)頻序列,在軍事通信等領(lǐng)域具有廣泛應(yīng)用前景。m序列可以軟
23、件實(shí)現(xiàn),也可以硬件實(shí)現(xiàn),但是通過(guò)本次設(shè)計(jì)可以看到軟件設(shè)計(jì)的許多優(yōu)點(diǎn)。在課程設(shè)計(jì)的過(guò)程中,查詢了大量的資料,通過(guò)相關(guān)資料的查閱,還掌握了通信領(lǐng)域的有關(guān)知識(shí),擴(kuò)大了知識(shí)面。參考文獻(xiàn)1查光明熊賢祚擴(kuò)頻通信M西安:西安電子科技大學(xué)出版社19902田日才擴(kuò)頻通信M.北京:清華大學(xué)出版社20073孫屹,李妍. MATLAB 通信仿真開(kāi)發(fā)手冊(cè)M.北京:國(guó)防工業(yè)出版社,2006.54王哲.偽隨機(jī)序列的Matlab實(shí)現(xiàn)與分析J.科技創(chuàng)新導(dǎo)報(bào).2008. 23 5樊昌信,張甫翊,吳成柯.現(xiàn)代通信M.北京:高等教育出版社,2001.6王會(huì)華,李寶平. m序列發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn)J.北京電子科技學(xué)院學(xué)報(bào)7劉煥淋,向松勁
24、,代少升.擴(kuò)展頻譜通信.北京郵電大學(xué)出版社.2008.附錄:程序代碼function mseq= m_sequence(fbconnection);n = length(fbconnection);N = 2n-1; %m序列的長(zhǎng)度register = zeros(1,n - 1) 1; %定義移位寄存器的初始狀態(tài)mseq(1)= register(n); %m序列的第一個(gè)輸出碼元for i = 2:Nnewregister(1)= mod(sum(fbconnection.*register),2); %寄存器與反饋的模2和 for j = 2:n, newregister(j)= regi
25、ster(j-1); end; register = newregister; %移位后的寄存器 mseq(i) = register(n); %新的寄存器輸出endclear;fbconnection=0 1 0 0 1;m_sequence=m_sequence(fbconnection);stairs(m_sequence); %對(duì)m序列繪圖axis(0 35 -0.2 1.2);grid on;cleara=1 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 0 0 0 1 0;b=0 1 1 0 1 0 1 0 0 0 1 1 1
26、0 1 1 1 1 1 0 0 1 0 0 1 1 0 0 0 0 1;L=length(b);N=120; x=1:N; for k=1:Nc=xor(a,b);D=sum(c);A=L-D; R(k)=(A-D)/(A+D);b=b(L),b(1:L-1);plot(k,R(k); hold onendplot(x,R); grid附錄資料:不需要的可以自行刪除Pascal/C/C+語(yǔ)句對(duì)比(補(bǔ)充版)一、Hello world 先看三種語(yǔ)言的樣例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello w
27、orld!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ù)以前的是頭文件,樣例中C為stdio.h,C+除了iostream還有第二行的using namespace std,這個(gè)是打開(kāi)命名空間的,NOIP不會(huì)考這個(gè),可以不管,只要知道就行了。 此外說(shuō)明 注釋單行用/,段落的
28、話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 2147483647int64long long-9223372036854775808 92233720368547
29、75807byte-0 255wordunsigned short0 65535longwordunsigned 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.
30、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,C/C+ 為 bool。值均為True 或 False。C/C+中除0外bool都為真。5、定義 常量的定義均為 const,只是在C/C+中必須要注明常量的類型。在C/C+中還可以用宏來(lái)定義常量,此時(shí)不注明類型。P
31、ascalC/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;特別說(shuō)明C+中cin一個(gè)字符的話會(huì)自動(dòng)跳過(guò)空格和回車,Pascal和C則會(huì)讀入空格和回車。在Pascal中writeln(a
32、: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)制 cout hexa; 相當(dāng) printf(“%X”,a); /十六進(jìn)制 cout octa; 相當(dāng)
33、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(input, test.in);assign(output, test.out);reset(input);
34、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 std;ifstream fin(“test.in”);ofstream fout(“test.out”
35、);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讀寫程序:(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
36、; 或者: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); freopen(sum.out,w,stdout); scanf(%d%d,&a,&b); cincd; prin
37、tf(%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)算左移(*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,
38、即 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 flag := true else flag := false;if (a b) flag = true;else flag = false;2、多種分支 C/C+中為switch,Pascal為case:PascalC
39、/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)語(yǔ)句1、forPascalC/C+for 變量名 := 初始值 to(downto) 終止值 dofor (變量名=初始值;條件;改變方式)for i := 5 to 10 do dec(a);/終止值大于初始值用 tofor i := 5 downto 1 do d
40、ec(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(“%d”, p - k);2、whilePascalC/C+while 條件 dowhile (條件)while i 0 do dec(i);while (i != 0) i-;/也可寫作 while (i) i-;
41、/在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+定義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
42、為大小為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(a) (但達(dá)不到 INT_MAX) 如果要填最小: memset(a,128,sizeof(a) (但
43、達(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)始。字符串處理很多這里不一一列舉,只寫最常用的幾個(gè)。PascalC (包含)定義用:char sC+(包含)定義用:string s輸入輸出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能輸入輸出c+的字符串Cins;Couts = s 的區(qū)別: getline(cin,
44、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 number; /string - int coutnumber+100endl; ss string
45、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ò)程名(形參表)過(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)行后
46、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()int a = 5, b = 5;doit(a, b);cout a b;return 0;* 用若干
47、地址傳參可以給調(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=10;i+) coutxiendl; system(pause); return 0;*用指向函數(shù)的指
48、針作為參數(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 ma
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色家居產(chǎn)品免責(zé)任協(xié)議書3篇
- 2025年度農(nóng)村土地租賃與農(nóng)業(yè)廢棄物資源化利用項(xiàng)目合作合同2篇
- 二零二五年度全新音樂(lè)節(jié)演出活動(dòng)承辦服務(wù)合同3篇
- 2025年度年度合伙開(kāi)設(shè)中式快餐連鎖店合同3篇
- 2025年度農(nóng)村土地互換與農(nóng)業(yè)綠色發(fā)展合作協(xié)議
- 二零二五年度建筑用石材采購(gòu)與加工合作協(xié)議3篇
- 二零二五年度現(xiàn)代化工廠生產(chǎn)線整體轉(zhuǎn)讓協(xié)議3篇
- 2025年度養(yǎng)老院老人外出社區(qū)活動(dòng)安全保障合同3篇
- 二零二五年度金融科技基金公司投資合作協(xié)議3篇
- 二零二五年度房地產(chǎn)開(kāi)發(fā)企業(yè)借款合同3篇
- 《落花生》-完整版課件
- 2021年貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試試題及答案解析
- 安全文化培訓(xùn) (注冊(cè)安工再培訓(xùn))課件
- 色粉-MSDS物質(zhì)安全技術(shù)資料
- 骨科學(xué)研究生復(fù)試真題匯總版
- 石油化工鋼結(jié)構(gòu)工程施工及驗(yàn)收規(guī)范
- 遼海版六年級(jí)音樂(lè)上冊(cè)第8單元《3. 演唱 姐妹們上場(chǎng)院》教學(xué)設(shè)計(jì)
- 形勢(shì)任務(wù)教育宣講材料第一講——講上情
- 物業(yè)安全員考核實(shí)施細(xì)則
- 中國(guó)地質(zhì)大學(xué)(武漢)教育發(fā)展基金會(huì)籌備成立情況報(bào)告
- 第四章破產(chǎn)法(破產(chǎn)法)教學(xué)課件
評(píng)論
0/150
提交評(píng)論