无法计算两个复数之和和差值。
#include <stdio.h>
void sum_diff(double *r3, double *i3, double *r4, double *i4);
int main()
{
double r3, i3, r4, i4, s3, s4, d3, d4;
printf("Enter r3 and i3 where r3 + i3 is the first complex number.\n");
printf("r3 = ");
scanf("%lf", &r3);
printf("i3 = ");
scanf("%lf", &i3);
printf("Enter r4 and i4 where r4 + i4 is the second complex number.\n");
printf("r4 = ");
scanf("%lf", &r4);
printf("i4 = ");
scanf("%lf", &i4);
sum_diff(&r3, &i3, &r4, &i4);
printf("The sum of the two complex numbers = %.3lf + %.3lf\n.", s3, s4);
printf("The difference of the two complex numbers = %.3lf - %.3lf\n.", d3, d4);
return 0;
}
void sum_diff(double *r3, double *i3, double *r4, double *i4)
{
double s3, s4, d3, d4;
s3 = *r3 + *r4;
s4 = *i3 + *i4;
d3 = *r3 - *r4;
d4 = *i3 - *i4;
}
答案 0 :(得分:4)
问题在于变量的范围。 将您的功能更改为:
void sum_diff(double *r3, double *i3, double *r4, double *i4,
double *s3, double *s4, double *d3, double *d4)
{
*s3 = *r3 + *r4;
*s4 = *i3 + *i4;
*d3 = *r3 - *r4;
*d4 = *i3 - *i4;
}
然后将其称为:
sum_diff(&r3, &i3, &r4, &i4, &s3, &s4, &d3, &d4);
答案 1 :(得分:2)
sum_diff()
没有副作用。 s3, s4, d3, d4
是所有局部变量。也就是说,s3
中的main()
和s3
中的sum_diff()
是两个不同的变量。
你正在寻找更像的东西:
void sum_diff(double r3, double i3, double r4, double i4,
double *s3, double *s4, double *d3, double *d4)
{
*s3 = r3 + r4;
*s4 = i3 + i4;
*d3 = r3 - r4;
*d4 = i3 - i4;
}
你会称之为:
sum_diff(r3, i3, r4, i4, &s3, &s4, &d3, &d4);
此外,我强烈建议监听编译器的警告/升级编译器/使用标志以包含警告级别。您给出的代码为我生成以下内容:
[5:18pm][wlynch@watermelon /tmp] gcc -Wall blah.c
blah.c:25:69: warning: variable 's3' is uninitialized when used here [-Wuninitialized]
printf("The sum of the two complex numbers = %.3lf + %.3lf\n.", s3, s4);
^~
blah.c:25:73: warning: variable 's4' is uninitialized when used here [-Wuninitialized]
printf("The sum of the two complex numbers = %.3lf + %.3lf\n.", s3, s4);
^~
blah.c:26:76: warning: variable 'd3' is uninitialized when used here [-Wuninitialized]
printf("The difference of the two complex numbers = %.3lf - %.3lf\n.", d3, d4);
^~
blah.c:26:80: warning: variable 'd4' is uninitialized when used here [-Wuninitialized]
printf("The difference of the two complex numbers = %.3lf - %.3lf\n.", d3, d4);
^~
4 warnings generated.
答案 2 :(得分:0)
(这是其他答案中提供的内容的附加信息)
很难读懂,有一个函数需要8个指针,其中一些是入站的,有些是出站的。
首先,您不应该使用指针参数来传递不会被更改的complex double my_csum(complex double a, complex double b)
{
return a + b;
}
complex double my_cdiff(complex double a, complex double b)
{
return a - b;
}
。指针参数的使用要么是函数可以改变值,要么是当你不信任编译器有效地传递大值时作为手动优化。
其次,该函数执行两个单独的任务。最好有两个独立的功能。此外,最好使用返回值作为返回信息,这比使用out-parameter更容易阅读和更惯用。
所以代码可能是,使用C的原生复数支持:
return
如果您不想使用该原生支持(例如出于学习原因),那么我建议使用包含2个成员的结构来表示复数,以便您可以{{1}}。< / p>