鱼C论坛

 找回密码
 立即注册
查看: 1914|回复: 8

求二元一次方程组

[复制链接]
发表于 2023-3-24 11:31:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<math.h>
int main()
{
        int a,b,c,i,X1,X2;
       printf("请输入二元一次方程ax^2+bx+c=0\n");
        scanf("%dx^2+%dx+%d=0",&a,&b,&c);       //输入二元一次方程组
       
        i=b^2+c;
        if(i< 0)        //判断是否有实根
        {
                printf("该二元一次方程组没有实根!\n");
        }
        else
        {
                if(i== 0)     //判断实根是否相等
                {
                        X1= -b/2*a;
                        printf("该方程有两个相等的实根,X1= X2= %d\n",X1);
                }
                else
                {
                        X1=(-b+sqrt(b^2-4*a*c))/2*a;
                        X2=(-b-sqrt(b^2-4*a*c))/2*a;
                        printf("该方程有两个不相等的实根,分别是X1=%d,X2=%d\n",X1,X2);
                }
       
        }

        return 0;
}

运行结果:
//[tongxin@localhost 2-4.8]$ ./a.out
请输入二元一次方程ax^2+bx+c=0
4x^2+6x+8=0
该方程有两个不相等的实根,分别是X1=-2147483648,X2=-2147483648
[tongxin@localhost 2-4.8]$



最后得出的结果不正确,求助大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-24 11:59:29 From FishC Mobile | 显示全部楼层
1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-24 13:08:32 | 显示全部楼层
#include<stdio.h>
#include<math.h>
int main()
{
        int a,b,c;
        float i,X1,X2;
       printf("请输入二元一次方程ax^2+bx+c=0\n");
        scanf("%d%d%d",&a,&b,&c);       //输入二元一次方程组
       
        i=b*b-4*a*c;
        if(i< 0)        //判断是否有实根
        {
                printf("该二元一次方程组没有实根!\n");
        }
        else
        {
                if(i== 0)     //判断实根是否相等
                {
                        X1=(-b+sqrt(b*b-4*a*c))/2*a;
                        X2=(-b-sqrt(b*b-4*a*c))/2*a;
                        printf("该方程有两个相等的实根,X1= X2= %f\n",X1);
                }
                else
                {
                        X1=(-b+sqrt(b*b-4*a*c))/2*a;
                        X2=(-b-sqrt(b*b-4*a*c))/2*a;
                        printf("该方程有两个不相等的实根,分别是X1=%f,X2=%f\n",X1,X2);
                }
       
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-24 14:30:14 | 显示全部楼层
赚小钱 发表于 2023-3-24 11:59
1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思

看样子应该是i = b^2 - 4ac
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-24 20:06:41 From FishC Mobile | 显示全部楼层
zerotwo020202 发表于 2023-3-24 14:30
看样子应该是i = b^2 - 4ac

看起来是这样的。
b*b-4*a*c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-25 16:04:37 | 显示全部楼层
问题出在计算实根时的公式有误。在代码中,计算实根的公式为:

X1=(-b+sqrt(b^2-4*a*c))/2*a;
X2=(-b-sqrt(b^2-4*a*c))/2*a;
应该将除号 / 改为乘号 *,即:

X1=(-b+sqrt(b*b-4*a*c))/(2*a);
X2=(-b-sqrt(b*b-4*a*c))/(2*a);
这样计算出的实根才是正确的。修改后的代码如下:

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

int main() {
    int a, b, c, i, X1, X2;
    printf("请输入二元一次方程ax^2+bx+c=0\n");
    scanf("%dx^2+%dx+%d=0", &a, &b, &c);  // 读取二元一次方程

    i = b * b - 4 * a * c;  // 计算判别式
    if (i < 0) {  // 如果判别式小于0,无实根
        printf("该二元一次方程组没有实根!\n");
    } else {
        if (i == 0) {  // 如果判别式等于0,有一个实根
            X1 = -b / (2 * a);  // 计算实根
            printf("该方程有两个相等的实根,X1 = X2 = %d\n", X1);  // 输出结果
        } else {  // 如果判别式大于0,有两个不等的实根
            X1 = (-b + sqrt(i)) / (2 * a);  // 计算实根
            X2 = (-b - sqrt(i)) / (2 * a);
            printf("该方程有两个不相等的实根,分别是X1 = %d,X2 = %d\n", X1, X2);  // 输出结果
        }
    }

    return 0;
}

运行结果:

请输入二元一次方程ax^2+bx+c=0
4x^2+6x+8=0
该二元一次方程组没有实根!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 16:33:22 | 显示全部楼层
赚小钱 发表于 2023-3-24 11:59
1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思

不好意思了,就是一元二次方程,我打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 17:30:25 | 显示全部楼层
谢谢大家了,最后改好了

#include<stdio.h>
#include<math.h>
int main()
{
        double a,b,c,i,X1,X2;
       printf("请依次输入一元二次方程ax^2+bx+c=o的系数(中间用逗号隔开)\n");
        scanf("%lf,%lf,%lf",&a,&b,&c);       //输入一元二次方程组
       
        i=b*b-4*a*c;
        if(i< 0)        //判断是否有实根
        {
                printf("该一元二次方程组没有实根!\n");
        }
        else
        {
                if(i== 0)     //判断实根是否相等
                {
                        X1= -b/(2*a);
                        printf("该方程有两个相等的实根,X1= X2= %.2lf\n",X1);
                }
                else
                {
                        X1=(-b+sqrt(i))/(2*a);
                        X2=(-b-sqrt(i))/(2*a);
                        printf("该方程有两个不相等的实根,分别是X1=%.2lf,X2=%.2lf\n",X1,X2);
                }
       
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-25 17:31:30 | 显示全部楼层
不二猫猫 发表于 2023-3-25 16:04
问题出在计算实根时的公式有误。在代码中,计算实根的公式为:

X1=(-b+sqrt(b^2-4*a*c))/2*a;

谢谢,我那个判别式确实写错了。感谢大佬,最后改好了
#include<stdio.h>
#include<math.h>
int main()
{
        double a,b,c,i,X1,X2;
       printf("请依次输入一元二次方程ax^2+bx+c=o的系数(中间用逗号隔开)\n");
        scanf("%lf,%lf,%lf",&a,&b,&c);       //输入一元二次方程组
       
        i=b*b-4*a*c;
        if(i< 0)        //判断是否有实根
        {
                printf("该一元二次方程组没有实根!\n");
        }
        else
        {
                if(i== 0)     //判断实根是否相等
                {
                        X1= -b/(2*a);
                        printf("该方程有两个相等的实根,X1= X2= %.2lf\n",X1);
                }
                else
                {
                        X1=(-b+sqrt(i))/(2*a);
                        X2=(-b-sqrt(i))/(2*a);
                        printf("该方程有两个不相等的实根,分别是X1=%.2lf,X2=%.2lf\n",X1,X2);
                }
       
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表