ACM训练系统 1028 [编程入门] 自定义函数求一元二次方程 C

本题需要的函数包括:

  • 输入输出函数 stdio.h  用于输入输出数据。
  •  数学函数 math.h 用于开平方等数学操作 开方函数 sqrt()

首先复习一下一元二次方程的解法

有实根:\frac{-b\pm \sqrt{b^{2}-4ac}}{2a}       没有实根\frac{-b\pm i\sqrt{4ac-b^{2}}}{2a}

如果b^2-4ac>0 方程有两个实根,对应的函数如下

void lianggegen(int a,int b,int c)
{
        float d=(float)(-b+sqrt((b*b-4*a*c))/(2*a));
        float e=(float)(-b-sqrt((b*b-4*a*c))/(2*a));
        printf("x1=%.3f x2=%.3f",d,e);
}

如果b^-4ac==0 方程有一个实根,对应的函数如下

void yigegen(int a,int b,int c)
{
        float d=(float)((-b+sqrt(b*b-4*a*c))/(2*a));
        printf("x1=%.3f x2=%.3f",d,d);
}

如果b^-4ac<0 方程有两个共厄复数根,对应的函数如下

void xvgen(int a,int b,int c)
{
        float d=(float)-b/(2*a);
        float e=(float)(sqrt(4*a*c-b*b))/(2*a);
        printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",d,e,d,e);
}

将三个函数整合到一起,带上有选择功能的主函数,组成最终我们需要的用于计算方程的代码

以下代码可以满分通过ACM训练系统

//baizhen
#include <stdio.h>
#include <math.h>
void lianggegen(int a,int b,int c);
void yigegen(int a,int b,int c);
void xvgen(int a,int b,int c);
void lianggegen(int a,int b,int c)
{
        float d=(float)(-b+sqrt((b*b-4*a*c))/(2*a));
        float e=(float)(-b-sqrt((b*b-4*a*c))/(2*a));
        printf("x1=%.3f x2=%.3f",d,e);
}
void yigegen(int a,int b,int c)
{
        float d=(float)((-b+sqrt(b*b-4*a*c))/(2*a));
        printf("x1=%.3f x2=%.3f",d,d);
}
void xvgen(int a,int b,int c)
{
        float d=(float)-b/(2*a);
        float e=(float)(sqrt(4*a*c-b*b))/(2*a);
        printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",d,e,d,e);
}
int main(void)
{
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(b*b-4*a*c>0)
                lianggegen(a,b,c);
        else if(b*b-4*a*c==0)
                yigegen(a,b,c);
        else
                xvgen(a,b,c);
        return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值