zoukankan      html  css  js  c++  java
  • 5-36 复数四则运算

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

    输入格式:

    输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1iC2=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
    

    解题思路:

    这题不难,就是有点繁琐。四种运算输出的格式基本相似,就是运算符不一致。所以把它们输出过程放在了函数里。在输出格式上要多注意题目给的规则。

    难点可能在于保留一位小数。因为非 0 不输出,double 型的数据如何比较到小数点后一位?如 0.004 数据应该是不输出的,但与 0 比较又大于 0。这里用的方法是:在比较的时候乘以 10 再强制将其转换成 int 型,这样就可以比较到小数点后一位。

    解题代码:

    #include<stdio.h>
    
    struct complex {
    	double a;
    	double b;
    };
    
    void Output (struct complex c[], double i, double j, char s); 
    
    int main ()
    {
    	struct complex c[2];
    	
    	scanf("%lf %lf %lf %lf", &c[0].a, &c[0].b, &c[1].a, &c[1].b);
    	
    	double i, j; //用来存放最终结果
    	
    	i = c[0].a + c[1].a;
    	j = c[0].b + c[1].b;
    	Output (c, i, j, '+');
    	
    	i = c[0].a - c[1].a;
    	j = c[0].b - c[1].b;
    	Output (c, i, j, '-');
    	
    	i = c[0].a * c[1].a - c[0].b * c[1].b;
    	j = c[0].b * c[1].a + c[0].a * c[1].b;
    	Output (c, i, j, '*');
    	
    	i = (c[0].a * c[1].a + c[0].b * c[1].b) / (c[1].a * c[1].a + c[1].b * c[1].b);
    	j = (c[0].b * c[1].a - c[0].a * c[1].b) / (c[1].a * c[1].a + c[1].b * c[1].b);
    	Output (c, i, j, '/');	
    
    	return 0; 
    }
    
    void Output (struct complex c[], double i, double j, char s) {
    	if (c[0].b >= 0) {
    		printf("(%.1f+%.1fi) %c", c[0].a, c[0].b, s);
    	} else {
    		printf("(%.1f%.1fi) %c", c[0].a, c[0].b, s);
    	}
    	if (c[1].b >= 0) {
    		printf(" (%.1f+%.1fi) ", c[1].a, c[1].b);
    	} else {
    		printf(" (%.1f%.1fi) ", c[1].a, c[1].b);
    	}
    	if ((int)(i*10)==0 && (int)(j*10)==0) {
    		printf("= 0.0
    "); 
    	} else if ((int)(i*10) == 0) {
    		printf("= %.1fi
    ", j);
    	} else if ((int)(j*10) == 0){
    		printf("= %.1f
    ", i);
    	} else if (j > 0) {
    		printf("= %.1f+%.1fi
    ", i, j);
    	} else {
    		printf("= %.1f%.1fi
    ", i, j);
    	}	
    }
  • 相关阅读:
    小试阿里云容器服务
    .NET跨平台:再见dnx,你好dotnet cli
    使用Let's Encrypt手动创建https证书
    Chrome以https访问gitlab的问题:Your connection is not private
    [ASP.NET 5]终于解决:Unable to load DLL 'api-ms-win-core-localization-obsolete-l1-2-0.dll'
    Mac上远程桌面连接Windows Server 2012 R2
    解决JSON.stringify()在IE10下无法使用的问题
    解决阿里云SLB无法添加https证书的问题
    “状态机”学习笔记
    HttpClient读取ASP.NET Web API错误信息的简单方法
  • 原文地址:https://www.cnblogs.com/andywenzhi/p/5738670.html
Copyright © 2011-2022 走看看