如何获得向量中所有分量的最大值?

问题描述 投票:0回答:1

我刚刚编写了一个程序,该程序保存用户输入的4成分向量(使用称为save_vector的函数)并打印出来(使用称为print_vector的函数)。此外,它还会创建一个新的向量vabs,该向量具有相同的成分,但绝对值(正)。

现在,我正在尝试使用函数vabsmaximum 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);
}
c vector max
1个回答
0
投票

该代码无法正常工作,因为:

  • 您正在将空向量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;
}

这里是running sample of the fixed code

© www.soinside.com 2019 - 2024. All rights reserved.