试图制作一个可以找到矢量的基本C程序时,我以为我已经到了某个地方,但是我已经停下了脚步,不一定要在错误方面,而是在其背后的逻辑上。这是我的代码:

#include<stdio.h>
#include <math.h>

int norm_vec(int *x, int n) {

int i;
float modul;

for(i=0;i<n;i++;)
   {
       modul=++ x[i]*x[i];
   }
       modul = sqrt(modul);

         for(i=0;i<n;i++;)
            {
              x[i] = x[i]/modul
            }
}

最佳答案

让我先对您的代码进行排序,以使其更具可读性并更正一些错误。

#include <stdio.h>
#include <math.h>

int norm_vec(int * x, int n)
{
    int i;
    // initialize it at 0 for good practice
    // to my knowledge if you don't initialize a float, it will be 0, but let's stay safe
    float modul = 0;

    for (i = 0; i < n; i++) {
        modul += x[i]*x[i];
    }

    modul = sqrt(modul);

    for (i = 0; i < n; i++) {
        x[i] = x[i] / modul;
    }
}


现在对我来说,您的代码在数学上似乎是正确的。首先要计算向量的范数(称为modul),然后将向量的每个分量除以范数,这就是归一化。

但是,您的函数应该返回一个int,但不返回任何内容。您应该决定如何处理它。它应该返回规范,还是什么都没有?

08-27 22:17