dzrs.net
当前位置:首页 >> 用C语言编写二分法 >>

用C语言编写二分法

二分法所属现代词,指的是数学领域的概念,经常用于计算机中的查找过程中.数学方面牛顿二分法 一般地,对于函数f(x),如果存在实数c,当x=c时,若f(c)=0,那么把x=c叫做函数f(x)的零点. 解方程即要求f(x)的所有零点.假定f(x)在区间(x,y)上连续先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2], 现在假设f(a)0,a.

二分法计算函数f(x)=x*x*x*x+2*x*x*x-x-1; 本程序在turbo c或c++下编译#include "stdio.h"#include <math.h> float f(float x) {float y; y=x*x*x*x+2*x*x*x-x-1; return y; } void main() {float a=0,b=0,h,y,x; int k,n0; printf("please input qujian a and b"); scanf(

#include<stdio.h>#include<math.h> float getvalue(float x) { return x*x*x+4*x*x-10; } void main() { float a=1,b=1.5,c; c=(a+b)/2; while(fabs(getvalue(c))>0.00001&& fabs(a-b)>0.00001){ if(getvalue(c)*getvalue(b)<0) a=c; if(getvalue(a)*getvalue(c)<0) b=c; c=(a+b)/2; } printf("%0.3f",c); }

举个例子://二分查找法//# include void main() { int a[16],i,num,flag=0,top,bottom,mid; //定义一个一维数组a[16]用来存放供查找用的数据,但只用a[1]a[15]// //num用来放要查找的数据,flag是表示是否找到的开关变量,top表示查找

float flag=0.3*0.3*0.3*0.3-3*0.3+1>0?1:0;float fun(float left ,float right){float mid=(left+right)/2;float res=mid*mid*mid*mid-3*mid+1;if(abs(res)<(1/2)*(1/(10*10)))return mid;else if((flag==1&&res<0)||(flag==0&&res>0)) return fun(left,mid);else if((flag==1&&res>0)||(flag==0&&res<0)) return fun(mid,right);}

int binSearch(int x, int a[], int n) { int low, high, mid; low = 0; high = n-1; //注意,这里必须用<=, 用<不对,一直返回-1 while(low <= high) { mid = (low + high) / 2; if(x < a[mid]) high = mid - 1; else if(x > a[mid]) low = mid + 1; else return mid; }

#include<stdio.h>#include<math.h>#define EQUATION(A, B, m, n, x) (A*pow(x, m) + B*pow(x, n) - 1)/* 定义方程*/ double A, B, m, n;/*方程参数*/ void find_extent(double *x1, double *x2)/*找出根所在的区间*/ { double i = 0, j = 0; *x1 = 0; if(

首先二分法必须让数列有序,比如说我要在 1 2 3 4 5 6 7 8 9 10中找到5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> int main() { int low = 0, high = 9, m, k, sign = 0; int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8

#include<stdlib.h> void sort(int a[],int n){ /*排序函数,要使用二分法查找就必须对数组进行排序*/ int i,k; for(i=0;i<n;i++){ int min=i; for(k=i+1;k<n;k++) if(a[min]>a[k])min=k; if(i!=min){ a[min]+=a[i];/*这里是运用加减法交换两个数*/ a[i]=a[min]-a[i]; a[

程序似乎没什么问题估计问题在你选取的搜索区间区间选的不好就解不对二分法对搜索区间的要求很严格的,不能多解,不能无解,必须连续……没办法,这是类牛顿法解方程的通病

网站首页 | 网站地图
All rights reserved Powered by www.dzrs.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com