目录
例题:
从键盘上输入a,b,c的值,编程计算并输出一元二次方程的根
一.无要求
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, x1, x2;
printf("请输入三个系数a,b,c\n");
scanf("%lf,%lf,%lf", &a, &b, &c);
x1 = (-b + sqrt(b * b - 4 * a * c)) / 2;
x2 = (-b - sqrt(b * b - 4 * a * c)) / 2;
if (b * b - 4 * a * c < 0)
{
printf("这个一元二次方程无解\n");
}
else
{
printf("这个方程的根为%.2lf和%.2lf\n", x1, x2);
}
return 0;
}
二.有要求:
当a=0时,输出“该方程的根不是一元二次方程”,当a≠0时,分Δ>0,Δ=0,Δ<0三种情况,并输出方程的根
问题分析:
根据一元二次方程的求根公式,令p=-b/2a q=sqrt(fabs(disc)) / (2 * a)
当Δ=0时,有俩个相等的实根x1=x2=p
当Δ>0时,有俩个不想等的实根,分别为x1=p+q,x2=p-q;
当Δ<0时,有一对共轭复根,分别为x1=p+qi,x2=p-qi
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define EPS 1e-6
int main(void)
{
float a, b, c, disc, p, q; //disc就是Δ
printf("Please enter the coefficients a,b,c:");
scanf("%f,%f,%f", &a, &b, &c);
if (fabs(a) <= EPS) //fabs()求双精度浮点数的绝对值
{
printf("这不是一元二次方程!\n");
exit(0);
}
disc = b * b - 4 * a * c; //计算Δ
p = -b / 2 * a;
q = sqrt(fabs(disc)) / (2 * a);
if (fabs(disc) <= EPS) //Δ=0,输出俩个相等的根
{
printf("x1=x2=%.2f\n", p);
}
else
{
if (disc > EPS) //Δ>0,输出俩个不相等的根
{
printf("x1=%.2f,x2=%.2f\n", p + q, p - q);
}
else //Δ<0,输出俩个共轭复根
{
printf("x1=%.2f+%,2fi,", p, q);
printf("x2=%.2f-%.2fi,", p, q);
}
}
return 0;
}
提醒:
输入的时候注意加逗号