我刚刚编写了一个程序,该程序保存用户输入的4成分向量(使用称为save_vector
的函数)并打印出来(使用称为print_vector
的函数)。此外,它还会创建一个新的向量vabs
,该向量具有相同的成分,但绝对值(正)。
现在,我正在尝试使用函数vabs
在maximum value
向量中找到最大值。但是,即使我在向量中输入非零分量,也只能得到以下结果:0.000000
。您能帮我弄清楚我所缺少的吗?谢谢! :-)
#include <stdio.h>
void print_vector(int N,float * V);
void save_vector(int N,float * V);
void absolute_values(int N, float * V);
void maximum_value(int N, float * VABS);
int main(void)
{
const int n=5;
int i;
float v[n],vabs[n];
puts("Enter the 5 components of the vector:");
save_vector(n, v);
puts("\nThe vector is:");
print_vector(n, v);
puts("\nThe absolute vector is:");
absolute_values(n, v);
puts("\nThe maximum value is:");
maximum_value(n, vabs);
return 0;
}
void save_vector(int N, float * V)
{
int i;
for(i=0;i<N;i++)
scanf("%f",V+i);
}
void print_vector(int N, float * V)
{
int i;
for(i=0;i<N;i++)
printf(" %.2f ",*(V+i));
}
void absolute_values(int N, float * V)
{
int i;
float VABS[N];
for(i=0;i<N;i++)
{
VABS[i]=((V[i]<0)?-V[i]:V[i]);
printf(" %f", VABS[i]);
}
}
void maximum_value(int N, float * VABS)
{
int i;
float maximum;
maximum = VABS[0];
for (i = 1; i < 5; i++)
{
if (VABS[i] > maximum)
{
maximum = VABS[i];
}
}
printf(" %f", maximum);
}
该代码无法正常工作,因为:
您正在将空向量vabs
传递给应该找到最大值的函数。
在为您的VABS
向量分配绝对值的函数中,它是局部的,对它所做的更改将在函数返回时丢失,您需要将main
vabs
向量传递给该函数作为参数,以便可以保存更改并将其用于其余代码:
void absolute_values(int N, float *V, float *VABS) //pass vabs as argument
{
int i;
//float VABS[N]; this is local, the changes are lost when function returns
for (i = 0; i < N; i++)
{
VABS[i] = ((V[i] < 0) ? -V[i] : V[i]);
printf(" %f", VABS[i]);
}
}
并且在主要:
int main(void)
{
//...
puts("\nThe absolute vector is:");
absolute_values(n, v, vabs);
puts("\nThe maximum value is:");
maximum_value(n, vabs);
return 0;
}