C语言编程题:求一元二次方程组的根
題目:求一元二次方程組的根
?
描述:
利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。
?
輸入:
輸入一行,包含三個浮點數a, b, c(它們之間以一個空格分開),分別表示方程ax2+ bx + c =0的系數。
輸出:
輸出一行,表示方程的解。
若b2 = 4 * a * c,則兩個實根相等,則輸出形式為:x1=x2=...。
若b2 > 4 * a * c,則兩個實根不等,則輸出形式為:x1=...;x2 = ...,其中x1>x2。
若b2 < 4 * a * c,則有兩個虛根,則輸出:x1=實部+虛部i; x2=實部-虛部i,即x1的虛部系數大于等于x2的虛部系數,實部為0時不可省略。實部 = -b / (2*a), 虛部 = sqrt(4*a*c-b*b) / (2*a)
所有實數部分要求精確到小數點后5位,數字、符號之間沒有空格。
?
#include<stdio.h> #include<math.h>int main(){double a,b,c,d;//a,b,c用來存放三個系數,d用來存放一元二次方程組的判別式double x1,x2;double m,n;//double esp=pow(10,-7);printf("請依次輸入一元二次方程組的系數:");scanf("%f%f%f",&a,&b,&c);d=b*b-4*a*c;if(d==0||d>0){if(d==0)//d=0時有兩相等實根{x1=x2=(-b+sqrt(d))/(2*a);printf("x1=x2=%p.5lf\n",x1,x2);}else//d>0時有兩不同實根{x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("x1=x2=%p.5lf\n",x1,x2);}}else//d<0時是兩虛根的情況{m=-b/(2*a)+esp;n=sqrt(-d)/(2*a);printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n",m,n,m,n); } return 0; }編程技巧與注意事項:
1.浮點型的程序定義時盡量使用double,因為float型容易精讀不夠;
2.本題的錯誤輸出是-0.000,為了避免這種情況可以加一個小值eps。要保留小數點后n位,eps=10的-(n+2)次方
3.次方函數pow(double a,double b) eg:10的-7次方即 pow(10,-7)
總結
以上是生活随笔為你收集整理的C语言编程题:求一元二次方程组的根的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7 2.新项目上线脚本
- 下一篇: DT100pro上手体验