求解一元二次方程的解 (分支语句)
一元二次方程
只含有一个未知数(一元),并且未知数项的最高次数是2(二次)的整式方程叫做一元二次方程 。一元二次方程经过整理都可化成一般形式ax²+bx+c=0(a≠0)。其中ax²叫作二次项,a是二次项系数;bx叫作一次项,b是一次项系数;c叫作常数项 。
由一元二次方程求根公式知
当 a != 0时:
判别式
利用一元二次方程根的判别式( δ)可以判断方程的根的情况 。
一元二次方程 的根与根的判别式 有如下关系:
①当 δ >0时,方程有两个不相等的实数根;
②当 δ=0时,方程有两个相等的实数根;
③当 δ<0时,方程无实数根,但有2个共轭复根
//求一元二次方程组的解
#include<stdio.h>
#include<math.h>
int main()
{
int a = 0, b = 0, c = 0,d=0;
double x1 = 0, x2 = 0;
printf("请输入一元二次方程组的a,b,c的值:\n");
scanf("%d%d%d", &a, &b, &c);
if (a==0)
{
if (b == 0)
{
if (c==0)
{
printf("方程有无数解\n");
}
else
{
printf("方程无解\n");
}
}
else
{
x1 = x2 = -c / (double)b;//因为x1,x2是double型的,所以要强转
printf("方程的解为:x1=x2=%.2lf\n", x1);
}
}
else
{
d = b*b - 4 * a*c;
if (d > 0)
{
//sqrt是开平方函数,离开所以上面要引用#include<math.h>的头文件
x1 = (-b + sqrt(d)) / (2.0 * a);
x2 = (-b - sqrt(d)) / (2.0 * a);
printf("方程的解为:x1=%.2lf x2=%.2lf\n", x1, x2);
}
else if (d==0)
{
x1 = x2 = (-b) / (2.0 * a);//这也是强转为浮点型
printf("方程的解为:x1=x2=%.2lf\n", x1);
}
else
{
printf("无实根\n");
}
}
return 0;
}
定义函数:
#include<stdio.h>
#include<math.h>
int Fac(int a, int b, int c)
{
double x1 = 0, x2 = 0;
int d = 0;
if (a == 0)
{
if (b == 0)
{
if (c == 0)
{
printf("方程有无数解\n");
}
else
{
printf("方程无解\n");
}
}
else
{
x1 = x2 = -c / (double)b;//因为x1,x2是double型的,所以要强转
printf("方程的解为:x1=x2=%.2lf\n", x1);
}
}
else
{
d = b*b - 4 * a*c;
if (d > 0)
{
//sqrt是开平方函数,离开所以上面要引用#include<math.h>的头文件
x1 = (-b + sqrt(d)) / (2.0 * a);
x2 = (-b - sqrt(d)) / (2.0 * a);
printf("方程的解为:x1=%.2lf x2=%.2lf\n", x1, x2);
}
else if (d == 0)
{
x1 = x2 = (-b) / (2.0 * a);//这也是强转为浮点型
printf("方程的解为:x1=x2=%.2lf\n", x1);
}
else
{
printf("无实根\n");
}
}
}
int main()
{
int a = 0, b = 0, c = 0;
printf("请输入一元二次方程组的a,b,c的值:\n");
scanf("%d%d%d", &a, &b, &c);
Fac(a, b, c);
return 0;
}
结果:
定义函数的好处,使得在主函数内部显得不那么拥挤,还有就是简化代码,代码复用
注意
sqrt函数是开平方函数,要引用头文件#include<stdio.h>
转换类型可以强转(即:在前面加(int)(double))
int转double 也可以给这个数*1.0
版权声明:本文为weixin_52142731原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。