一元高次方程C語言實現(xiàn)最高五次_第1頁
一元高次方程C語言實現(xiàn)最高五次_第2頁
一元高次方程C語言實現(xiàn)最高五次_第3頁
一元高次方程C語言實現(xiàn)最高五次_第4頁
一元高次方程C語言實現(xiàn)最高五次_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一元高次方程c語言實現(xiàn)(windows VC6.0版本)注意:如果在linux vine或者UNIX以及非windows的系統(tǒng)下運行的話將代碼pow以及sqrt全部替換為powf和sqrtf以下為代碼#include#include#include#include#define MAX 1000/*最大遞歸次數(shù)為1000次*/#define ERROR math errorn/*顯示錯誤信息*/char Fun310,fx510=;/*美化輸出結果*/float a1,b1,c1,d1,e1,f1;/*宏定義高次方程各項系數(shù)最大五次*/int NUMjdg;/*判斷函數(shù)最高次數(shù)*/float

2、FC(float a,float b);/*解一元一次方程*/float FC3(float a,float b,float c,float d);/*解一元三次方程*/float FC2(float a,float b,float c,int num);/*解一元二次方程*/float FC4(float a,float b,float c,float d,float e);/*解一元四次方程*/float FC5();/*解一元五次方程*/float fun(float x);/*五次函數(shù)代值求解*/float dfun(float x);/*五次導函數(shù)代值求解*/float iterat

3、e(float x);/*牛頓迭代法猜值求解*/int main() float x5;/*五次方程最后一個解*/ FILE *fp;/*解的內容以文件的形式保存*/ char save; char buf256;/*從文件內讀取內容保存至buf*/ buf0=0;/*防止亂碼,開頭定義為NULL*/ fp=fopen(fun.dat,w); strcpy(Fun3,); fclose(fp); printf(Do you want to save the result? y or n);/*是否想保存結果數(shù)據(jù)?*/ printf(n-); scanf(%c,&save); redo: pri

