✅ 操作成功!

五次方程

发布时间:2023-06-16 作者:admin 来源:文学

五次方程

五次方程

-

2023年3月20日发(作者:地震作用)

一元高次方程c语言实现(windowsVC6.0版本)

注意:如果在linuxvine或者UNIX以及非windows的系统下运行的话将代码pow以及

sqrt全部替换为powf和sqrtf

以下为代码

#include

#include

#include

#include

#defineMAX1000/*最大递归次数为1000次*/

#defineERROR"matherrorn"/*显示错误信息*/

charFun3[10],fx5[10]="";/*美化输出结果*/

floata1,b1,c1,d1,e1,f1;/*宏定义高次方程各项系数最大五次*/

intNUMjdg;/*判断函数最高次数*/

floatFC(floata,floatb);/*解一元一次方程*/

floatFC3(floata,floatb,floatc,floatd);/*解一元三次方程*/

floatFC2(floata,floatb,floatc,intnum);/*解一元二次方程*/

floatFC4(floata,floatb,floatc,floatd,floate);/*解一元四次方程*/

floatFC5();/*解一元五次方程*/

floatfun(floatx);/*五次函数代值求解*/

floatdfun(floatx);/*五次导函数代值求解*/

floatiterate(floatx);/*牛顿迭代法猜值求解*/

intmain()

{

floatx5;/*五次方程最后一个解*/

FILE*fp;/*解的内容以文件的形式保存*/

charsave;

charbuf[256];/*从文件内读取内容保存至buf*/

buf[0]='0';/*防止乱码,开头定义为NULL*/

fp=fopen("","w");

strcpy(Fun3,"");

fclose(fp);

printf("Doyouwanttosavetheresult?'y'or'n'");/*是否想保存结果

数据?*/

printf("n--->");

scanf("%c",&save);

redo:

printf("pleaseinputdegreenumbern--->");/*请输入最高次数*/

scanf("%d",&NUMjdg);

if(NUMjdg5)gotoredo;

printf("thenumberofa?--->");/*输入最高次项系数*/

scanf("%f",&a1);

if(a1==0)

{printf(ERROR);return1;}

printf("thenumberofb?--->");/*输入第二高次项系数*/

scanf("%f",&b1);

if(NUMjdg==1)

{printf("theresultis%gn",FC(a1,b1));gotoend1;}

printf("thenumberofc?--->");/*输入第三高次项系数*/

scanf("%f",&c1);

if(NUMjdg==2)

{FC2(a1,b1,c1,1);gotoend2;}

printf("thenumberofd?--->");/*输入第四高次项系数*/

scanf("%f",&d1);

if(NUMjdg==3)

{FC3(a1,b1,c1,d1);gotoend3;}

printf("thenumberofe?--->");/*输入第五高次项系数*/

scanf("%f",&e1);

if(NUMjdg==4)

{FC4(a1,b1,c1,d1,e1);gotoend4;}

printf("thenumberoff?--->");/*输入常数项系数*/

scanf("%f",&f1);

x5=FC5();

end2:end4:

if(a1!=0)printf("n********nThereisfollowingresult:n");

fp=fopen("","r");

while(fgets(buf,256,fp)!=NULL)

{printf("%s",buf);}

fclose(fp);fp=fopen("","a");

if(NUMjdg==5){

fprintf(fp,"x%s=%gn",fx5,x5);

printf("x%s=%gn",fx5,x5);

}

fclose(fp);

end1:

end3:

if(save=='n')

{unlink("");}

getch();

b=b1+x1;c=c1+b*x1;d=d1+c*x1;e=e1+d*x1;

FC4(1.0,b,c,d,e);

printf("oneoftheresultis%gn",x1);

returnx1;

}

/*解法请参照盛金公式,费拉里公式,牛顿迭代法,一元二次求根公式*/

floatFC4(floata,floatb,floatc,floatd,floate)

{

floaty;

floatM,N,P;

floaty0[4];

inti;

b/=a;c/=a;d/=a;e/=a;a=1.0;

printf("FC4a:%gb:%gc:%gd:%ge:%gn",a,b,c,d,e);

y0[0]=8.0;

y0[1]=-4.0*c;

y0[2]=-1*(8.0*e-2.0*b*d);

y0[3]=-e*(b*b-4.0*c)-d*d;

for(i=1;i<=3;i++)

{printf("y%d:%g",i,y0[i]);}

printf("n");

y=FC3(y0[0],y0[1],y0[2],y0[3]);

printf("y:%g",y);

M=sqrt(8.0*y+b*b-4.0*c);

N=b*y-d;

printf("M:%gN:%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-N/M),3);

}

return0.0;

}

floatFC3(floata,floatb,floatc,floatd)

