"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)
另外,结果虽然正确了,但是逻辑还是比较混乱的。