我的部门输出有问题。当我输入5和3的实部以及4和2的虚部时,我得到2.000000 + -2.000000i而不是1.769231 + 0.153846i。
以下是划分主程序的情况:
case 4:
num1=Read_Complex();
num2=Read_Complex();
if ((num2.real=0)&&(num2.img=0));
printf("Error. Cannot divide by 0.\n");
}
else{
ans=Divide_Complex(num1,num2);
}
这是调用Read_Complex的地方:
complex Read_Complex(void)
{
complex num;
printf("Enter real part:");
scanf("%d", &num.real);
printf("Enter img part:");
scanf("%d", &num.img);
return num;
}
以下是分部:
complex numer, denom;
float ans_real ans_img;
complex Divide_Complex(complex num1, complex num2)
{
numer=Multiply_Complex(num1, Conjugate_Complex(num2));
denom=Multiply_Complex(num2, Conjugate_Complex(num2));
ans_real=numer.real/denom.real;
ans_img=numer.img/denom.img;
printf("%f + %fi\n", ans_real, ans_img);
}
任何帮助都会很棒。
Complex.h:
#ifndef COMPLEX_H_
#define COMPLEX_H_
typedef struct {
int real;
int img;
} complex;
#endif
答案 0 :(得分:3)
您有几个问题,其中许多问题都包含在您的问题的评论中,但至少有一个重要问题没有。您似乎已经在检查中识别出除以零的问题。除此之外,
首先,声明函数Divide_complex()
返回一个值,但是控件到达函数的末尾而没有执行return
语句。如果调用者尝试使用返回值,则会导致未定义的行为;你的编译器应该发出警告。
第二,您的complex
数据类型完全不足以表示复数,因为它只为实部和虚部提供整数值。特别是,它不能代表您特别询问的商数。
第三,Divide_Complex()
在分割复数的组件时执行整数除法,必然会提供整数结果。从某种意义上说,你的complex
数据类型只能保存整数组件,但是它不能产生接近你期望的结果。
但第四, 你把数学编码错了 。您将修正的分母计算为原始分母及其共轭的乘积,这很好,但结果是实数数,没有虚数分量。这就是重点 - 它将复杂/复杂的商变成复杂/真实的商。您应该将商的虚部计算为ans_img = (float) numer.img / denom.real
(除以denom.real
,而不是denom.img
)。你现在的方式应该是整数除以零,因为如果其他一切都正常工作,denom.img
将为零。