求二元一次方程组
#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
$
最后得出的结果不正确,求助大佬 1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思 #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;
} 赚小钱 发表于 2023-3-24 11:59
1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思
看样子应该是i = b^2 - 4ac zerotwo020202 发表于 2023-3-24 14:30
看样子应该是i = b^2 - 4ac
看起来是这样的。
b*b-4*a*c 问题出在计算实根时的公式有误。在代码中,计算实根的公式为:
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-24 11:59
1. 这大概率是一元二次方程
2. 我没看懂 i 是什么意思
不好意思了,就是一元二次方程,我打错了 谢谢大家了,最后改好了{: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 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]