c語言方程的根
A. c語言函數求方程的根
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
float a,b,c,x,x1,x2,d;
scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if(a==0)
{
if(b==0)
{
if(0==c)
{
printf("等式0!\n");
}
else
{
printf("輸入錯誤!\n");
}
}
else
{
printf("只能構成一元一次方程,x=%.6f\n",0==-(float)c/b ? 0 : -(float)c/b);
}
}
else
{
if(d<0)
{
x1=(-b+sqrt(-d))/(2.0*a);
x2=(-b-sqrt(-d))/(2.0*a);
printf("x1=%.6f+%.6fi\nx2=%.6f-%.6fi\n",(-b)/(2.0*a),sqrt(-d)/(2.0*a),(-b)/(2.0*a),sqrt(-d)/(2.0*a));
}
else if(d==0)
{
printf("x1=x2=%.6f\n",(-b)/(2.0*a));
}
else
{
x1=(-b+sqrt(d))/(2.0*a);
x2=(-b-sqrt(d))/(2.0*a);
printf("x1=%.6f\nx2=%.6f\n",x1,x2);
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
B. c璇璦奼備竴鍏冧簩嬈℃柟紼嬬殑鏍
Ax2+bx+c=0
涓鍏冧簩嬈℃柟紼嬪彲鑳芥湁涓や釜瀹炴暟瑙o紝鎴栬呬竴涓瀹炴暟瑙o紝鎴栬呮棤瀹炴暟瑙c傛牴鎹杈撳叆鐨勪笁涓緋繪暟 a銆乥銆乧 鐨勫垽鏂瑙g殑鎯呭喌錛#include<stdio.h>#include<math.h>int main(){double disc,a,b,c,p,q,x1,x2;printf("璇瘋緭鍏a鍜宐鍜宑鐨勫礆細 ");
scanf("%lf %lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(disc<0)printf("鏀規柟紼嬫棤瀹炴暟鏍筡n");else{p=(-b)/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%7.2f
x2=%7.2f
",x1,x2);}return 0;
C. C語言編程——內容:用牛頓迭代法求一元三次方程的根。要求:由主函數調用求根子函數,謝謝各位了
牛頓迭代法
牛頓迭代法又稱牛頓切線法,它採用以下方法求根:先任意設定一個與真實的根接近的值x0作為第一個近似根,由x0求出f(x0),過(x0,f(x0))點做f(x)的切線,交x軸於x1,把它作為第二次近似根,再由x1求出f(x1),再過(x1,f(x1))點做f(x)的切線,交x軸於x2,再求出f(x2),再作切線……如此繼續下去,直到足夠接近真正的x為止。
其中f'(X0)是函數在X0處的斜率,也就是在X0處的導數。
代碼如下:
#include<stdio.h>
#include<math.h>
float f(float a,float b,float c,float d,float x)
{
float f;
f=((a*x+b)*x+c)*x+d;
return f;
}
float f1(float a,float b,float c,float x)
{
float f;
f=(x*3*a+2*b)*x+c;
return f;
}
float root(float a,float b,float c,float d)
{
float x0,x1=1;
do
{
x0=x1;
x1=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);
}while(fabs(x1-x0)>=1e-6);
return x0;
}
void main()
{
float a,b,c,d,x;
printf("input four float numbers:\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
x=root(a,b,c,d);
printf("%.1fX^3+%.1fX^2+%.1fX+%.1f=0 its root near x=1.5 is :%.4f\n",a,b,c,d,x);
getch();
}
D. C語言編程:牛頓迭代法求方程的根
程序流程分析:
① 賦值x0=1.5,即迭代初值;
② 用初值x0代入方程中計算此時的f(x0)及f』(x0),程序中用變數f描述方程的值,用fd描述方程求導之後的值;
③ 計算增量d=f/fd;
④ 計算下一個x,x=x0-d;
⑤ 把新產生的x替換x0,為下一次迭代做好准備;
⑥ 若d絕對值大於1e-3,則重復②③④⑤步。
源程序代碼:
#include <math.h>
main()
{
float x,x0,d,f,fd;
x0=0;
do {
f=2*x0*x0*x0-4*x0*x0+3*x0-6;
fd=6*x0*x0-8*x0+3;
d=f/fd;
x=x0-d;
x0=x;
}while(fabs(d)>1e-3);
printf("x=%f\n",x);
}
E. c語言二分法求方程的根的演算法
如果連續函數在給定區間不單調,很有可能中值*下界值和中值*上界值都大於0,那麼會跳出認為沒有根,而事實上很有可能這個中值點靠近函數極點。
而真正用二分法求給定區間的思路是:
首先為函數求導,算出導函數的零點,然後再判斷零點性質,最後將函數區間分為單調遞增和單調遞減間隔的形式,對每一段進行二分法求根。
#include<stdio.h>
#include<math.h>
#defineDEFAULT_UPPER(10)
#defineDEFAULT_LOWER(-10)
#defineDEFAULT_E(0.00000001)
#define_MID(x,y)((x+y)/2)
#define_VALUE(x)(2*x*x*x-4*x*x+3*x-6)
double_e;
intgetRoot(doublelower,doubleupper,double*result);
main()
{
doubleroot;
printf("Enteradeviation:");
scanf("%lf",&_e);
if(_e==0.0)
_e=DEFAULT_E;
if(getRoot(DEFAULT_LOWER,DEFAULT_UPPER,&root))
printf("Root:%2.8lf ",root);
else
printf("Root:NoSolution. ");
}
intgetRoot(doublelower,doubleupper,double*result)
{
*result=_MID(lower,upper);
if(upper-lower<=_e)
return1;
if(_VALUE(lower)*_VALUE(*result)<=0)
returngetRoot(lower,*result,result);
elseif(_VALUE(*result)*_VALUE(upper)<=0)
returngetRoot(*result,upper,result);
else
return0;
}
F. C語言實現二分法求解方程在區間內的根
C語言利用二分法策略尋找非線性方程在給定區間內的唯一實根。這種方法的關鍵在於,對於連續函數[公式],假設其在[a, b]區間內僅有一個實根,通過不斷將區間對半分割,直至找到函數值符號變化的位置,從而確定根的確切位置。
二分法的具體步驟是:首先,將區間[a, b]分為兩部分,取中點[公式],計算函數值[f(a)]和[f(mid)]。若[f(mid)]乘以[f(a)]的符號為負,說明根位於[a, mid]內;若符號相同,則根在[mid, b]區間。這樣,每次劃分都將搜索區間長度減半。這個過程重復進行,直到區間長度小於某個預設的精度閾值[公式],或找到滿足條件的根為止。
以一元n次多項式為例,我們可以編寫C語言程序來實現這一過程。通過編程實現的二分法查找,可以在特定范圍內找到方程的精確根,如對於多項式[公式],取上限[公式],並設定精度為[公式],程序會輸出相應的根的解。