c-如何使用子程序将矢量的所有分量转换为绝对值



刚开始学习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));
}

使用V而不是v。并且,您错过了循环中的括号{}

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]更容易读取代码。不要将它们混合在一起,这会使代码难以阅读和理解。

作为@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]));
}
}

最新更新