C:求一元二次方程ax^2+bx+c=0的根

分析

输入系数 a、b、c,用空格分隔。

如果 a=0 则是一元一次方程,根为 - c / b

a≠0 时,计算判别式\Delta =b^2-4ac,并根据三种情况用公式求根,结果保留两位小数。

另外用一个 ex 变量接受 sacnf() 返回值,如果 ex==3 则说明正确读取了3个数字,否则重新输入。

代码

#include <stdio.h>
#include <math.h>

int main()
{
	float x1 = 0, x2 = 0, d = 0, a = 0, b = 0, c = 0;
	int ch = 0, ex = 0; //ex用于根据scanf返回值判断输入是不是三个数字
	while (1)			//循环输入
	{
		printf("输入a(≠0) b c;Ctrl+C退出\n");
		ex = scanf("%f %f %f", &a, &b, &c);
		while ((ch = getchar()) != EOF && ch != '\n')
			; //吸收回车防止干扰
		if (ex != 3)
			printf("NO\n");
		else if (ex == 3) //ex=3说明正确读取了三个数字
		{
			if (a != 0)
			{
				d = b*b - 4*a*c;
				if (d > 0)
				{
					x1 = (-b + sqrt(d)) / (2 * a); //求根公式
					x2 = (-b - sqrt(d)) / (2 * a);
					printf("Δ = %.2f >0\nx1=%.2f\nx2=%.2f\n\n", d, x1, x2);
				} //保留两位小数
				else if (d == 0)//两相等实根
					printf("Δ = 0\nx1=x2=%.2f\n\n", -b / (2 * a));
				else//两个共轭复根
				{
					x1 = -b / (2 * a);
					x2 = (sqrt(-d)) / (2 * a);
					printf("Δ = %.2f <0\nx1=%.2f+i%.2f\n", d, x1, x2);
					printf("x2=%.2f-i%.2f\n\n", x1, x2);
				}
			}
			else
			{
				printf("a不能为0\n");
				printf("一次方程的根x=%.2f\n\n", -(c / b));
			}
		}
	}
	return 0;
}

结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值