简介
在本实验中,你将学习如何用 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;
// 提示用户输入
printf("输入系数 a: ");
scanf("%lf", &a);
printf("输入系数 b: ");
scanf("%lf", &b);
printf("输入系数 c: ");
scanf("%lf", &c);
// 打印输入的系数
printf("输入的系数:\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
示例输出:
输入系数a: 1
输入系数b: -5
输入系数c: 6
输入的系数:
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;
// 提示用户输入
printf("输入系数 a: ");
scanf("%lf", &a);
printf("输入系数 b: ");
scanf("%lf", &b);
printf("输入系数 c: ");
scanf("%lf", &c);
// 计算判别式
discriminant = b * b - 4 * a * c;
// 检查判别式以确定根的类型
if (discriminant > 0) {
// 两个不同的实根
root1 = (-b + sqrt(discriminant)) / (2 * a);
root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("两个不同的实根:\n");
printf("根 1 = %.2f\n", root1);
printf("根 2 = %.2f\n", root2);
} else if (discriminant == 0) {
// 一个实根(重根)
root1 = -b / (2 * a);
printf("一个实根(重根):\n");
printf("根 = %.2f\n", root1);
} else {
// 复根
double realPart = -b / (2 * a);
double imaginaryPart = sqrt(-discriminant) / (2 * a);
printf("复根:\n");
printf("根 1 = %.2f + %.2fi\n", realPart, imaginaryPart);
printf("根 2 = %.2f - %.2fi\n", realPart, imaginaryPart);
}
return 0;
}
使用数学库编译程序:
gcc quadratic_solver.c -o quadratic_solver -lm
在不同场景下运行程序:
./quadratic_solver
示例输出(两个实根):
输入系数a: 1
输入系数b: -5
输入系数c: 6
两个不同的实根:
根1 = 3.00
根2 = 2.00
示例输出(一个实根):
输入系数a: 1
输入系数b: -2
输入系数c: 1
一个实根(重根):
根 = 1.00
示例输出(复根):
输入系数a: 1
输入系数b: 2
输入系数c: 5
复根:
根1 = -1.00 + 2.00i
根2 = -1.00 - 2.00i
代码中的关键点:
- 使用二次公式计算根
- 检查判别式以确定根的类型
- 处理三种情况:两个实根、一个实根、复根
- 使用
math.h库中的sqrt()函数 - 使用
-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("二次方程:%.2fx² + %.2fx + %.2f = 0\n", a, b, c);
printf("判别式:%.2f\n", discriminant);
if (discriminant > 0) {
double root1 = (-b + sqrt(discriminant)) / (2 * a);
double root2 = (-b - sqrt(discriminant)) / (2 * a);
printf("解的类型:两个不同的实根\n");
printf("根 1: %.2f\n", root1);
printf("根 2: %.2f\n", root2);
} else if (discriminant == 0) {
double root = -b / (2 * a);
printf("解的类型:一个实根(重根)\n");
printf("根:%.2f\n", root);
} else {
double realPart = -b / (2 * a);
double imaginaryPart = sqrt(-discriminant) / (2 * a);
printf("解的类型:共轭复根\n");
printf("根 1: %.2f + %.2fi\n", realPart, imaginaryPart);
printf("根 2: %.2f - %.2fi\n", realPart, imaginaryPart);
}
}
int main() {
double a, b, c;
printf("二次方程求解器\n");
printf("------------------------\n");
printf("输入系数 a: ");
scanf("%lf", &a);
printf("输入系数 b: ");
scanf("%lf", &b);
printf("输入系数 c: ");
scanf("%lf", &c);
printf("\n");
printQuadraticSolutions(a, b, c);
return 0;
}
编译程序:
gcc quadratic_solver.c -o quadratic_solver -lm
在不同场景下运行程序:
./quadratic_solver
示例输出(两个实根):
二次方程求解器
------------------------
输入系数a: 1
输入系数b: -5
输入系数c: 6
二次方程: 1.00x² + -5.00x + 6.00 = 0
判别式: 1.00
解的类型: 两个不同的实根
根1: 3.00
根2: 2.00
示例输出(一个实根):
二次方程求解器
------------------------
输入系数a: 1
输入系数b: -2
输入系数c: 1
二次方程: 1.00x² + -2.00x + 1.00 = 0
判别式: 0.00
解的类型: 一个实根(重根)
根: 1.00
示例输出(复根):
二次方程求解器
------------------------
输入系数a: 1
输入系数b: 2
输入系数c: 5
二次方程: 1.00x² + 2.00x + 5.00 = 0
判别式: -16.00
解的类型: 共轭复根
根1: -1.00 + 2.00i
根2: -1.00 - 2.00i
主要改进点:
- 创建了一个单独的函数
printQuadraticSolutions()以实现更好的代码组织 - 添加了更具描述性的输出,包括解的类型和方程细节
- 保持了上一步相同的根计算逻辑
- 通过添加标题和清晰的格式改进了用户界面
总结
在本实验中,你将学习如何在 C 语言中读取二次方程的输入值,计算判别式,并使用二次公式确定实根或复根。该程序会提示用户输入系数 a、b 和 c,然后计算判别式以确定根的性质。最后,程序会输出实根或复根。
本实验涵盖的关键步骤包括读取用户输入的系数、计算判别式以及应用二次公式求根。该程序还会确认输入的系数并提供计算出的解。



