基于Matlab的IIR數(shù)字低通濾波器的計(jì)_第1頁
基于Matlab的IIR數(shù)字低通濾波器的計(jì)_第2頁
基于Matlab的IIR數(shù)字低通濾波器的計(jì)_第3頁
基于Matlab的IIR數(shù)字低通濾波器的計(jì)_第4頁
基于Matlab的IIR數(shù)字低通濾波器的計(jì)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、陜西理工學(xué)院課程設(shè)計(jì)第 頁 引言當(dāng)今,數(shù)字信號(hào)處理技術(shù)正飛速發(fā)展,它不但自成一門學(xué)科,更是以不同的形式滲透到其他學(xué)科。它與國民經(jīng)濟(jì)息息相關(guān),與國防建設(shè)緊密相連;它影響和改變著我們的生產(chǎn)、生活方式,因此受到人們普遍的關(guān)注。數(shù)字化、智能化和網(wǎng)絡(luò)化是當(dāng)代信息技術(shù)發(fā)展的大趨勢(shì),而數(shù)字化是智能化和網(wǎng)絡(luò)化的基礎(chǔ)。數(shù)字濾波技術(shù)是數(shù)字信號(hào)分析、處理技術(shù)的重要分支。無論是信號(hào)的獲取、傳輸,還是信號(hào)的處理和交換都離不開濾波技術(shù),它對(duì)于信號(hào)安全可靠和有效靈活地傳輸是至關(guān)重要的。在所有的電子系統(tǒng)中,使用最多技術(shù)最復(fù)雜的要算數(shù)字濾波器了。數(shù)字濾波器的優(yōu)劣直接決定產(chǎn)品的優(yōu)劣。因此,在教學(xué)中,我們也要學(xué)會(huì)低通濾波器的設(shè)計(jì)1

2、 IIR數(shù)字濾波器1.1數(shù)字濾波器的概念濾波器是指用來對(duì)輸入信號(hào)進(jìn)行濾波的硬件和軟件。數(shù)字濾波器是對(duì)數(shù)字信號(hào)實(shí)現(xiàn)濾波的線性時(shí)不變系統(tǒng)。數(shù)字濾波器可以理解為是一個(gè)計(jì)算程序或算法將代表輸入信號(hào)的數(shù)字時(shí)間序列轉(zhuǎn)化為代表輸出信號(hào)的數(shù)字時(shí)間序列并在轉(zhuǎn)化過程中使信號(hào)按預(yù)定的形式變化。數(shù)字濾波實(shí)質(zhì)上是一種運(yùn)算過程實(shí)現(xiàn)對(duì)信號(hào)運(yùn)算處理。數(shù)字濾波器和模擬濾波器相比因?yàn)樾盘?hào)的形式和實(shí)現(xiàn)濾波的方法不同數(shù)字濾波器具有比模擬濾波器精度高、穩(wěn)定、體積小、重量輕、靈活、不要求阻抗匹配等優(yōu)點(diǎn)。輸入數(shù)字信號(hào)數(shù)字序列通過特定的運(yùn)算轉(zhuǎn)變?yōu)檩敵龅臄?shù)字序列因此數(shù)字濾波器本質(zhì)上是一個(gè)完成特定運(yùn)算的數(shù)字計(jì)算過程也可以理解為是一臺(tái)計(jì)算機(jī)。描述

3、離散系統(tǒng)輸出與輸入關(guān)系的卷積和差分方程只是給數(shù)字信濾波器提供運(yùn)算規(guī)則使其按照這個(gè)規(guī)則完成對(duì)輸入數(shù)據(jù)的處理。1.2 IIR數(shù)字濾波器結(jié)構(gòu) IIR數(shù)字濾波器的系統(tǒng)函數(shù)可以寫成封閉函數(shù)的形式。IIR數(shù)字濾波器采用遞歸型結(jié)構(gòu),即結(jié)構(gòu)上帶有反饋環(huán)路。運(yùn)算結(jié)構(gòu)通常由延時(shí)、乘以系數(shù)和相加等基本運(yùn)算組成,可以組合成直接型、正準(zhǔn)型、級(jí)聯(lián)型、并聯(lián)型四種結(jié)構(gòu)形式,都具有反饋回路。由于運(yùn)算中的舍入處理,使誤差不斷累積,有時(shí)會(huì)產(chǎn)生微弱的寄生振蕩。IIR數(shù)字濾波器在計(jì)上可以借助成熟的模擬濾波器的成果,如巴特沃斯、契比雪夫和橢圓濾波器等,有現(xiàn)成的設(shè)計(jì)數(shù)據(jù)或圖表可查,其設(shè)計(jì)工作量比較小,對(duì)計(jì)算工具的要求不高。在設(shè)計(jì)一個(gè)IIR

