当前位置: 首页 > article >正文

7-10 解一元二次方程

7-10 解一元二次方程

分数 20

全屏浏览

切换布局

作者 李祥

单位 湖北经济学院

请编写程序,解一元一次方程 ax2+bx+c=0 。

已知一元二次方程的求根公式为:

题图.jpg

要求:

  • 若 a=0,则为一元一次方程。
    • 若 b=0,则方程有唯一解,输出这个解;
    • 否则 b=0,
      • 若 c=0,则方程无解,输出“无解”;
      • 否则 c=0,则方程有无穷多解,输出“无穷多解”。
  • 若 a=0,则为一元二次方程。
    • 若 Δ>0,则方程有两个不等的实根,输出这两个根;
    • 若 Δ=0,则方程有两个相等的实根,输出这两个根;
    • 若 Δ<0,则方程有两个共轭的虚根,输出这两个根。
输入格式

a,b,c

输出格式

x 或 x1​,x2​

注:所有实数均输出6位有效数字,且不输出末尾无意义的0和小数点。

输入样例1
0 4.5 -3.6

输出样例1
x = 0.8

输入样例2
0 2.8 0

输出样例2
x = 0

输入样例3
0 0 3.6

输出样例3
无解

输入样例4
0 0 0

输出样例4
无穷多解

输入样例5
-2 0.8 -0.06

输出样例5
x1 = 0.1, x2 = 0.3

输入样例6
-1 0.2 0

输出样例6
x1 = 0, x2 = 0.2

输入样例7
-3 1.2 -0.12

输出样例7
x1 = x2 = 0.2

输入样例8
0.3 0 0

输出样例8
x1 = x2 = 0

输入样例9
-0.2 0.04 -0.01

输出样例9
x1 = 0.1-0.2i, x2 = 0.1+0.2i

输入样例10
3 0 0.27

输出样例10
x1 = 0+0.3i, x2 = 0-0.3i

提示:注意实数的负零问题和误差问题。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB
 

#include<stdio.h>
#include<math.h>
int main()
{
    double a,b,c;
    scanf("%lf %lf %lf",&a,&b,&c);
            if(a==0)
            {
                if(b!=0)
                {
                    printf("x = %.6g",fabs(c/b));
                }
                if(b==0&&c!=0) printf("无解");
                if(b==0&&c==0) printf("无穷多解");
            }else
            {
            double diff=pow(b,2)-4*a*c;
            if(diff-(int)diff>0.000001)
            {
                double x1,x2;
            if(b==sqrt(diff)) x1=0;//注意判断分子
            else x1=(-b+sqrt(diff))/(2*a);
            if((sqrt(diff)*-1)==b) x2=0;//注意判断分子
            else x2=(-b-sqrt(diff))/(2*a);
            printf("x1 = %.6g, x2 = %.6g",x1,x2);
            }else if(diff<0.000001&&diff>-0.000001)
            {
                double x1;
                if(b==0) x1=0;//注意判断分子
                else x1=(-b+sqrt(diff))/(2*a);
                if(diff-(int)diff<0.000001) printf("x1 = x2 = %.6g",x1);
            }else{
                diff=fabs(diff);
                double p=sqrt(diff)/(2*a),q;
                if(b==0)  q=0;//注意判断分子
                else  q=-b/(2*a);
                if(p<=0) printf("x1 = %.6g-%.6gi,",q,fabs(p));//注意判断如果p是负数那么是减
                else  printf("x1 = %.6g+%.6gi,",q,p);//注意判断如果p是正数那么是加
                if(p<=0)
                printf(" x2 = %.6g+%.6gi",q,fabs(p));//注意判断如果p是负数那么是加
                else  printf(" x2 = %.6g-%.6gi",q,p);//注意判断如果p是正数那么是减
            }
        }
    return 0;
}
    


http://www.kler.cn/a/409008.html

相关文章:

  • 【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践
  • MongoDB比较查询操作符中英对照表及实例详解
  • LDR6020驱动的Type-C接口显示器解决方案
  • C++ 编程指南05 - 编译时检查优于运行时检查
  • html5复习二
  • 智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序7 进化论及科学的信息技术创新:分布式账本/区块链/智能合约
  • Android 数据处理 ------ BigDecimal
  • 【什么是RabbitMQ】
  • Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)
  • TCL大数据面试题及参考答案
  • HTML 元素类型介绍
  • Python3.9.13与深度学习框架TensorFlow的完整详细安装教程
  • Charles抓包工具-笔记
  • MyBatis 的多对一,一对多以及多对多的增删改查的xml映射语句
  • (Keil)MDK-ARM各种优化选项详细说明、实际应用及拓展内容
  • 【Github】如何使用Git将本地项目上传到Github
  • 闲聊?泳池清洁机器人?
  • 数字化学习管理:SpringBoot在线课程系统
  • Go消费kafka中kafkaReader.FetchMessage(ctx)和kafkaReader.ReadMessage(ctx)的区别
  • 设计模式——传输对象模式
  • Java基于Spring Boot框架的房屋租赁系统,附源码
  • 【Linux】缓冲区/磁盘inode/动静态库
  • 怎么在宿主机上通过ssh连接虚拟机 VirtualBox 中的linux系统
  • 华纳云:多IP服务器在网站SEO中的作用是什么
  • 图片生成视频-右进
  • 基于java+SpringBoot+Vue的大型商场应急预案管理系统设计与实现