童欣 发表于 2023-3-24 11:31:54

求二元一次方程组

#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;
}

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



最后得出的结果不正确,求助大佬

赚小钱 发表于 2023-3-24 11:59:29

1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思

basketmn 发表于 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;
}

zerotwo020202 发表于 2023-3-24 14:30:14

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

看样子应该是i = b^2 - 4ac

赚小钱 发表于 2023-3-24 20:06:41

zerotwo020202 发表于 2023-3-24 14:30
看样子应该是i = b^2 - 4ac

看起来是这样的。
b*b-4*a*c

不二猫猫 发表于 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
该二元一次方程组没有实根!

童欣 发表于 2023-3-25 16:33:22

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

不好意思了,就是一元二次方程,我打错了

童欣 发表于 2023-3-25 17:30:25

谢谢大家了,最后改好了{:10_298:}

#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;
}

童欣 发表于 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;
}
页: [1]
查看完整版本: 求二元一次方程组