Введение
В этом лабораторном занятии (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, а затем вычисляет дискриминант, чтобы определить характер корней. Наконец, программа выводит действительные или комплексные решения.
Основные этапы, рассмотренные в этом лабораторном занятии, включают считывание пользовательского ввода для коэффициентов, вычисление дискриминанта и применение квадратной формулы для нахождения корней. Программа также подтверждает введенные коэффициенты и предоставляет вычисленные решения.



