




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
設(shè)計(jì)內(nèi)容及要求
基于MATLAB產(chǎn)生m序列
要求:
1.通過(guò)matlab編程產(chǎn)生m序列的產(chǎn)生原理及其產(chǎn)生方法。
2.對(duì)特定長(zhǎng)度的m序列,分析其性質(zhì),及其用來(lái)構(gòu)造其它序列的方法。
第二章m序列設(shè)計(jì)方案的選擇
2.1方案一
MATLAB編程非常簡(jiǎn)單,無(wú)需進(jìn)行變量聲明,可以很方便的實(shí)現(xiàn)m序列。
2.2方案二
圖2.1Simulink實(shí)現(xiàn)m序列
Simulink是MATLAB最重要的組件之一,它提供了一個(gè)動(dòng)態(tài)系統(tǒng)建模,仿真和綜合分析的集成環(huán)境。在此環(huán)境中無(wú)需大量書寫程序,而只需通過(guò)簡(jiǎn)單直觀的鼠標(biāo)操作,就可構(gòu)造出復(fù)雜的系統(tǒng)。Simulink具有適應(yīng)性廣,結(jié)構(gòu)及流程清晰及仿真精細(xì)等優(yōu)點(diǎn),基于以上優(yōu)點(diǎn),Simulink已被廣泛的運(yùn)用到控制理論和數(shù)字信號(hào)處理的復(fù)雜仿真和設(shè)計(jì)。
通過(guò)比較方案一和方案二,發(fā)現(xiàn)方案一的有點(diǎn)具有通用性而方案二利用MATLAB的Simulink直接搭建模塊,在移位寄存器較少的情況下利用此方法比較簡(jiǎn)單,可是當(dāng)移位寄存器的個(gè)數(shù)增多時(shí),要搭建那么多的模塊就顯的很繁瑣了,缺乏通用性,因此本次實(shí)驗(yàn)選擇方案一。
m序列的產(chǎn)生及性質(zhì)
3.1m序列的產(chǎn)生原理、結(jié)構(gòu)及產(chǎn)生
m序列是最長(zhǎng)線性反饋移位寄存器序列的簡(jiǎn)稱,m序列是由帶線性反饋的移位寄存器產(chǎn)生的。
由n級(jí)串聯(lián)的移位寄存器和反饋邏輯線路可組成動(dòng)態(tài)移位寄存器,如果反饋邏輯線路只由模2和構(gòu)成,則稱為線性反饋移位寄存器。
帶線性反饋邏輯的移位寄存器設(shè)定初始狀態(tài)后,在時(shí)鐘觸發(fā)下,每次移位后各級(jí)寄存器會(huì)發(fā)生變化,其中任何一級(jí)寄存器的輸出,隨著時(shí)鐘節(jié)拍的推移都會(huì)產(chǎn)生一個(gè)序列,該序列稱為移位寄存器序列。
n級(jí)線性移位寄存器的如圖3.1所示:
eq\o\ac(
,A)
圖3.1n級(jí)線性移位寄存器
圖中Ci表示反饋線的兩種可能連接方式,Ci=1表示連線接通,第n-i級(jí)輸出加入反饋中;Ci=0表示連線斷開(kāi),第n-i級(jí)輸出未參加反饋。
因此,一般形式的線性反饋邏輯表達(dá)式為
------表達(dá)式3.1
將等式左邊的an移至右邊,并將an=C0an(C0=1)帶入上式,則上式可以寫成
-------表達(dá)式3.2
定義一個(gè)與上式相對(duì)應(yīng)的多項(xiàng)式
--------表達(dá)式3.3
其中x的冪次表示元素的相應(yīng)位置。該式為線性反饋移位寄存器的特征多項(xiàng)式,特征多項(xiàng)式與輸出序列的周期有密切關(guān)系。當(dāng)F(x)滿足下列三個(gè)條件時(shí),就一定能產(chǎn)生m序列:
F(x)是不可約的,即不能再分解多項(xiàng)式;
F(x)可整除xn+1,這里p=2n+1;
F(x)不能整除xn+1,這里q<q.
滿足上述條件的多項(xiàng)式稱為本原多項(xiàng)式,這樣產(chǎn)生m序列的充要條件就變成了如何尋找本原多項(xiàng)式。
3.2m序列的基本性質(zhì)
均衡性。在m序列一個(gè)周期中‘1’的個(gè)數(shù)比‘0’要多1位,這表明序列平均值很小。
m序列與其移位后的序列模2相加,所得的序列還是m序列,只是相位不同而已。例如:1110100與向又移3位的序列1001110相對(duì)應(yīng)模二相加后的序列為0111010,相當(dāng)于原序列向右移一位后的序列,仍為m序列。
m序列發(fā)生器中移位寄存器的各種狀態(tài),除全0狀態(tài)外,其他狀態(tài)只在m序列中出現(xiàn)一次。
m序列發(fā)生器中,并不是任何抽頭組合都能產(chǎn)生m序列。理論分析指出,產(chǎn)生的m序列數(shù)由下式?jīng)Q定:
--------表達(dá)式3.4
其中φ(X)為歐拉數(shù)。例如5級(jí)移位寄存器產(chǎn)生31位m序列只有6個(gè)。
m序列具有良好的自相關(guān)性,其自相關(guān)系數(shù):
-------表達(dá)式3.5
從m序列的自相關(guān)系數(shù)可以看出m序列是一個(gè)狹義偽隨機(jī)碼。
圖3.2m序列信號(hào)的自相關(guān)函數(shù)
3.3生成m序列的模塊
根據(jù)m序列的生成原理圖,如圖3.1所示,由圖可知m序列是多級(jí)移位寄存器通過(guò)線性反饋再進(jìn)行模二相加產(chǎn)生的,最后一位一位輸出觀察其波形圖。程序中使用的代碼如下:
N=2^length(reg1)-1;
fork=1:N
a_n=mod(sum(reg1.*coeff1(1:length(coeff1)-1)),2);
reg1=[reg1(2:length(reg1)),a_n];
out1(k)=reg1(1);
end
其中N為m序列的長(zhǎng)度,值為(26-1)。由程序已定義了移位寄存器的初始狀態(tài)和抽頭系數(shù),在此基礎(chǔ)上進(jìn)行反饋,后進(jìn)行模二加,所得的結(jié)果為輸出的第一個(gè)值,初始狀態(tài)向左移移位,而所得的輸出值填補(bǔ)上變成新的序列,在進(jìn)行第二次反饋和模二加,依次循環(huán)N次,產(chǎn)生m序列
第四章m序列構(gòu)造其他序列
Gold序列具有三值互相關(guān)函數(shù),其值為:
(式2.10)
這里,
(式2.11)
當(dāng)r為奇數(shù)時(shí),gold序列中約有50%的碼序列歸一化相關(guān)函數(shù)值為-1/p。當(dāng)r為偶數(shù)但又不是4的倍數(shù)是,約有75%的碼序列歸一化互相關(guān)函數(shù)值為-1/p。
Gold序列是R.Gold于1967年提出來(lái)的,它由兩個(gè)m序列按下述方法演變而來(lái)的:把2個(gè)碼長(zhǎng)相同的m序列移位并進(jìn)行模2加,如果相加的兩個(gè)m序列是一對(duì)優(yōu)選對(duì),則相加的結(jié)果為一個(gè)Gold序列。
設(shè)有一對(duì)周期為N=2r-1的m序列優(yōu)選對(duì){a},{b},以其中任意一個(gè)序列為基準(zhǔn)序列,如{a},對(duì)另一個(gè)序列{b}進(jìn)行移位i次,得到{b}的移位序列{bi},然后與序列{a}進(jìn)行模二加得到一個(gè)新的周期為N的序列{c},則稱新序列{c}為Gold序列,既
{ci}={a}+{b}i=0,1,2,....,N
4.1Gold序列的產(chǎn)生方框圖
產(chǎn)生gold序列的程序代碼如下:
gold=mod(out1+out2,2);
程序調(diào)試及運(yùn)行結(jié)果
5.1仿真設(shè)計(jì)流程圖
確認(rèn)程序無(wú)
誤
編寫程序
規(guī)劃程序模塊
仿真準(zhǔn)備
否
結(jié)束
是否達(dá)到要
求
生成仿真圖形
運(yùn)行,調(diào)試及數(shù)據(jù)分析
設(shè)置仿真參數(shù)
是
否
是
圖5.1實(shí)驗(yàn)仿真流程圖
5.2實(shí)驗(yàn)的調(diào)試與運(yùn)行結(jié)果
程序中把移位寄存器的初始值定義全為1,抽頭系數(shù)定義為[1000011]和[1100111],根據(jù)公式m序列的長(zhǎng)度=2n-1,可知道所得的兩個(gè)m序列的長(zhǎng)度都為63,所利用的移位寄存器為6個(gè)。代碼如下:
reg1=ones(1,6);%寄存器初始狀態(tài)
coeff1=[1000011];%設(shè)置系數(shù)
reg2=ones(1,7);%寄存器初始狀態(tài)
coeff2=[1001111];%設(shè)置系數(shù)
程序檢測(cè)無(wú)誤后,運(yùn)行程序,得到圖形如下:
圖5.2運(yùn)行后的兩m序列波形仿真圖
根據(jù)產(chǎn)生Gold序列的原理,運(yùn)行程序,得到如下Gold序列的仿真圖;
圖5.3運(yùn)行后Gold序列的仿真圖
自相關(guān)性:首先將第一個(gè)m序列變成雙極性的序列,在與本身進(jìn)行移位相乘進(jìn)行積分運(yùn)算,代碼如下:
out1=2*out1-1;%變?yōu)殡p極性序列
forj=0:N-1
rho(j+1)=sum(out1.*[out1(1+j:N),out1(1:j)])/N;
end
j=-N+1:N-1;
rho=[fliplr(rho(2:N)),rho];
figure(3)
plot(j,rho);
axis([-1010-0.11.2]);title('第一個(gè)m序列的自相關(guān)函數(shù)')
互相關(guān)性:第一個(gè)m序列的函數(shù)與第二個(gè)m序列函數(shù)的移位相乘進(jìn)行積分運(yùn)算。代碼如下:
forj=0:N-1
R(j+1)=sum(out1.*[out2(1+j:N),out2(1:j)]);
圖5.4m序列自相關(guān)性仿真圖
圖5.5兩m序列的互相關(guān)性仿真圖
5.3錯(cuò)誤排除
實(shí)驗(yàn)過(guò)程中出了許多錯(cuò)誤,特別是在對(duì)序列的自相關(guān)性上,缺乏了對(duì)自相關(guān)性的了解,導(dǎo)致出的波形錯(cuò)誤,但在查找資料,修改自相關(guān)函數(shù),終于得到了正確的仿真圖。
結(jié)論
課程設(shè)計(jì)是一個(gè)十分有價(jià)值、有意義的實(shí)踐活動(dòng),把一個(gè)課題設(shè)計(jì)好不是一步到位的,是經(jīng)過(guò)反復(fù)修改,不斷調(diào)試的過(guò)程,期間有困難也有樂(lè)趣,使對(duì)工程實(shí)踐有了一個(gè)初步的認(rèn)識(shí)。
本次課程設(shè)計(jì)實(shí)現(xiàn)了設(shè)計(jì)要求,利用軟件實(shí)現(xiàn)m序列的生成,通過(guò)這次實(shí)驗(yàn)不但加深了對(duì)m序列的了解,而且對(duì)MATLAB的編程有了很好的掌握,雖然在仿真過(guò)程中會(huì)出現(xiàn)一些如程序不對(duì)或出的仿真圖沒(méi)有達(dá)到實(shí)驗(yàn)要求,如m序列中‘1’的個(gè)數(shù)要比‘0’的個(gè)數(shù)多1,而實(shí)際出的仿真圖‘1’和‘0’的個(gè)數(shù)卻是相等的,最后在調(diào)整了頂層原理圖才使得仿真圖正確,在不斷的程序調(diào)整中提高了自己的能力。
m序列可以用軟件實(shí)現(xiàn),也可以用硬件實(shí)現(xiàn),但是通過(guò)此次實(shí)驗(yàn)看出了軟件的諸多優(yōu)點(diǎn)。在課程設(shè)計(jì)的過(guò)程中,查詢了大量的資料,通過(guò)相關(guān)資料的查詢,使我對(duì)通信領(lǐng)域的有關(guān)知識(shí)有了一定的了解,擴(kuò)大了知識(shí)面。
參考資料
[1]肖國(guó)鎮(zhèn),梁傳甲.偽隨機(jī)序列及其應(yīng)用[M].北京:國(guó)防工業(yè)出版社.1985
[2]林可祥,汪一飛.偽隨機(jī)碼的原理與應(yīng)用[M].北京:人民郵電出版社.1998.
[3]吳先用,鄒學(xué)玉.一種m序列偽碼發(fā)生器的產(chǎn)生方法[J].西安:西安電子科技大學(xué)出版社.2003
附錄
clear;
reg1=ones(1,7);%寄存器初始狀態(tài)
coeff1=[1000011];%設(shè)置系數(shù)
N=2^length(reg1)-1;
%產(chǎn)生m序列
fork=1:N
a_n=mod(sum(reg1.*coeff1(1:length(coeff1)-1)),2);
reg1=[reg1(2:length(reg1)),a_n];
out1(k)=reg1(1);
end
reg2=ones(1,7);%寄存器初始狀態(tài)
coeff2=[1100111];%設(shè)置系數(shù)
N=2^length(reg2)-1;
fork=1:N
a_n=mod(sum(reg2.*coeff2(1:length(coeff2)-1)),2);%移位,反饋
reg2=[reg2(2:length(reg2)),a_n];%反饋
out2(k)=reg2(1);%取第一個(gè)值輸出
end
%產(chǎn)生gold序列
gold=mod(out1+out2,2);
c=1:N;
figure(1)
[b1,t1]=stairs(c,out1);
subplot(2,1,1);plot(b1,t1);
axis([0130-0.11.1]);title('第一個(gè)m序列');
[b2,t2]=stairs(c,out2);
subplot(2,1,2);plot(b2,t2);
axis([0130-0.11.1]);title('第二個(gè)m序列');
figure(2)
[b3,t3]=stairs(c,gold);
plot(b3,t3);
axis([0130-0.11.1]);title('gold序列')
out1=2*out1-1;%變?yōu)殡p極性序列
out2=2*out2-1;
%自相關(guān)函數(shù)
forj=0:N-1
rho(j+1)=sum(out1.*[out1(1+j:N),out1(1:j)])/N;
end
j=-N+1:N-1;
rho=[fliplr(rho(2:N)),rho];
figure(3)
plot(j,rho);
axis([-1010-0.11.2]);title('第一個(gè)m序列的自相關(guān)函數(shù)')
%互相關(guān)函數(shù)
forj=0:N-1
R(j+1)=sum(out1.*[out2(1+j:N),out2(1:j)]);
end
j=-N+1:N-1;
R=[fliplr(R(2:N)),R];
figure(4)
plot(j,R);
axis([-NN-2020]);title('兩個(gè)m序列的互相關(guān)函數(shù)');
附錄資料:不需要的可以自行刪除
c語(yǔ)言典型問(wèn)題處理方法小結(jié)
循環(huán)問(wèn)題
(1)、數(shù)論問(wèn)題
1、求素?cái)?shù)
for(i=2;i<=a;i++)
if(a%i==0)
break;
if(a==i)
printf("yes\n");
else
第一個(gè)if判斷是否能被2,3,4……直到本身整除。
第二個(gè)if判斷是否只能被本身整除。
printf("no\n");
素?cái)?shù)概念:
對(duì)于某個(gè)整數(shù)a>1,如果它僅有平凡約數(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(a>b)
{
t=a;
a=b;
b=t;
}
for(i=a;i>=1;i--)
if(a%i==0&&b%i==0)
break;
printf("largestcommondivisor:%d\n",i);
printf("leastcommonmultiple:%d\n",(a*b)/is);
b、輾轉(zhuǎn)相除法求解
a1=a;
b1=b;
while(a%b!=0)
{
t=a%b;
a=b;
b=t;
}
printf("largestcommondivisor:%d\nleastcommonmultiple:%d",b,a1*b1/b);
3、求完數(shù)
一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。
例如:6的因子為1、2、3,而6=1+2+3,因此6是“完數(shù)”。
for(a=1;a<=1000;a++)
{
s=0;
for(i=1;i<=a;i++)
if(a%i==0)
{
s+=i;
if(s>=a)
break;
}
if(s==a)
printf("%d\t",a);
注意S=0所放的位置
}
4、分解質(zhì)因數(shù)
將一個(gè)整數(shù)寫成幾個(gè)質(zhì)因數(shù)的連乘積,如:輸入36,則程序輸出36=2*2*3*3。
解一、
看似簡(jiǎn)單,但要自己完整地寫出來(lái)還真不容易?。?!
竟然還動(dòng)用了goto語(yǔ)句,正好可以熟悉一下goto語(yǔ)句的用法?。?!
main()
{
inta,z,i;
clrscr();
scanf("%d",&a);
判斷下一個(gè)數(shù)開(kāi)始有要重新從2
開(kāi)始了。所以用loop語(yǔ)句回到for語(yǔ)句,這是for語(yǔ)句仍從2初始化。
從2開(kāi)始的原則不變,變的是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);
用計(jì)數(shù)器來(lái)解決每行輸入不同的問(wèn)題。
else
printf("*%d",z);
a/=z;
gotoloop;
}
}
}
解二:
main()
{intn,k=2,isfirst=1;
printf("Inputn=");scanf("%d",&n);
while(k<=n)
if(n%k==0)
{if(isfirst){printf("%d=%d",n,k);isfirst=0;}
elseprintf("*%d",k);
n/=k;
}
elsek++;
printf("\n");
}
5、從鍵盤輸入兩個(gè)整數(shù),輸出這兩個(gè)整數(shù)的商的小數(shù)點(diǎn)后所有1000位整數(shù)
for(i=1;i<=1000;i++)
{
t=a%b;
主要體會(huì)除法運(yùn)算中小數(shù)形成的原因
解決這類題目從本質(zhì)出發(fā)
printf("%d",t*10/b);
a=t*10;
}
printf("\n");
6、編程計(jì)算并輸出兩個(gè)帶分?jǐn)?shù)的差。帶分?jǐn)?shù)就是由一個(gè)整數(shù)和一個(gè)真分?jǐn)?shù)合成的數(shù),兩個(gè)帶分?jǐn)?shù)(整數(shù)、分子、分母均大于0)從鍵盤輸入,且?guī)Х謹(jǐn)?shù)1大于帶分?jǐn)?shù)2,輸入格式為:整數(shù)1[分子1/分母1],整數(shù)2[分子2/分母2]。差要求化簡(jiǎn),整個(gè)輸出樣式為(如差為整數(shù),則無(wú)分?jǐn)?shù)部分,如差的整數(shù)為0,則無(wú)整數(shù)部分):
整數(shù)1[分子1/分母1]-整數(shù)2[分子2/分母2]=整數(shù)[分子/分母]
例如:輸入:12[6/35],8[3/5]
輸出:12[6/35]-8[3/5]=3[4/7]
又如:輸入:6[2/3],4[12/18]
輸出:6[2/3]-4[12/18]=2
又如:輸入:9[7/8],9[3/8]
輸出:9[7/8]-9[3/8]=[1/2]
main()
{
intz1,fz1,fm1,fz1x,z2,fz2,fm2,fz2x,z,fz,fm,fzx,i;
scanf("%d[%d/%d],%d[%d/%d]",&z1,&fz1,&fm1,&z2,&fz2,&fm2);
fz1x=z1*fm1+fz1;
fz2x=z2*fm2+fz2;
fm=fm1*fm2;
fz=fz1x*fm2-fz2x*fm1;
for(i=fm;i>=2;i--)
if(fm%i==0&&fz%i==0)
{
fz/=i;
fm/=i;
}
z=fz/fm;
fzx=fz%fm;
if(fzx==0)
printf("%d[%d/%d]-%d[%d/%d]=%d\n",z1,fz1,fm1,z2,fz2,fm2,z);
elseif(z==0)
printf("%d[%d/%d]-%d[%d/%d]=[%d/%d]\n",z1,fz1,fm1,z2,fz2,fm2,fzx,fm);
else
printf("%d[%d/%d]-%d[%d/%d]=%d[%d/%d]\n",z1,fz1,fm1,z2,fz2,fm2,z,fzx,fm);
}
(2)近似問(wèn)題
1、書P122習(xí)題4-6
注意千萬(wàn)不要忘記添加
#include“math.h”
#include"math.h"
main()
{
floatx,j=1,k,s,so;
intn;
scanf("%f",&x);
s=x;
so=x+1;
for(n=1;fabs(s-so)>1e-6;n++)
{
for(k=1;k<=n;k++)
j*=k;
so=s;
if(n%2!=0)
s-=x*x*x/((2*n-1)*j);
else
s+=x*x*x/((2*n-1)*j);
}
printf("%f\n",s);
2、解方程問(wèn)題:
編程用二分法求解方程x3+4x2-10=0的解。
#include"math.h"
main()
{
可以省略此句
floatx,x1=1,x2=4,f1=-1,f;
/*f1=x1*x1*x1+4*x1*x1-10;*/
while(fabs(x2-x1)>1e-6)
{
x=(x1+x2)/2;
f=x*x*x+4*x*x-10;
可以用/*if(f*f1<0)*/替代
if(f>0)
x2=x;
else
x1=x;
}
printf("%f\n",x);
}
(3)枚舉法
(4)數(shù)列問(wèn)題
二、數(shù)組問(wèn)題
(1)排序問(wèn)題
1、從小到大排序
main()
{
inta[10],i,j,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
for(j=0;j<10-i;j++)
if(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
注意排序問(wèn)題:
1、須迅速,熟練,無(wú)差錯(cuò)
經(jīng)常插入在程序中間
2、現(xiàn)使用最大數(shù)下沉冒泡法
還可以使用最小數(shù)上浮冒泡法
3、j控制前面一個(gè)數(shù)和后面一個(gè)數(shù)一一比較。由于是最大數(shù)下沉,i+1后j仍要從0開(kāi)始。
4、i控制這樣的操作一共要做多少次
5、注意ij的控制次數(shù)
}
2、從大到小排序
main()
現(xiàn)使用最大數(shù)上浮冒泡法
還可使用最小數(shù)下沉冒泡法
{
inta[10],i,j,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
for(j=9;j>=i;j--)
if(a[j]>a[j-1])
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
}
for(i=0;i<10;i++)
printf("%d",a[i]);
}
(2)二維數(shù)組
三、字符或字符串輸入輸出問(wèn)題
(1)字符打印
1、打印*
此類題的溯源為書P1224.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+1
b、
****
***
**
*
for(i=1;i<=n;i++)一共要輸出的行數(shù)
{
for(j=1;j<=n-i;j++)控制空格數(shù)
printf("");
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==ij==n-i
j==i-1
k==n-i+1
d、
****
***
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("*");
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*j
i代表列
j代表行
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
printf("%-3d",i*j);注意輸出格式的控制
printf("\n");
}
3、九九乘法表
123456789
24681012141618
369121518212427
…
…
91827364554637281
4、楊暉三角形
1
11
121
1331
14641
15101051
1615201561
(2)字符串打印問(wèn)題
for(i=1;i<=7;i++)
{
a[i][1]=1;
a[i][i]=1;
}
for(i=3;i<=7;i++)
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
gets(a);
puts(a);
for(i=1;i<=5;i++)
{
t=a[5];
for(j=5;j>0;j--)
a[j]=a[j-1];
a[0]=t;
for(k=0;k<=5;k++)
printf("%c",a[k]);
printf("\n");
}
1、
ABCDEZ
ZABCDE
EZABCD
DEZABC
CDEZAB
BCDEZA
注意交換過(guò)程和把所有的數(shù)后移一位的方法
注意點(diǎn):
inti,不要誤打成chari
a[i]!=’\0’不要誤打成i!=’\0’
邏輯與&&
單引號(hào)內(nèi)表示字符
不加單引號(hào)的字符型數(shù)據(jù)為其ASCII碼
2、輸入一字符串小寫換大寫
chara[81];
inti;
gets(a);
for(i=0;a[i]!='\0';i++)
if(a[i]>='a'&&a[i]<='z')
a[i]-=32;
puts(a);
3、逆序輸出
gets(a);
c=strlen(a);
for(i=0;i<c/2;i++)
{
t=a[i];
a[i]=a[c-1-i];
a[c-1-i]=t;
}
puts(a);
注意此問(wèn)題的思想方法:
要求一組數(shù)的逆序?qū)嵸|(zhì)就是將其對(duì)稱換位
for(inti=n;i>=0;i--)藍(lán)色部分可以簡(jiǎn)寫為綠色部分
cout<<a[i-1];
4、如輸入:ab1@3,;z
輸出:ab1
注意點(diǎn):
1、‘==’
2、while語(yǔ)句的使用處體會(huì)
3、全面考慮問(wèn)題
@3,;z
gets(a);
while(a[0]=='')
for(i=0;a[i]!='\0';i++)
a[i]=a[i+1];
for(i=0;a[i]!='\0';i++)
if(a[i]==''&&a[i+1]!='')
printf("\n");
elseif(a[i]==''&&a[i+1]=='')
{
for(k=i;a[k]!='\0';k++)
a[k+1]=a[k+2];
i--;
}
else
printf("%c",a[i]);
5、輸入3個(gè)字符串,按從小到大排序輸出這3個(gè)字符串。使用一個(gè)兩維數(shù)組貯存多個(gè)字符串
chara[81][81];
注意:如何使用一個(gè)兩維數(shù)組貯存多個(gè)字符串
inti,j;
for(i=0;i<3;i++)
gets(a[i]);
for(i=0;i<3;i++)
puts(a[i]);
注意:
1、scanf("%d%s",&n,str)其中%s為字符串格式
2、逐個(gè)給字符串賦值的方法見(jiàn)書140頁(yè)。
不可for(i=0;a[i]!=’\0’;i++)
3、str[i]=str[i]-'A'+10;
4、pow函數(shù)
5、任何進(jìn)制轉(zhuǎn)為十進(jìn)制的方法
6、輸入一個(gè)整數(shù)n和一個(gè)字符串str,計(jì)算并輸出n進(jìn)制數(shù)str的值。
如輸入:716
則輸出:13 (16)7=(13)10
如輸入:163A
則輸出:58 (3A)16=(58)10
#include"stdio.h"
#include"math.h"
main()
{
charstr[81];
intn,i,s=0,t;
clrscr();
scanf("%d%s",&n,str);
for(i=0;str[i]!='\0';i++)
if(str[i]<='Z'&&str[i]>='A')
str[i]=str[i]-'A'+10;
else
str[i]=str[i]-'0';
t=strlen(str);
for(i=0;str[i]!='\0';i++)
s+=str[t-i-1]*pow(n,i);
printf("%d",s);
}
編寫程序,將一個(gè)十進(jìn)制正整數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)。
注意類比
#include<stdio.h>
main()
{
chara[20];
intx,i=0,j;
clrscr();
scanf("%d",&x);
while(x)
{
if(x%16>=10&&x%16<=15)
a[i]=x%16-10+'A';
else
a[i]=x%16+'0';
x=x/16;
i++;
}
for(j=i-1;j>=0;j--)
printf("%c",a[j]);
printf("\n");
}
7、輸入一個(gè)字符串,將其中的縮寫形式展開(kāi),并輸出展開(kāi)后的該字符串。所謂展開(kāi)縮寫形式就是將其中由大小寫字母或數(shù)字構(gòu)成的形如"a-f"、"U-Z"、"3-8"的形式展開(kāi)成為"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-0
main()
{
chara[81];
inti,c,s,k,t;
gets(a);
for(i=0;a[i]!='\0';i++)
if(a[i]=='-')if(a[i-1]<a[i+1]&&(a[i-1]>='A'&&a[i+1]<='Z'||a[i-1]>='a'&&a[i+1]<='z'||a[i-1]>='0'&&a[i+1]<='9'))
注意:
必須在結(jié)尾處加上結(jié)束標(biāo)記,才能實(shí)現(xiàn)puts語(yǔ)句。
加上結(jié)束標(biāo)記后for(i=0;a[i]!='\0';i++)語(yǔ)句才能實(shí)現(xiàn)。
邏輯&&與邏輯||的優(yōu)先級(jí)。
s=strlen(a)擺放的位置。
{
s=strlen(a);
c=a[i+1]-a[i-1];
t=i+c-2;
for(k=s-1;k>i;k--)
a[k+c-2]=a[k];
a[s-1+c-2+1]='\0';
for(;i<=t;i++)
a[i]=a[i-1]+1;
}
puts(a);
}
補(bǔ)充:
循環(huán):
求:a+aa+aaa+…..的值
#include<iostream.h>
voidmain()
{
inta,n,i=1,sn=0,tn=0;
cout<<"inputaandn"<<endl;
cin>>a>>n;
while(i<=n)
{
tn=tn+a;
sn+=tn;
a*=10;i++;
}
cout<<"theansweris"<<sn<<endl;
}
兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出3人。甲隊(duì)為A,B,C;已對(duì)是X,Y,Z;已經(jīng)抽簽決定比賽名單。有人向隊(duì)員大廳比賽的名單。A說(shuō)他不和X比,C說(shuō)他不和X,Z比。請(qǐng)編程序找出3對(duì)賽手的名單。
#include<iostream.h>
voidmain()
{
chari,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')
cout<<"A--"<<i<<"B--"<<j<<"C--"<<k<<endl;
}
枚舉
口袋中有紅,黃,藍(lán),白,黑5種顏色的球若干。每次從口袋中任意取出3歌,問(wèn)得到3種不同顏色球的可能取法,輸出每種排列的情況。
#include<iostream.h>
#include<iomanip.h>//在C語(yǔ)言中不用加這句
voidmain()
{enumcolor{red,yellow,blue,white,black};
colorpri;
inti,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++;
cout<<setw(3)<<n;//setw是輸出格式的限定
for(loop=1;loop<=3;loop++)
{
switch(loop)
{
case1:pri=color(i);break;
case2:pri=color(j);break;
case3:pri=color(k);break;
default:break;
}
switch(pri)
{
casered:cout<<setw(8)<<"red";break;
caseyellow:cout<<setw(8)<<"yellow";break;
caseblue:cout<<setw(8)<<"blue";break;
casewhite:cout<<setw(8)<<"white";break;
caseblack:cout<<setw(8)<<"black";break;
default:break;
}
}
cout<<endl;
}
}
cout<<"total:"<<n<<endl;
}
數(shù)組:
不用strcat函數(shù),編寫程序,將兩個(gè)字符串串接起來(lái)。
#include<iostream>
usingnamespacestd;
voidmain()
{
inti=0;
chara[20],b[10];
gets(a);gets(b);
for(i=0;i<10;i++)
if(a[i]=='\0')break;
for(intj=0;j<10;j++
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全國(guó)粵教版信息技術(shù)八年級(jí)下冊(cè)第二單元第十五課《數(shù)碼顯示與無(wú)線通信的實(shí)現(xiàn)》教學(xué)設(shè)計(jì)
- 云南經(jīng)貿(mào)外事職業(yè)學(xué)院《社會(huì)問(wèn)題與對(duì)策》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧建筑職業(yè)學(xué)院《中學(xué)生物學(xué)課程標(biāo)準(zhǔn)與教材研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶移通學(xué)院《精細(xì)化工綜合實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西體育高等??茖W(xué)?!斗b美學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南昌交通學(xué)院《電子科學(xué)與技術(shù)專業(yè)創(chuàng)新課程》2023-2024學(xué)年第二學(xué)期期末試卷
- 克拉瑪依職業(yè)技術(shù)學(xué)院《新能源汽車檢測(cè)與維修》2023-2024學(xué)年第二學(xué)期期末試卷
- 濱州學(xué)院《酒店電子商務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶工程職業(yè)技術(shù)學(xué)院《現(xiàn)代傳感器技術(shù)及虛擬儀器》2023-2024學(xué)年第二學(xué)期期末試卷
- 福建農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《會(huì)計(jì)學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 初中語(yǔ)文九年級(jí)下冊(cè)閱讀理解50篇附答案解析
- 《陶瓷造型工藝》課程標(biāo)準(zhǔn)
- 火電廠各指標(biāo)指標(biāo)解析(最新版)
- 病毒性腦炎患者的護(hù)理查房ppt課件
- TPU材料項(xiàng)目可行性研究報(bào)告寫作參考范文
- 第二編 債權(quán)總論
- 試用期考核合格證明表
- 常見(jiàn)八種疾病
- 膠粘劑基礎(chǔ)知識(shí)及產(chǎn)品詳解(課堂PPT)
- 鐵路總公司近期處理的七起突出質(zhì)量問(wèn)題的通報(bào)
- 常用洪水預(yù)報(bào)模型介紹
評(píng)論
0/150
提交評(píng)論