c语言二分法求解方程程序

Python025

c语言二分法求解方程程序,第1张

#include

"stdio.h"

#define

MAX

100

typedef

struct

node

{

int

key

}NODE

int

binsearch(NODE

r[MAX],int

k,int

n)

{

int

t=1,h=n,m

while(t<=h)

{

m=(t+h)/2

if(k==r[m].key)

return(m)

else

if(k>r[m].key)

t=m+1

else

h=m-1

}

return(-1)

}

void

main()

{

NODE

a[MAX]

int

i,k

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

scanf("%d",&a[i].key)

scanf("%d",&k)/*输入待查记录*/

i=binsearch(a,k,10)

if(i!=-1)

printf("%d的下标是%d\n",k,i)

else

printf("无此元素")

}

如果输入有序的数据:

9

13

15

30

37

55

60

75

80

90

再输入待查数

30

输出结果为:

30的下标是4

如输入的不是有序数据,要添加一段排序程序,冒泡、选择都可。

这段代码是求解方程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缩小迭代区间,继续迭代!

1. scanf("%d,%d,%d",&m,&n,&p)要改成scanf("%f,%f,%f",&m,&n,&p)

2.

if(f(m)*f(n)==0

if(f(m)==0)

j=m

else

j=n

break

要改成

if(f(m)*f(n)==0

{ if(f(m)==0)

j=m

else

j=n

break}

3:

else

j=h

要改成

else

{ j=hbreak}

4:

printf("The root is %d and steps are %d\n",j,k)

要改成

printf("The root is %f and steps are %d\n",j,k)

另外,结果虽然正确了,但是逻辑还是比较混乱的。