4、數(shù)字濾波器時(shí),我們根據(jù)指標(biāo)先寫出模擬濾波器的公式,然后通過一定的變換,將模擬濾波器的公式轉(zhuǎn)換成數(shù)字濾波器的公式。1.3 數(shù)字低通濾波器的設(shè)計(jì)原理數(shù)字濾波器(Digital Filter,簡稱DF)是指輸入、輸出均為數(shù)字信號(hào),通過一定運(yùn)算關(guān)系改變輸入信號(hào)所含頻率成分的相對(duì)比例或者濾除某些頻率成分的器件。DF根據(jù)其實(shí)現(xiàn)的網(wǎng)絡(luò)結(jié)構(gòu)或者從單位脈沖響應(yīng)函數(shù)的時(shí)域特性分類,可分為兩種,即無限脈沖響應(yīng)(IIR)濾波器和有限脈沖響應(yīng)(FIR)濾波器。數(shù)字濾波器分為有限脈沖響應(yīng)數(shù)字濾波器(FIR)和無限脈沖響應(yīng)數(shù)字濾波器(IIR)。我們可以借助于模擬濾波器的理論和設(shè)計(jì)方法來設(shè)計(jì)IIR濾波器的方法,即根據(jù)給定的濾

5、波器技術(shù)指標(biāo),確定濾波器的系統(tǒng)函數(shù),使其盡可能地逼近濾波器的指標(biāo),并用MATLAB進(jìn)行仿真。數(shù)字濾波器的最通用的方法是借助于模擬濾波器的設(shè)計(jì)方法。模擬濾波器設(shè)計(jì)已經(jīng)有了相當(dāng)成熟的技術(shù)和方法,有完整的設(shè)計(jì)公式,還有比較完整的圖表可以查詢,因此設(shè)計(jì)數(shù)字濾波器可以充分利用這些豐富的資源來進(jìn)行。 數(shù)字濾波器是指輸入、輸出都是離散時(shí)間信號(hào),通過一定運(yùn)算關(guān)系改變輸入信號(hào)所含頻率成分的相對(duì)比例或者濾除某些頻率成分的器件。數(shù)字濾波器在數(shù)字信號(hào)處理中起著非常重要的作用,在信號(hào)的過濾、檢測(cè)與參數(shù)的估計(jì)等方面,是使用最為廣泛的一種線性系統(tǒng)。 為了保證轉(zhuǎn)換后H(z)穩(wěn)定,必須滿足以下條件:第一:因果穩(wěn)定的模擬濾波器轉(zhuǎn)

