#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); Но я не могу заставить это работать, даже если я использую указатели. Итак, ваш код работает, но с неверной подписью.