C 语言方程求解器
求解一个变量的线性方程、两个变量的两个线性方程、二次方程和三次方程

引言
这个程序可以解四种类型的方程。
背景
我是一个来自印度的九年级学生。我太懒了,不想自己解方程和检查答案。所以我写了这个程序。
了解二次公式(包括虚根)和综合除法会有很大帮助。
Using the Code
求解一个变量的线性方程的方法很简单。
ax+b = 0
是一个变量方程的格式。确定变量 a
和 b
,然后通过 -b/a
计算 x
。
我实现的求解两个变量的线性方程的方法是一个可以通过对两组方程进行运算推导出来的公式。方程的公式是
ax + by + c = 0
dx + ey + f = 0
x = (fb-ce)/(ae-db)
y = (cd -fa)/(ae-db)
为了解二次方程,我们使用二次公式
Root 1 = (-b + Sqrt(b2 - 4ac))/2a
Root 2 = (-b - Sqrt(b2 - 4ac))/2a
b2-4ac
叫做“判别式”,通常用 D 表示。
如果 D >= 0,我们将得到实根。
当我们得到虚根时,事情会变得复杂。
如果 D<0,那么我们得到虚根,根将如下变化
Root 1 = (-b + Sqrt(4ac - b2)i)/2a
Root 2 = (-b + Sqrt(4ac - b2)i)/2a
C 语言不支持复数。所以,我决定把根打印成一个字符串:
printf("\nRoot 1 : %f+%fi",((-b)/(2*a)),disc);
根中的第一个 %f
是 -b/2a
,它是根的实部,第二个 %f
打印 4ac-b2
,'i
' 代表虚部。
我不知道求解所有类型的三次方程的方法。如果有人知道方法,请用像我这样的九年级学生能理解的语言告诉我这个方法。
float a,b,c,d,x1,x2,x3,disc;
int i;
float expr;
clrscr();
printf("ax^3 + bx^2 + cx + d = 0\n Enter a,b,c,d : \n");
scanf("%f,%f,%f,%f",&a,&b,&c,&d);
i = 0;
while(i<abs(d))
{
expr = a*pow(i,3)+b*pow(i,2)+c*i+d;
if(expr==0)
{
x1=i;
break;
}
expr = a*pow(-i,3)+b*pow(-i,2)+c*(-i)+d;
if(expr==0)
{
x1=-i;
break;
}
i++;
}
printf("Root 1 = %f",x1);
b = b + (a*(x1));
c = c + (b*(x1));
disc = (b*b)-(4*a*c);
if(disc>=0)
{
x2 = (-b+sqrt(disc))/(2*a);
x3 = (-b-sqrt(disc))/(2*a);
printf("\nRoot 2 = %f\nRoot 3 = %f",x2,x3);
}
else
{
disc = ((4*a*c)-pow(b,2))/(2*a);
printf("\nRoot 2 : %f+%fi",((-b)/(2*a)),disc);
printf("\nRoot 3 : %f-%fi",((-b)/(2*a)),disc);
}
通过试错法找到一个根。如果失败,我们无法在这个程序中找到表达式的任何其他根。这是我在程序中实现的方法。通过替换来检查直到 d
的所有数字(包括正数和负数)。如果成功,则程序将进入下一步。
b = b + (a*(x1));
c = c + (b*(x1));
这就是综合除法发挥作用的地方。
综合除法是一种用线性多项式除多项式的简便方法,而不是使用长除法。
我将通过一个例子来解释这个过程。
假设多项式为 (x3 + 2x2 - 4x + 8)
,线性多项式为 (x + 2)
。
我们必须除它们。
- 反转除数中常数的符号。在这种情况下,我们必须将 2 变为 -2。
- 然后按顺序写出系数 a、b、c 和 d。它看起来像这样:
-2|1 2 -4 8
- 将第一个系数拉下来并将其乘以除数。 然后将其添加到第二个系数。
2+(-2*1) = 0
。一般形式为bnew = b+(divisor * a)
。 - 然后再次将除数乘以获得的结果并与下一个系数相加。
-4+(-2*0) = -4
。一般形式为cnew= c+(divisor * bnew)
。 - 再次将除数乘以获得的结果,并将其添加到下一个(在本例中为最后一个)系数。
8+ (-2*-4) =16
。
在这个例子中,我们得到的余数是 16
。如果多项式被它的一个根除,我们将在最后一步得到零作为余数。然后,该多项式将简化为 Ax2+Bx+C=0
形式的二次方程,其中 A
是 a
,B
是 bnew
,C
是 cnew
。
然后求解二次方程。
现在,我们得到了方程的所有 3 个根。
欢迎任何建议或改进。如果还有另一种万无一失的求解 3 次方程的方法,请告诉我。 欢迎提出求解 4 次及更高次方程的方法。
历史
- 2009 年 10 月 1 日:初始发布
联系方式
您可以在 r.anshul@gmail.com 发表评论或给我发邮件。