复数模型与运算(C语言)

来源:互联网 发布:c语言读取目录文件名 编辑:程序博客网 时间:2024/06/11 03:07
#include<stdio.h>
#include<math.h>
#define PI 3.14
//定义一个复数的结构体
struct complex_struct
{
    double real_part;
    double imaginary_part;
};


//数据抽象


//获得一个复数的实部
double getReal_part(struct complex_struct z)
{
    return z.real_part;
}
//获得一个复数的虚部
double getImaginary_part(struct complex_struct z)
{
    return z.imaginary_part;
}
//获得一个复数的模长
double magnitude(struct complex_struct z)
{
    return sqrt(z.real_part * z.real_part + z.imaginary_part * z.imaginary_part);
}
//获得一个复数的夹角
double angle(struct complex_struct z)
{
    return atan2(z.imaginary_part, z.real_part);
}
//用实部和虚部构造一个复数
struct complex_struct make_from_real_img(double real, double imaginary)
{
    struct complex_struct z;
    z.real_part = real;
    z.imaginary_part = imaginary;
    return z;
}
//用模长和角度构造一个复数
struct complex_struct make_from_mag_ang(double r, double A)
{
    struct complex_struct z;
    z.real_part = r *cos(A);
    z.imaginary_part = r *sin(A);
    return z;
}


//复数的运算
//复数的加法
struct complex_struct add_complex(struct complex_struct z1, struct complex_struct z2)
{
    return make_from_real_img(z1.real_part + z2.real_part, z1.imaginary_part + z2.imaginary_part);
}
//复数的减法
struct complex_struct sub_complex(struct complex_struct z1, struct complex_struct z2)
{
    return make_from_real_img(z1.real_part - z2.real_part, z1.imaginary_part - z2.imaginary_part);
}
//复数的乘法
struct complex_struct mul_complex(struct complex_struct z1, struct complex_struct z2)
{
    return make_from_mag_ang(magnitude(z1)*magnitude(z2), angle(z1) + angle(z2));
}
//复数的除法
struct complex_struct div_complex(struct complex_struct z1, struct complex_struct z2)
{
    return make_from_mag_ang(magnitude(z1) / magnitude(z2), angle(z1) - angle(z2));
}
//复数的打印
void print_complex(struct complex_struct z)
{
    printf("实部为%f\n", z.real_part);
    printf("虚部为%f\n", z.imaginary_part);
}
main()
{
    struct complex_struct z1, z2, z3, z4, z5, z6;
    z1 = make_from_real_img(2, 2);
    printf("z1\n");
    print_complex(z1);
    z2 = make_from_mag_ang(2 * sqrt(2), PI / 4);
    printf("z2\n");
    print_complex(z2);
    z3 = add_complex(z1, z2);
    printf("z1+z2\n");
    print_complex(z3);
    z4 = sub_complex(z1, z2);
    printf("z1-z2\n");
    print_complex(z4);
    z5 = mul_complex(z1, z2);
    printf("z1*z2\n");
    print_complex(z5);
    z6 = div_complex(z1, z2);
    printf("z1/z2\n");
    print_complex(z6);


}
原创粉丝点击