//Given are two N-维度矢量 =(A1,A2,A3,…,AN)和B=(B1,B2,B3,…,BN)
//Determine whether the inner product of A and B is 0.
//In other words, determine whetherA1B1+A2B2+A3B3+...+ANBN=0.
#include<stdio.h>
int Det(int *x,int *y,int *n)
{
int i,sum;
int *p;
for(i=0;i<*n;i++)
{
*p=(x[i])*(y[i]);
p++;
sum+=(*p);
}
return sum;
}
int main()
{
int i,n,sum;
scanf("%d",&n);
int a[100],b[100];
for(i=0;i<n;i++)
scanf(" %d",&a[i]);
for(i=0;i<n;i++)
scanf( "%d",&b[i]);
sum=Det(a,b,n);
if(sum==0)
printf("No\n");
if(sum!=0)
{
printf("Yes\n");
printf("The inner product of A and B is");
for(i=0;i<n;i++)
printf("%d*%d+",a[i],b[i]);
printf("=%d",sum);
}
return 0;
}
sum=Det(a,b,&n);
函数要求第三个参数是指针类型
把函数参数n改为int类型,删除函数内部的p相关的代码,直接用sum接收累加值,就行了
代码修改如下,如有帮助,请采纳一下,谢谢。
//Given are two N-维度矢量 =(A1,A2,A3,…,AN)和B=(B1,B2,B3,…,BN)
//Determine whether the inner product of A and B is 0.
//In other words, determine whetherA1B1+A2B2+A3B3+...+ANBN=0.
#include<stdio.h>
#include <string>
int Det(int *x,int *y,int n)
{
int i,sum;
int *p = new int[n];
memset(p,0,n);
for(i=0;i<n;i++)
{
*p=(x[i])*(y[i]);
p++;
sum+=(*p);
}
delete[] p;
p = 0;
return sum;
}
int main()
{
int i,n,sum;
scanf("%d",&n);
int a[100],b[100];
for(i=0;i<n;i++)
scanf(" %d",&a[i]);
for(i=0;i<n;i++)
scanf( "%d",&b[i]);
sum=Det(a,b,n);
if(sum==0)
printf("No\n");
if(sum!=0)
{
printf("Yes\n");
printf("The inner product of A and B is");
for(i=0;i<n;i++)
printf("%d*%d+",a[i],b[i]);
printf("=%d",sum);
}
return 0;
}
把n的形参和实参的类型统一了,在初始化下sum,然后再删了p++,应该就行了。