复数四则运算-----一个小坑啊!!

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\n",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\n",a,b);
    if ( fabs(a) < 0.1 && fabs(b) < 0.1){
        printf("0.0\n");
    }
    else if( fabs(a) < 0.1 ){
        printf("%.1fi\n",b);
    }
    else if( fabs(b) < 0.1 ){
        printf("%.1f\n",a);
    }
    else if( b<0 ){
        printf("%.1f%.1fi\n",a,b);
    }
    else{
        printf("%.1f+%.1fi\n",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);
    }
}

 

 








posted @ 2018-01-18 20:19  yuxiaoba  阅读(939)  评论(0编辑  收藏  举报