C 中方程的根
Roots of equation in C
我对 C 比较陌生,正在努力提高自己。我制作了一个计算器并在其中添加了二次方程求解器,因为我知道求根的公式。但是我面临两个问题。
代码:
#include <stdio.h>
#include <maths.h>
#include <stdlib.h>
#include <windows.h>
main(){
float A1, A2, A, B, C, ans, Z;
printf("Welcome to Quadratic Equation solver. Enter the coefficient of X^2, followed by\nthe coefficient of X, followed by the integer value.\n\nEnter values: ");
scanf("%f%f%f", &A, &B, &C);
CheckF = (B * B - 4 * A * C);
if (CheckF < 0) {
system("COLOR B4");
printf("This calculator HeX, currently cannot handle complex numbers.\nPlease pardon my developer. I will now redirect you to the main menu.\n");
system("pause");
system("cls");
system("COLOR F1");
goto Start;
} else if (CheckF >= 0) {
Z = pow(CheckF, 1/2);
A1 = (-B + Z)/(A+A);
A2 = (-B - Z)/(A+A);
if (A1 == A2) {
ans = A1;
printf("\nRoot of equation is %f (Repeated root)\n", ans);
Sleep(250);
} else if (A1 != A2) {
printf("Roots of equation are %f and %f \n", A1, A2);
Sleep(250);
}
}
}
问题一:
当我 运行 代码和输入 3 32 2
时,数学上输出应该是 Roots of equation are -0.06287 and -10.6038
,我用我的计算器仔细检查过。但是,我得到的输出是关闭的:Roots of equation are -5.166667 and -5.500000
我完全不确定为什么它不能计算方程的正确根。
问题二:
一些根没有coefficient of X^2
,例如(2X + 2),可以解出-2的重复根,(6X - 3),这让我们得到x重复0.5次。但是,根据二次方程,除以2A,是永远行不通的,因为它除以0。这种情况有什么可能的出路?是否检查 A = 0 然后做其他事情?任何帮助都将不胜感激。
整数除法
pow(CheckF, 1/2)
是 1.0,因为 1/2 是商为 0 的整数除法。
// Z = pow(CheckF, 1/2);
Z = pow(CheckF, 1.0/2.0);
// or better
Z = sqrt(CheckF);
// Even better when working with `float`.
// Use `float sqrtf(float)` instead of `double sqrt(double)`.
Z = sqrtf(CheckF);
最好 - 使用 double
而不是 float
重写。在这里使用 float
的理由不足。 double
是 C goto 浮点类型。
其他问题
//#include <maths.h>
#include <math.h>
// main() {
int main(void) {
// CheckF = (B * B - 4 * A * C);
float CheckF = (B * B - 4 * A * C);
// goto Start;
使用自动格式化程序
我发现代码存在一些问题。首先,我建议你使用 double 而不是 float。它们提供更好的精度,理想的计算器需要精度。其次,你这样做:
Z = pow(CheckF, 1/2);
您应该使用 sqrt(CheckF),因为 C 中有一个专门用于求平方根的函数!以下对我有用,所以如果你解决了以上两个问题,你的代码可能会工作。
int main() {
double A1, A2, A, B, C, ans, Z;
printf("Welcome to Quadratic Equation solver. Enter the coefficient of X^2, followed by\nthe coefficient of X, followed by the integer value.\n\nEnter values: ");
A = 3;
B = 32;
C = 2;
double CheckF = (B * B - 4 * A * C);
if (CheckF >= 0) {
Z = sqrt(CheckF);
A1 = (-B + Z) / (A + A);
A2 = (-B - Z) / (A + A);
if (A1 == A2) {
ans = A1;
printf("\nRoot of equation is %f (Repeated root)\n", ans);
} else if (A1 != A2) {
printf("Roots of equation are %f and %f \n", A1, A2);
}
}
}
我对 C 比较陌生,正在努力提高自己。我制作了一个计算器并在其中添加了二次方程求解器,因为我知道求根的公式。但是我面临两个问题。
代码:
#include <stdio.h>
#include <maths.h>
#include <stdlib.h>
#include <windows.h>
main(){
float A1, A2, A, B, C, ans, Z;
printf("Welcome to Quadratic Equation solver. Enter the coefficient of X^2, followed by\nthe coefficient of X, followed by the integer value.\n\nEnter values: ");
scanf("%f%f%f", &A, &B, &C);
CheckF = (B * B - 4 * A * C);
if (CheckF < 0) {
system("COLOR B4");
printf("This calculator HeX, currently cannot handle complex numbers.\nPlease pardon my developer. I will now redirect you to the main menu.\n");
system("pause");
system("cls");
system("COLOR F1");
goto Start;
} else if (CheckF >= 0) {
Z = pow(CheckF, 1/2);
A1 = (-B + Z)/(A+A);
A2 = (-B - Z)/(A+A);
if (A1 == A2) {
ans = A1;
printf("\nRoot of equation is %f (Repeated root)\n", ans);
Sleep(250);
} else if (A1 != A2) {
printf("Roots of equation are %f and %f \n", A1, A2);
Sleep(250);
}
}
}
问题一:
当我 运行 代码和输入 3 32 2
时,数学上输出应该是 Roots of equation are -0.06287 and -10.6038
,我用我的计算器仔细检查过。但是,我得到的输出是关闭的:Roots of equation are -5.166667 and -5.500000
我完全不确定为什么它不能计算方程的正确根。
问题二:
一些根没有coefficient of X^2
,例如(2X + 2),可以解出-2的重复根,(6X - 3),这让我们得到x重复0.5次。但是,根据二次方程,除以2A,是永远行不通的,因为它除以0。这种情况有什么可能的出路?是否检查 A = 0 然后做其他事情?任何帮助都将不胜感激。
整数除法
pow(CheckF, 1/2)
是 1.0,因为 1/2 是商为 0 的整数除法。
// Z = pow(CheckF, 1/2);
Z = pow(CheckF, 1.0/2.0);
// or better
Z = sqrt(CheckF);
// Even better when working with `float`.
// Use `float sqrtf(float)` instead of `double sqrt(double)`.
Z = sqrtf(CheckF);
最好 - 使用 double
而不是 float
重写。在这里使用 float
的理由不足。 double
是 C goto 浮点类型。
其他问题
//#include <maths.h>
#include <math.h>
// main() {
int main(void) {
// CheckF = (B * B - 4 * A * C);
float CheckF = (B * B - 4 * A * C);
// goto Start;
使用自动格式化程序
我发现代码存在一些问题。首先,我建议你使用 double 而不是 float。它们提供更好的精度,理想的计算器需要精度。其次,你这样做:
Z = pow(CheckF, 1/2);
您应该使用 sqrt(CheckF),因为 C 中有一个专门用于求平方根的函数!以下对我有用,所以如果你解决了以上两个问题,你的代码可能会工作。
int main() {
double A1, A2, A, B, C, ans, Z;
printf("Welcome to Quadratic Equation solver. Enter the coefficient of X^2, followed by\nthe coefficient of X, followed by the integer value.\n\nEnter values: ");
A = 3;
B = 32;
C = 2;
double CheckF = (B * B - 4 * A * C);
if (CheckF >= 0) {
Z = sqrt(CheckF);
A1 = (-B + Z) / (A + A);
A2 = (-B - Z) / (A + A);
if (A1 == A2) {
ans = A1;
printf("\nRoot of equation is %f (Repeated root)\n", ans);
} else if (A1 != A2) {
printf("Roots of equation are %f and %f \n", A1, A2);
}
}
}