c语言编程用二分法求方程的根,c语言 使用二分法求方程额e^x+x=0在(-1,0)之间的根...

满意答案

#include

#include

#define eps 5e-6

#define delta 1e-6

#define e 2.718

float bisection(float a,float b,float (*f)(float)){

float c,fc,fa=(*f)(a),fb=(*f)(b);

int n=1;

printf("二分法次数\tc\t\tf(c)\n");

while(1){

if(fa*fb>0){printf("不能用二分法求解");break;}

c=(a+b)/2;fc=(*f)(c);

if(fabs(fc)

else if(fa*fc<0){b=c,fb=fc; }

else {a=c,fa=fc;}

if (fabs(b-a)

printf(" %d\t\t%f\t%f\n",n++,c,fc);

}

return c;

}

float f(float x){

//return x*x*x+x*x-3*x-3;

return exp(x)+x;}

void main(){

float a=-1,b=0;

float x;

x=bisection(a,b,f);

printf("\n 方程的根是: %f\n",x);

getchar();

}

01分享举报

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我们可以按照二分法的思路来编写方程x-e^-x=0的C语言程序。具体代码如下: ```c #include <stdio.h> #include <math.h> double f(double x) { //定义函数f(x)=x-e^(-x) return x - exp(-x); } int main() { double a, b, eps, c; int max_iter, iter; printf("请输入区间左端点a:"); scanf("%lf", &a); printf("请输入区间右端点b:"); scanf("%lf", &b); printf("请输入精度要eps:"); scanf("%lf", &eps); printf("请输入最大迭代次数max_iter:"); scanf("%d", &max_iter); iter = 0; while (iter < max_iter && fabs(b - a) >= eps) { c = (a + b) / 2; //取区间中点c if (f(c) == 0) { //判断c是否为方程 printf("迭代次数:%d\n", iter); printf("方程为:%lf\n", c); return 0; } if (f(a) * f(c) < 0) { //判断是否在区间[a,c]中 b = c; } else { //在区间[c,b]中 a = c; } iter++; } printf("迭代次数:%d\n", iter); printf("方程为:%lf\n", (a + b) / 2); return 0; } ``` 在程序中,我们先定义了函数f(x),然后通过用户输入区间左端点a、右端点b、精度要eps和最大迭代次数max_iter,来进行二分法计算。在每次迭代中,取区间中点c,判断c是否为方程,如果是,则输出迭代次数和方程。如果c不是,则据f(a)和f(c)的符号关系,判断是否在区间[a,c]中或者区间[c,b]中,并将相应的端点赋值为c。重复进行上述操作,直到满足精度要或者达到最大迭代次数为止。最后输出迭代次数和方程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值