用C語言求解一元二次方程的簡單實現(xiàn)
C語言 求解一元二次方程
在用C語言求解一元二次方程的時候,首先,最重要的肯定是要引入"math.h"這個頭文件,其次要會運用相關(guān)的數(shù)學(xué)庫函數(shù),如“sqrt”,“delta”等。
讓我們一起在代碼中尋找問題吧。
#include <stdio.h> #include <math.h> int main (void) { ? ? int a = 1,b = 2,c = 1; ? ? float x1 , x2 , delta ; ? ? delta = b*b - 4*a*c ; ? ? ? if ( delta > 0 ) ? ? ? { ? ? ? ? x1 = (-b-sqrt(delta)) / (2*a); ? ? ? ? x2 = (-b+sqrt(delta)) / (2*a); ? ? ? ? printf ("該方程有兩解,x1 = %f\n,x2 = %f\n",x1,x2); ? ? } ? ? ? else if (delta == 0) ? ? { ? ? ? ? x1 = (-b) / (2*a); ? ? ? ? x2 = x1; ? ? ? ? printf ("該方程有唯一解,x1 = x2 = %f\n",x1 = x2); ? ? } ? ? ? else if (delta < 0) ? ? { ? ? ? ? printf ("該方程無解\n"); ? ? } ? ? return 0; ?}?
這是之前我發(fā)的第一個博客代碼,現(xiàn)在我看到“數(shù)一數(shù)二的白落”的評價后又優(yōu)化了一些,代碼如下:
#include <stdio.h> #include <math.h> int main (void) { ? ? int a, b, c; ? ? printf("請輸入一元二次方程的三個系數(shù):\n"); ? ? scanf("%d %d %d",&a,&b,&c); ? ? float x1 , x2 , delta ; ? ? delta = b*b - 4*a*c ; ? ? ? if ( delta > 0 ) ? ? ? { ? ? ? ? x1 = (-b-sqrt(delta)) / (2*a); ? ? ? ? x2 = (-b+sqrt(delta)) / (2*a); ? ? ? ? printf ("該方程有兩解,x1 = %f\n,x2 = %f\n",x1,x2); ? ? } ? ? ? else if (delta == 0) ? ? { ? ? ? ? x1 = (-b) / (2*a); ? ? ? ? x2 = x1; ? ? ? ? printf ("該方程有唯一解,x1 = x2 = %f\n",x1 = x2); ? ? } ? ? ? else if (delta < 0) ? ? { ? ? ? ? printf ("該方程無解\n"); ? ? } ? ? return 0; ?}?
求一元二次方程的解,考慮所有情況
假設(shè):ax²+bx+c=0
要求輸入a,b,c的值,判斷并求出方程的解。
有以下幾種情況:
1、a = 0
(1)b = 0
c = 0時,x可以是任意數(shù);
c != 0時,方程不成立;
(2)b != 0
方程為一元一次方程,x = - c b \frac{c} bc?
2、a != 0
(1)△ =b^2-4ac >0,方程有兩個不等的實根;
(2)△ =b^2-4ac =0,方程有兩個相等的實根;
(3)△ =b^2-4ac <0,方程有兩個共軛復(fù)根;
#include <stdio.h> //編譯預(yù)處理 #include <math.h> //編譯預(yù)處理 int main() { double a,b,c,x1,x2,Delta,realpart,mipart; //聲明函數(shù)變量 printf("a*x^2 + bx +c = 0,請輸入a,b,c的值:"); scanf("%lf,%lf,%lf",&a,&b,&c); //獲取輸入的a,b,c三個系數(shù)的值 //printf("%.2f,%.2f,%.2f",a,b,c); if (a == 0 ) //判斷a是否為0 { if(b != 0) { x1 = -c / b; printf("方程是一元一次方程,x1=%.2f\n",x1); } else { if (c ==0) printf("x可以是任意值。\n"); else printf("方程不成立。\n"); } } else { Delta = pow(b,2) - 4*a*c; //判斷delta的值 if (Delta>0) { x1 = (-b+sqrt(Delta)) / (2*a); x2 = (-b-sqrt(Delta)) / (2*a); printf("方程的兩個根為x1 = %.2f,x2 = %.2f\n",x1,x2); } else { if (Delta == 0) { x1 = - b/(2*a); x2 = - b/(2*a); printf("方程有兩個相等的根:\nx1=%.2f\nx2=%.2f\n",x1,x2); } else { realpart = - b/(2*a); //實部 mipart = sqrt(-Delta) / (2*a); printf("方程有兩個共軛復(fù)根:\n"); printf("x1 = %.2f+%.5fi\n",realpart,mipart); //人為地加了i,以表示虛部 printf("x2 = %.2f-%.5fi\n",realpart,mipart); } } } return 0; } //每個if和else都用花括號{}包起來,這樣程序識別時候不會認(rèn)為else沒有匹配的if。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。