分别编写函数,计算复数加法、减法、乘法、除法,复数Z表示成:Z=a+bi。
#include <stdio.h>
void add(double a,double b,double c,double d){
double x=a+c,y=b+d;
printf("(%g+%gi)+(%g+%gi)=%g+%gi\n",a,b,c,d,x,y);
}
void sub(double a,double b,double c,double d){
double x=a-c,y=b-d;
printf("(%g+%gi)-(%g+%gi)=%g+%gi\n",a,b,c,d,x,y);
}
void mul(double a,double b,double c,double d){
double x=a*c-b*d,y=a*d+b*c;
printf("(%g+%gi)*(%g+%gi)=%g+%gi\n",a,b,c,d,x,y);
}
void div(double a,double b,double c,double d){
double x=(a*c+b*d)/(c*c+d*d),y=(b*c-a*d)/(c*c+d*d);
printf("(%g+%gi)/(%g+%gi)=%g+%gi\n",a,b,c,d,x,y);
}
int main(void){
printf("请输入两个复数:");
double a,b,c,d;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
add(a,b,c,d);
sub(a,b,c,d);
mul(a,b,c,d);
div(a,b,c,d);
return 0;
}
chatgpt版本:
在这个示例代码中,定义了一个 Complex
结构体来表示复数,包含实部和虚部两个成员变量。然后,分别定义了 complexAdd
、complexSubtract
、complexMultiply
和 complexDivide
四个函数来执行复数的加法、减法、乘法和除法运算。在 main
函数中,定义了两个复数 z1
和 z2
,使用 scanf
函数分别获取用户输入的两个复数的实部和虚部,并将其存储在相应的 z1
和 z2
结构体中,并调用上述函数进行相应的运算。最后使用 printf
打印结果。
#include <stdio.h>
typedef struct {
double real; // 实部
double imag; // 虚部
} Complex;
// 复数加法
Complex complexAdd(Complex z1, Complex z2) {
Complex result;
result.real = z1.real + z2.real;
result.imag = z1.imag + z2.imag;
return result;
}
// 复数减法
Complex complexSubtract(Complex z1, Complex z2) {
Complex result;
result.real = z1.real - z2.real;
result.imag = z1.imag - z2.imag;
return result;
}
// 复数乘法
Complex complexMultiply(Complex z1, Complex z2) {
Complex result;
result.real = z1.real * z2.real - z1.imag * z2.imag;
result.imag = z1.real * z2.imag + z1.imag * z2.real;
return result;
}
// 复数除法
Complex complexDivide(Complex z1, Complex z2) {
Complex result;
double denominator = z2.real * z2.real + z2.imag * z2.imag;
result.real = (z1.real * z2.real + z1.imag * z2.imag) / denominator;
result.imag = (z1.imag * z2.real - z1.real * z2.imag) / denominator;
return result;
}
int main(void) {
Complex z1, z2;
printf("请输入第一个复数的实部和虚部(用空格分隔):");
scanf("%lf %lf", &z1.real, &z1.imag);
printf("请输入第二个复数的实部和虚部(用空格分隔):");
scanf("%lf %lf", &z2.real, &z2.imag);
// 复数加法
Complex sum = complexAdd(z1, z2);
printf("Sum: %.2f + %.2fi\n", sum.real, sum.imag);
// 复数减法
Complex diff = complexSubtract(z1, z2);
printf("Difference: %.2f + %.2fi\n", diff.real, diff.imag);
// 复数乘法
Complex product = complexMultiply(z1, z2);
printf("Product: %.2f + %.2fi\n", product.real, product.imag);
// 复数除法
Complex quotient = complexDivide(z1, z2);
printf("Quotient: %.2f + %.2fi\n", quotient.real, quotient.imag);
return 0;
}
课本答案:
#include <stdio.h>
#include <string.h>
double x,y;
void add(double a,double b,double c,double d);
void sub(double a,double b,double c,double d);
void mul(double a,double b,double c,double d);
void div(double a,double b,double c,double d);
void print(int i);
int main(void){
double a,b,c,d;
printf("please enter a,b:");
scanf("%lf%lf",&a,&b);
printf("please enter c,d:");
scanf("%lf%lf",&c,&d);
add(a,b,c,d);
print(1);
sub(a,b,c,d);
print(2);
mul(a,b,c,d);
print(3);
div(a,b,c,d);
print(4);
return 0;
}
void add(double a,double b,double c,double d){
x=a+c;
y=b+d;
}
void sub(double a,double b,double c,double d){
x=a-c;
y=b-d;
}
void mul(double a,double b,double c,double d){
x=a*c-b*d;
y=a*d+c*b;
}
void div(double a,double b,double c,double d){
x=(a*c+b*d)/(c*c+d*d);
y=(c*b-a*d)/(c*c+d*d);
}
void print(int i){
char str[4];
char sign;
switch(i){
case 1:strcpy(str,"add");break;
case 2:strcpy(str,"sub");break;
case 3:strcpy(str,"mul");break;
case 4:strcpy(str,"div");
}
sign=(y>0?'+':' ');
printf("%s:%g%c%gi\n",str,x,sign,y);
}