Как написать функцию для перекрестного произведения двух векторов в C

Я пишу функцию на C, которая принимает два вектора, v1 и v3, и выполняет умножение вектора на вектор для создания матрицы. v1 — вектор 1xL1, а v3 — вектор 1xL2. Метод выполняет транспонирование v3, умноженное на v1, и печатает матрицу. Это то, что у меня есть до сих пор:

 void crossProduct(float *v1, float *v3, int L1, int L2){
      int i, j;
      float sum;
      float c[L2][L1];
      for(i = 0; i < L2; i++){
        for(j = 0; j < L1; j++){
          sum = 0.0;
          sum += v3[i] * v1[j];
          c[i][j] = sum;
          printf("%d", c[i][j]);
        }
      }
    }

Я не получаю ожидаемого результата. Я также хочу, чтобы матрица печаталась в матричной форме, но я не уверен, как это сделать.


person SarahCaw    schedule 27.02.2020    source источник
comment
Является ли sum = 0.0; неправильным местом или это просто не нужно, так как следующие строки должны быть c[i][j] = v3[i] * v1[j]; вообще без переменной sum?   -  person Jonathan Leffler    schedule 27.02.2020
comment
Компилятор уже должен был сообщить вам о неправильном спецификаторе формата в printf. Вы включили предупреждения? Если нет, то вот ответ, почему вы всегда должны это делать.   -  person Gerhardh    schedule 27.02.2020


Ответы (1)


Вам нужно использовать формат %f для поплавков, а не %d.

Чтобы получить читаемый массив, ставьте пробел после каждого значения и новую строку после каждой строки.

 void crossProduct(float *v1, float *v3, int L1, int L2){
      int i, j;
      float sum;
      float c[L2][L1];
      for(i = 0; i < L2; i++){
        for(j = 0; j < L1; j++){
          sum = 0.0;
          sum += v3[i] * v1[j];
          c[i][j] = sum;
          printf("%f ", c[i][j]);
        }
        printf("\n");
      }
    }
person Barmar    schedule 27.02.2020