【问题标题】:Division of two complex numbers in CC中两个复数的除法
【发布时间】:2021-12-02 04:42:02
【问题描述】:

我想将两个复数相除,但我不知道为什么我的结果总是 0+0i。

 #include <stdio.h>
    
     typedef struct complex {
        int real;
        int imag;
    }complex;
    
    complex divide(complex n1, complex n2);
    
    int main() {
    
        complex n1, n2, rez;
    
        printf("real part n1: ");
        scanf("%d", &n1.real);
        printf("imag part n1: ");
        scanf("%d", &n1.imag);
    
        printf("real part n2: ");
        scanf("%d", &n2.real);
        printf("imag part n2: ");
        scanf("%d", &n2.imag);
    
        rez = divide(n1, n2);
        printf("Result= %d+%di", rez.real, rez.imag);
    }
    
    complex divide(complex n1, complex n2)
    {
        complex rez;
        rez.real = (n1.real * n2.real + n1.imag * n2.imag) / (n2.real * n2.real + n2.imag * n2.imag);
        rez.imag = (n1.imag * n2.real - n1.real * n2.imag) / (n2.real * n2.real + n2.imag * n2.imag);
        return rez;
    
    }

我认为问题出在主要问题上,但我不确定。

【问题讨论】:

  • 使用double作为内部类型而不是int

标签: c function numbers divide


【解决方案1】:

我不知道为什么我的结果总是 0+0i。

这是因为您使用的是整数运算。改为使用浮点类型,例如double

typedef struct complex {
    int real;
    int imag;
}complex;

使用整数运算,您只能得到结果的整数部分,例如1 / 2 给你0

【讨论】:

  • 您的意思是在代码块中将类型更新为double
  • @sj95126 是的,但还需要进行其他更改(例如在 scanf() 调用中)才能使其正常工作。我将结构粘贴在那里,因为它使问题的原因非常明显。
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 2019-08-25
  • 2016-07-15
  • 2015-07-28
相关资源
最近更新 更多