计算两个复数的和、差、积、商。
定义一个可以表示复数的结构体类型。
利用子函数分别实现和、差、积、商的计算。
在主函数输入数据。
输入:
1.0 1.0
2.0 2.0
则输出:
两个复数分别是
1.00+1.00i
2.00+2.00i
复数和是3.00+3.00i
复数差是-1.00-1.00i
复数积是0.00+4.00i
复数商是0.50+0.00i
#include<stdio.h>
#include <math.h>
/*复数结构体*/
struct MyComplex
{
double re;
double im;
}ca,cb;
void Cadd(struct MyComplex x,struct MyComplex y)
{
struct MyComplex z;
z.re =x.re +y.re ;
z.im =x.im +y.im ;
printf("复数和是%.2lf+%.2lfi\n",z.re,z.im);
}
void Csub(struct MyComplex x,struct MyComplex y)
{
struct MyComplex z;
z.re =x.re -y.re ;
z.im =x.im -y.im ;
printf("复数差是%.2lf+%.2lfi\n",z.re,z.im);
}
void Cmul(struct MyComplex x,struct MyComplex y)
{
struct MyComplex z;
z.re =(x.re *y.re)-(x.im *y.im ) ;
z.im =(x.re *y.im)+(x.im *y.re ) ;
printf("复数积是%.2lf+%.2lfi\n",z.re,z.im);
}
void Cdiv(struct MyComplex x,struct MyComplex y)
{
struct MyComplex z;
double z0=y.re*y.re+y.im *y.im;
z.re =((x.re *y.re)+(x.im *y.im))/z0;
z.im =-((x.re *y.im)+(x.im *y.re))/z0;
printf("复数商是%.2lf+%.2lfi\n",z.re,z.im);
}
int main(){
double re,im;
scanf("%lf %lf",&re,&im);
ca.re = re;
ca.im = im;
scanf("%lf %lf",&re,&im);
cb.re = re;
cb.im = im;
printf("两个复数分别是\n");
printf("%.2lf+%.2lfi\n", ca.re, ca.im);
printf("%.2lf+%.2lfi\n", cb.re, cb.im);
Cadd(ca, cb);
Csub(ca, cb);
Cmul(ca, cb);
Cdiv(ca, cb);
return 0;
}
#include <stdio.h>
typedef struct {
float s;
float x;
} NP;
NP npadd(NP a,NP b){
NP rt;
rt.s=a.s+b.s;
rt.x=a.x+b.x;
return rt;
}
NP npsub(NP a,NP b){
NP rt;
rt.s=a.s-b.s;
rt.x=a.x-b.x;
return rt;
}
NP npmult(NP a,NP b){
NP rt;
rt.s=a.s*b.s-a.x*b.x;
rt.x=a.s*b.x+a.x*b.s;
return rt;
}
NP npdiv(NP a,NP b){
NP rt;
if(b.s!=0 && b.x!=0){
rt.s=(a.s*b.s+a.x*b.x)/(b.s*b.s+b.x*b.x);
rt.x=(b.s*a.x-a.s*b.x)/(b.s*b.s+b.x*b.x);
}
return rt;
}
int main(void){
NP a,b,x;
scanf("%f %f",&(a.s),&(a.x));
scanf("%f %f",&(b.s),&(b.x));
x=npadd(a,b);
printf("复数和是%.2f%+.2fi\n",x.s,x.x);
x=npsub(a,b);
printf("复数差是%.2f%+.2fi\n",x.s,x.x);
x=npmult(a,b);
printf("复数积是%.2f%+.2fi\n",x.s,x.x);
x=npdiv(a,b);
printf("复数商是%.2f%+.2fi\n",x.s,x.x);
}