(c语言)求一元二次方程的根
题目描述
本题目要求一元二次方程ax^2+bx+c=0的根,结果保留2位小数。
输入
输入在一行中给出3个浮点系数a、b、c,中间用空格分开。
输出
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)需要考虑系数为0的情况,如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。
输入样例1
2.1 8.9 3.5
输出样例1
-0.44
-3.80
思考:
边界条件探索罢了,
1.考虑一次函数
else if(a==0&&b!=0&&c!=0) printf("%.2f",-c/b);
提示
注意:存在a为0,b和c不为0的情况
2.考虑负零非法
real = -b / (2 * a) + For0mini;
Ac代码如下:
#include<stdio.h> #include<math.h> int main() { double a, b, c, Delta; double x1, x2; double real, imaginary; double For0mini=0.00000001; scanf("%lf %lf %lf", &a, &b, &c); Delta = b * b - 4 * a * c; if(a==0&&b==0&&c==0) printf("Zero Equation"); else if(a==0&&b==0&&c!=0) printf("Not An Equation"); else if(a==0&&b!=0&&c!=0) printf("%.2f",-c/b); else { if (Delta >= 0) { if (Delta == 0) { x1 = (-b )/ (2 * a); printf("%.2f\n", x1); } else { x1 = (-b + sqrt(Delta)) / (2 * a); x2 = (-b - sqrt(Delta)) / (2 * a); printf("%.2f\n%.2f", x1, x2); } } else { real = -b / (2 * a) + For0mini; imaginary = sqrt(-Delta) / (2 * a); printf("%.2f+%.2fi\n%.2f-%.2fi", real, imaginary, real, imaginary); } } }
Tech Otakus Save the World
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!