4、ntf(please input degree numbern-);/*請輸入最高次數(shù)*/ scanf(%d,&NUMjdg); if(NUMjdg5) goto redo; printf(the number of a?-);/*輸入最高次項系數(shù)*/ scanf(%f,&a1); if(a1=0) printf(ERROR);return 1; printf(the number of b?-);/*輸入第二高次項系數(shù)*/ scanf(%f,&b1); if(NUMjdg=1) printf(the result is %gn,FC(a1,b1); goto end1; printf(the

5、 number of c?-);/*輸入第三高次項系數(shù)*/ scanf(%f,&c1); if(NUMjdg=2) FC2(a1,b1,c1,1); goto end2; printf(the number of d?-);/*輸入第四高次項系數(shù)*/ scanf(%f,&d1); if(NUMjdg=3) FC3(a1,b1,c1,d1); goto end3; printf(the number of e?-);/*輸入第五高次項系數(shù)*/ scanf(%f,&e1); if(NUMjdg=4) FC4(a1,b1,c1,d1,e1); goto end4; printf(the number

6、 of f?-);/*輸入常數(shù)項系數(shù)*/ scanf(%f,&f1); x5=FC5(); end2:end4: if(a1!=0) printf(n*nThere is following result:n); fp=fopen(fun.dat,r); while(fgets(buf,256,fp)!=NULL) printf(%s,buf); fclose(fp); fp=fopen(fun.dat,a); if(NUMjdg=5) fprintf(fp,x%s=%gn,fx5,x5); printf(x%s=%gn,fx5,x5); fclose(fp); end1: end3:if(s

7、ave=n) unlink(fun.dat); getch(); return 0;/*以下為各項函數(shù)的定義*/float fun(float x)return(x*x*x*x*x*a1+x*x*x*x*b1+x*x*x*c1+x*x*d1+x*e1+f1); float dfun(float x)return(5*a1*x*x*x*x+4*b1*x*x*x+3*c1*x*x+2*d1*x+e1);float iterate(float x)float x1; x1=x-fun(x)/dfun(x); return(x1);float FC5() int k=0,i; float x0=-2.

8、0,x1,de; float b,c,d,e,temp5; b1/=a1; c1/=a1; d1/=a1; e1/=a1; f1/=a1; a1=1.0; printf(FC5 a=%g b=%g c=%g d=%g e=%g f=%gn,a1,b1,c1,d1,e1,f1); if(b1=0.0&c1=0.0&d1=0.0&e1=0.0&f1=0.0) return 0.0; temp0=-b1/5; temp1=-c1/(2*b1); temp2=-d1/c1; temp3=2*e1/(-d1); temp4=-5*f1/e1; for(i=0;i=0.00001&kMAX); strcp

9、y(fx5,5); b=b1+x1; c=c1+b*x1; d=d1+c*x1; e=e1+d*x1; FC4(1.0,b,c,d,e); printf(one of the result is %gn,x1); return x1; /*解法請參照盛金公式,費拉里公式,牛頓迭代法,一元二次求根公式*/float FC4(float a,float b,float c,float d,float e) float y; float M,N,P; float y04; int i; b/=a; c/=a; d/=a; e/=a; a=1.0; printf(FC4 a:%g b:%g c:%g

10、d:%g e:%gn,a,b,c,d,e); y00=8.0; y01=-4.0*c; y02=-1*(8.0*e-2.0*b*d); y03=-e*(b*b-4.0*c)-d*d; for(i=1;ia=%g b=%g c=%g d=%gn,a,b,c,d); A=b*b-3*a*c; B=b*c-9*a*d; C=c*c-3*b*d; delta=B*B-4*A*C; printf(fc3A:%g B:%g C:%gn,A,B,C); printf(fc3 delta:%gn,delta); if(NUMjdg=3) printf(There is following result:nn)

11、; fp=fopen(fun.dat,w); else strcpy(Fun3,fun3:); if(delta=0) if(A=B) if(b=0) printf(%sx1=x2=x3=%dn,Fun3,0); else printf(%sx1=x2=x3=%gn,Fun3,-b/(3*a); if(b=0) fprintf(fp,%sx1=x2=x3=%dn,Fun3,0); else fprintf(fp,%sx1=x2=x3=%gn,Fun3,-b/(3*a); fun0=-b/(3*a); fun1=fun0; fun2=fun1; if(NUMjdg=3) printf(n); f

12、close(fp); return fun0; else k=B/A; printf(%sx1=%gn,Fun3,fun0=-b/a+k); printf(%sx2=%gn,Fun3,fun1=-k/2); fprintf(fp,%sx1=%gn,Fun3,fun0=-b/a+k); fprintf(fp,%sx2=%gn,Fun3,fun1=-k/2); if(NUMjdg=3) printf(n); fclose(fp); if(fun0fun1) return fun0; else return fun1; else if(delta0) y1=A*b+1.5*a*(-B+pow(del

13、ta,0.5); if(y10.0)y_1=-1; y2=A*b+1.5*a*(-B-pow(delta,0.5); if(y20)y_2=-1; if(NUMjdg!=3)printf(y1: %gny2: %gn,y1,y2); x0=(-b-y_1*pow(fabs(y1),1.0/3.0)-y_2*pow(fabs(y2),1.0/3.0)/(3*a); x1=(-2*b+y_1*pow(fabs(y1),1.0/3.0)+y_2*pow(fabs(y2),1.0/3.0)/(6*a); ni=pow(3.0,0.5)*(y_1*pow(fabs(y1),1.0/3.0)-y_2*po

14、w(fabs(y2),1.0/3.0)/(6*a); printf(%sx1=%gn,Fun3,fun0=x0); printf(%sx2=%g+%gin,Fun3,x1,fabs(ni); printf(%sx3=%g-%gin,Fun3,x1,fabs(ni); fprintf(fp,%sx1=%gn,Fun3,fun0=x0); fprintf(fp,%sx2=%g+%gin,Fun3,x1,fabs(ni); fprintf(fp,%sx3=%g-%gin,Fun3,x1,fabs(ni); fun1=fun0; fun2=fun1; if(NUMjdg=3)printf(n); fc

15、lose(fp); return fun0; else T=(2*A*b-3*a*B)/(2*pow(A,1.5); theta=acos( T); theta/=3; if(NUMjdg!=3) printf(T:%gn,T); printf(theta: %gn,theta); /cs = theta+2/3*i*acos(-1); x0=(-b-2*pow(A,0.5)*cos(theta)/(3*a); x1=(-b+pow(A,0.5)*(cos(theta)+pow(3,0.5)*sin(theta)/(3*a); x2=(-b+pow(A,0.5)*(cos(theta)-pow

16、(3,0.5)*sin(theta)/(3*a); for(i=0;i3;i+) printf(%sx%d=%gn,Fun3,i+1,funi=xi); if(NUMjdg=3)for(i=0;ifun1)temp=fun0; elsetemp=fun1; if(NUMjdg=3)printf(n); fclose(fp); if(tempfun2)return temp; elsereturn fun2; float FC2(float a,float b,float c,int num) FILE *fp; float d; printf(FC2 a:%g b:%g c:%gn,a,b,c); d=b*b-4*a*c; fp=fopen(fun.dat,a); if(d0) fprintf(fp,x%d=%g+%g in,num,-b/2/a,pow(-d,0.5)/(2*a); fprintf(fp,x%d=%g-%g in,num+1,-b/2/a,pow(-d,0.5)/(2*a); else if(d=0) if(b=0.0)fprintf(fp,x%d=x%d=0n,num,num+1); els

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論