7-36 复数四则运算

来源:互联网 发布:机器码加密软件 编辑:程序博客网 时间:2024/05/30 04:24

本题要求编写程序,计算2个复数的和、差、积、商。

输入格式:

输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部。题目保证C2不为0。

输出格式:

分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。

输入样例1:

2 3.08 -2.04 5.06

输出样例1:

(2.0+3.1i) + (-2.0+5.1i) = 8.1i(2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i(2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i(2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i

输入样例2:

1 1 -1 -1.01

输出样例2:

(1.0+1.0i) + (-1.0-1.0i) = 0.0(1.0+1.0i) - (-1.0-1.0i) = 2.0+2.0i(1.0+1.0i) * (-1.0-1.0i) = -2.0i(1.0+1.0i) / (-1.0-1.0i) = -1.0

我又崩溃了。。。我只改了第77行void printResult(COMPLEX x, COMPLEX y, COMPLEX  rlt, char f)输出格式的又不能AC。


当void printResult(COMPLEX x, COMPLEX y, COMPLEX  rlt, char f)这样的时候

void printResult(COMPLEX x, COMPLEX y, COMPLEX  rlt, char f){    printf("(");    printComplex(x);    printf(")");    printf(" %c ", f);    printf("(");    printComplex(y);    printf(")");    printf(" = ");    printComplex(rlt);}

测试点提示结果耗时内存0sample 1 实部为0,检查舍入答案正确2 ms128KB1sample 2 输出0答案正确2 ms156KB2纯实数运算答案错误2 ms128KB3纯虚数运算答案错误2 ms160KB然后我重看题目,意识到我输出格式错了,然后我就改过来了。改了之后的void printResult(COMPLEX x, COMPLEX y, COMPLEX  rlt, char f)长这样:

void printResult(COMPLEX x, COMPLEX y, COMPLEX  rlt, char f){    printf("(");    if(x.imaginary>=0)        printf("%.1f+%.1fi", x.real, x.imaginary);    else        printf("%.1f-%.1fi", x.real, x.imaginary);    printf(")");    printf(" %c ", f);    printf("(");    printComplex(y);    if(y.imaginary>=0)        printf("%.1f+%.1fi", y.real, y.imaginary);    else        printf("%.1f%.1fi", y.real, y.imaginary);    printf(")");    printf(" = ");    printComplex(rlt);}

测试点提示结果耗时内存0sample 1 实部为0,检查舍入答案正确2 ms228KB1sample 2 输出0答案错误2 ms128KB2纯实数运算答案正确2 ms132KB3纯虚数运算答案正确2 ms228KB

WTF,用例2干嘛,我格式哪里又错了????


以下是全部代码

#include <stdio.h>#include <stdlib.h>typedef struct{double real;double imaginary;}COMPLEX;double myRounding(const double x, int n);COMPLEX buildComplex(double x, double y);COMPLEX addComplex(COMPLEX x, COMPLEX y);COMPLEX subComplex(COMPLEX x, COMPLEX y);COMPLEX mutiComplex(COMPLEX x, COMPLEX y);COMPLEX divComplex(COMPLEX x, COMPLEX y);void printComplex(COMPLEX x);void printResult(COMPLEX x, COMPLEX y, COMPLEX  rlt, char f);int main(){    double a, b, c, d;    COMPLEX cpx1;    COMPLEX cpx2;    COMPLEX rlt;    scanf("%lf %lf %lf %lf", &a, &b, &c, &d);    cpx1 = buildComplex( a, b);    cpx2 = buildComplex( c, d);    rlt = addComplex(cpx1, cpx2);    printResult(cpx1, cpx2, rlt, '+');    printf("\n");    rlt = subComplex(cpx1, cpx2);    printResult(cpx1, cpx2, rlt, '-');    printf("\n");    rlt = mutiComplex(cpx1, cpx2);    printResult(cpx1, cpx2, rlt, '*');    printf("\n");    rlt = divComplex(cpx1, cpx2);    printResult(cpx1, cpx2, rlt, '/');    printf("\n");    system("pause");}COMPLEX divComplex(COMPLEX x, COMPLEX y){    COMPLEX rlt;    rlt.real = (x.real*y.real+x.imaginary*y.imaginary)/(y.real*y.real+y.imaginary*y.imaginary);    rlt.imaginary = (x.imaginary*y.real-x.real*y.imaginary)/(y.real*y.real+y.imaginary*y.imaginary);    return rlt;}COMPLEX subComplex(COMPLEX x, COMPLEX y){    COMPLEX rlt;    rlt.real = x.real - y.real;    rlt.imaginary = x.imaginary - y.imaginary;    return rlt;}COMPLEX mutiComplex(COMPLEX x, COMPLEX y){    COMPLEX rlt;    rlt.real = x.real*y.real - x.imaginary*y.imaginary;    rlt.imaginary = x.real*y.imaginary + x.imaginary*y.real;    return rlt;}COMPLEX addComplex(COMPLEX x, COMPLEX y){    COMPLEX rlt;    rlt.real = x.real + y.real;    rlt.imaginary = x.imaginary + y.imaginary;    return rlt;}COMPLEX buildComplex(double x, double y){    COMPLEX rlt;    rlt.real = x;    rlt.imaginary = y;    return rlt;}void printResult(COMPLEX x, COMPLEX y, COMPLEX  rlt, char f){    printf("(");    printComplex(x);//    if(x.imaginary>=0)//        printf("%.1f+%.1fi", x.real, x.imaginary);//    else//        printf("%.1f-%.1fi", x.real, x.imaginary);    printf(")");    printf(" %c ", f);    printf("(");    printComplex(y);//    if(y.imaginary>=0)//        printf("%.1f+%.1fi", y.real, y.imaginary);//    else//        printf("%.1f%.1fi", y.real, y.imaginary);    printf(")");    printf(" = ");    printComplex(rlt);}void printComplex(COMPLEX x){    x.real = myRounding(x.real, 1);    x.imaginary = myRounding(x.imaginary, 1);    if(x.real==0 && x.imaginary==0)    {        printf("0.0");    }    if(x.real!=0 && x.imaginary==0)    {        printf("%.1f", x.real);    }    if(x.real==0 && x.imaginary!=0)    {        printf("%.1fi", x.imaginary);    }    if(x.real!=0 && x.imaginary>0)    {        printf("%.1f+%.1fi", x.real, x.imaginary);    }    if(x.real!=0 && x.imaginary<0)    {        printf("%.1f%.1fi", x.real, x.imaginary);    }}/** 求double型的小数位的四舍五入 * x为待操作数 * n表示求小数点的后n位 * \return 为处理好的数 */double myRounding(const double x, int n){    int i;    double tmp = 1.0;    double rlt = x;    if(x<0)    {        rlt = -rlt;    }    for(i=0; i<n; i++)    {        tmp *=10.0;    }    rlt = (int)(rlt*tmp+0.5)/tmp;    if(x<0)    {        rlt = -rlt;    }    return rlt;}


原创粉丝点击