简介
在本实验中,你将学习如何在 C 编程中计算三维向量的点积和叉积。本实验涵盖以下步骤:
- 读取向量分量:开发一个程序,允许用户输入两个三维向量的分量。
- 计算点积或叉积:实现函数来计算输入向量的点积和叉积。
- 打印结果:向用户显示计算出的点积或叉积。
完成本实验后,你将对向量运算及其在 C 中的实现有扎实的理解。
在本实验中,你将学习如何在 C 编程中计算三维向量的点积和叉积。本实验涵盖以下步骤:
完成本实验后,你将对向量运算及其在 C 中的实现有扎实的理解。
在这一步中,你将学习如何在 C 编程中读取向量分量,以便进行点积和叉积计算。我们将创建一个程序,允许用户输入向量分量并存储它们,以进行进一步的数学运算。
首先,让我们为向量运算创建一个新的 C 文件:
cd ~/project
nano vector_operations.c
现在,添加以下代码来定义一个读取向量分量的函数:
#include <stdio.h>
#define VECTOR_SIZE 3
// 读取向量分量的函数
void readVector(float vector[], int size) {
printf("输入 %d 个向量分量(用空格分隔):", size);
for (int i = 0; i < size; i++) {
scanf("%f", &vector[i]);
}
}
int main() {
float vector1[VECTOR_SIZE];
float vector2[VECTOR_SIZE];
printf("向量 1:\n");
readVector(vector1, VECTOR_SIZE);
printf("向量 2:\n");
readVector(vector2, VECTOR_SIZE);
return 0;
}
让我们编译并运行该程序以测试向量输入:
gcc vector_operations.c -o vector_operations
./vector_operations
示例输出:
向量 1:
输入 3 个向量分量(用空格分隔):1 2 3
向量 2:
输入 3 个向量分量(用空格分隔):4 5 6
在这段代码中:
VECTOR_SIZE
,设置为 3 用于三维向量readVector()
函数将一个数组及其大小作为参数scanf()
用于读取浮点型向量分量main()
函数演示了读取两个向量的过程在这一步中,你将学习如何在 C 编程中计算三维向量的点积和叉积。我们将扩展上一个程序,以包含对向量的数学运算。
使用以下代码更新 vector_operations.c
文件:
cd ~/project
nano vector_operations.c
添加点积和叉积计算的实现:
#include <stdio.h>
#define VECTOR_SIZE 3
void readVector(float vector[], int size) {
printf("输入 %d 个向量分量(用空格分隔):", size);
for (int i = 0; i < size; i++) {
scanf("%f", &vector[i]);
}
}
// 计算点积
float computeDotProduct(float vector1[], float vector2[], int size) {
float dotProduct = 0.0;
for (int i = 0; i < size; i++) {
dotProduct += vector1[i] * vector2[i];
}
return dotProduct;
}
// 计算叉积
void computeCrossProduct(float vector1[], float vector2[], float result[]) {
result[0] = vector1[1] * vector2[2] - vector1[2] * vector2[1];
result[1] = vector1[2] * vector2[0] - vector1[0] * vector2[2];
result[2] = vector1[0] * vector2[1] - vector1[1] * vector2[0];
}
int main() {
float vector1[VECTOR_SIZE];
float vector2[VECTOR_SIZE];
float crossProductResult[VECTOR_SIZE];
printf("向量 1:\n");
readVector(vector1, VECTOR_SIZE);
printf("向量 2:\n");
readVector(vector2, VECTOR_SIZE);
// 计算并显示点积
float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
printf("点积:%.2f\n", dotProduct);
// 计算并显示叉积
computeCrossProduct(vector1, vector2, crossProductResult);
printf("叉积:[%.2f, %.2f, %.2f]\n",
crossProductResult[0],
crossProductResult[1],
crossProductResult[2]);
return 0;
}
编译并运行更新后的程序:
gcc vector_operations.c -o vector_operations
./vector_operations
示例输出:
向量 1:
输入 3 个向量分量(用空格分隔):1 2 3
向量 2:
输入 3 个向量分量(用空格分隔):4 5 6
点积:32.00
叉积:[-3.00, 6.00, -3.00]
computeDotProduct()
通过将相应的向量分量相乘来计算点积computeCrossProduct()
使用标准的三维向量叉积公式计算叉积main()
函数演示了计算和显示点积与叉积的过程在这最后一步中,你将通过添加格式化输出来增强向量运算程序,并创建一个函数以清晰、可读的格式打印向量结果。
使用以下改进后的实现更新 vector_operations.c
文件:
cd ~/project
nano vector_operations.c
添加新的打印函数并修改主程序:
#include <stdio.h>
#define VECTOR_SIZE 3
void readVector(float vector[], int size) {
printf("输入 %d 个向量分量(用空格分隔):", size);
for (int i = 0; i < size; i++) {
scanf("%f", &vector[i]);
}
}
float computeDotProduct(float vector1[], float vector2[], int size) {
float dotProduct = 0.0;
for (int i = 0; i < size; i++) {
dotProduct += vector1[i] * vector2[i];
}
return dotProduct;
}
void computeCrossProduct(float vector1[], float vector2[], float result[]) {
result[0] = vector1[1] * vector2[2] - vector1[2] * vector2[1];
result[1] = vector1[2] * vector2[0] - vector1[0] * vector2[2];
result[2] = vector1[0] * vector2[1] - vector1[1] * vector2[0];
}
// 新函数,用于格式化打印向量
void printVector(const char* label, float vector[], int size) {
printf("%s: [", label);
for (int i = 0; i < size; i++) {
printf("%.2f%s", vector[i], (i < size - 1)? ", " : "");
}
printf("]\n");
}
int main() {
float vector1[VECTOR_SIZE];
float vector2[VECTOR_SIZE];
float crossProductResult[VECTOR_SIZE];
// 输入向量
printf("向量输入:\n");
printVector("向量 1", vector1, VECTOR_SIZE);
readVector(vector1, VECTOR_SIZE);
printVector("向量 2", vector2, VECTOR_SIZE);
readVector(vector2, VECTOR_SIZE);
// 计算结果
float dotProduct = computeDotProduct(vector1, vector2, VECTOR_SIZE);
computeCrossProduct(vector1, vector2, crossProductResult);
// 打印格式化后的结果
printf("\n向量运算结果:\n");
printVector("向量 1", vector1, VECTOR_SIZE);
printVector("向量 2", vector2, VECTOR_SIZE);
printf("点积:%.2f\n", dotProduct);
printVector("叉积", crossProductResult, VECTOR_SIZE);
return 0;
}
编译并运行更新后的程序:
gcc vector_operations.c -o vector_operations
./vector_operations
示例输出:
向量输入:
向量 1:[0.00, 0.00, 0.00]
输入 3 个向量分量(用空格分隔):1 2 3
向量 2:[0.00, 0.00, 0.00]
输入 3 个向量分量(用空格分隔):4 5 6
向量运算结果:
向量 1:[1.00, 2.00, 3.00]
向量 2:[4.00, 5.00, 6.00]
点积:32.00
叉积:[-3.00, 6.00, -3.00]
printVector()
函数以创建一致的、格式化的向量输出main()
函数以演示向量输入和结果打印在本实验中,你学习了如何在 C 编程中读取向量分量并执行点积和叉积计算。你创建了一个程序,允许用户输入向量分量,然后计算向量的点积或叉积。关键的学习要点包括定义一个读取向量分量的函数、实现点积和叉积公式以及打印结果。
该程序演示了如何在 C 中处理三维向量并应用基本的向量运算。通过遵循逐步说明,你获得了处理向量数据结构和执行常见向量算术运算的实践经验。