首页 > 代码库 > 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语言中的二分法