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