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

c語言入門一元二次方程

發布時間: 2023-01-22 10:30:20

c語言,求一元二次方程的解

對於如下的一元二次方程:

ax*x+bx+c=0

設計C語言程序,輸入一元二次方程的三個系數a、b、c,求解出該方程的兩個根,並且允許用戶在程序中多次輸入不同的系數,以求解不同的一元二次方程的解。

編程思路分析:

對於該方程,令delta=b^2-4*a*c,從數學的角度來講,我們需要根據delta的值來判斷該方程的根情況:

當delta>=0時,其兩個根為實數解,分別為(-b+sqrt(delta))/(2*a)和(-b-sqrt(delta))/(2*a);

當delta<0時,其兩個根為復數解,實部皆為-b/(2*a),虛部分別為sqrt(-delta)/(2*a)和-sqrt(-delta)/(2*a)。

其中,sqrt(delta)代表對delta作開根號運算。

在代碼設計中,可定義一個結構體Complex存儲該方程的根,在該結構體中包括實部和虛部兩個變
在程序中,定義兩個Complex類型的根x1和x2,當delta>=0時,兩個根的虛部為0,否則,分別求解兩個根的虛部值。
具體編程如下:

#include"stdio.h"
#include"math.h"
/*求一元二次方程ax*x+bx+c=0的解*/
main()
{floata,b,c,x1,x2,d;
printf("請輸入a:");
scanf("%f",&a);
printf("請輸入b:");
scanf("%f",&b);
printf("請輸入c:");
scanf("%f",&c);
d=b*b-4*a*c;if(d<0)
printf("方程沒有實數解。 ");
if(d==0){x1=(-b)/(2*a);
printf("x1=%f ",x1);}
if(d>0){x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f ",x1,x2);}}
請輸入a:12
請輸入b:34
請輸入c:4
x1=-0.122985,x2=-2.710348
Pressanykeytocontinue

為迭代序列。

❷ c語言一元二次方程編程是怎麼樣的

c語言一元二次方程編程是#include<iostream> 。#include<cmath>。usingnamespacestd。intmain()。{floata,b,c;floatx1,x2; cin>a>>b>>c;floatdlt=b*b-4*a*c;if(dlt>=0){x1=-b/2/a+sqrt(dlt)。/2/ax2=-b/2/a-sqrt(dlt)/2/a。

形如x=p或(nx+m)=p(p≥0)的一元二次方程可採用直接開平方的方法解一元二次方程.如果方程化成x²=p的形式,那麼可得x=±p;(x²=p,x=±根號p)如果方程能化成(nx+m)=p(p≥0)的形式,那麼nx+m=±p。


簡潔的語言:

C語言包含的各種控制語句僅有9種,關鍵字也只有32個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。

實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。

提供的控制語句具有結構化特徵,如for語句、if...else語句和switch語句等。可以用於實現函數的邏輯控制,方便麵向過程的程序設計。



❸ 怎樣用C語言編一個解一元二次方程的程序(可以看步驟)!

#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b, c; //定義一元二次方程的三個數值;
printf("請依次輸入一元二次方程的三個參數a b c,中間以空格隔開\n");
scanf("%d %d %d", &a, &b, &c); //依次輸入一元二次方程的三個參數
double delta = b*b - 4*a*c; //定義delta的值為b*b - 4*a*c
double x1 = (-b + sqrt(delta))/(2 * a);
double x2 = (-b - sqrt(delta))/(2 * a);

if (delta>0) //delta大於0時,方程有兩個解
{
printf("一元二次方程有兩個解\n");
printf("一元二次方程的第一個解,x1 = %f\n",x1);
printf("一元二次方程的第二個解,x2 = %f\n",x2);
}
else if (delta ==0) //delta等於0,方程有兩個相同的解
{
printf("一元二次方程有兩個相同的解\n");
printf("一元二次方程的解為x1 = x2 =%f\n",x1);
}
else //delta小於0時,方程沒有解
{
printf("一元二次方程沒有解\n");
}

return 0;
}

❹ c語言編寫一元2次方程。

程序想法沒錯,但設計的時候有點失誤。
void
main()
{
float
a=0,b=0,c=0,d=0,x1=0,x2=0,e=0;/*定義變數*/
printf("axe2+bx+c=0,(a,b,c):\n");/*提示輸入3個數*/
scanf("%f,%f,%f",&a,&b,&c);/*輸入的時候用float型
*/
e=sqrt(d);/*根號d
*/
x1=(-b+e)/(2*a);/*計算方程,公式有點不點,邏輯*/
x2=(-b-e)/(2*a);/*計算方程*/

printf("\n
positive:\n
x1=%f,\n
negative:\nx2=%f",x1,x2);/*輸出x1
x2,輸出的時候也要用float型*/
}
else
printf("equation");/*方程無解*/
getch();
}

//經修改,可以正常運行,

還有建議下,你就在定義變數的時候不要一大串一起定義類型,

有時候變數的類型是不無法隱型轉換的,就會出錯。

就像程序裡面的,開根號又不一定都開出個整數,大多都是帶小數的,就應該定義成float型,

最後的解也會直接化成帶小數的,要是你用long(長整型,也是整型的一種),

那小數點後面就將被程序自動省略,那問題可就大了,呵呵,。

還在做為printf輸出的時候,要給點提示,不然人家也不知道,這a,b,c是幹嘛用的。

❺ c語言,一元二次方程

#include<stdio.h>
#include<math.h>
intmain()
{
floata,b,c;
while(scanf("%f%f%f",&a,&b,&c)!=EOF)
{
if(a==0&&b==0&&c==0)
printf("ZeroEquation ");
else
{
floatx,x1,x2,m;
if(a==0&&b==0&&c!=0)
printf("NotAnEquation ");
if(a==0&&b!=0&&c!=0)
printf("%.2f ",-c/b);
if(a!=0&&b!=0)
{
if(b*b-4*a*c==0)
{
m=-b/(2*a);
printf("%.2f ",m);
}
if(b*b-4*a*c>0)
{
x=sqrt(b*b-4*a*c);
x1=(-b+x)/(2*a);
x2=(-b-x)/(2*a);
printf("%.2f ",x1);
printf("%.2f ",x2);
}
if(b*b-4*a*c<0)
{
x=sqrt(4*a*c-b*b);
x1=-b/(2*a);
x2=x/(2*a);
printf("%.2f+%.2fi ",x1,x2);
printf("%.2f-%.2fi ",x1,x2);
}
}
if(a!=0&&b==0&&c!=0)
{
printf("0.00+%.2fi ",sqrt(c/a));
printf("0.00-%.2fi ",sqrt(c/a));
}
if(a!=0&&b==0&&c==0)
printf("0.00 ");
}
}
return0;
}

❻ c語言解一元二次方程是什麼

#include<iostream> 。

#include<cmath>。

usingnamespacestd。

intmain()。

{floata,b,c;floatx1,x2; cin>a>>b>>c;floatdlt=b*b-4*a*c;if(dlt>=0){x1=-b/2/a+sqrt(dlt)。

/2/ax2=-b/2/a-sqrt(dlt)/2/a。

cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有兩個實根:";cout<<"x1="<<x1<<",x2="<<x2<<endl;} 。

else。

{x1=-b/2/a;x2=sqrt(-dlt)/2/a;cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有兩個虛根:"。

cout<<"x="<<x1<<"+/-"<<x2<<"i"<<endl;}。

return0。

成立條件:

一元二次方程成立必須同時滿足三個條件:

①是整式方程,即等號兩邊都是整式,方程中如果有分母;且未知數在分母上,那麼這個方程就是分式方程,不是一元二次方程,方程中如果有根號,且未知數在根號內,那麼這個方程也不是一元二次方程(是無理方程)。

②只含有一個未知數。

③未知數項的最高次數是2。

❼ c語言 解一元二次方程 新手很茫然

呵呵,寫得不錯。

if(a>0||a<0) -> if (a!=0) 這個確實比較好,要是怕出錯,有人建議寫成if(0!=a),為了避免輸入錯誤。比如少輸一個!等等。
浮點數的判斷一般會弄一個范圍,以避免直接的等號,因為計算有誤差。但是實際上情況非常復雜。

如果能夠確定輸入的范圍,那麼這么優化判斷自然沒有問題。比如,a、b、c都是整數量級。
如果系數都是0.001這種量級,優化後的就是總顯示有一個實數根或者無解,顯然是不合適的。

因為實際上數學上的數和計算機所能表示的數范圍相差太大,所以我覺得還是可以,二重根這種情況,列印兩遍不算錯誤,不必判斷是否相等。如果一定要判斷,最好用整數或者分數。

此外,程序還可以考慮,使用分數之類進行計算,輸出中帶有根號。比如結果輸出4*sqrt(2)這樣更實用一些。

❽ c語言解一元二次方程

多出一句「請正確輸入,謝謝合作!」與「是否正確?(是y\否n)」的原因:
注意一下scanf,scanf並不是像通常所誤解的,認為是直接讀取用戶的當前輸入為輸入值。
而是讀取當前鍵盤緩沖區中的數據為本次輸入值。
所以如果當前的鍵盤緩沖區內仍有數據,那麼就不會接受當前的用戶輸入值。

在這個程序中,
由於鍵盤緩沖區內仍有用戶上次輸入數據時所殘留的回車符(也就是輸入a,b,c時最後敲的回車),
所以scanf("%c",&z); 這一句就將鍵盤緩沖區中的回車讀入,作為z值了。
所以判斷失敗,多出一句「請正確輸入,謝謝合作!」與「是否正確?(是y\否n)」。

改正辦法:
在每句scanf前,加上強制清空鍵盤緩沖區的處理fflush(stdin);,以保證接收的數據的正確性。
這也是一個好的編程習慣。

改過以後的程序:
#include "stdio.h"
#include "math.h"
void main()
{
printf("求方程ax^2+bx+c=0的根:\n");
L: printf("請分別輸入a,b,c的值。\n");
double a,b,c,x1,x2,x,y;
char z;
printf("a=");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%lf",&a);
printf("b=");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%lf",&b);
printf("c=");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%lf",&c);
printf("你所輸入的方程為%lfx^2+%lfx+%lf=0。\n",a,b,c);
M: printf("是否正確?(是y\否n)\n");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%c",&z);
if (z=='n')
goto L;
else if (z=='y')
{
if ((b*b-4*a*c)>0)
x1=(-b+sqrt(b*b-4*a*c))/(2*a),
x2=(-b-sqrt(b*b-4*a*c))/(2*a),
printf("有兩個不同的實根:\nx1=%lf\nx2=%lf\n",x1,x2),
printf("\n");
if ((b*b-4*a*c)==0)
x1=-b/(2*a),
printf("有兩個相同的實根:\nx1=x2=%lf\n",x1),
printf("\n");
if ((b*b-4*a*c)<0)
x=-b/(2*a),
y=sqrt(4*a*c-b*b)/(2*a),
printf("有兩表個不同的曾根:\nx1=%lf+%lfi\nx2=%lf-%lfi\n",x,y,x,y),
printf("\n");
goto L ;
}
else printf("請正確輸入,謝謝合作!\n");
goto M;
}

❾ 初學C語言,求一元二次方程的解問題

#include<stdio.h>
#include<math.h>
intmain()
{
doublex1,x2,k,a,b,c;
printf("輸入a,b,c的值 ");
scanf("%lf,%lf,%lf",&a,&b,&c);//double讀入用%lf
k=b*b-4*a*c;
if(fabs(k-0)<1e-6)//double型的相等比較最好這樣寫
{
x1=(-b)/(2*a);//x1不求么?
printf("方程有兩個相同的解x1=x2=%.2lf",x1);//double輸出用%lf
}
elseif(k>0)//Δ>0才是兩個解吧……
{
x1=(-b+sqrt(k))/(2*a);
x2=(-b-sqrt(k))/(2*a);
printf("方程有兩個解x1=%lf,x2=%lf",x1,x2);//double輸出用%lf
}
else
{
printf("方程沒解");
}
}

❿ C語言解一元二次方程(包含虛數解)

表示虛數一般不用j表示,而是用i表示。輸出的時候後面帶上i就可以了。

判別式變數d為負時,用sqrt(-d)

形如ax²+bx+c=0的方程的完整程序如下:

#include<stdio.h>
#include<math.h>
voidmain()
{
floata,b,c,dlt;
printf("請輸入a、b、c:");
scanf("%f%f%f",&a,&b,&c);
if(a)
{
dlt=b*b-a*c*4;
if(dlt>0)
printf("x1=%f x2=%f",(-b+sqrt(dlt))/(a*2),(-b-sqrt(dlt))/(a*2));
elseif(dlt<0)
printf("x1=%f+%fi x2=%f-%fi",-b/(a*2),abs(sqrt(-dlt)/(a*2)),-b/(a*2),abs(sqrt(-dlt)/(a*2)));
elseprintf("x=%f",-b/(a*2));
}
else
{
if(b)c?printf("x=%f",-c/b):printf("x=%f",abs(-c/b));
elsec?printf("方程無實數解"):printf("方程的解為任意實數");
}
}