交通银行手机银行注册:C语言中二分法的具体程序是什么呢?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 03:08:27

二分法计算函数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("%f%f%d",&a,&b,&n0); /*输入含根区间a,b,循环次数n0 */

for(k=0;k<=n0;k++)

{ x=(a+b)/2;

h=(b-a)/2;

y=f(x);

if(h<10e-6||fabs(y)<10e-6)

{ printf("k=%d,x=%f,y=%f",k,x,y);

break; } /*输出分半次数k,函数的根x,及x对应的函数值.*/

else

{if(f(a)*f(x)<0)

b=x;

else a=x;

}

}

}

#include <stdio.h>
#include <math.h>
//int chashu(int shu,int *a);
main()
{
int chashu(int shu , int p[11] );
int a[11];
int shu;
int i;
int jieguo;

for (i=1;i<=10;i++)
{printf("请输入第%d个数\n",i);
scanf("%d",&a[i]);
}

printf("这是你输入的数\n");

for (i=1;i<=10;i++)
printf("%d\n",a[i]);

printf("请输入你要查找的数\n");
scanf("%d",&shu);

jieguo=chashu(shu,a);
if ( jieguo!=0 )
printf("所查找的数在第%d个\n",jieguo);
else
printf("你所查找的数不存在!!\n");

}

int chashu(int shu, int p[11])
{int x1=1;
int x2=10;
int x0;
int t;
t=0;
x0=(x1+x2)/2;
do
{
if (shu==p[1])
{t= 1;
break;}

else if (shu==p[10])

{t= 10;
break;}

else if (p[x0]>shu)
{x1=x1;
x2=x0;
t=0;
x0=(x1+x2)/2;
}
else if (p[x0]<shu)
{x2=x2;
x1=x0;
t=0;
x0=(x1+x2)/2;
}
else if (p[x0]==shu)

{t=x0;
break;}
}

while (x1<x2 && shu <=p[10] && shu>=p[1]);

if (t !=0 )
return t;
else
return 0;
}

举个例子:
//二分查找法//
# include<stdio.h>
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(num>a[1] || num<a[15])//如果要查找的数据不在规定范围内,令flag=1,输出超出范围的信息//
{
flag=1;
printf("你所要查找的数字不在范围内!\n");
}

while(flag==0 && (top-bottom)>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');
}