鱼C论坛

 找回密码
 立即注册
查看: 2799|回复: 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]$



最后得出的结果不正确,求助大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-24 11:59:29 From FishC Mobile | 显示全部楼层
1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-24 13:08:32 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         int a,b,c;
  6.         float i,X1,X2;
  7.        printf("请输入二元一次方程ax^2+bx+c=0\n");
  8.         scanf("%d%d%d",&a,&b,&c);       //输入二元一次方程组
  9.       
  10.         i=b*b-4*a*c;
  11.         if(i< 0)        //判断是否有实根
  12.         {
  13.                 printf("该二元一次方程组没有实根!\n");
  14.         }
  15.         else
  16.         {
  17.                 if(i== 0)     //判断实根是否相等
  18.                 {
  19.                         X1=(-b+sqrt(b*b-4*a*c))/2*a;
  20.                         X2=(-b-sqrt(b*b-4*a*c))/2*a;
  21.                         printf("该方程有两个相等的实根,X1= X2= %f\n",X1);
  22.                 }
  23.                 else
  24.                 {
  25.                         X1=(-b+sqrt(b*b-4*a*c))/2*a;
  26.                         X2=(-b-sqrt(b*b-4*a*c))/2*a;
  27.                         printf("该方程有两个不相等的实根,分别是X1=%f,X2=%f\n",X1,X2);
  28.                 }
  29.       
  30.         }

  31.         return 0;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

看样子应该是i = b^2 - 4ac
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://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);
这样计算出的实根才是正确的。修改后的代码如下:


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

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

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

  20.     return 0;
  21. }

  22. 运行结果:

  23. 请输入二元一次方程ax^2+bx+c=0
  24. 4x^2+6x+8=0
  25. 该二元一次方程组没有实根!
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不好意思了,就是一元二次方程,我打错了
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 18:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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