算法设计C语言:从键盘分别输入向量A[1..n]和向量B[1..n],采用分治算法计算向量内积AB,然后显示输出。
时间: 2024-11-22 14:37:30 浏览: 1
在C语言中,我们可以使用分治策略来计算两个向量A和B的内积,也称为点积。这里是一种简单的方法:
```c
#include <stdio.h>
// 函数声明,用于递归地计算子向量的内积
double dotProductRecursive(int start, int end, int A[], int B[], int n);
// 主函数,接收向量的起始和结束索引以及向量指针
int main() {
int n;
printf("请输入向量A和B的长度n: ");
scanf("%d", &n);
// 检查输入的有效性
if (n <= 0) {
printf("错误: 向量长度必须大于0.\n");
return 1;
}
int A[n], B[n]; // 创建向量数组
printf("请输入向量A的元素: ");
for (int i = 0; i < n; ++i) {
scanf("%d", &A[i]);
}
printf("请输入向量B的元素: ");
for (int i = 0; i < n; ++i) {
scanf("%d", &B[i]);
}
double result = dotProductRecursive(0, n - 1, A, B, n); // 计算整个向量的内积
printf("向量A和B的内积是: %.2f\n", result);
return 0;
}
// 分治函数,计算子向量的内积
double dotProductRecursive(int start, int end, int A[], int B[], int n) {
// 如果只有一个元素,直接返回该元素的乘积
if (start == end) {
return A[start] * B[start];
}
// 分解成两半并递归计算,最后相加
int mid = (start + end) / 2;
return dotProductRecursive(start, mid, A, B, n) +
dotProductRecursive(mid + 1, end, A, B, n);
}
```
在这个程序中,`dotProductRecursive`函数通过不断将向量分为两半,直到每个部分只包含一个元素,然后逐个计算它们的内积并将结果累加。在主函数里,我们先读取用户输入的向量元素,然后调用`dotProductRecursive`来得到最终的内积。
阅读全文