zoukankan      html  css  js  c++  java
  • 复数四则运算-----一个小坑啊!!

    7-36 复数四则运算(15 分)

    本题要求编写程序,计算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


    这道题有点坑,首先是浮点数如何判断是不是零,然后网上找了一个代码
    1 fabs(a) < 1e-6    //float
    fabs(f) <= 1e-15 //double
    但是这个还是过不了,后来我就试了一下
    1 printf("%f %f
    ",a,b);

    发现 1.0 - 1.0 =0.01了,这就难怪之前过不了,然后我再改了一下判断  

    fabs(a) < 0.1

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include <string.h>
    /*
    7-36 复数四则运算(15 分)
    本题要求编写程序,计算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。
    */
    void print1( float a,float b);
    void print2(float a,float b,float c,float d);
    void print3(float a,float b,float c,float d);
    void print4(float a,float b,float c,float d);
    void print5(float a,float b,float c,float d);
    int main()
    {
        float a,b,c,d;
    
        scanf("%f %f %f %f",&a,&b,&c,&d);
        //加法
        float f = a+c;
        float g = b+d;
        //-
        float h = a-c;
        float i = b-d;
        //*
        float j = a*c-b*d;
        float k = b*c+a*d;
        //chu
        float l = (a*c+b*d)/(c*c+d*d);
        float m = (b*c-a*d)/(c*c+d*d);
        print2(a,b,c,d);
        print1(f,g);
        print3(a,b,c,d);
        print1(h,i);
        print4(a,b,c,d);
        print1(j,k);
        print5(a,b,c,d);
        print1(l,m);
        return 0;
    }
    
    void print1( float a,float b)
    {
    //    printf("%f %f
    ",a,b);
        if ( fabs(a) < 0.1 && fabs(b) < 0.1){
            printf("0.0
    ");
        }
        else if( fabs(a) < 0.1 ){
            printf("%.1fi
    ",b);
        }
        else if( fabs(b) < 0.1 ){
            printf("%.1f
    ",a);
        }
        else if( b<0 ){
            printf("%.1f%.1fi
    ",a,b);
        }
        else{
            printf("%.1f+%.1fi
    ",a,b);
        }
    }
    void print2(float a,float b,float c,float d)
    {
        //
        if( b<0 && d<0){
            printf("(%.1f%.1fi) + (%.1f%.1fi) = ",a,b,c,d);
        }
        else if( b<0 ){
            printf("(%.1f%.1fi) + (%.1f+%.1fi) = ",a,b,c,d);
        }
        else if( d<0 ){
            printf("(%.1f+%.1fi) + (%.1f%.1fi) = ",a,b,c,d);
        }
        else {
            printf("(%.1f+%.1fi) + (%.1f+%.1fi) = ",a,b,c,d);
        }
    }
    void print3(float a,float b,float c,float d)
    {
        //
        if( b<0 && d<0){
            printf("(%.1f%.1fi) - (%.1f%.1fi) = ",a,b,c,d);
        }
        else if( b<0 ){
            printf("(%.1f%.1fi) - (%.1f+%.1fi) = ",a,b,c,d);
        }
        else if( d<0 ){
            printf("(%.1f+%.1fi) - (%.1f%.1fi) = ",a,b,c,d);
        }
        else {
            printf("(%.1f+%.1fi) - (%.1f+%.1fi) = ",a,b,c,d);
        }
    }
    void print4(float a,float b,float c,float d)
    {
        //
        if( b<0 && d<0){
            printf("(%.1f%.1fi) * (%.1f%.1fi) = ",a,b,c,d);
        }
        else if( b<0 ){
            printf("(%.1f%.1fi) * (%.1f+%.1fi) = ",a,b,c,d);
        }
        else if( d<0 ){
            printf("(%.1f+%.1fi) * (%.1f%.1fi) = ",a,b,c,d);
        }
        else {
            printf("(%.1f+%.1fi) * (%.1f+%.1fi) = ",a,b,c,d);
        }
    }
    void print5(float a,float b,float c,float d)
    {
        //
        if( b<0 && d<0){
            printf("(%.1f%.1fi) / (%.1f%.1fi) = ",a,b,c,d);
        }
        else if( b<0 ){
            printf("(%.1f%.1fi) / (%.1f+%.1fi) = ",a,b,c,d);
        }
        else if( d<0 ){
            printf("(%.1f+%.1fi) / (%.1f%.1fi) = ",a,b,c,d);
        }
        else {
            printf("(%.1f+%.1fi) / (%.1f+%.1fi) = ",a,b,c,d);
        }
    }







    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课
    bzoj1640 [Usaco2007 Nov]Best Cow Line 队列变换
    bzoj1639 [Usaco2007 Mar]Monthly Expense 月度开支
    bzoj1637 [Usaco2007 Mar]Balanced Lineup
    bzoj1641 [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
    bzoj1635 [Usaco2007 Jan]Tallest Cow 最高的牛
    bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通
    bzoj3407 [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题
    bzoj1631 [Usaco2007 Feb]Cow Party
    bzoj1632 [Usaco2007 Feb]Lilypad Pond
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8312850.html
Copyright © 2011-2022 走看看