需要设计一个计算三次元外积的程序
例:
输入
4
12 68 -49
5649 657 -481
4968 354 -42
-857 574 444
输出
-681954116 1809081590 1481486766
做题不易
有用请采纳
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef struct
{
long x;
long y;
long z;
}Node;
Node V[10];
Node result = { 0 };
int n, b = 1;
Node calc(Node p, Node q, int count)
{
//(a1,a2,a3)x(b1,b2,b3)=(a2b3-a3b2,a3b1-a1b3,a1b2-a2b1)
result.x = p.y * q.z - p.z * q.y;
result.y = p.z * q.x - p.x * q.z;
result.z = p.x * q.y - p.y * q.x;
if (count == 2)
return result;
else
return calc(result, V[++b], --count);//递归运算
}
int main()
{
int i;
scanf("%d", &n);//向量个数
for (i = 0;i < n;i++)
{
scanf("%d%d%d", &V[i].x, &V[i].y, &V[i].z);
}
calc(V[0], V[b],n);//递归运算
printf("%ld %ld %ld", result.x, result.y, result.z);
return 0;
}
#include<stdio.h>
int main(){
int n;
long r[10][3];//支持n<=10,若要更多,把10改大即可
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%ld %ld %ld",&r[i][0],&r[i][1],&r[i][2]);//输入数据
}
long out[3]={r[0][0],r[0][1],r[0][2]};//初始化h1,h2,h3
long temp1,temp2,temp3;//临时变量
for(int k=1;k<n;k++){//利用循环代替递归,简单易懂
temp1 = (out[1]*r[k][2])-(out[2]*r[k][1]);//计算h1
temp2 = (out[2]*r[k][0])-(out[0]*r[k][2]);//计算h2
temp3 = (out[0]*r[k][1])-(out[1]*r[k][0]);//计算h3
out[0] = temp1;
out[1] = temp2;
out[2] = temp3;
}
printf("%ld %ld %ld",out[0],out[1],out[2]);
return 0;
}