Решение квадратных уравнений на языке C

CCBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (LabEx) вы научитесь решать квадратные уравнения на языке программирования C. В рамках лабораторной работы рассматривается полный процесс, начиная от чтения коэффициентов квадратного уравнения, вычисления дискриминанта и определения действительных или комплексных корней. Вы напишете программу на языке C, которая запрашивает у пользователя коэффициенты, выполняет необходимые вычисления и выводит решения.

Лабораторная работа разделена на два основных этапа. Сначала вы научитесь считывать коэффициенты a, b и c от пользователя. Затем вы модифицируете программу для вычисления дискриминанта и использования квадратной формулы для нахождения корней уравнения, обрабатывая как действительные, так и комплексные решения.

Чтение значений a, b, c

На этом этапе вы научитесь считывать входные значения для квадратного уравнения на языке C. Мы создадим программу, которая будет принимать от пользователя коэффициенты a, b и c.

Сначала создайте новый файл для программы - решателя квадратных уравнений:

cd ~/project
nano quadratic_solver.c

Теперь добавьте в файл следующий код:

#include <stdio.h>

int main() {
    double a, b, c;

    // Prompt user for input
    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    // Print the entered coefficients
    printf("Coefficients entered:\n");
    printf("a = %.2f\n", a);
    printf("b = %.2f\n", b);
    printf("c = %.2f\n", c);

    return 0;
}

Скомпилируйте программу:

gcc quadratic_solver.c -o quadratic_solver

Запустите программу:

./quadratic_solver

Пример вывода:

Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6
Coefficients entered:
a = 1.00
b = -5.00
c = 6.00

Разберем основные части кода:

  • Функция scanf() используется для считывания пользовательского ввода для каждого коэффициента.
  • %lf - это спецификатор формата для чисел с плавающей точкой двойной точности.
  • Мы сохраняем коэффициенты в переменных a, b и c.
  • Программа выводит введенные коэффициенты для подтверждения ввода.

Вычисление дискриминанта и определение корней

На этом этапе вы модифицируете предыдущую программу для вычисления дискриминанта и определения корней квадратного уравнения с использованием квадратной формулы.

Откройте существующий файл и обновите код:

cd ~/project
nano quadratic_solver.c

Замените предыдущий код следующим:

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

int main() {
    double a, b, c;
    double discriminant, root1, root2;

    // Prompt user for input
    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    // Calculate discriminant
    discriminant = b * b - 4 * a * c;

    // Check discriminant to determine root types
    if (discriminant > 0) {
        // Two distinct real roots
        root1 = (-b + sqrt(discriminant)) / (2 * a);
        root2 = (-b - sqrt(discriminant)) / (2 * a);
        printf("Two distinct real roots:\n");
        printf("Root 1 = %.2f\n", root1);
        printf("Root 2 = %.2f\n", root2);
    } else if (discriminant == 0) {
        // One real root (repeated)
        root1 = -b / (2 * a);
        printf("One real root (repeated):\n");
        printf("Root = %.2f\n", root1);
    } else {
        // Complex roots
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);
        printf("Complex roots:\n");
        printf("Root 1 = %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Root 2 = %.2f - %.2fi\n", realPart, imaginaryPart);
    }

    return 0;
}

Скомпилируйте программу с библиотекой математических функций:

gcc quadratic_solver.c -o quadratic_solver -lm

Запустите программу в различных сценариях:

./quadratic_solver

Пример вывода (два действительных корня):

Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6
Two distinct real roots:
Root 1 = 3.00
Root 2 = 2.00

Пример вывода (один действительный корень):

Enter coefficient a: 1
Enter coefficient b: -2
Enter coefficient c: 1
One real root (repeated):
Root = 1.00

Пример вывода (комплексные корни):

Enter coefficient a: 1
Enter coefficient b: 2
Enter coefficient c: 5
Complex roots:
Root 1 = -1.00 + 2.00i
Root 2 = -1.00 - 2.00i

