c语言:求一元二次方程的跟,系数a,b,c由键盘输入(要求考虑所有情况)
2016-05-29 13:36
609 查看
求一元二次方程的跟,系数a,b,c由键盘输入
程序:
#include<stdio.h>
#include<math.h>
#define ESP 0.00001
int main()
{
double a, b, c, d, p, q, x1, x2,imagpart;//imagpart表示虚部
printf("请输入a,b,c的值:");
scanf("%lf%lf%lf", &a, &b, &c);
d = b*b - 4*a*c;
p = -b / (2.0*a);
q = sqrt(d) / (2.0*a);
x1 = p + q;
x2 = p - q;
if ((a >-ESP)&&(a<ESP))
{
printf("不是一元二次方程\n");
}
else
{
if (d > 0)
{
printf("x1=%lf\nx2=%lf\n", x1, x2);//用lf输出小数部分占6位
/*printf("x1=%7.2f\nx2=%7.2f\n", x1, x2);*///输出指定数据占7列,小数占2列
}
else if ((d >-ESP) && (d<ESP))
{
printf("原方程有两个相等的实根:\n");
printf("x1=x2=%lf\n", x1);
}
else
{
imagpart = sqrt(-d) / (2.0*a);
printf("原方程有两个共轭复根:\n");
printf("x1=%lf+%lfi\n",p, imagpart);
printf("x2=%lf-%lfi\n", p, imagpart);
}
}
return 0;
}
结果1:
请输入a,b,c的值:2 3 1
x1=-0.500000
x2=-1.000000
请按任意键继续. . .
结果2:
请输入a,b,c的值:0 1 2
不是一元二次方程
请按任意键继续. . .
结果3:
请输入a,b,c的值:3 2 1
原方程有两个共轭复根:
x1=-0.333333+0.471405i
x2=-0.333333-0.471405i
请按任意键继续. . .
结果4:
请输入a,b,c的值:1 -2 1
原方程有两个相等的实根:
x1=x2=1.000000
请按任意键继续. . .
本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1718369
程序:
#include<stdio.h>
#include<math.h>
#define ESP 0.00001
int main()
{
double a, b, c, d, p, q, x1, x2,imagpart;//imagpart表示虚部
printf("请输入a,b,c的值:");
scanf("%lf%lf%lf", &a, &b, &c);
d = b*b - 4*a*c;
p = -b / (2.0*a);
q = sqrt(d) / (2.0*a);
x1 = p + q;
x2 = p - q;
if ((a >-ESP)&&(a<ESP))
{
printf("不是一元二次方程\n");
}
else
{
if (d > 0)
{
printf("x1=%lf\nx2=%lf\n", x1, x2);//用lf输出小数部分占6位
/*printf("x1=%7.2f\nx2=%7.2f\n", x1, x2);*///输出指定数据占7列,小数占2列
}
else if ((d >-ESP) && (d<ESP))
{
printf("原方程有两个相等的实根:\n");
printf("x1=x2=%lf\n", x1);
}
else
{
imagpart = sqrt(-d) / (2.0*a);
printf("原方程有两个共轭复根:\n");
printf("x1=%lf+%lfi\n",p, imagpart);
printf("x2=%lf-%lfi\n", p, imagpart);
}
}
return 0;
}
结果1:
请输入a,b,c的值:2 3 1
x1=-0.500000
x2=-1.000000
请按任意键继续. . .
结果2:
请输入a,b,c的值:0 1 2
不是一元二次方程
请按任意键继续. . .
结果3:
请输入a,b,c的值:3 2 1
原方程有两个共轭复根:
x1=-0.333333+0.471405i
x2=-0.333333-0.471405i
请按任意键继续. . .
结果4:
请输入a,b,c的值:1 -2 1
原方程有两个相等的实根:
x1=x2=1.000000
请按任意键继续. . .
本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1718369
相关文章推荐
- c语言:用%f输出实数,只能得到6位小数及求float型数据的有效位数
- c语言:先后输出BOY三个字符
- c语言:从键盘输入BOY三个字符,然后把它们输出到屏幕。
- c语言:编写一个简易计算器,打印菜单界面,实现加减乘除运算,可以退出菜单界面
- c语言:将三个数按从大到小输出。
- c语言:编写一个程序,可以直接接收键盘字符
- c语言:模拟实现一个输入密码自动取款的程序
- c语言:3种方法实现输出一个整数的每一位。
- c语言:编写程序数一下 1到 100 的所有整数中出现多少次数字 9
- c语言:模拟三次密码输入。
- c语言:输入一个数,从高位向低位输出,如:输入12345,输出1 2 3 4 5
- c语言:2种方法编程及优化;喝汽水问题
- c语言:有趣的printf输出,“4321”
- c语言:编辑一个有趣的死循环程序并对其修改,仅仅是一个“=”号的差别
- c语言:编辑程序输出取数组地址
- c语言:求字符串的字节数,strlen
- c语言:枚举常量的用法举例
- c语言:在屏幕上输出单引号和双引号
- c语言:对于一个变量n,const用法和指针的比较
- c语言:输出(Welcome??)和(Welcome\?\?)