連分式編程
㈠ 如何用C語言編程輸入兩個分數求和並以最簡分式的方式輸出
輸入可以用如下格式:
unsigned int a,b,c,d;
scanf("%d/%d",&a,&b);/*a/b*/
scanf("%d/%d",&c,&d);/*c/d*/
求最大公因數,可以用輾轉相除法;公分母=b、d的最小公倍數=b*d/b、d的最大公約數,
通分後,分子相加,結果的分子、分母用輾轉相除法求最大公約數,進行約分。
約分後的結果輸出。
㈡ MATLAB緙栫▼涓庡簲鐢ㄧ郴鍒-絎5絝 澶氶」寮忎笌鏁版嵁鍒嗘瀽錛1錛
鏈絝犲皢浠嬬粛濡備綍浣跨敤MATLAB鏉ヨВ鍐充竴浜涘熀鏈鐨勬暟瀛﹁繍綆楅棶棰橈紝涓昏佸寘鎷澶氶」寮忕殑鐩稿叧璁$畻錛屾暟鎹鎻掑礆紝鏇茬嚎鎷熷悎浠ュ強鏁版嵁緇熻″勭悊絳夌浉鍏崇殑鍐呭廣傛湰絝犵殑涓昏佸唴瀹瑰備笅錛
鍦∕ATLAB涓錛屽氶」寮忔槸浠ヨ屽悜閲忕殑褰㈠紡瀛樻斁鐨勶紝騫朵笖綰﹀畾澶氶」寮忎互闄嶅籙鐨勫艦寮忓嚭鐜幫紝濡傛灉澶氶」寮忎腑緙哄皯鏌愬籙嬈¢」錛屽垯璇ュ籙嬈¢」鐨勭郴鏁頒負0銆備緥濡傦紝澶氶」寮 鍙浠ヨ〃紺轟負錛歱1=[1 21 20 0]錛屽叾涓甯告暟欏逛負0銆
鏈鑺傚皢鍏ㄩ潰浠嬬粛涓庡氶」寮忔湁鍏崇殑鍚勭嶈$畻錛屽寘鎷澶氶」寮忕殑鍥涘垯榪愮畻銆佸煎嚱鏁拌繍綆椼佹眰鍊箋佹眰鏍逛互鍙婂垎閮ㄥ睍寮銆
澶氶」寮忕殑鍔犲噺榪愮畻騫舵棤鐗瑰埆錛屽彲浠ヤ嬌鐢ㄥ悜閲忕殑鍔犲噺榪愮畻瀹炵幇銆傚氶」寮忕殑涔橀櫎榪愮畻姣旇緝澶嶆潅錛屼負姝MATLAB鎻愪緵浜嗕笓闂ㄧ殑榪愮畻鍑芥暟 conv 鍜 deconv 銆
鍑芥暟 conv 鐢ㄤ簬奼傚氶」寮廝1鍜孭2鐨勪箻縐錛屽畠鐨勮皟鐢ㄦ牸寮忓備笅錛
鍏朵腑錛孭1銆丳2鏄涓や釜澶氶」寮忕郴鏁板悜閲忋
鍑芥暟 deconv 鐢ㄤ簬瀵瑰氶」寮廝1鍜孭2浣滈櫎娉曡繍綆楋紝瀹冪殑璋冪敤鏍煎紡濡備笅錛
鍏朵腑錛孮榪斿洖澶氶」寮廝1闄や互P2鐨勫晢寮忥紝r榪斿洖P1闄や互P2鐨勪綑寮忋傝繑鍥炵殑Q鍜宺浠嶆槸澶氶」寮忕郴鏁板悜閲忋
鍙浠ュ皢闄ゆ硶榪愮畻deconv鐪嬩綔鏄涔樻硶榪愮畻conv鐨勯嗚繍綆楋紝鍗蟲湁P1=conv(P2,Q)+r銆
涓嬮潰閫氳繃紺轟緥浠嬬粛澶氶」寮忕殑琛ㄧず鍜屽氶」寮忕殑鍥涘垯榪愮畻銆
MATLAB鎻愪緵浜唒olyder鍑芥暟錛岀敤浜庢眰澶氶」寮忕殑瀵煎嚱鏁般傝ュ嚱鏁扮殑鏍煎紡濡備笅錛
鍏朵腑錛屽弬鏁癙鍜孮鏄澶氶」寮忕殑緋繪暟鍚戦噺錛岃繑鍥炵粨鏋減鍜宷涔熸槸澶氶」寮忕殑緋繪暟鍚戦噺銆
MATLAB鎻愪緵浜嗕袱縐嶆眰澶氶」寮忓肩殑鍑芥暟錛歱olyval涓巔olyvalm錛屽畠浠鐨勮緭鍏ュ弬鏁板潎涓哄氶」寮忕郴鏁板悜閲廝鍜岃嚜鍙橀噺x錛屼絾鏄涓よ呮槸鏈夊緢澶у尯鍒鐨勶紝鍓嶈呮槸鎸夋暟緇勮繍綆楄勫垯瀵瑰氶」寮忔眰鍊礆紝鑰屽悗鑰呮槸鎸夌煩闃佃繍綆楄勫垯瀵瑰氶」寮忔眰鍊箋傚叿浣撶殑璋冪敤鏍煎紡濡備笅鎵紺恆
n嬈″氶」寮忓叿鏈塶涓鏍癸紝榪欎簺鏍瑰彲鑳芥槸瀹炴牴錛屼篃鍙鑳藉惈鏈夎嫢騫插瑰叡杞澶嶆牴銆侻ATLAB鎻愪緵浜唕oots鍑芥暟鐢ㄤ簬奼傚氶」寮忕殑鍏ㄩ儴鏍癸紝璇ュ嚱鏁扮殑璋冪敤鏍煎紡涓猴細
鍏朵腑錛孭涓哄氶」寮忕殑緋繪暟鍚戦噺錛岃繑鍥炲悜閲弜涓哄氶」寮忕殑鏍癸紝鍗硏(1),x(2),鈥,x(n)鍒嗗埆浠h〃澶氶」寮忕殑n涓鏍廣
鍙﹀栵紝濡傛灉宸茬煡澶氶」寮忕殑鍏ㄩ儴鏍癸紝MATLAB榪樻彁渚涗簡鍑芥暟poly鐢ㄦ潵寤虹珛璇ュ氶」寮忥紝璇ュ嚱鏁扮殑璋冪敤鏍煎紡涓猴細
鍏朵腑錛寈涓哄氶」寮忕殑鏍癸紝榪斿洖鍚戦噺P涓哄氶」寮忕殑緋繪暟鍚戦噺銆
瀵逛簬涓涓鏂歸樀s錛屽彲浠ョ敤鍑芥暟poly鏉ヨ$畻鐭╅樀鐨勭壒寰佸氶」寮忕殑緋繪暟銆傜壒寰佸氶」寮忕殑鏍瑰嵆涓虹壒寰佸礆紝鍙浠ョ敤roots鍑芥暟鏉ヨ$畻銆
MATLAB鎻愪緵鍑芥暟 resie 鍙浠ュ疄鐜板皢鍒嗗紡琛ㄨ揪寮忚繘琛屽氶」寮忕殑閮ㄥ垎鍒嗗紡灞曞紑銆
瀵逛簬 ,鍑芥暟鐨勮皟鐢ㄦ牸寮忓備笅錛
鍏朵腑錛宐鍜宎鍒嗗埆鏄鍒嗗瓙鍜屽垎姣嶅氶」寮忕郴鏁拌屽悜閲忥紱榪斿洖鍊紃鏄痆r1 r2 鈥rn]鐣欐暟琛屽悜閲忥紝p涓篬p1 p2 鈥pn]鏋佺偣琛屽悜閲忥紝k涓虹洿欏硅屽悜閲忋備笅闈㈤氳繃紺轟緥鏉ヨ茶堪璇ュ嚱鏁扮殑浣跨敤銆
澶氶」寮忕殑寰鍒哅ATLAB鎻愪緵浜嗗嚱鏁 polyder 鏉ュ疄鐜幫紝鍓嶉潰浠嬬粛澶氶」寮忕殑瀵煎嚱鏁版椂宸茬粡浠嬬粛浜嗚ュ嚱鏁扮殑鍏蜂綋浣跨敤銆備絾鏄瀵逛簬澶氶」寮忕殑縐鍒嗚繍綆桵ATLAB娌℃湁鎻愪緵涓撻棬鐨勫嚱鏁幫紝浣嗗彲浠ョ敤 [p./length(p):-1:1,k] 鐨勬柟娉曟潵瀹屾垚縐鍒嗭紝鍏朵腑k涓哄父鏁般備笅闈㈤氳繃紺轟緥璁茶В濡備綍榪涜屽氶」寮忕殑縐鍒嗚繍綆椼
㈢ 如何用C語言編程輸入兩個分數求和並以最簡分式的方式輸出
#include "stdio.h"
int fun(int num1,int num2)/*求最大公約數函數*/
{
int a,b,temp;
if(num1<num2)
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;
b=num2;
while(b!=0)/*利用輾除法,直到b為0為止*/
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
main()
{
int a1,a2,b1,b2,c=1,num1,num2;
printf("請輸入第一個分數的分子:\n");
scanf("%d",&a1);
printf("請輸入第一個分數的分母:\n");
scanf("%d",&a2);
printf("請輸入第一個分數的分子:\n");
scanf("%d",&b1);
printf("請輸入第一個分數的分母:\n");
scanf("%d",&b2);
num1=a1*b2+b1*a2;
num2=a2*b2;
c=fun(num1,num2);
num1=num1/c;
num2=num2/c;
if(num2==1)
printf("結果為:%d:",num1);
else
printf("結果為:%d/%d:",num1,num2);
}
㈣ C語言編程 求序列前N項和
2/1+3/2+5/3+8/5+...這個數列每項的分子、分母分別是Fibonacci數列的後一項與前一項。求這一數列前N項的和可採取N由鍵盤輸入,設一循環按Fibonacci數列規律求出分子與分母,將將分式轉換為浮點除法求值累加獲得最後結果。舉例代碼如下:
#include"stdio.h"
intmain(intargc,char*argv[]){
inta,b,i,N;
doubles;
printf("InputN(int0<N<44)... N=");//大於43時int范圍溢出
if(scanf("%d",&N)!=1||N<1||N>43){//保證輸入正確
printf("Inputerror,exit... ");
return0;
}
for(s=0.0,a=2,b=i=1;i<=N;i++){//由此循環計算
s+=a/(b+0.0);//當前項累加給s
a+=b;//下一項的分子是當前項分子分母之和
b=a-b;//下一項分母是當前項分子
}
printf("Theresultare%.2f(whenN=%d) ",s,N);
return0;
}
試運行結果如下圖: