二分法編譯
『壹』 一個c++編程問題-二分法求方程的根
//---------------------------------------------------------------------------
#include<iostream>
using namespace std;
double func (const double x);
double findRoot( double first, double last,const double e); /*注意這里,應盯正該是分號而不是冒號*/
int main ()
{
double a,b ,c,root;
cout<<"Input a ";
cin>>a;
cout<<"Input b";
cin>>b;
cout<<"Input c";
cin>>c;
root=findRoot(a,b,c);
cout<<罩則宏"物冊The root is"<<root<<endl;
return 0;
}
double func(const double x)
{
double y;
y=x*(x+5)*(x-1);
return y;
}
double findRoot(double first, double last,const double e)
{
double mid,y0,y1,y2;
mid=(first+last)/2;
while((last-first)>e)
{
y0=func (mid);
y1=func(first);
y2=func(last);
if (y0==0) return mid;
else if(y0*y1<0) last=mid;
else first=mid; /*注意這里*/
mid=(first+last)/2;
}
return mid;
}
//---------------------------------------------------------------------------
『貳』 我的二分法求近似根的用c語言寫的程序代碼,編輯編譯沒有錯誤,沒有警告,但程序運行到循環體就不走了
#include <stdio.h>中寬
#include <math.h>
#define eps 0.0001
double f (double x)
{
double y;
y=x*x*x-x-1;
return(y);
}
main()
{
int i=0;double t;int a,b;
printf("這是一個用二分法求函數近似根的程序(精確度為10^-4)鉛畢!請用戶輸入區間兩個端點a和b的值:\賣激亮n");
scanf("%d,%d",&a,&b);
for(;fabs(b-a)>eps;)
{
t=(a+b)/2;
i++;
if(f(a)*f(t)<0)
a=t;
else
b=t;
}
printf("函數近似根為%.4f\n",t);
printf("二分的次數為%d\n",i);
}
你寫反了
『叄』 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++一個二分法的代碼....編譯程序時 會出現這個警告statement has no effect,然後運行之後是空白啊
#include<iostream>
usingnamespacestd;
intfind(int,int[],int);
intmain()
{
inta[]={1,23,32,34,43,54,66,78,80,88,89,90,98};
intcheck=find(43,a,13);
if(check==13)//比較大小是==
{
cout<<"沒有查找到數據 ";
}
else
cout<<"43在數組a中的位置是:"<<check+1<<endl;
return0;
}
intfind(intm,inta[],intn)
{
into=0,h=n-1,i;
while(o<=h)//是o<=h,不是0
{
i=(o+h)/2;
if(a[i]==m)
{
returni;
}
elseif(a[i]<m)
{
o=i+1;//o=i+1
}
elseif(a[i]>m)
h=i-1;//h=i-1
}
returnn;
}
有邏輯問題
『伍』 c語言二分法求根
二分法計算函數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;
}
}
}