{

floatA,B,C,delta,x[3],ni,fun[3];

floaty1,y2,k,T,theta;

floattemp;

FILE*fp;

inti,y_1=1,y_2=1;

printf("FC3-->a=%gb=%gc=%gd=%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:%gB:%gC:%gn",A,B,C);

printf("fc3delta:%gn",delta);

if(NUMjdg==3){

printf("Thereisfollowingresult:nn");

fp=fopen("","w");

}

else{

strcpy(Fun3,"fun3:");

}

if(delta==0)

{

if(A==B)

{

if(b==0)

{printf("%sx[1]=x[2]=x[3]=%dn",Fun3,0);}

else

{printf("%sx[1]=x[2]=x[3]=%gn",Fun3,-b/(3*a));}

if(b==0)

{fprintf(fp,"%sx[1]=x[2]=x[3]=%dn",Fun3,0);}

else

{fprintf(fp,"%sx[1]=x[2]=x[3]=%gn",Fun3,-b/(3*a));}

fun[0]=-b/(3*a);

fun[1]=fun[0];

fun[2]=fun[1];

if(NUMjdg==3)

{printf("n");fclose(fp);}

returnfun[0];

}

else

{

k=B/A;

printf("%sx[1]=%gn",Fun3,fun[0]=-b/a+k);

printf("%sx[2]=%gn",Fun3,fun[1]=-k/2);

fprintf(fp,"%sx[1]=%gn",Fun3,fun[0]=-b/a+k);

fprintf(fp,"%sx[2]=%gn",Fun3,fun[1]=-k/2);

if(NUMjdg==3)

{printf("n");fclose(fp);}

if(fun[0]>fun[1])

{returnfun[0];}

else

{returnfun[1];}

}

}

elseif(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-pow(delta,0.5));

if(y2<0)

{y_2=-1;}

if(NUMjdg!=3)printf("y1:%gny2:%gn",y1,y2);

x[0]=(-b-y_1*pow(fabs(y1),1.0/3.0)-

y_2*pow(fabs(y2),1.0/3.0))/(3*a);

x[1]=(-

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/3.0))/(6*a);

printf("%sx[1]=%gn",Fun3,fun[0]=x[0]);

printf("%sx[2]=%g+%gin",Fun3,x[1],fabs(ni));

printf("%sx[3]=%g-%gin",Fun3,x[1],fabs(ni));

fprintf(fp,"%sx[1]=%gn",Fun3,fun[0]=x[0]);

fprintf(fp,"%sx[2]=%g+%gin",Fun3,x[1],fabs(ni));

fprintf(fp,"%sx[3]=%g-%gin",Fun3,x[1],fabs(ni));

fun[1]=fun[0];

fun[2]=fun[1];

if(NUMjdg==3)

{printf("n");fclose(fp);}

returnfun[0];

}

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);

x[0]=(-b-2*pow(A,0.5)*cos(theta))/(3*a);

x[1]=(-b+pow(A,0.5)*(cos(theta)+pow(3,0.5)*sin(theta)))/(3*a);

x[2]=(-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,fun[i]=x[i]);}

if(NUMjdg==3)

{for(i=0;i<3;i++)

{fprintf(fp,"%sx[%d]=%gn",Fun3,i+1,fun[i]=x[i]);}}

if(fun[0]>fun[1])

{temp=fun[0];}

else

{temp=fun[1];}

if(NUMjdg==3)

{printf("n");fclose(fp);}

if(temp>fun[2])

{returntemp;}

else

{returnfun[2];}

}

}

floatFC2(floata,floatb,floatc,intnum)

{

FILE*fp;

floatd;

printf("FC2a:%gb:%gc:%gn",a,b,c);

d=b*b-4*a*c;

fp=fopen("","a");

if(d<0)

{

fprintf(fp,"x[%d]=%g+%gin",num,-b/2/a,pow(-d,0.5)/(2*a));

fprintf(fp,"x[%d]=%g-%gin",num+1,-b/2/a,pow(-d,0.5)/(2*a));

}

elseif(d==0)

{

if(b==0.0)

{fprintf(fp,"x[%d]==x[%d]==0n",num,num+1);}

else

{fprintf(fp,"x[%d]==x[%d]==%gn",num,num+1,-b/2/a);}

}

else

{

fprintf(fp,"x[%d]=%gn",num,(-b+pow(d,0.5))/(2*a));

fprintf(fp,"x[%d]=%gn",num+1,(-b-pow(d,0.5))/(2*a));

}

fclose(fp);

return0.0;

}

floatFC(floata,floatb)

{FILE*fp;fp=fopen("","a");fprintf(fp,"x=%gn",-

b/a);fclose(fp);return-b/a;}

👁️ 阅读量:0