當前位置:首頁 » 編程語言 » 用c語言算二分法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用c語言算二分法

發布時間: 2022-06-21 09:33:27

Ⅰ 誰能用c語言幫我寫個二分法的查找程序

#include<stdlib.h>
void
sort(int
a[],int
n){
/*排序函數,要使用二分法查找就必須對數組進行排序*/
int
i,k;
for(i=0;i<n;i++){
int
min=i;
for(k=i+1;k<n;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(min<max){/*如果最頭的變數值大於最尾變數的值,則查找不到,查找失敗*/
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語言編程例題:用二分法求方程的解

這段代碼是求解方程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縮小迭代區間,繼續迭代!

Ⅲ 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(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');
}

Ⅳ c語言二分法怎麼用,求例子!!

首先二分法必須讓數列有序,比如說我要在 1 2 3 4 5 6 7 8 9 10中找到5.

#include<stdio.h>

intmain()
{
intlow=0,high=9,m,k,sign=0;
inta[10]=
{
1,2,3,4,5,6,7,8,9,10
};
scanf("%d",&k);
while(high>=low)
{
intm=low+(high-low)/2;
if(a[m]>k)high=m-1;
elseif(a[m]<k)low=m+1;
else
{
printf("yes");
sign=1;
break;
}
}
if(sign==0)printf("no");
return0;
}

Ⅳ 怎麼用C語言求二分法

二分法查找有一個前提,數據應該是排好序的,假設從小到大排列,則:
首先用中間那個數(也可以不是正中間,差一兩位沒有關系,只要保證不忽略數據就行)與查找值比較,大於查找值就跳到左邊。
然後重新設定新的數列。新的數列為,從最小的數值到中間那個數。
以這個新的數列為基礎,重復以上步驟。

Ⅵ C語言編程二分法

1、打開Python開發工具IDLE,新建『search.py』。

Ⅶ c語言二分法

syms x
f=x^3-3*x-1;
df=diff(f,x);

eps=1e-5;
x0=2;
cnt=0;
MAXCNT=200; %最大循環次數
while cnt<MAXCNT %防止無限循環
x1=x0-subs(f,x,x0)/subs(df,x,x0); %去掉分號可以看到迭代過程.
if (abs(x1-x0)<eps)
break;
end
x0=x1;
cnt=cnt+1;
end
if cnt==MAXCNT
disp '不收斂'
else
vpa(x1,8)
end

Ⅷ 用C語言二分法

(1)和(2)補全了。不過上面的二分查找函數卻沒有 寫好。

Ⅸ c語言二分法編程

題目不全,沒把方程給出來。