版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、元高次方程c语言实现(windows VC6.0R本)注意:如果在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,fx51
2、0="" ; /* 美化输出结果 */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); /* 解一元二次方程 */floatFC4(floata,floatb,floatc,float d, float e); /* 解一元四次方
3、程*/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 =fopen( "fun.dat"
4、 , "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->" ); /* 请输入最高次数 */ scanf( &q
5、uot;%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, &b1);if (NUMjdg=1) printf( "
6、;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" , &d1);if (NUMjdg=3)FC3(a1,b1,c1,d1)
7、; 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 != 0) printf( "n*nThere is foll
8、owing 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:
9、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;xl=x-fun(x)/dfun(x);return(xl);)floa
10、t 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&&fl=0. 0)(return 0. 0;temp0=-b1/5;
11、 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 %gn”,k, xl);de=fabs(xl-xO);x0=xl;)wh
12、ile (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, float e)float y;float M,N,P;float y04;in
13、t 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 =FC3(y00,y01,y02,y03); printf( "y:%g
14、" ,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);else (FC2(2.0,b+M,2.0*(y +N M),1);FC2(2.0,b-M,2.0*(y-NM),3);)return 0.0;) float FC3(float a, float b, float c, fl
15、oat 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);printf( "fc3 delta:%gn" ,del
16、ta);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); elseprintf( "%sx1=x2=x3=%gn" ,Fun3, - b/(3*a); if (b =0)fpri
17、ntf(fp,"%sx1=x2=x3=%dn",Fun3,0); elsefprintf(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 =-b/a+k);printf("%sx2=%gn" ,Fun3,fun1 =-
18、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(delta,0.5);if (y1 <0.0)y_1=-1;y2 =A*b+1.5*a*(- B-
19、pow(delta,0.5);if (y2 <0)y_2=-1;if (NUMjdJ= 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*pow(fabs(y2),1.0
20、 / 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" ,Fu
21、n3,x1,fabs(ni);fun1=fun0;fun2=fun1;if (NUMjdg=3) printf( "n" ); fclose(fp); return fun0; else T =(2*A* b- 3*a* B)/ (2 * pow(A,1.5); theta=acos( T);theta/= 3;if (NUMjdJ=3) printf("T:%gn" ,T);printf("theta: %gn",theta); /cs = theta+2/3*i*acos(-1);x0=(- b-2*pow(A,0.5) *cos
22、(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, f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 孕期手指发麻的健康宣教
- 《预算培训材料》课件
- 红痣的临床护理
- 《机械设计基础 》课件-第1章
- 李宁公司导购销售技巧培训课件
- 化学反应的方向课件
- 动量定理的应用课件
- JJF(陕) 104-2023 裂隙灯显微镜校准规范
- JJF(陕) 016-2019 呼吸器综合检测仪校准规范
- 《酒店对客服务培训》课件
- 灭火器维修与保养手册
- 电梯日管控、周排查、月调度内容表格
- 降低检查报告错误率品管圈护理课件
- 预防未成年人犯罪法主题班会
- 2024-2024年江苏省普通高中学业水平测试物理试卷(含答案)
- 环卫公司行业风险分析
- 信托行业保密知识培训
- SN国际货运代理公司海运业务流程优化研究
- 预防小火亡人主题班会
- 消防行车安全教育课件
- 海洋平台深水管道高效保温技术
评论
0/150
提交评论