




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、西南科技大學(xué)課 程 設(shè) 計 報 告課程名稱: 通信系統(tǒng)課程設(shè)計 設(shè)計名稱: 基于MATLAB的FM通信系統(tǒng)仿真姓 名: 學(xué) 號: 班 級: 通信0901 指導(dǎo)教師: 起止日期: 2012.6.4-2011.6.24 西南科技大學(xué)信息工程學(xué)院制課 程 設(shè) 計 任 務(wù) 書學(xué)生班級: 通信0901 學(xué)生姓名: 學(xué)號: 20096009 設(shè)計名稱: 基于MATLAB的FM通信系統(tǒng)仿真 起止日期: 2012.06.042012.06.24 指導(dǎo)教師: 楊俊平 設(shè)計要求:對FM通信系統(tǒng)有整體深入的理解,畫出對應(yīng)的通信系統(tǒng)的原理框圖;提出仿真方案,用FM對模擬輸入信號m(t)進行調(diào)制與解調(diào);完成仿真軟件的設(shè)
2、計并演示;提交詳細的設(shè)計報告。課 程 設(shè) 計 學(xué) 生 日 志時間設(shè)計內(nèi)容2012.06.09查閱資料,確定方案2012.06.12設(shè)計總體方案 2012.06.132012.06.20開始整體設(shè)計,用FM對模擬輸入信號m(t)進行調(diào)制與解調(diào),完成仿真軟件的設(shè)計2012.06.21檢查設(shè)計內(nèi)容是否符合要求,并對不足的地方進行修改2012.06.23提交詳細設(shè)計報告2012.06.25答辯課 程 設(shè) 計 評 語 表指導(dǎo)教師評語: 成績: 指導(dǎo)教師: 年 月 日基于MATLAB的FM通信系統(tǒng)仿真一、設(shè)計目的和意義1、熟悉MATLAB的使用方法,了解簡單函數(shù)、原理和掌握操作方法;2、加深對FM信號調(diào)制
3、及解調(diào)原理的理解;3、了解FM調(diào)制、解調(diào)基本結(jié)論、規(guī)律;4、增加自己在通信原理方面的動手能力;5、通過查資料等提高自學(xué)能力,對通信原理在最后有更深入的了解。二、設(shè)計原理 1、FM調(diào)制原理 如果幅度不變,起始相位為0,而瞬時角頻率是調(diào)制信號的線性函數(shù),則這種調(diào)制方式稱為頻率調(diào)制。 調(diào)頻信號可表達為 (1)調(diào)制信號為單余弦時 (2)當(dāng)對載波進行頻率調(diào)制時,可得調(diào)頻信號表達式為 (3) (4)上式中稱為調(diào)頻指數(shù),也可記作 (5) 圖1 圖2 圖1為直接調(diào)頻,圖2為間接調(diào)頻。由于實際相位調(diào)制器的調(diào)節(jié)范圍不可能超出,因而間接調(diào)頻的方法僅適合于相位偏移和頻率偏移不大的窄調(diào)制情形,而直接調(diào)頻則常用于寬帶調(diào)制
4、情形。根據(jù)調(diào)制后載波瞬時相位偏移的大小,可以將角頻率分為寬帶與窄帶兩種。寬帶與窄帶調(diào)制的區(qū)分并無嚴格的界限,但通常認為由調(diào)頻所引起的最大瞬時相位偏移遠小于30時,即 (6)稱為窄帶調(diào)頻。否則,稱為寬帶調(diào)頻。 為方便起見,假設(shè)正弦載波的振幅A1,則由式(1)調(diào)頻信號的一般表達式,有 = (7)通過化解,利用傅立葉變化公式可得NBFM信號的頻域表達式: (8) 在NBFM中,由于下邊頻為負,因而合成矢量不與載波同相,而是存在相位偏移,當(dāng)最大相位偏移滿足式(2-2)時,合成矢量的幅度基本不變,這樣就形成了FM信號。 NBFM信號頻譜 有兩類產(chǎn)生調(diào)頻信號的方法:直接法和倍頻法、在直接法中采用壓控振蕩器
5、作為產(chǎn)生調(diào)頻信號的調(diào)制器,壓控振蕩器的輸出頻率正比于所加的控制電壓。直接調(diào)頻法的優(yōu)點是可以得到很大的頻偏,其主要缺點是載頻會發(fā)生飄移,因而需要附加的穩(wěn)頻電路。在倍頻法中嗎,首先用類似于線性調(diào)制的的方法產(chǎn)生窄帶調(diào)頻信號,然后用倍頻的方法變換為寬帶調(diào)頻信號。FM解調(diào)原理非相干解調(diào)由于調(diào)頻信號的瞬時頻率正比于調(diào)制信號的幅度,因而調(diào)頻信號的解調(diào)器必須能產(chǎn)生正比于輸入頻率的輸出電壓,也就是當(dāng)輸入調(diào)頻信號為 (9)則解調(diào)輸出應(yīng)為:限幅器及帶通 (10)微分器包絡(luò)檢波低通濾波器 調(diào)頻信號的非相干解調(diào) 最簡單的解調(diào)器是鑒頻器,理想鑒頻器可看成由微分器和包絡(luò)檢波器的級聯(lián),限幅器的作用是消除信道中的噪聲和其他原因
6、引起的調(diào)頻波的幅度起伏,帶通濾波器(BPF)是讓調(diào)頻信號順利通過,同時濾除帶外噪聲及高次諧波分量。微分器的作用是把幅度恒定的調(diào)頻波變成幅度和頻率都隨原始信號變化的調(diào)幅調(diào)頻,即 (11)微分器的輸出是一個調(diào)幅調(diào)頻信號,如果只取其包絡(luò)信息,則正比于調(diào)制信號,因而濾去直流后,包絡(luò)檢波器的輸出為 (12) 上述解調(diào)方法稱為包絡(luò)檢波,其缺點之一是包絡(luò)檢波器對于由信道中噪聲和其他原因引起的幅度起伏也有反應(yīng),因而在使用中常在微分器之前加一個限幅器和帶通濾波器。相干解調(diào)帶通 相乘器低通微分 窄帶調(diào)頻信號的相干解調(diào)由于窄帶調(diào)頻信號可分解成同相分量和正交分量之和,因而可以采用線性調(diào)制中的相干解調(diào)法來進行解調(diào)。圖中
7、帶通濾波器用來限制信道所引入的噪聲,但調(diào)頻信號應(yīng)能正常通過。圖中所示相干解調(diào)器的輸出正比于調(diào)制信號f(t),相干解調(diào)法只適用于窄帶調(diào)頻。模擬通信系統(tǒng)簡介 傳遞信息所需的一切技術(shù)設(shè)備的總和稱為通信系統(tǒng)。通信系統(tǒng)由信息源和收信者、發(fā)送設(shè)備、傳輸媒介、接收設(shè)備幾部分組成。通信系統(tǒng)的一般模型如下圖所示:信息源收信者接收設(shè)備傳輸媒介傳輸設(shè)備干擾通信系統(tǒng)是為了有效可靠的傳輸信息,信息由信源發(fā)出,以語言、圖像、數(shù)據(jù)為媒體,通過電(光)信號將信息傳輸,由信宿接收。通信系統(tǒng)又可分為數(shù)字通信與模擬通信。角調(diào)制屬于模擬通信。信源是模擬信號,信道中傳輸?shù)囊彩悄M信號的系統(tǒng)為模擬通信。模擬通信系統(tǒng)的模型如下圖所示:調(diào)制
8、器: 使信號與信道相匹配, 便于頻分復(fù)用等。發(fā)濾波器: 濾除調(diào)制器輸出的無用信號。收濾波器: 濾除信號頻帶以外的噪聲,一般設(shè)N(t)為高斯白噪聲,則Ni(t)為窄帶白噪聲。4、高斯白噪聲信道特性設(shè)正弦波通過加性高斯白噪聲信道后的信號為 (13)其中,白噪聲的取值的概率分布服從高斯分布。調(diào)用MATLAB本身自帶的標準高斯白噪聲函數(shù)awgn,再加上調(diào)頻信號就可得到加有噪聲的信號。在實驗中選擇10db和30db兩種不同信噪比的高斯白噪聲進行比較。詳細設(shè)計步驟 在程序設(shè)計時,采用直接調(diào)頻的調(diào)制方法,利用matlab中的函數(shù)modulate,直接得到調(diào)頻信號表達式。要求出調(diào)制信號的時域和頻域曲線,可以根
9、據(jù)表達式利用plot函數(shù)畫出時域波形,再將進行傅里葉變換得到,根據(jù)表達式利用plot函數(shù)畫出頻域波形。要求出調(diào)頻信號sfm的時域和頻域曲線。根據(jù)調(diào)頻信號的一般表達式 (14)可知,要想求出調(diào)頻信號sfm的表達式,須得先求出的積分,然后再求出調(diào)頻信號的表達式,根據(jù)求出的表達式sfm利用plot函數(shù)畫出時域波形,再將sfm進行傅里葉變換,再利用plot函數(shù)畫出頻域波形。要求出解調(diào)信號diff_sfm的時域和頻域曲線。由于非相干解調(diào)對NBFM信號和WBFM信號均適用,而相干解調(diào)只適用于NBFM信號,根據(jù)題目要求,采用非相干解調(diào)方法。此時解調(diào)器的輸出應(yīng)為:。根據(jù)表達式利用plot函數(shù)畫出時域波形,再將
10、進行傅里葉變換,再利用plot函數(shù)畫出頻域波形。1、求已調(diào)信號(無噪聲條件下)的時域圖如下:2、求無噪聲條件下解調(diào)信號的時域曲線 由于非相干解調(diào)對NBFM信號及WBFM信號均適用,所以采用非相干的解調(diào)方法。加入小信噪比高斯白噪聲之后的調(diào)頻、解調(diào)時域圖加入大信噪比高斯白噪聲之后的調(diào)頻、解調(diào)時域圖求原調(diào)制信號、調(diào)頻信號、解調(diào)信號的頻譜圖對FM調(diào)制前后的時域波形用FFT函數(shù)進行傅利葉變換,進行傅立葉變化便分別得到調(diào)制信號與調(diào)制之后的FM信號以及解調(diào)信號的頻譜圖。利用plot函數(shù)畫出頻域波形。如下圖所示:求原調(diào)制信號、加入小信噪比高斯白噪聲后的調(diào)頻信號、解調(diào)信號的頻譜圖7、求原調(diào)制信號、加入大信噪比高
11、斯白噪聲后的調(diào)頻信號、解調(diào)信號的頻譜圖設(shè)計結(jié)果及分析 從調(diào)頻信號的時域波形圖可以看出,調(diào)頻信號的頻率隨調(diào)制信號而變化,產(chǎn)生頻偏,成為疏密波形。調(diào)制信號電平最高處對應(yīng)的瞬時正頻偏最大,波形最密,而在調(diào)制信號電平最低處對應(yīng)的瞬時頻偏最小,波形最疏。在無噪聲干擾的情況下,解調(diào)出的波形和原調(diào)制信號波形一樣,只是幅度有點不同。當(dāng)加入小信噪比高斯白噪聲之后,調(diào)頻信號不是很光滑,有很多毛刺,解調(diào)出的信號波形也出現(xiàn)失真,有毛刺;當(dāng)加入大信噪比高斯白噪聲后,噪聲干擾相對較小,所以調(diào)頻信號波形還是比較光滑,解調(diào)出的波形雖然存在一定的失真,但是波形還是和原調(diào)制信號波形差不多。大信噪比時寬帶調(diào)頻系統(tǒng)的信噪比增益是很高
12、的,它與調(diào)頻指數(shù)的立方成正比。大信噪比時寬帶調(diào)頻系統(tǒng)的信噪比增益是很高的,它與調(diào)頻指數(shù)的立方成正比。因此,加大調(diào)頻指數(shù),可使調(diào)頻系統(tǒng)的抗噪聲性能迅速改善。從它們的頻譜圖可以看出,調(diào)頻信號的頻譜是由載頻和無窮多組上、下邊頻組成,調(diào)頻信號是一種非線性頻率變換的過程,其解調(diào)也是一種非線性頻率變換過程。理論上調(diào)頻信號的頻帶應(yīng)為無限寬,但是從頻譜圖可以看出,其具有較大振幅的頻率分量還是集中在載頻附近,且上下邊頻在振幅上是對稱的。 FM調(diào)制與幅度調(diào)制相比,最突出的優(yōu)勢在于其較高的抗噪聲性能,但獲得這種優(yōu)勢的代價是角度調(diào)制占用比幅度調(diào)制信號更寬的帶寬。調(diào)頻是幅度恒定的已調(diào)信號,發(fā)射時,可采用高效率的丙類諧振
13、功率放大器將它放大到所需的發(fā)射功率,而在接收這些已調(diào)信號時將呈現(xiàn)出很強的抗干擾能力。FM波的幅度恒定不變,這使得它對非線性器件不甚敏感,給FM帶來了抗快衰落能力。利用自動增益控制和帶通限幅還可以消除快衰落造成的幅度變化效應(yīng)。這些特點使得NBFM對微波中繼系統(tǒng)頗具吸引力。WBFM的抗干擾能力強,可以實現(xiàn)帶寬與信噪比的互換,因而WBFM廣泛應(yīng)用于長距離高質(zhì)量的通信系統(tǒng)中,如空間和衛(wèi)星通信、調(diào)頻立體聲廣播、短波電臺等。WBFM的缺點是頻帶利用率低,存在門限效應(yīng),因此在接收信號弱、干擾大的情況下宜采用NBFM,這就是小型通信機常采用NBFM的原因。五、體會在做課程設(shè)計時,由于對FM和MATLAB學(xué)得不
14、是很好,也沒有更深入的了解過FM,所以剛開始時遇到了很多問題。由于我對MATLAB也不是很了解,使得我的編程過程更加艱難,之后通過借來的書籍及老師的輔導(dǎo)后,自己逐步對該課題有了一定的了解,逐步完成了課程設(shè)計。還有就是在編程時,由于對MATLAB中函數(shù)的理解不夠,而造成我在利用modulate這個函數(shù)時不知如何運用,之后通過MATLAB中的幫助選項后,再通過自己不斷調(diào)試逐步學(xué)會了這個函數(shù)的運用。解調(diào)時,本來想調(diào)用matlab里的解調(diào)函數(shù)的,但是用了之后解調(diào)出來的圖形不對,修改了好幾次都不對,所以后來就在網(wǎng)上搜了一個用于解調(diào)的函數(shù),完成了解調(diào)這一過程。在做時域到頻域的變化步驟時,由于要利用傅立葉函
15、數(shù)進行變化,剛開始完全不知該如何用代碼來表示傅立葉變換。最后查資料發(fā)現(xiàn)可以直接用matlab函數(shù)里的fft實現(xiàn)。通過這次課程設(shè)計,我了解了很多相關(guān)專業(yè)的知識,之前在學(xué)數(shù)字信號處理的時候也有用到matlab,但那時沒有認真學(xué)過這個軟件,在做課程設(shè)計時,查了很多關(guān)于matlab的資料,發(fā)現(xiàn)這個軟件真的很強大,應(yīng)該好好研究下這個軟件。雖然在課程設(shè)計開始時遇到許多難題,但通過自己努力以及與同學(xué)一起探討,逐步加深了理解,在老師的輔導(dǎo)下逐步完成了此次的課程設(shè)計。六、參考文獻【1】現(xiàn)代通信原理,曹志剛、錢亞生編著,清華大學(xué)出版社【2】MATLAB程序設(shè)計,聶祥飛、王海寶、譚澤富主編,西南交通大學(xué)出版社【3】
16、數(shù)字信號處理教程,程佩青編著,清華大學(xué)出版社【4】信號與系統(tǒng)(第二版),劉樹棠,西安交通大學(xué)出版社【5】通信電路(第二版),沈偉慈編著,西安電子科技大學(xué)出版社實驗程序:dt=0.001; %設(shè)定時間步長t=0:dt:1.5; %產(chǎn)生時間向量am=5; %設(shè)定調(diào)制信號幅度fm=5; %設(shè)定調(diào)制信號頻率mt=am*cos(2*pi*fm*t); %生成調(diào)制信號fc=50; %設(shè)定載波頻率ct=cos(2*pi*fc*t); %生成載波fs=1000; %抽樣頻率sfm=modulate(mt,fc,fs,FM); %調(diào)頻信號sfm1=sfm+awgn(sfm,10,0); %加入小信噪比后的調(diào)頻信
17、號sfm2=sfm+awgn(sfm,30,0); %加入大信噪比后的調(diào)頻信號%*FM解調(diào)*for i=1:length(t)-1 %接受信號通過微分器處理 diff_sfm(i)=(sfm(i+1)-sfm(i)./dt;enddiff_sfm1 = abs(hilbert(diff_sfm); %hilbert變換,求絕對值得到瞬時幅度(包%絡(luò)檢波)zero=(max(diff_sfm1)-min(diff_sfm1)/2;diff_nsfm1=diff_sfm1-zero; %無噪聲干擾下的解調(diào)信號for i=1:length(t)-1 %接受信號通過微分器處理 diff_sfm1(i)
18、=(sfm1(i+1)-sfm1(i)./dt;enddiff_sfm2 = abs(hilbert(diff_sfm1); %hilbert變換,求絕對值得到瞬時幅度(包%絡(luò)檢波)zero=(max(diff_sfm2)-min(diff_sfm2)/2;diff_nsfm2=diff_sfm2-zero;%小信噪比高斯白噪聲下的解調(diào)信號for i=1:length(t)-1 %接受信號通過微分器處理 diff_sfm2(i)=(sfm2(i+1)-sfm2(i)./dt;enddiff_sfm3 = abs(hilbert(diff_sfm2); %hilbert變換,求絕對值得到瞬時幅度
19、(包%絡(luò)檢波)zero=(max(diff_sfm3)-min(diff_sfm3)/2;diff_nsfm3=diff_sfm3-zero;%大信噪比高斯白噪聲下的解調(diào)信號%*%*對調(diào)制信號m(t)求傅里葉變換*x=fft(mt,1024);f=(0:length(x)-1)*fs/length(x)-fs/2;x=x/1000; %縮放,便于在頻譜圖上整體觀察%*對已調(diào)信號求傅里葉變換*y=fft(sfm,1024);f=(0:length(y)-1)*fs/length(y)-fs/2;y=y/1000;y1=fft(sfm1,1024);f=(0:length(y1)-1)*fs/le
20、ngth(y1)-fs/2;y1=y1/1000;y2=fft(sfm2,1024);f=(0:length(y2)-1)*fs/length(y2)-fs/2;y2=y2/1000;%*對解調(diào)信號求傅里葉變換*z=fft(diff_nsfm1,1024);f=(0:length(z)-1)*fs/length(z)-fs/2;z=z/1000;z2=fft(diff_nsfm2,1024);f=(0:length(z2)-1)*fs/length(z2)-fs/2;z2=z2/1000;z3=fft(diff_nsfm3,1024);f=(0:length(z3)-1)*fs/length(
21、z3)-fs/2;z3=z3/1000;%原調(diào)制信號、載波信號和已調(diào)信號波形%*figure(1)*figure(1)subplot(3,1,1);plot(t,mt); %繪制調(diào)制信號的時域圖xlabel(時間t);title(調(diào)制信號的時域圖);subplot(3,1,2);plot(t,ct); %繪制載波的時域圖xlabel(時間t);title(載波的時域圖);subplot(3,1,3);plot(t,sfm); %繪制已調(diào)信號的時域圖xlabel(時間t);title(無噪聲干擾下的已調(diào)信號的時域圖);%原調(diào)制信號、無噪聲條件下已調(diào)信號和解調(diào)信號波形%*figure(2)*fig
22、ure(2)subplot(3,1,1);plot(t,mt); %繪制調(diào)制信號的時域圖xlabel(時間t);title(調(diào)制信號的時域圖);subplot(3,1,2);plot(t,sfm); %繪制已調(diào)信號的時域圖xlabel(時間t);title(無噪聲條件下已調(diào)信號的時域圖); subplot(3,1,3); %繪制無噪聲條件下解調(diào)信號的時域圖plot(1:length(diff_nsfm1)./1000,diff_nsfm1./400,r);xlabel(時間t); title(無噪聲條件下解調(diào)信號的時域圖);%原調(diào)制信號、加入小信噪比高斯白噪聲后的載波信號和已調(diào)信號的曲線%*f
23、igure(3)*figure(3)subplot(3,1,1);plot(t,mt); %繪制調(diào)制信號的時域圖xlabel(時間t);title(調(diào)制信號的時域圖);subplot(3,1,2);plot( t,sfm1); %繪制含小信噪比高斯白噪聲已調(diào)信號的時域圖xlabel(時間t);title(含小信噪比高斯白噪聲已調(diào)信號的時域圖);subplot(3,1,3); %繪制含小信噪比高斯白噪聲解調(diào)信號的時域圖plot(1:length(diff_nsfm2)./1000,diff_nsfm2./400,r);xlabel(時間t); title(含小信噪比高斯白噪聲解調(diào)信號的時域圖);
24、%原調(diào)制信號、加入大信噪比高斯白噪聲后的載波信號和已調(diào)信號的曲線%*figure(4)*figure(4)subplot(3,1,1);plot(t,mt); %繪制調(diào)制信號的時域圖xlabel(時間t);title(調(diào)制信號的時域圖);subplot(3,1,2);plot( t,sfm2); %繪制含大信噪比高斯白噪聲已調(diào)信號的時域圖xlabel(時間t);title(含大信噪比高斯白噪聲已調(diào)信號的時域圖);subplot(3,1,3); %繪制含大信噪比高斯白噪聲解調(diào)信號的時域圖plot(1:length(diff_nsfm3)./1000,diff_nsfm3./400,r);xlab
25、el(時間t); title(含大信噪比高斯白噪聲解調(diào)信號的時域圖);%原調(diào)制信號和已調(diào)信號、解調(diào)信號在頻域內(nèi)的圖形%*figure(5)*figure(5)subplot(3,1,1);plot(f,abs(fftshift(x) ; %fftshift:將FFT中的DC分量移到頻譜中心xlabel(頻率f);title(原調(diào)制信號的頻譜圖);subplot(3,1,2);plot(f,abs(fftshift(y);xlabel(頻率f);title(已調(diào)信號的頻譜圖);subplot(3,1,3);plot(f,abs(fftshift(z);xlabel(頻率f);title(解調(diào)信號
26、的頻譜圖);%原調(diào)制信號和加入小信噪比噪聲后的已調(diào)信號、解調(diào)信號在頻域內(nèi)的圖形%*figure(6)*figure(6)subplot(3,1,1);plot(f,abs(fftshift(x) ; %fftshift:將FFT中的DC分量移到頻譜中心xlabel(頻率f);title(原調(diào)制信號的頻譜圖);subplot(3,1,2);plot(f,abs(fftshift(y1);xlabel(頻率f);title(小信噪比下已調(diào)信號的頻譜圖);subplot(3,1,3);plot(f,abs(fftshift(z2);xlabel(頻率f);title(小信噪比下解調(diào)信號的頻譜圖);%
27、原調(diào)制信號和加入大信噪比噪聲號后的已調(diào)信號、解調(diào)信號在頻域內(nèi)的圖形%*figure(7)*figure(7)subplot(3,1,1);plot(f,abs(fftshift(x) ; %fftshift:將FFT中的DC分量移到頻譜中心xlabel(頻率f);title(原調(diào)制信號的頻譜圖);subplot(3,1,2);plot(f,abs(fftshift(y2);xlabel(頻率f);title(大信噪比下已調(diào)信號的頻譜圖);subplot(3,1,3);plot(f,abs(fftshift(z3);xlabel(頻率f);title(大信噪比下解調(diào)信號的頻譜圖);附錄資料:不需
28、要的可以自行刪除c語言典型問題處理方法小結(jié)循環(huán)問題(1)、數(shù)論問題1、求素數(shù) for(i=2;i1,如果它僅有平凡約數(shù)1和a,則我們稱a為素數(shù)(或質(zhì)數(shù))。整數(shù) 1 被稱為基數(shù),它既不是質(zhì)數(shù)也不是合數(shù)。整數(shù) 0 和所有負整數(shù)既不是素數(shù),也不是合數(shù)。 2、求最大公約數(shù)和最小公倍數(shù)a、 if(ab) t=a; a=b; b=t; for(i=a;i=1;i-) if(a%i=0&b%i=0) break; printf(largest common divisor:%dn,i); printf(least common multiple:%dn,(a*b)/is);b、輾轉(zhuǎn)相除法求解 a1=a; b
29、1=b; while(a%b!=0) t=a%b; a=b; b=t; printf(largest common divisor:%dnleast common multiple:%d,b,a1*b1/b);3、求完數(shù) 一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。 例如:6的因子為1、2、3,而6123,因此6是“完數(shù)”。for(a=1;a=1000;a+) s=0; for(i=1;i=a) break; if(s=a) printf(%dt,a);注意S=0所放的位置 4、分解質(zhì)因數(shù) 將一個整數(shù)寫成幾個質(zhì)因數(shù)的連乘積,如: 輸入36,則程序輸出36=2*2*3*3 。解一、看似
30、簡單,但要自己完整地寫出來還真不容易!竟然還動用了goto語句,正好可以熟悉一下goto語句的用法!main() int a,z,i; clrscr(); scanf(%d,&a);判斷下一個數(shù)開始有要重新從2開始了。所以用loop語句回到for語句,這是for語句仍從2初始化。從2開始的原則不變,變的是a的值。 loop: for(z=2;z=a;z+)判斷是否為質(zhì)數(shù)for(i=2;i=z;i+) if(z%i=0) break;判斷是否為a的質(zhì)因數(shù) if(z=i) if(a%z=0) k+; if(k=1) printf(%d=%d,a1,z);用計數(shù)器來解決每行輸入不同的問題。 else
31、 printf(*%d,z); a/=z; goto loop; 解二:main() int n, k=2, isfirst=1; printf(Input n=); scanf(%d,&n); while(k=n) if(n%k=0) if(isfirst) printf(%d=%d, n, k); isfirst=0; else printf(*%d,k); n/=k; else k+; printf(n);5、從鍵盤輸入兩個整數(shù),輸出這兩個整數(shù)的商的小數(shù)點后所有1000位整數(shù) for(i=1;i=2;i-) if(fm%i=0&fz%i=0) fz/=i; fm/=i; z=fz/fm;
32、 fzx=fz%fm; if(fzx=0) printf(%d%d/%d-%d%d/%d=%dn,z1,fz1,fm1,z2,fz2,fm2,z); else if(z=0) printf(%d%d/%d-%d%d/%d=%d/%dn,z1,fz1,fm1,z2,fz2,fm2,fzx,fm); else printf(%d%d/%d-%d%d/%d=%d%d/%dn,z1,fz1,fm1,z2,fz2,fm2,z,fzx,fm);(2)近似問題1、書P122習(xí)題4-6注意千萬不要忘記添加#include “math.h”#include math.hmain() float x,j=1,k,
33、s,so; int n; scanf(%f,&x); s=x; so=x+1; for(n=1;fabs(s-so)1e-6;n+) for(k=1;k1e-6) x=(x1+x2)/2; f=x*x*x+4*x*x-10;可以用/*if(f*f10) x2=x; else x1=x; printf(%fn,x);(3)枚舉法(4)數(shù)列問題二、數(shù)組問題(1)排序問題1、從小到大排序main() int a10,i,j,t; for(i=0;i10;i+) scanf(%d,&ai); for(i=1;i10;i+) for(j=0;jaj+1) t=aj+1;aj+1=aj;aj=t; for
34、(i=0;i10;i+) printf(%d ,ai); printf(n);注意排序問題:1、須迅速,熟練,無差錯經(jīng)常插入在程序中間2、現(xiàn)使用最大數(shù)下沉冒泡法還可以使用最小數(shù)上浮冒泡法3、j控制前面一個數(shù)和后面一個數(shù)一一比較。由于是最大數(shù)下沉,i+1后j仍要從0開始。4、i控制這樣的操作一共要做多少次5、注意i j的控制次數(shù)2、從大到小排序main()現(xiàn)使用最大數(shù)上浮冒泡法還可使用最小數(shù)下沉冒泡法 int a10,i,j,t; for(i=0;i10;i+) scanf(%d,&ai); for(i=1;i=i;j-) if(ajaj-1) t=aj-1; aj-1=aj; aj=t; fo
35、r(i=0;i10;i+) printf(%d ,ai);(2)二維數(shù)組三、字符或字符串輸入輸出問題(1)字符打印1、打印*此類題的溯源為書P122 4.11(1),其他題都是它的拓展 for (i=1;i=n;i+) 一共要輸出的行數(shù) for(j=1;j=i;j+) 每行要打印的*數(shù) printf(*); printf(n); a、*解題要點:此類題關(guān)鍵在于找到每行要打印的個數(shù)和行數(shù)的關(guān)系。此題j=i j=n-i+1b、* for(i=1;i=n;i+) 一共要輸出的行數(shù) for(j=1;j=n-i;j+) 控制空格數(shù) printf( ); for(k=1;k=i;k+) 每行要打印的*數(shù)
36、printf(*); printf(n); c、 * * *解題要點:在出現(xiàn)空格的時候,在找到每行要打印的*個數(shù)和行數(shù)的關(guān)系后,還應(yīng)找到空格和行數(shù)的關(guān)系,分不同的參數(shù)進行循環(huán)。此題k=i j=n-i j=i-1k=n-i+1d、* * for(i=1;i=n;i+) for(j=1;j=n-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); * *e、 * * * for(i=1;i=n-1;i+) for(j=1;j=i;j+) printf( ); for(k=1;k=2*(n-1-i)+1;k+) printf(*); p
37、rintf(n); for(i=1;i=n;i+) for(j=1;j=n-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); * * * * * *2、打印9*9乘法表解題要點:注意尋找行與列的規(guī)律。i*ji代表列j代表行for(i=1;i=9;i+) for(j=1;j=9;j+) printf(%-3d ,i*j); 注意輸出格式的控制 printf(n); 3、九九乘法表1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 6 9 12 15 18 21 24 27 9 18 27 36 45
38、 54 63 72 814、楊暉三角形11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1(2)字符串打印問題for(i=1;i=7;i+) ai1=1; aii=1; for(i=3;i=7;i+) for(j=2;j=i-1;j+) aij=ai-1j-1+ai-1j; gets(a); puts(a); for(i=1;i0;j-) aj=aj-1; a0=t; for(k=0;k=a&ai=z) ai-=32; puts (a);3、逆序輸出gets (a); c=strlen(a); for(i=0;i=0;i-) 藍色部分可以
39、簡寫為綠色部分coutai-1;4、如輸入:ab1 3,;z 輸出:ab1注意點:1、= =2、while語句的使用處體會3、全面考慮問題 3,;zgets(a); while(a0= ) for(i=0;ai!=0;i+) ai=ai+1; for(i=0;ai!=0;i+)if(ai= &ai+1!= ) printf(n); else if(ai= &ai+1= ) for(k=i;ak!=0;k+) ak+1=ak+2; i-; elseprintf(%c,ai);5、輸入3個字符串,按從小到大排序輸出這3個字符串。 使用一個兩維數(shù)組貯存多個字符串char a8181;注意:如何使用一
40、個兩維數(shù)組貯存多個字符串 int i,j; for(i=0;i3;i+) gets(ai); for(i=0;i3;i+) puts(ai);注意:1、scanf(%d%s,&n,str) 其中%s為字符串格式2、逐個給字符串賦值的方法見書140頁。 不可for(i=0;ai!=0;i+)3、stri=stri-A+10;4、pow函數(shù)5、任何進制轉(zhuǎn)為十進制的方法6、輸入一個整數(shù)n和一個字符串str,計算并輸出n進制數(shù)str的值。 如輸入:7 16則輸出:13(16)7=(13)10如輸入:16 3A則輸出:58(3A)16=(58)10#include stdio.h#include mat
41、h.hmain() char str81; int n,i,s=0,t; clrscr(); scanf(%d%s,&n,str); for(i=0;stri!=0;i+) if(stri=A) stri=stri-A+10; else stri=stri-0; t=strlen(str); for(i=0;stri!=0;i+) s+=strt-i-1*pow(n,i); printf(%d,s);編寫程序,將一個十進制正整數(shù)轉(zhuǎn)換成十六進制數(shù)。 注意類比#include main()char a20;int x,i=0,j;clrscr();scanf(%d,&x);while(x) if(
42、x%16=10&x%16=0;j-)printf(%c,aj);printf(n);7、輸入一個字符串,將其中的縮寫形式展開,并輸出展開后的該字符串。所謂展開縮寫形式就是將其中由大小寫字母或數(shù)字構(gòu)成的形如a-f、U-Z、3-8 的形式展開成為 abcdef 、UVWXYZ 、345678,若出現(xiàn)f-a、A-7、9-5等形式則不予理睬。例如: 輸入:qwe246e-hA-d$-%4-7A-Dz-xp-R4-0輸出:qwr246efghA-d$-%4567ABCDz-xp-R4-0main() char a81; int i,c,s,k,t; gets(a); for(i=0;ai!=0;i+)
43、if(ai=-) if(ai-1=A&ai+1=a&ai+1=0&ai+1i;k-)ak+c-2=ak;as-1+c-2+1=0; for(;i=t;i+) ai=ai-1+1; puts(a);補充:循環(huán):求:a+aa+aaa+.的值#includevoid main()int a,n,i=1,sn=0,tn=0;coutinput a and nan;while(i=n)tn=tn+a;sn+=tn;a*=10;i+;coutthe answer is snendl;兩個乒乓球隊進行比賽,各出3人。甲隊為A,B,C;已對是X,Y,Z;已經(jīng)抽簽決定比賽名單。有人向隊員大廳比賽的名單。A說他不
44、和X比,C說他不和X,Z比。請編程序找出3對賽手的名單。#includevoid main()char i,j,k;for(i=X;i=Z;i+)for(j=X;j=Z;j+)if(i!=j)for (k=X;k=Z;k+)if(i!=k&j!=k)if(i!=X&k!=X&k!=Z)coutA-i B-j C-kendl;枚舉口袋中有紅,黃,藍,白,黑5種顏色的球若干。每次從口袋中任意取出3歌,問得到3種不同顏色球的可能取法,輸出每種排列的情況。#include#include /在C語言中不用加這句void main()enum colorred ,yellow ,blue,white,
45、black;color pri;int i,j,k,n=0,loop;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for (k=red;k=black;k+)if(k!=i)&(k!=j)n+;coutsetw(3)n; /setw是輸出格式的限定for(loop=1;loop=3;loop+)switch(loop)case 1:pri=color(i);break;case 2:pri=color(j);break;case 3:pri=color(k);break;default:break;switch(pri)case red:coutsetw(8)red;break;case yellow:coutsetw(8)yellow;break;case blue:coutse
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省東莞市萬江區(qū)2025屆三年級數(shù)學(xué)第二學(xué)期期末學(xué)業(yè)水平測試試題含解析
- 江蘇工程職業(yè)技術(shù)學(xué)院《領(lǐng)導(dǎo)科學(xué)雙語》2023-2024學(xué)年第一學(xué)期期末試卷
- 精準把握2025年保安證試題及答案
- 山東省泰安市第一中學(xué)2025年高三第二學(xué)期第一次聯(lián)考生物試題含解析
- 煙臺大學(xué)《文學(xué)欣賞與評論》2023-2024學(xué)年第一學(xué)期期末試卷
- 山西省臨汾市2025年高三第一次模擬考試生物試題文試題含解析
- 西安市周至縣2025屆六年級下學(xué)期小升初招生數(shù)學(xué)試卷含解析
- 新疆生產(chǎn)建設(shè)兵團農(nóng)八師一四三團一中2025年第二學(xué)期高三期末生物試題含解析
- 河北省承德市聯(lián)校2025年高三第四次月考(4月)化學(xué)試題含解析
- 12 學(xué)前教育與情緒調(diào)節(jié)的關(guān)系 - 模擬試題及答案
- 商務(wù)談判實務(wù)中職PPT完整全套教學(xué)課件
- 高中生物脊蛙反射實驗公開課課件
- 部編版三年級下冊語文全冊教案表格版
- 流動式起重機分解組塔施工方案(晉城東修改)
- 11ZJ401樓梯欄桿安裝圖集
- 2023年江蘇醫(yī)藥職業(yè)學(xué)院單招面試題庫及答案解析
- 石腦油安全技術(shù)說明書(msds)
- 雷雨中的破折號使用
- 公安機關(guān)業(yè)務(wù)技術(shù)用房建設(shè)標準
- GB/T 23827-2009道路交通標志板及支撐件
- 人教版四年級英語《Weather》說課稿(定稿)-PPT
評論
0/150
提交評論