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

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

举个例子:

//二分查找法//

#

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=2i<=15i++)

{

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

scanf("

%d",&a[i])

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

{

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

scanf("

%d",&a[i])

}

}

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

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

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

printf("

%d",a[i])

printf("\n")

//查找循环开始//

do

{

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

scanf("

%d",&num)

top=15

bottom=1

mid=15/2+1

if(num>a[1]

||

num

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

{

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

{

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

flag=1

}

else

if(num>a[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')

}

一般地,对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点

解方程即要求f(x)的所有零点。

先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],

现在假设f(a)<0,f(b)>0,a<b

①如果f[(a+b)/2]=0,该点就是零点,

如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用

中点函数值判断。

如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=>b,从①开始继续使用

中点函数值判断。

这样就可以不断接近零点。

像求:|f(x)|<10^-5 f(x)=2x^3-4x^2+3x-6

#include"iostream"

#include"stdio.h"

#include"math.h"

#define null 0

double fx(double)//f(x)函数

void main()

{

double xa(null),xb(null),xc(null)

do

{

printf("请输入一个范围x0 x1:")

std::cin>>xa>>xb//输入xa xb的值

printf("%f %f",xa,xb)

}

while(fx(xa)*fx(xb)>=0)//判断输入范围内是否包含函数值0

do

{

if(fx((xc=(xa+xb)/2))*fx(xb)<0) //二分法判断函数值包含0的X取值区间

{

xa=xc

}

else

{

xb=xc

}

}

while(fx(xc)>pow(10.0,-5)||fx(xc)<-1*pow(10.0,-5))//判断x根是否在接近函数值0的精确范围内

printf("\n 得数为:%f",xc)

}

double fx(double x)

{

return(2.0*pow(x,3)-4.0*pow(x,2)+3*x-6.0)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11011011.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存