简介
在本实验中,你将学习如何在 C 编程中求解二元线性方程组。本实验涵盖两个主要步骤:读取两个方程的系数,然后使用行列式法计算解。你将创建一个 C 程序,允许用户输入系数,然后程序将计算并显示解或可能出现的任何特殊情况。
第一步是提示用户以标准形式输入两个线性方程的系数:ax + by = c。然后程序将打印输入的系数以验证输入。在第二步中,你将扩展程序以使用克莱姆法则计算解,这涉及计算系数矩阵的行列式。程序将显示解或任何特殊情况,例如无解或有无穷多个解。
在本实验中,你将学习如何在 C 编程中求解二元线性方程组。本实验涵盖两个主要步骤:读取两个方程的系数,然后使用行列式法计算解。你将创建一个 C 程序,允许用户输入系数,然后程序将计算并显示解或可能出现的任何特殊情况。
第一步是提示用户以标准形式输入两个线性方程的系数:ax + by = c。然后程序将打印输入的系数以验证输入。在第二步中,你将扩展程序以使用克莱姆法则计算解,这涉及计算系数矩阵的行列式。程序将显示解或任何特殊情况,例如无解或有无穷多个解。
在这一步中,你将学习如何使用 C 编程读取二元线性方程组的系数。我们将创建一个程序,允许用户输入标准形式的两个方程的系数:ax + by = c。
首先,让我们创建一个新的 C 文件来实现我们的方程求解器:
cd ~/project
nano linear_equations.c
现在,添加以下代码来读取系数:
#include <stdio.h>
int main() {
float a1, b1, c1; // 第一个方程的系数
float a2, b2, c2; // 第二个方程的系数
// 提示并读取第一个方程的系数
printf("输入第一个方程(ax + by = c)的系数:\n");
printf("a1: ");
scanf("%f", &a1);
printf("b1: ");
scanf("%f", &b1);
printf("c1: ");
scanf("%f", &c1);
// 提示并读取第二个方程的系数
printf("输入第二个方程(ax + by = c)的系数:\n");
printf("a2: ");
scanf("%f", &a2);
printf("b2: ");
scanf("%f", &b2);
printf("c2: ");
scanf("%f", &c2);
// 打印输入的系数以进行验证
printf("\n第一个方程:%.2fx + %.2fy = %.2f\n", a1, b1, c1);
printf("第二个方程:%.2fx + %.2fy = %.2f\n", a2, b2, c2);
return 0;
}
编译并运行程序:
gcc linear_equations.c -o linear_equations
./linear_equations
示例输出:
输入第一个方程(ax + by = c)的系数:
a1: 2
b1: 3
c1: 8
输入第二个方程(ax + by = c)的系数:
a2: 1
b2: 4
c2: 10
第一个方程:2.00x + 3.00y = 8.00
第二个方程:1.00x + 4.00y = 10.00
在这一步中,你将学习如何使用行列式法求解二元线性方程组。我们将扩展上一个程序,使用克莱姆法则来计算解。
打开现有文件并修改代码:
cd ~/project
nano linear_equations.c
用行列式计算方法更新代码:
#include <stdio.h>
// 计算行列式的函数
float determinant(float a1, float b1, float a2, float b2) {
return a1 * b2 - a2 * b1;
}
int main() {
float a1, b1, c1; // 第一个方程的系数
float a2, b2, c2; // 第二个方程的系数
float det, detX, detY;
float x, y;
// 提示并读取第一个方程的系数
printf("输入第一个方程(ax + by = c)的系数:\n");
printf("a1: ");
scanf("%f", &a1);
printf("b1: ");
scanf("%f", &b1);
printf("c1: ");
scanf("%f", &c1);
// 提示并读取第二个方程的系数
printf("输入第二个方程(ax + by = c)的系数:\n");
printf("a2: ");
scanf("%f", &a2);
printf("b2: ");
scanf("%f", &b2);
printf("c2: ");
scanf("%f", &c2);
// 计算主行列式
det = determinant(a1, b1, a2, b2);
// 检查系统是否有唯一解
if (det!= 0) {
// 计算 x 和 y 的行列式
detX = determinant(c1, b1, c2, b2);
detY = determinant(a1, c1, a2, c2);
// 计算解
x = detX / det;
y = detY / det;
printf("\n解:\n");
printf("x = %.2f\n", x);
printf("y = %.2f\n", y);
} else {
// 检查系统是否无解或有无穷多解
if (determinant(c1, b1, c2, b2)!= 0 || determinant(a1, c1, a2, c2)!= 0) {
printf("\n不存在解。\n");
} else {
printf("\n存在无穷多解。\n");
}
}
return 0;
}
编译并运行程序:
gcc linear_equations.c -o linear_equations
./linear_equations
唯一解的示例输出:
输入第一个方程(ax + by = c)的系数:
a1: 2
b1: 3
c1: 8
输入第二个方程(ax + by = c)的系数:
a2: 1
b2: 4
c2: 10
解:
x = 2.00
y = 2.00
无解的示例输出:
输入第一个方程(ax + by = c)的系数:
a1: 2
b1: 3
c1: 8
输入第二个方程(ax + by = c)的系数:
a2: 4
b2: 6
c2: 16
不存在解。
在这最后一步中,你将改进程序,为二元线性方程组的不同类型解提供更详细的输出。
打开现有文件并进行最终修改:
cd ~/project
nano linear_equations.c
用改进的输出格式更新代码:
#include <stdio.h>
#include <math.h>
// 计算行列式的函数
float determinant(float a1, float b1, float a2, float b2) {
return a1 * b2 - a2 * b1;
}
int main() {
float a1, b1, c1; // 第一个方程的系数
float a2, b2, c2; // 第二个方程的系数
float det, detX, detY;
float x, y;
float EPSILON = 1e - 6; // 用于浮点比较的小值
// 提示并读取第一个方程的系数
printf("线性方程求解器\n");
printf("输入第一个方程(ax + by = c)的系数:\n");
printf("a1: ");
scanf("%f", &a1);
printf("b1: ");
scanf("%f", &b1);
printf("c1: ");
scanf("%f", &c1);
// 提示并读取第二个方程的系数
printf("输入第二个方程(ax + by = c)的系数:\n");
printf("a2: ");
scanf("%f", &a2);
printf("b2: ");
scanf("%f", &b2);
printf("c2: ");
scanf("%f", &c2);
// 打印输入的方程
printf("\n输入的方程:\n");
printf("方程 1:%.2fx + %.2fy = %.2f\n", a1, b1, c1);
printf("方程 2:%.2fx + %.2fy = %.2f\n", a2, b2, c2);
// 计算主行列式
det = determinant(a1, b1, a2, b2);
// 确定并打印解的类型
if (fabs(det) > EPSILON) {
// 唯一解的情况
detX = determinant(c1, b1, c2, b2);
detY = determinant(a1, c1, a2, c2);
x = detX / det;
y = detY / det;
printf("\n--- 解的类型:唯一解 ---\n");
printf("解:\n");
printf("x = %.2f\n", x);
printf("y = %.2f\n", y);
} else {
// 检查无解或有无穷多解
detX = determinant(c1, b1, c2, b2);
detY = determinant(a1, c1, a2, c2);
if (fabs(detX) > EPSILON || fabs(detY) > EPSILON) {
printf("\n--- 解的类型:无解 ---\n");
printf("该方程组无解。\n");
printf("方程不一致且平行。\n");
} else {
printf("\n--- 解的类型:无穷多解 ---\n");
printf("该方程组有无穷多个解。\n");
printf("方程等价且相关。\n");
}
}
return 0;
}
编译并运行程序:
gcc linear_equations.c -o linear_equations
./linear_equations
唯一解的示例输出:
线性方程求解器
输入第一个方程(ax + by = c)的系数:
a1: 2
b1: 3
c1: 8
输入第二个方程(ax + by = c)的系数:
a2: 1
b2: 4
c2: 10
输入的方程:
方程1:2.00x + 3.00y = 8.00
方程2:1.00x + 4.00y = 10.00
--- 解的类型:唯一解 ---
解:
x = 2.00
y = 2.00
无解的示例输出:
线性方程求解器
输入第一个方程(ax + by = c)的系数:
a1: 2
b1: 3
c1: 8
输入第二个方程(ax + by = c)的系数:
a2: 4
b2: 6
c2: 16
输入的方程:
方程1:2.00x + 3.00y = 8.00
方程2:4.00x + 6.00y = 16.00
--- 解的类型:无解 ---
该方程组无解。
方程不一致且平行。
在本实验中,你首先学习了如何在 C 编程中读取二元线性方程组的系数。你创建了一个程序,提示用户输入两个方程的系数(a、b、c),然后打印方程以验证输入。接下来,你将学习如何使用行列式法和克莱姆法则来求解方程组并计算解。
该程序将扩展先前的功能,以计算方程组的解。它将确定系数矩阵的行列式,并使用克莱姆法则找到满足该系统的变量 x 和 y 的值。