6、換成數(shù)字濾波器,仍是因果穩(wěn)定的,s平面的左半平面映射z平面的單位圓內(nèi)部;第二:數(shù)字濾波器的頻率響應(yīng)模仿模擬濾波器的頻響,s平面的虛軸映射z平面的單位圓,相應(yīng)的頻率之間成線性關(guān)系。運(yùn)用數(shù)字濾波器的方法有兩種:一是采用計(jì)算機(jī)軟件進(jìn)行,就是把所要完成的工作通過程序讓計(jì)算機(jī)來實(shí)現(xiàn);二是設(shè)計(jì)專用的數(shù)字處理硬件。這個(gè)地方主要用到的就是第一種方法。即是用Matlab提供的信號(hào)處理工具箱來實(shí)現(xiàn)數(shù)字濾波器。Matlab信號(hào)處理程序提供了豐富的設(shè)計(jì)方法,可以使得繁瑣的程序設(shè)計(jì)簡化成函數(shù)的調(diào)用,只要以正確的指標(biāo)參數(shù)調(diào)用函數(shù),就可以正確快捷地得到設(shè)計(jì)結(jié)果.它們的系統(tǒng)函數(shù)分別為: (1.1) (1.2)1.1式中H(z

7、)稱為N階IIR數(shù)字濾波器系統(tǒng)函數(shù);1.2式中H(z)稱為N-1階FIR數(shù)字濾波器系統(tǒng)函數(shù)。典型的模擬低通濾波器的指標(biāo)如下:分別為通帶頻率和阻帶頻率,分別為通帶和阻帶容限(峰波紋值)。在通帶內(nèi)要求,有時(shí)指標(biāo)由通帶最大衰減和阻帶最小衰減給出,定義如下: 和第二種常用指標(biāo)是用參數(shù)和A表示通帶和阻帶要求,如圖1.1所示圖1.1 二者之間的關(guān)系為:和,根據(jù)這幾個(gè)參數(shù)可導(dǎo)出另外兩個(gè)參數(shù)d,k,分別稱為判別因子和選擇性因子。 BUTTERWORTH低通濾波器:幅度平方函數(shù)定義為,N為濾波器階數(shù),為截止頻率。當(dāng)時(shí),有,為3DB帶寬。BUTTERWORTH低通濾波器系統(tǒng)函數(shù)有以下形式:由模擬濾波器設(shè)計(jì)IIR數(shù)

8、字濾波器,必須建立好s平面和z平面的映射關(guān)系。使模擬系統(tǒng)函數(shù)變換成數(shù)字濾波器的系統(tǒng)函數(shù),通常采用沖激相應(yīng)不變法和雙線性變換法。沖激相應(yīng)不變法存在頻譜混疊現(xiàn)象,雙線性變換法消除了這一線象,在IIR數(shù)字濾波器的設(shè)計(jì)中得到了更廣泛的應(yīng)用。 s平面和Z平面的映射關(guān)系為,將和待入數(shù)字頻率和等效的模擬頻率之間的映射關(guān)系:,由于二者不是線性關(guān)系,所以稱為預(yù)畸變。1.4 方案選擇一般濾波器的設(shè)計(jì)有兩種方法:直接法或者間接法,間接法是通過模擬濾波器的設(shè)計(jì)方法進(jìn)行的,設(shè)計(jì)步驟:先設(shè)計(jì)過渡模擬濾波器得到系統(tǒng)函然后將按照某種方法裝換成數(shù)字濾波器的系統(tǒng)函數(shù)H(z)。由于這種方法已經(jīng)比較成熟所以我采用種種方法設(shè)計(jì):利用巴

9、特沃斯設(shè)計(jì)數(shù)字低通濾波器。成熟的模擬濾波器設(shè)計(jì)方法主要有脈沖響應(yīng)不變法和雙線性變換法。2.設(shè)計(jì)結(jié)果及分析2.1用脈沖相應(yīng)不變法設(shè)計(jì)IIR數(shù)字濾波器脈沖響應(yīng)不變法使得數(shù)字濾波器的單位脈沖響應(yīng)完全模仿模擬濾波器的單位沖激響應(yīng)也就是時(shí)域逼近良好而且模擬頻率和數(shù)字頻率之間呈線性關(guān)系=T。因而,一個(gè)線性相位的模擬濾波器。脈沖響應(yīng)不變法的最大缺點(diǎn)是有頻率響應(yīng)的混疊效應(yīng)。所以脈沖響應(yīng)不變法只適用于限帶的模擬濾波器(例如衰減特性很好的低通或帶通濾波器),而且高頻衰減越快,混疊效應(yīng)越小。至于高通和帶阻濾波器,由于它們?cè)诟哳l部分不衰減因此將完全混淆在低頻響應(yīng)中。如果要對(duì)高通和帶阻濾波器采用脈沖響應(yīng)不變法就必須先對(duì)

