Как я могу преобразовать все компоненты вектора в абсолютное значение, используя подпрограмму? - PullRequest
0 голосов
/ 27 апреля 2020

Только начал изучать C, и было бы здорово, если бы вы могли помочь мне со следующим:

Я только что написал программу, которая сохраняет 4-компонентный вектор, введенный пользователем (используя функцию под названием save_vector), печатает его (используя функцию с именем print_vector) и, если какой-либо компонент является отрицательным, он также печатает его со всеми компонентами в абсолютном значении (положительные значения), используя функцию absolute_values.

Однако, Я не уверен, как заставить работать функцию absolute_values. Две другие функции работают просто отлично.

Будем рады прочитать любые предложения по улучшению этого куска кода! Спасибо! : -)

#include <stdio.h>

void print_vector(int N,float * V);
void save_vector(int N,float * V);
void absolute_values(int N, float * V);



int main(void)
{

    const int n=5;
    int i;
    float v[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);

    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;
    for(i=0;i<N;i++)
      if (*(v+i)<0)
        v[i]=v[i]*(-1);
         printf(" %.2f ",*(V+i));

}

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Использование V вместо v. И вам не хватает скобки {} для l oop:

void absolute_values(int N, float * V)
{
    int i;
    for(i=0;i<N;i++){
      if (*(V+i)<0)
        V[i]=V[i]*(-1);
      printf(" %.2f ",*(V+i));
    }

}

Вы должны использовать V[i] вместо *(V+i). Оба в порядке, но V[i] проще для чтения кода. Не смешивайте их вместе, это затрудняет чтение и понимание вашего кода.

0 голосов
/ 27 апреля 2020

В качестве альтернативы решению @Hitokiri я также оставляю здесь функцию absolute_values, но на этот раз с помощью условного оператора. Также, следуя совету @ Hitokiri, я использую V[i], так как он выглядит чище.

void absolute_values(int N, float * V)
{
    int i;
    for(i=0;i<N;i++)
    {
        printf(" %.2f ", ((V[i]<0)?-V[i]:V[i]));
    }
}
...