2016-01-12 58 views
-1

我编写了这个程序来计算标量乘积,并找出矢量v的最小值和最大值(+位置)。除了lowest_number函数,一切正常。它找到矢量v中最小的数字和位置,但是当位置在v [0] ----> 1时,它显示一个非常长的数字。我不知道为什么会发生这种情况。 PLease非常感谢你在函数C中遇到问题

int scalar_produc(int *v,int *w,int n) 
{ 
int i = 0; 
int sp; 
int sp2 = 0; 

for(i= 0; i < n; i++) 
{ 
    sp = v[i] * w[i]; 
    sp2 = sp2 + sp; 
} 

return sp2; 
} 

int lowest_number(int *v,int n) 
{ 
int i = 0; 
int low = v[i]; 
int position; 

for(i = 0; i < n; i++) 
{ 
    if(v[i] < low) 
    { 
     low = v[i]; 
     position = i; 
    } 
} 

printf("The lowest number is: %d \n", low); 
printf("The position of it: %d \n",position+1); 
} 

int biggest_number(int *v, int n) 
{ 
int i = 0; 
int position; 
int biggest = v[i]; 

for(i = 0; i < n; i++) 
{ 
    if(v[i] > biggest) 
    { 
     biggest = v[i]; 
     position = i; 
    } 
} 

printf("The biggest number of the vector 'v' is: %d \n",biggest); 
printf("The position of the biggest number: %d \n", position+1); 
} 

int main() 
{ 
int n,i; 
int *v,*w; 

printf("Enter the number of vectors you would like to enter: \n"); 
scanf("%d",&n); 

v = (int*) malloc(sizeof(int) *n); 
w = (int*) malloc(sizeof(int) *n); 

printf("Enter the vectors: \n"); 
for(i = 0; i < n ;i++) 
{ 
    printf("v[%d]: \n",i+1); 
    scanf("%d",&v[i]); 
    printf("w[%d]: \n",i+1); 
    scanf("%d",&w[i]); 
} 

printf("The scalar product: %d \n",scalar_produc(v,w,n)); 

lowest_number(v,n); 
biggest_number(v,n); 

free(v); 
free(w); 

return 0; 
} 

回答

2

你不初始化position。所以如果最小值是第一个值,那么position的值是未定义的。

初始化为0,它应该工作。

int i = 0; 
int low = v[i]; 
int position = 0; 
+0

小挑逗;位置的值是不确定的,读取该值是未定义的行为。 – 2501