10、高通和帶阻濾波器加保護(hù)濾波器,濾掉高于折疊頻率以上的頻率然后再使用脈沖響應(yīng)不變法轉(zhuǎn)換為數(shù)字濾波器。當(dāng)然這樣會(huì)進(jìn)一步增加設(shè)計(jì)復(fù)雜性和濾波器的階數(shù)。程序設(shè)計(jì):fp=2100;fs=8000; Fs=20000;Rp=0.5;Rs=30;T=1/Fs; %設(shè)計(jì)指標(biāo)W1p=fp/Fs*2;W1s=fs/Fs*2;%求歸一化頻率N,Wn=buttord(W1p,W1s,Rp,Rs,s);%確定butterworth的最小介數(shù)N和頻率參數(shù)Wnz,p,k=buttap(N); %設(shè)計(jì)模擬低通原型的零極點(diǎn)增益參數(shù)bp,ap=zp2tf(z,p,k); %將零極點(diǎn)增益轉(zhuǎn)換成分子分母參數(shù)bs,as=lp2lp(b

11、p,ap,Wn*pi*Fs);%將低通原型轉(zhuǎn)換為模擬低通bz,az=impinvar(bs,as,Fs); %用脈沖響應(yīng)不變法進(jìn)行模數(shù)變換sys=tf(bz,az,T); %給出傳輸函數(shù)H(Z)H,W=freqz(bz,az,512,Fs); %生成頻率響應(yīng)參數(shù)subplot(2,1,1);plot(W,20*log10(abs(H); %繪制幅頻響應(yīng)grid on; %加坐標(biāo)網(wǎng)格xlabel(頻率/Hz);ylabel(振幅/dB);subplot(2,1,2);plot(W,abs(H); grid on;xlabel(頻率/Hz);ylabel(振幅/H);運(yùn)行結(jié)果:N =4bz = 0

12、.0000 0.0999 0.1914 0.0252az= 1.0000 -1.4336 1.0984 -0.4115 0.0627程序圖如圖2.1:圖2.1 脈沖響應(yīng)不變法2.2.用雙線性變換法設(shè)計(jì)IIR數(shù)字濾波器雙線性變換的這個(gè)特點(diǎn)是靠頻率的嚴(yán)重非線性關(guān)系而得到的由于這種頻率之間的非線性變換關(guān)系就產(chǎn)生了新的問題。首先,一個(gè)線性相位的模擬濾波器經(jīng)雙線性變換后得到非線性相位的數(shù)字濾器,不再保持原有的線性相位了。其次,這種非線性關(guān)系要求模擬濾波器的幅頻響應(yīng)必須是分段常數(shù)型的,即某一頻率段的幅頻響應(yīng)近似等于某一常數(shù),一般典型的低通、高通、帶通、帶阻型濾波器的響應(yīng)特性不然變換產(chǎn)生的數(shù)字濾波器幅頻響應(yīng)

13、相對(duì)于原模擬濾波器的幅頻響應(yīng)會(huì)有畸變。2.2.1用雙線性變換法設(shè)計(jì)橢圓數(shù)字低通濾波器程序設(shè)計(jì):fs=20000;wp=2*pi*2100/fs;ws=2*pi*8000/fs;Rp=0.5;Rs=30;Ts=1/fs;Wp=2/Ts*tan(wp/2);Ws=2/Ts*tan(ws/2); %按頻率轉(zhuǎn)換公式進(jìn)行轉(zhuǎn)換N,Wn=ellipord(Wp,Ws,Rp,Rs,s); %計(jì)算模擬濾波器的最小階數(shù)z,p,k=ellipap(N,Rp,Rs);%設(shè)計(jì)模擬原型濾波器Bap,Aap=zp2tf(z,p,k); %零點(diǎn)極點(diǎn)增益形式轉(zhuǎn)換為傳遞函數(shù)形式b,a=lp2lp(Bap,Aap,Wn); %低通

14、轉(zhuǎn)換為低通濾波器的頻率轉(zhuǎn)化bz,az=bilinear(b,a,fs); %運(yùn)用雙線性變換法得到數(shù)字濾波器傳遞函數(shù)H,f=freqz(bz,az,512,fs);subplot(2,1,1);plot(f,20*log10(abs(H);title(N=2 頻率響應(yīng));grid on;xlabel(頻率/Hz);ylabel(振幅/dB);subplot(2,1,2);plot(f,abs(H); grid on;xlabel(頻率/Hz);Ylabel(振幅/H);運(yùn)行結(jié)果N=2bz= 0.1213 0.1662 0.1213az= 1.0000 -0.9889 0.4218圖2.2.1雙線

15、性變換法的橢圓數(shù)字低通濾波器2.2.2.切比雪夫設(shè)計(jì)數(shù)字低通濾波器設(shè)計(jì)Chebyshev I型和Chebyshev II型數(shù)字低通濾波器,要求通帶邊界頻率fp=2.1kHZ通帶最大衰減Rp=0.5dB,阻帶邊界頻率fs=8kH,阻帶最小衰減Rs=30dB,采樣頻率為Fs=20kHZ。Chebyshev I型的M程序如下:Fs=20000; %抽樣頻率20KHzFlp=2100;Fls=8000;Wp=2*Flp/Fs; %歸一化的通帶截止頻率Ws=2*Fls/Fs; %歸一化的阻帶截止頻率Rp=0.5; %通帶最大衰減單位dBRs=30; %阻帶最小衰減單位dBN,Wn=cheb1ord(Wp

16、,Ws,Rp,Rs); %返回最小階數(shù)和截止頻率b,a=cheby1(N,Rp,Wn); %返回H(z)的分子分母系數(shù)hw,w=freqz(b,a);subplot(2,1,1);plot(w/pi,20*log10(abs(hw);grid on;xlabel(/);ylabel(幅度dB)title(切比雪夫I型幅頻響應(yīng));subplot(2,1,2);plot(w/pi,abs(hw);grid on;xlabel(/);ylabel(幅度H);程序結(jié)果:N=2b= 0.1007 0.2014 0.1007a= 1.0000 -0.9872 0.4140程序圖形:圖2.2.2.1 雙線性

17、變換發(fā)的切比雪夫I數(shù)字低通濾波Chebyshev II的程序如下:Fs=20000; %抽樣頻率20KHz Flp=2100; Fls=8000; Wp=2*Flp/Fs; %歸一化的通帶截止頻率 Ws=2*Fls/Fs; %歸一化的阻帶截止頻率 Rp=0.5; %通帶最大衰減單位dB Rs=30; %阻帶最小衰減單位dB N,Wn=cheb2ord(Wp,Ws,Rp,Rs); %返回最小階數(shù)和截止頻率 b,a=cheby2(N,Rs,Wn); %返回H(z)的分子分母系數(shù) hw,w=freqz(b,a); subplot(2,1,1); plot(w/pi,20*log10(abs(hw);

18、grid on; xlabel(/);ylabel(幅度dB); title(切比雪夫II型幅頻響應(yīng)); subplot(2,1,2);plot(w/pi,abs(hw); grid on; xlabel(/);ylabel(幅度H); 運(yùn)行結(jié)果 N=2 b= 0.2357 0.4241 0.2357 a= 1.0000 -0.2996 0.1950程序響應(yīng)圖2.2.2.2:圖2.2.2.2 雙線性變換發(fā)的切比雪II夫數(shù)字低通濾波從頻率響應(yīng)圖中可以看出:巴特沃斯濾波器具有單調(diào)下降的幅頻特性通帶內(nèi)平滑;chebyshev I型濾波器的幅頻特性在通帶內(nèi)有波動(dòng)阻帶內(nèi)單調(diào);chebyshev II型濾

19、波器的幅頻特性在阻帶內(nèi)有波動(dòng)通帶內(nèi)單調(diào);橢圓濾波器的選擇性相對(duì)前三種是最好的。下降斜度比較大,通帶和阻帶內(nèi)均為等波紋同樣的性能指標(biāo),橢圓濾波器可以最低的階數(shù)來實(shí)現(xiàn)。這樣根據(jù)不同的要求可以選用不同類濾波器。3.總結(jié)(1)在實(shí)驗(yàn)過程MATLAB函數(shù)命令有數(shù)字濾波器函數(shù)N,Wn=buttord(Wp,Ws,Rp,Rs)、模擬濾波器函數(shù)N,Wn=buttord(Wp,Ws,Rp,Rs,s)。式中Wp,Ws分別上通帶和阻帶的截止頻率,實(shí)際上它們是歸一化頻率,其值在01之間,Rp,Rs分別是通帶和阻帶的衰減,單位為dB。N是求出的相應(yīng)低通濾波器的階次,Wn是求出的3dB頻率,第二個(gè)式子的單位為rad/s,

20、因此,它們實(shí)際上是頻率。用來設(shè)計(jì)模擬低通原型濾波器,其調(diào)用格式是z,p,k=buttap(N) N是欲設(shè)計(jì)的低通原型濾波器的階次,z、p和k分別是設(shè)計(jì)出的的極點(diǎn)、零點(diǎn)及增益。以下4個(gè)文件用來將模擬低通原型濾波器分別轉(zhuǎn)換為低通、高通、帶通、及帶阻濾波器。其調(diào)用格式分別是:(1)B,A=lp2lp(b,a,Wo) 或 B,A=lp2hp(b,a,Wo)(2)B,A=lp2bp(b,a,Wo,Bw) 或 B,A=lp2bs(b,a,Wo,Bw)式中b,a分別是模擬低通原型濾波器有分子、分母多項(xiàng)式的系數(shù)向量,B,A分別是轉(zhuǎn)換后的有分子、分母多項(xiàng)式的系數(shù)向量;在格式(1)中,Wo是低通或高通濾波器的截止

21、頻率;在格式(2)中Wo是帶通或帶阻濾波器的中心頻率,Bw是其帶寬。實(shí)現(xiàn)雙線性變換,即由模擬濾波器得到數(shù)字濾波器。其調(diào)用格式是 Bz,Az=bilinear(B,A,Fs)式中B、A分別是的分子、分母多項(xiàng)式的系數(shù)向量;Bz、Az分別是的分子、分母多項(xiàng)式的系數(shù)向量,F(xiàn)s是抽樣頻率。致謝在這次課程設(shè)計(jì)的撰寫過程中,我得到了許多人的幫助。首先我要感謝我的老師在課程設(shè)計(jì)上給予我的指導(dǎo)、提供給我的支持和幫助,這是我能順利完成這次報(bào)告的主要原因,更重要的是老師幫我解決了許多技術(shù)上的難題,讓我能把設(shè)計(jì)做得更加完善。在此期間,我不僅學(xué)到了許多新的知識(shí),而且也開闊了視野,提高了自己的設(shè)計(jì)能力。其次,我要感謝幫助

22、過我的同學(xué),他們也為我解決了不少我不太明白的設(shè)計(jì)商的難題。同時(shí)也感謝學(xué)院為我提供良好的做課程設(shè)計(jì)的環(huán)境。最后再一次感謝所有在設(shè)計(jì)中曾經(jīng)幫助過我的良師益友和同學(xué)!參考文獻(xiàn)1.羅軍輝等7.0在數(shù)字信號(hào)處理中的應(yīng)用。北京:機(jī)械工業(yè)出版社, ,2004,P109-114.2.邵毅、張明玉等基于Matlab的IIR數(shù)字濾波器【J】, 2009年02期,P36-44.3.劉春:Matlab在數(shù)字濾波器設(shè)計(jì)中的應(yīng)用【J】2006年05期,P153-166.4.柴政、任海平:關(guān)于數(shù)字濾波器設(shè)計(jì)方式的探討【J】;通信電源技術(shù);2007年05期,P113-156.5.劉泉.數(shù)字信號(hào)處理原理與實(shí)現(xiàn)M第二版.北京:高

23、等教育出版社,2008,P189-200.附錄資料:不需要的可以自行刪除c語言典型問題處理方法小結(jié)循環(huán)問題(1)、數(shù)論問題1、求素?cái)?shù) for(i=2;i1,如果它僅有平凡約數(shù)1和a,則我們稱a為素?cái)?shù)(或質(zhì)數(shù))。整數(shù) 1 被稱為基數(shù),它既不是質(zhì)數(shù)也不是合數(shù)。整數(shù) 0 和所有負(fù)整數(shù)既不是素?cái)?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

24、,(a*b)/is);b、輾轉(zhuǎn)相除法求解 a1=a; b1=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ù) 一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(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ù) 將一個(gè)整數(shù)寫成幾個(gè)質(zhì)因數(shù)的連乘積,如:

25、 輸入36,則程序輸出36=2*2*3*3 。解一、看似簡單,但要自己完整地寫出來還真不容易!竟然還動(dòng)用了goto語句,正好可以熟悉一下goto語句的用法!main() int a,z,i; clrscr(); scanf(%d,&a);判斷下一個(gè)數(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,

26、a1,z);用計(jì)數(shù)器來解決每行輸入不同的問題。 else 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、從鍵盤輸入兩個(gè)整數(shù),輸出這兩個(gè)整數(shù)的商的小數(shù)點(diǎn)后所有1000位整數(shù) for(i=1;i=2;i-) if(fm%i=0&fz

27、%i=0) fz/=i; fm/=i; z=fz/fm; 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

28、 math.hmain() float x,j=1,k,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

29、+1) t=aj+1;aj+1=aj;aj=t; for(i=0;i10;i+) printf(%d ,ai); printf(n);注意排序問題:1、須迅速,熟練,無差錯(cuò)經(jīng)常插入在程序中間2、現(xiàn)使用最大數(shù)下沉冒泡法還可以使用最小數(shù)上浮冒泡法3、j控制前面一個(gè)數(shù)和后面一個(gè)數(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-

30、1) t=aj-1; aj-1=aj; aj=t; for(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、*解題要點(diǎn):此類題關(guān)鍵在于找到每行要打印的個(gè)數(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(

31、); for(k=1;k=i;k+) 每行要打印的*數(shù) printf(*); printf(n); c、 * * *解題要點(diǎn):在出現(xiàn)空格的時(shí)候,在找到每行要打印的*個(gè)數(shù)和行數(shù)的關(guān)系后,還應(yīng)找到空格和行數(shù)的關(guān)系,分不同的參數(shù)進(jìn)行循環(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=

32、2*(n-1-i)+1;k+) printf(*); printf(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乘法表解題要點(diǎn):注意尋找行與列的規(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

33、15 18 21 24 27 9 18 27 36 45 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=strle

34、n(a); for(i=0;i=0;i-) 藍(lán)色部分可以簡寫為綠色部分coutai-1;4、如輸入:ab1 3,;z 輸出:ab1注意點(diǎn):1、= =2、while語句的使用處體會(huì)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個(gè)字符串,按從小到大排序輸出這3個(gè)字符串。 使用一個(gè)兩維

35、數(shù)組貯存多個(gè)字符串char a8181;注意:如何使用一個(gè)兩維數(shù)組貯存多個(gè)字符串 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、逐個(gè)給字符串賦值的方法見書140頁。 不可for(i=0;ai!=0;i+)3、stri=stri-A+10;4、pow函數(shù)5、任何進(jìn)制轉(zhuǎn)為十進(jìn)制的方法6、輸入一個(gè)整數(shù)n和一個(gè)字符串str,計(jì)算并輸出n進(jìn)制數(shù)str的值。 如輸入:7 16則輸出:13(16)7=(13)10如輸入:16 3A則輸出:58(3A)16=(58)10

36、#include stdio.h#include math.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);編寫程序,將一個(gè)十進(jìn)制正整數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)。 注意類比#include main()char a20;int x,i=0,j;clrscr

37、();scanf(%d,&x);while(x) if(x%16=10&x%16=0;j-)printf(%c,aj);printf(n);7、輸入一個(gè)字符串,將其中的縮寫形式展開,并輸出展開后的該字符串。所謂展開縮寫形式就是將其中由大小寫字母或數(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;

38、 gets(a); for(i=0;ai!=0;i+) 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);補(bǔ)充:循環(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;兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出3人。甲隊(duì)為A,B,C;已對(duì)是X,Y,Z;

39、已經(jīng)抽簽決定比賽名單。有人向隊(duì)員大廳比賽的名單。A說他不和X比,C說他不和X,Z比。請(qǐng)編程序找出3對(duì)賽手的名單。#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;枚舉口袋中有紅,黃,藍(lán),白,黑5種顏色的球若干。每次從口袋中任意取出3歌,問得到3種不同顏色球的可能取法,輸出每種排列的情況。#include#include /在C語言中不用加這句void main()enum co

40、lorred ,yellow ,blue,white, 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:coutsetw(8)blue;break;case white:coutsetw(8)white;break;case black:coutsetw(8)black;break;default:break;coutendl;couttotal:nendl;數(shù)組:不用strcat函數(shù),編寫程序,將兩個(gè)字符串

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論