Функция не обновляет значение переменной

#c

#c

Вопрос:

Я пытаюсь написать программу, которая умножает два разных комплексных числа (b * c), сохраняет результат в a, выводит результат. В целях упрощения здесь я решил использовать только 10 чисел и установить все мнимые и действительные значения для b и c на числа от 0 до 9.

Сначала я создаю массивы, которые будут содержать действительную и мнимую части комплексных чисел a, b и c. Затем я объявляю действительную и мнимую части a равными нулю, поскольку я их еще не знаю. Чтобы найти их, у меня есть функция с именем multiply , которая вычисляет действительную и мнимую части a .

Наконец, в моем основном методе я перебираю все массивы, генерирую значения 0-9, использую multiply для заполнения массивов a ( as_re и as_im ), содержащих действительные и мнимые значения a, а затем просто распечатываю все эти записи.

Однако я получаю только: The product is 0 0i на каждой итерации. Это должно означать, что моя функция умножения не обновляет значения a_re и a_im . Кто-нибудь может помочь мне понять, почему?

Мой код приведен ниже:

 #include <stdio.h>
#include <stdlib.h>

void multiply(int c_re, int c_im, int a_re, int a_im, int b_re, int b_im);

int as_re[10];
int as_im[10];
int bs_re[10];
int bs_im[10];
int cs_re[10];
int cs_im[10];

int a_re = 0;
int a_im = 0;

int main(){

   for (int i = 0; i < 10; i  ){

      bs_re[i] = i;
      bs_im[i] = i;
      cs_re[i] = i;
      cs_re[i] = i;

      multiply(cs_re[i], cs_im[i], as_re[i], as_im[i], bs_re[i], bs_im[i]);

      as_re[i] = a_re;
      as_im[i] = a_im;

      printf("The product is %d   %din", as_re[i], as_im[i]);
   }

}

void multiply(int c_re, int c_im, int a_re, int a_im, int b_re, int b_im){

   a_re = c_re * b_re - c_im * b_im;
   a_im = c_re * b_im   c_im * b_re;

}
  

Ответ №1:

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

Удалены глобальные переменные, которые были включены в качестве параметров для вашей функции.

 #include <stdio.h>
#include <stdlib.h>

void multiply(int c_re, int c_im, int b_re, int b_im);

int as_re[10];
int as_im[10];
int bs_re[10];
int bs_im[10];
int cs_re[10];
int cs_im[10];

int a_re = 0;
int a_im = 0;

int main(){

   for (int i = 0; i < 10; i  ){

      bs_re[i] = i;
      bs_im[i] = i;
      cs_re[i] = i;
      cs_re[i] = i;

      multiply(cs_re[i], cs_im[i], bs_re[i], bs_im[i]);

      as_re[i] = a_re;
      as_im[i] = a_im;

      printf("The product is %d   %din", as_re[i], as_im[i]);
   }

}

void multiply(int c_re, int c_im, int b_re, int b_im){

   a_re = c_re * b_re - c_im * b_im;
   a_im = c_re * b_im   c_im * b_re;

}
  

Комментарии:

1. Ну, я упростил это, но технически функция умножения должна иметь подпись void multiply(double * c_re, double * c_im, double * a_re, double * a_im, double * b_re, double * b_re, double * b_im); Но я не могу заставить это работать, даже если я использую указатели. Итак, ваш код работает, но с неверной подписью.