Основные моменты в коде:

  • Использует квадратную формулу для вычисления корней.
  • Проверяет дискриминант для определения типа корней.
  • Обрабатывает три сценария: два действительных корня, один действительный корень, комплексные корни.
  • Использует функцию sqrt() из библиотеки math.h.
  • Компилируется с флагом -lm для связывания библиотеки математических функций.

Вывод действительных или комплексных решений

На этом этапе вы улучшите программу - решатель квадратных уравнений, чтобы она давала более подробный вывод и обрабатывала различные типы решений с улучшенным форматированием.

Откройте существующий файл и обновите код:

cd ~/project
nano quadratic_solver.c

Замените предыдущий код следующим:

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

void printQuadraticSolutions(double a, double b, double c) {
    double discriminant = b * b - 4 * a * c;

    printf("Quadratic Equation: %.2fx² + %.2fx + %.2f = 0\n", a, b, c);
    printf("Discriminant: %.2f\n", discriminant);

    if (discriminant > 0) {
        double root1 = (-b + sqrt(discriminant)) / (2 * a);
        double root2 = (-b - sqrt(discriminant)) / (2 * a);

        printf("Solution Type: Two Distinct Real Roots\n");
        printf("Root 1: %.2f\n", root1);
        printf("Root 2: %.2f\n", root2);
    } else if (discriminant == 0) {
        double root = -b / (2 * a);

        printf("Solution Type: One Real Root (Repeated)\n");
        printf("Root: %.2f\n", root);
    } else {
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);

        printf("Solution Type: Complex Conjugate Roots\n");
        printf("Root 1: %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Root 2: %.2f - %.2fi\n", realPart, imaginaryPart);
    }
}

int main() {
    double a, b, c;

    printf("Quadratic Equation Solver\n");
    printf("------------------------\n");

    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    printf("\n");
    printQuadraticSolutions(a, b, c);

    return 0;
}

Скомпилируйте программу:

gcc quadratic_solver.c -o quadratic_solver -lm

Запустите программу в различных сценариях:

./quadratic_solver

Пример вывода (два действительных корня):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6

Quadratic Equation: 1.00x² + -5.00x + 6.00 = 0
Discriminant: 1.00
Solution Type: Two Distinct Real Roots
Root 1: 3.00
Root 2: 2.00

Пример вывода (один действительный корень):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: -2
Enter coefficient c: 1

Quadratic Equation: 1.00x² + -2.00x + 1.00 = 0
Discriminant: 0.00
Solution Type: One Real Root (Repeated)
Root: 1.00

Пример вывода (комплексные корни):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: 2
Enter coefficient c: 5

Quadratic Equation: 1.00x² + 2.00x + 5.00 = 0
Discriminant: -16.00
Solution Type: Complex Conjugate Roots
Root 1: -1.00 + 2.00i
Root 2: -1.00 - 2.00i

Основные улучшения:

  • Создана отдельная функция printQuadraticSolutions() для лучшей организации кода.
  • Добавлен более описательный вывод с указанием типа решения и деталями уравнения.
  • Сохранена та же логика вычисления корней, что и на предыдущем этапе.
  • Улучшено пользовательское интерфейс с заголовком и четким форматированием.

Резюме

В этом лабораторном занятии вы научитесь считывать входные значения для квадратного уравнения на языке C, вычислять дискриминант и определять действительные или комплексные корни с использованием квадратной формулы. Программа запрашивает у пользователя ввести коэффициенты a, b и c, а затем вычисляет дискриминант, чтобы определить характер корней. Наконец, программа выводит действительные или комплексные решения.

Основные этапы, рассмотренные в этом лабораторном занятии, включают считывание пользовательского ввода для коэффициентов, вычисление дискриминанта и применение квадратной формулы для нахождения корней. Программа также подтверждает введенные коэффициенты и предоставляет вычисленные решения.