二分法c语言程序代码(二分法c语言程序代码升序)

http://www.itjxue.com  2023-03-18 19:12  来源:未知  点击次数: 

求C语言源代码二分法求解非线性方程组的根(VC++6.0)

如果连续函数在给定区间不单调,很有可能中值*下界值和中值*上界值都大于0,那么会跳出认为没有根,而事实上很有可能这个中值点靠近函数极点。而真正用二分法求给定区间的思路是:首先为函数求导,算出导函数的零点,然后再判断零点性质,最后将函数区间分为单调递增和单调递减间隔的形式,对每一段进行二分法求根。

#include stdio.h

#include math.h

#define DEFAULT_UPPER (10)

#define DEFAULT_LOWER (-10)

#define DEFAULT_E (0.00000001)

#define _MID(x,y) ((x+y)/2)

#define _VALUE(x) (2*x*x*x-4*x*x+3*x-6)

double _e;

int getRoot(double lower, double upper, double *result);

main()

{

double root;

printf("Enter a deviation:");

scanf("%lf", _e);

if(_e == 0.0)

_e = DEFAULT_E;

if(getRoot(DEFAULT_LOWER, DEFAULT_UPPER, root))

printf("Root:%2.8lf\n", root);

else

printf("Root:No Solution.\n");

}

int getRoot(double lower, double upper, double *result)

{

*result = _MID(lower,upper);

if(upper - lower = _e)

return 1;

if(_VALUE(lower)*_VALUE(*result) = 0)

return getRoot(lower, *result, result);

else if(_VALUE(*result)*_VALUE(upper) = 0)

return getRoot(*result, upper, result);

else

return 0;

}

谁能用c语言帮我写个二分法的查找程序??

#includestdlib.h

void

sort(int

a[],int

n){

/*排序函数,要使用二分法查找就必须对数组进行排序*/

int

i,k;

for(i=0;in;i++){

int

min=i;

for(k=i+1;kn;k++)

if(a[min]a[k])min=k;

if(i!=min){

a[min]+=a[i];/*这里是运用加减法交换两个数*/

a[i]=a[min]-a[i];

a[min]-=a[i];

}

}

}

int

find(int

a[],int

n,int

key){/*二分法查找;参数:数组名,数组长度,查找关键字*/

int

min=0,max=n-1;/*二分法查找头尾变量*/

while(minmax){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/

int

cen

=

(min+max)/2;

if(a[cen]==key)

return

cen;/*如果查到,则返回关键字在排序数组的下标*/

if(cen==min

||

cen==max)break;/*如果中间变量等于头尾任一个变量,同样查找失败*/

if(a[cen]key)

max=cen;

else

min=cen;

}

return

-1;

}

void

main(){/*主程序只是为了证明两个函数的可行性,可以自己编写*/

int

a[]={14,10,25,36,87,95,10,12,13,8},i;

sort(a,10);

i=find(a,10,11);

if(i!=-1)

printf("be

found");

else

printf("no

found");

getch();

}

C语言中二分法的具体程序是什么呢?

举个例子:

//二分查找法//

#

include

void

main()

{

int

a[16],i,num,flag=0,top,bottom,mid;

//定义一个一维数组a[16]用来存放供查找用的数据,但只用a[1]——a[15]//

//num用来放要查找的数据,flag是表示是否找到的开关变量,top表示查找的起始位置,bottom表示查找的终止位置,mid表示top与bottom的中间位置//

char

goon;

//变量goon为'y'或'Y'时表示继续下一轮查找,否则终止程序//

printf("请输入第1个数字:\n");

scanf("

%d",a[1]);

//依次输入第二到第十五个数,并要求输入的数递减//

for(i=2;i=15;i++)

{

printf("请输入第%d个数字:\n",i);

scanf("

%d",a[i]);

if(a[i]=a[i-1])

{

printf("请再次输入,它应该比上一个数小:\n");

scanf("

%d",a[i]);

}

}

//输出刚才输入的数//

printf("你刚才输入的数是:\n");

for(i=1;i=15;i++)

printf("

%d",a[i]);

printf("\n");

//查找循环开始//

do

{

printf("现在请输入你要查找的数:\n");//输入想要查找的数//

scanf("

%d",num);

top=15;

bottom=1;

mid=15/2+1;

if(numa[1]

||

num

0)//如果在规定的范围内,开始二分法查找//

{

if(num==a[mid])//找到所需数据,退出本层循环//

{

printf("你所要查找的数字是第%d个。\n",mid);

flag=1;

}

else

if(numa[mid])//如果要查找的数据比a[mid]大,在前半数组查找//

{

top=mid+1;

mid=(top+bottom)/2;

}

else

//如果要查找的数据比a[mid]小,在后半数组查找//

{

bottom=mid-1;

mid=(top+bottom)/2;

}

}

if(flag==0)//如果未找到数据,输出找不到的信息//

printf("无法找到你要找的数字!\n");

printf("是否继续查找?(Y/N):\n");//询问是否开始下一轮查找//

scanf("

%c",goon);

}while(goon=='y'

||

goon=='Y');

}

用二分法求方程的根(C语言编写程序)

#include stdio.h

#include math.h

int main() {

double x0, x1, x2, f0, f1, f2;

do {

printf("请输入两个点:");

scanf("%lf,%lf", x1, x2);

f1 = ((2 * x1 - 4) * x1 + 3) * x1 - 6; //换成你自己的 方程

f2 = ((2 * x2 - 4) * x2 + 3) * x2 - 6; //换成你自己的 方程

printf("f1 = %f, f2 = %f\n", f1, f2);

} while (f1 * f2 0);

do {

x0 = (x1 + x2) / 2;

f0 = ((2 * x0 - 4) * x0 + 3) * x0 - 6;

if (f0 * f1 0) {

x2 = x0;

f2 = f0;

}

else {

x1 = x0;

f1 = f0;

}

} while (fabs(f0) = 0.00001);

printf("方程根为:%lf\n", x0);

return 0;

}

求二分法查找演示C语言源代码

二分法查找算法:

1.?主要思想是:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。

2. 时间复杂度: ?O(log2n)。

3. C语言源代码(小例子)

search函数即为核心代码:递归查找

#includestdio.h

int?search(int?*a,?int?num,?int?low,?int?high)

{

int?mid?=(low?+?high)/2;

if(low=high)

{

if(num??a[mid])

return?search(a,?num,?low,?mid-1);?//加return

if(num??a[mid])

return?search(a,?num,?mid+1,?high);//加return

if(num==a[mid])?????????????????????

return?1;

}

else

return?0;

}

int?main(){

int?a[11]?=?{0,?1,?2,?3,?4,?5,?9,?11,?12,?13,?15};

if(search(a,?11,?0,?10)==1)

printf("success!!");

else?

printf("failed!!");

}

C语言:二分法

这段代码是求解方程f(x)=0在区间[-10,10]上的根的数值解。

方法的思想就是:一直选取区间中间的数值,如果发现中间的函数值与一侧函数值,异号,那么说明解在这个更小的区间中,采用eps=1e-5作为区间的极限大小,通过迭代的方法求解这个方程的数值解。

所以了解了上述思想,那么else if(f(a)*f(c)0) b=c; 说明的是 f(a)和f(c)异号,那么使用b=(a+b)/2缩小迭代区间,继续迭代;同理else a=c;说明f(a)和f(c)同号,那么使用a(a+b)/2缩小迭代区间,继续迭代!

(责任编辑:IT教学网)

更多

推荐微信营销文章