复数的四则运算

这是数据结构老师要求我们写的作业,其实挺简单的。但是不知道为什么,班里就是有人不会写。可能过了一个学期大家都把C语言给忘了,其实班上同学的水平本来就不怎么好,就一两个是比较厉害的。而我刚好在暑假的时候看了下书并且敲了些代码,所以感觉挺容易的。自己还的多练练啊!

code 1:

#include

/*实现计算加法下的实部和虚部*/
double Add(double x, double y)
{
    return x + y;
}

/*实现减法下的实部和虚部*/
double Sub(double x, double y)
 {
     return x - y;
 }

/*实现乘法下的实部*/
 double Multiply1(double x, double y, double m, double n)
 {
     return x * m - y * n;
 }

/*实现乘法下的虚部*/
 double Multiply2(double x, double y, double m, double n)
 {
     return x * n + y * m;
 }

/*实现除法下的实部*/
double Div1(double x, double y, double m, double n)
 {
     return (x * m + n * y)/(m * m + n * n);
 }

/*实现除法下的虚部*/
double Div2(double x, double y, double m, double n)
{
    return (m * y - n * x)/(m * m + n * n);
}

/*定义一个输出函数,便于控制输出*/
void print(double a, double b)
{
    if(a == (int)a)
        {
            printf("%.0f ", a);
            if(b == (int)b)
                printf("%.0f\n", b);
            else
                printf("%.2f\n", b);
        }           //上述功能是如果实部或虚部是整数,则输出整数;否则保留两位小数输出
        else
        {
            printf("%.2f ", a);
            if(b == (int)b)
                printf("%.0f\n", b);
            else
                printf("%.2f\n", b);
        }
}

int main()
{
    double a1, b1, c1, d1;
    double a, b;

    printf("分别输入复数 1 和复数 2 的实部和虚部:\n");

    while(scanf("%lf%lf%lf%lf", &a1, &b1, &c1, &d1) != EOF)     //重复输入,可以输入多组测试用例
    {
        /*计算加法下的实部和虚部*/
        a = Add(a1, c1);
        b = Add(b1, d1);
        printf("加法后的实部和虚部分别是:\n");
        print(a, b);



        /*计算减法下的实部和虚部*/
        a = Sub(a1, c1);
        b = Sub(b1, d1);
        printf("减法后的实部和虚部分别是:\n");
        print(a, b);



        /*计算乘法下的实部和虚部*/
        a = Multiply1(a1, b1, c1, d1);
        b = Multiply2(a1, b1, c1, d1);
        printf("乘法后的实部和虚部分别是:\n");
        print(a, b);



        /*计算除法下的实部和虚部*/
        printf("除法下的实部和虚部分别是:\n");
        if(c1 * c1 + d1 * d1 == 0)
        {
            printf("不存在\n\n");
            continue;
        }
        a = Div1(a1, b1, c1, d1);
        b = Div2(a1, b1, c1, d1);
        print(a, b);


        printf("\n");
    }
    return 0;
}
后来又帮同学写了个,用结构体写的。结果后来老师说他写的不错,而我的看不出有什么好的,就是挺普通的一个代码。。。。


code 2:

#include

typedef struct complex
{
    double Re;
    double Im;
}complex;

/*使x, y分别赋给复数的实部和虚部*/
void zuhecomplex(complex &c, double x, double y)
{
    c.Re = x;
    c.Im = y;
}

/*实现复数的实部和虚部的加法*/
void Addcomplex(complex & c, complex c1, complex c2)
{
    c.Re = c1.Re + c2.Re;
    c.Im = c1.Im + c2.Im;
}

/*实现复数的减法*/
void Subcomplex(complex & c, complex c1, complex c2)
{
    c.Re = c1.Re - c2.Re;
    c.Im = c1.Im - c2.Im;
}

/*实现复数的乘法*/
void Mulcomplex(complex & c, complex c1, complex c2)
{
    c.Re = c1.Re * c2.Re - c1.Im * c2.Im;
    c.Im = c1.Re * c2.Im + c1.Im * c2.Re;
}

/*实现复数的除法*/
void Divcomplex(complex & c, complex c1, complex c2)
{
    c.Re = (c1.Re * c2.Re + c1.Im * c2.Im) / (c2.Re * c2.Re + c2.Im * c2.Im);
    c.Im = (c1.Im * c2.Re - c1.Re * c2.Im) / (c2.Re * c2.Re + c2.Im * c2.Im);
}

/*定义一个输出函数,便于控制输出,若是整数,则只输出整数;否则输出两位小数*/
void print(complex c)
{
    if(c.Re == (int)c.Re)
    {
        printf("%.0f", c.Re);
        if(c.Im == (int)c.Im)
        {
            if(c.Im > 0)
                printf("+%.0fi\n", c.Im);
            if(c.Im < 0)
                printf("%.0fi\n", c.Im);
        }
        else
        {
            if(c.Im > 0)
                printf("+%.2fi\n", c.Im);
            if(c.Im < 0)
                printf("%.0fi\n", c.Im);
        }
    }

    else
    {
        printf("%.2f", c.Re);
        if(c.Im == (int)c.Im)
        {
            if(c.Im > 0)
                printf("+%.0fi\n", c.Im);
            if(c.Im < 0)
                printf("%.0fi\n", c.Im);
        }
        else
        {
            if(c.Im > 0)
                printf("+%.2fi\n", c.Im);
            if(c.Im < 0)
                printf("%.0fi\n", c.Im);
        }
    }
    printf("\n");
}

int main()
{
    double a, b, c, d;
    complex c1, c2, s;
    int i;

    printf("请分别输入复数1 和复数2 的实部和虚部:\n");
    while(scanf("%lf%lf%lf%lf", &a, &b, &c, &d) != EOF )
    {
        zuhecomplex(c1, a, b);

        zuhecomplex(c2, c, d);

        printf("输入数字1--5选择运算\n1.加法\t2.减法\t3.乘法\t4.除法\t5.退出\t\n");
        scanf("%d", &i);

        switch(i)
        {
            case 1:
            printf("加法后的复数是:\n");
            Addcomplex(s, c1, c2);
            print(s);
            break;

            case 2:
            printf("减法后的复数是:\n");
            Subcomplex(s, c1, c2);
            print(s);
            break;

            case 3:
            printf("乘法后的复数是:\n");
            Mulcomplex(s, c1, c2);
            print(s);
            break;

            case 4:
            printf("除法后的复数是:\n");
            Divcomplex(s, c1, c2);
            print(s);
            break;

            case 5:
            return 0;
        }
        printf("\n");
        printf("请分别输入复数1 和复数2 的实部和虚部:\n");
    }
    return 0;
}



你可能感兴趣的:(数据结构)