首页 > 代码库 > c语言中的二分法

c语言中的二分法

 

\\\题外:对于printf引号中的内容一定要细心书写 ; 数组由a[0]开始计数,切记;尤其是与for循环中i=1 搞混

        运用a[i+1]等超前数据时 需先用

            for(i=0;i<=n-1;i++)

                 {scanf("%d",&a[i]);}

  给数组全部赋值

 

题目:对于方程 8*x^4+7*x^3+2*x^2+3*x+6=Y 给定一个实数Y(|Y|<=1000000000),求方程的解 x=k,其中0<=k<=100,若方程无解,则输出“No solution!”(不含引号)若方程存在一个解 x=k 满足 0<=k<=100,则输出“x = k”(不含引号,k 为方程的解,精确 到小数点后 4 位) 否则,输出“No solution!”(不含引号)

程序:



#include<stdio.h>
#include<math.h>
int main()
{
double x,L,R,mid,k,m;
int y,i;
scanf("%d",&y);
m=0;
x=0;
k=0;
L=0;                                  / /对题目分析可得,函数在0到100必是增函数
R=100;
for(;1;)   ///相当于while(1)   即判断条件无限为真
{ mid=(L+R)/2;
if(8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6<y){
L=mid;  ///如果有解 则y必大于f(0) 必小于f(100)  故如果y>f(mid)则  x位于mid 与100之间

}
else {
R=mid;
}
if((R-L)<0.0000000001)break;       ///0.00000001位数越多,结果越精确
}
m=8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6;
k=fabs(y-m);   //两者误差
if(k>0.01){    //就算两x不等于 其y值误差最多0.00001

printf("No solution!");
}
else{

printf("x = %.4lf",mid);
}
return 0;

c语言中的二分法