一元高次方程C语言实现(最高五次)_第1页
一元高次方程C语言实现(最高五次)_第2页
一元高次方程C语言实现(最高五次)_第3页
一元高次方程C语言实现(最高五次)_第4页
一元高次方程C语言实现(最高五次)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、元高次方程c语言实现(windows VC6.O本)注意:如果在linux vine或者UNIX以及非windows的系统下运行的话将代码pow以及 sqrt全部替换为powf和sqrtf以下为代码#include <stdio . h>#include <stdlib . h>#include <math. h>#include <string . h>#define MAX 1000/* 最大递归次数为 1000次*/#define ERROR"math errorn" /* 显示错误信息*/char Fun310,fx5

2、10="" ; /* 美化输出结果*/float a1,b1,c1,d1,e1,f1;/* 宏定义高次方程各项系数最大五次*/int NUMjdg; /* 判断函数最高次数*/float FC( float a, float b); /* 解一元一次方程*/floatFC3( floata, floatb, floatc, float d); /* 解一元三次方程*/floatFC2( floata, floatb, floatc, int num); /* 解一元二次方程*/float FC4( float a, float b, float c, float d, fl

3、oat e); /* 解一元四次方程*/float FC5(); /* 解一元五次方程*/float fun( float x); /* 五次函数代值求解*/float dfun( float x); /* 五次导函数代值求解*/float iterate( float x); /* 牛顿迭代法猜值求解*/int main()float x5; /* 五次方程最后一个解*/FILE *fp; /* 解的内容以文件的形式保存*/char save;char buf256; /* 从文件内读取内容保存至buf*/buf0 ='0' ; /* 防止乱码,开头定义为 NULL*/ fp

4、 =fopen( "fun.dat" , "w");strcpy(Fun3, "" );fclose(fp);printf( "Do you want to save the result? 'y' or 'n'"); /* 是否想保存结果数据? */printf("n->" );scanf( "%c", &save);redo:printf( "please input degree numbern->"

5、;); /* 请输入最高次数*/scanf( "%d", &NUMjdg);if (NUMjdg<1| NUMjdg>5) goto redo;printf( "the number of a?->"); /* 输入最高次项系数*/ scanf( "%f" , &a1);if (a1 =0) printf(ERROR); return 1; printf("the number of b?->"); /* 输入第二高次项系数*/scanf( "%f", &

6、amp;b1);if (NUMjdg=1) printf( "the result is %gn",FC(a1,b1); goto end1; printf("the number of c?->"); /* 输入第三高次项系数*/ scanf( "%f", &c1);if (NUMjdg=2) FC2(a1,b1,c1,1); goto end2; printf( "the number of d?->"); /* 输入第四高次项系数*/scanf( "%f" , &

7、;d1);if (NUMjdg=3) FC3(a1,b1,c1,d1); goto end3; printf( "the number of e?->"); /* 输入第五高次项系数*/scanf( "%f", &e1);if (NUMjdg=4) FC4(a1,b1,c1,d1,e1); goto end4; printf( "the number of f?->"); /* 输入常数项系数*/scanf( "%f", &f1);x5 =FC5(););end2:end4:if (a1

8、 != 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

9、",fx5,x5);fclose(fp);end1:end3:if (save ='n' ) unlink( "fun.dat" ); getch();return 0;)/*以下为各项函数的定义*/float fun(float x)return(x*x*x*x*x*al+x*x*x*x*bl+x*x*x*cl+x*x*dl+x*el+fl);)float dfun(float x)return(5*al*x*x*x*x+4*bl*x*x*x+3*cl*x*x+2*dl*x+el);)float iterate(float x)float xl;

10、xl=x-fun(x)/dfun(x);return(xl);)float FC5()(int k=0, i;float x0=-2. 0, xl, de;float b, c, d, e, temp5;bl/'=al; cl/=al; dl/=al; el/=al; fl/=al; al=l. 0;printf("FC5 a=%g b=%g c=%g d=%g e=%g f=%gn,z, al, bl, cl, dl, el, fl);if (bl=二0. 0&&cl=0. 0&&dl=0. 0&&el=0. 0&&a

11、mp;fl=0. 0)(return 0. 0;temp0=-b1/5; temptl=-cl/(2*bl); temp2=-dl/cl; temp3=2*el/(-dl); temp4=-5*fl/el;for(i=0; i<5; i+) printf (,*temp%d: %gz,, i, tempi);i f (temp 0 =temp 1 &&temp 0 =temp 2 &&temp 0 =temp 3&&temp0 =temp4 )(return temp0;dok+;xl=iterate(xO);/ printf (z,%d

12、%gn”,k, xl);de=fabs(xl-xO);x0=xl;)while (de>=0.00001&&k<MAX);strcpy(fx5,"”);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,

13、 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 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;i <=3;i +) printf( "y%d:%g",i,y0i);printf( "n" );y

14、 =FC3(y00,y01,y02,y03);printf( "y:%g " ,y);M =sqrt(8.0 *y+b*b-4.0*c);N =b*y-d;printf( "M:%g N:%gn" ,M,N);if (M=0)P =sqrt(y *y-e);printf( "P:%gn" ,P);FC2(2.0,b,2.0*(y +P),1);FC2(2.0,b,2.0*(y-P),3);elseFC2(2.0,b+M,2.0*(y+N/ M),1);FC2(2.0,b- M,2.0*(y- N/ M),3);return 0.0;

15、float FC3( float a, float b, float c, float d)float A,B,C,delta,x3,ni,fun3;float y1,y2,k,T,theta;float temp;FILE *fp;int i,y_1 =1,y_2 =1;printf("FC3->a=%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);pr

16、intf( "fc3 delta:%gn" ,delta);if (NUMjdg=3) printf( "There is following result:nn" ); fp =fopen( "fun.dat" , "w");elsestrcpy(Fun3, "fun3:" );if (delta =0)if (A=B)if (b =0) printf( "%sx1=x2=x3=%dn",Fun3,0); else printf( "%sx1=x2=x3=%gn&

17、quot; ,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" ); fclose(fp); return fun0; elsek =B/ A;printf("%sx1=%gn" ,Fun3,fun0 =-

18、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 (fun0 >fun1)return fun0;elsereturn fun1;else if (delta >0)y1 =A* b+1.5 *a*(- B+pow(

19、delta,0.5);if (y1 <0.0)y_1=-1;y2 =A* b+1.5 *a*(- B- pow(delta,0.5);if (y2 <0)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

20、 =pow(3.0,0.5) * (y_1 * pow(fabs(y1),1.0 / 3.0) -y_2*pow(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=%

21、g+%gin" ,Fun3,x1,fabs(ni);fprintf(fp,"%sx3=%g-%gin" ,Fun3,x1,fabs(ni);fun1=fun0;fun2=fun1;if (NUMjdg=3) printf( "n" ); fclose(fp); return fun0;elseT =(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&quo

22、t; ,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(3,0.5) *sin(theta)/ (3*a);for (i =0;i <3;i +) printf( "%sx%d=%gn",Fun3,i +1,funi =xi);if (NUMjdg=3)for (i =0;i <3;i +) fprintf(fp, "%sx%d=%gn",Fun3,i +1,funi =xi); if (fun0 >fun1) temp=fun0; else temp=fun1; if (NUMjdg=3) printf( "n" ); fclose(fp); if (temp>fun2)return temp; elsereturn fun2; float FC2( float a,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论