#include<stdio.h>
#define F(x) (x*x*x-2*x*x+7*x+4)
#define FL(x) (3*x*x-4*x+7)
float DD_qj(void); //声明函数DD_qj(),用牛顿迭代法求根
float EF_qj(void); //声明函数EF_qj(),用二分法求根
float XJ_qj(void); //声明函数XJ_QJ(),用弦截法求根
int main(void)
{
float a,b,c;
a=EF_qj();
printf("x=%f 时 F(x)=0\n",a,a);
b=XJ_qj();
printf("x=%f 时 F(x)=0\n",b,b);
c=DD_qj();
printf("x=%f 时 F(x)=0\n",c,c);
getchar();
getchar();
return 0;
}
float EF_qj(void) //定义EF_QJ()函数
{
int n=0;
printf("\n\n……用二分法求方程的根……\n\n");
float x1,x2;
printf("请输入X1的初始值:\n");
scanf("%f",&x1);
printf("请输入X2的初始值:\n");
scanf("%f",&x2);
if(x1>x2)
{
float t;
t=x1;
x1=x2;
x2=t;
}
while(x2-x1>0.000006)
{
n++;
if(F(x1)*F(x2)<0)
if(F(x1)*F(x2)==0)
{
if(F(x1)==0)
return x1;
else
return x2;
break;
}
else
{
if(F(x1)*F((x1+x2)/2)<0)
x2=(x1+x2)/2;
else
x1=(x1+x2)/2;
}
else
{
printf("x1-x2之间无解");
return 0;
}
}
printf("循环%d次,计数出结果\n",n);
return (x2+x1)/2;
}
float XJ_qj(void) //定义XJ_qj()函数
{
int n=0;
printf("\n\n……用弦截法求方程的根……\n\n");
float x,x1,x2;
printf("请输入X1的初始值:\n");
scanf("%f",&x1);
printf("请输入X2的初始值:\n");
scanf("%f",&x2);
if(x1>x2)
{
float t;
t=x1;
x1=x2;
x2=t;
}
x=x2-(x2-x1)/(F(x2)-F(x1))*F(x2);
while(F(x)>0.000006)
{
n++;
if(F(x1)*F(x2)<0)
{
x=x2-(x2-x1)/(F(x2)-F(x1))*F(x2);
if(F(x1)*F(x)<0)
x2=x;
else
x1=x;
}
else
{
printf("x1-x2之间无解\n");
return 0;
break;
}
}
printf("循环%d次,计数出结果\n",n);
return x;
}
float DD_qj()    //定义DD_qj()函数
c语言牛顿迭代法求根{
int n=0;
float x1,x2,g=1;
printf("\n\n……用牛顿迭代法求方程的根……\n");
printf("请输入牛顿迭代法的初值:\n");
scanf("%f",&x1);
while(g>0.000006)
{
n++;
x2=x1-F(x1)/FL(x1);
g=x2-x1;
if(g<0)
g=-g;
x1=x2;
}
printf("循环%d次,计数出结果\n",n);
return x2;
}