**
#7-8 复数四则运算 (10分)**
**
本题要求编写程序,计算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
第一次写这个代码理所当然的想把两个复数直接输出大概就是这个样子
printf("(%.1lf+%.1lfi)符号(%.1lf+%.1lfi)=%.1lf");
依次输出然后再写一个复数的计算函数就可以了
没想到忽略了虚部正负的问题
嗯~ o( ̄▽ ̄)o当然复数的计算函数也想了很久
总想一次把结果全部输出
结果卒
第二次写因为第一次的莽我由判断虚部的正负得到了灵感
1.要分步输出复数
2.每次输出复数都要对虚部进行判断(三种情况:正,负,0)
实部也要进行判断如果是零就给它省去
3.既然复数都是分步输出,那么结果我不如也是分别计算实部与虚部再利用2进行判断
结果四个数据点只过了一半,纯实数和纯虚数没过
卒
第三次写看到网上的大佬说因为要先进行四舍五入在进行判断是否为0,而本弱鸡是先判断是否为0,在输出,所以觉得可能是这一点出现了问题,所以马上改变了顺序,但依然未过,我内牛满面
卒
第四次写终于我领悟到了奥义
原来输入两个函数时当实部与虚部为0时,不用省去直接输出
我的天啊!!!亏我省去了,还在只有实部或虚部时连括号都省去了,再次捂脸,白瞎了我的头发
经测试第三次说的无效,可能是数据点的问题,不过少些一个四舍五入的函数不香吗?嘿嘿嘿!!!
**总结一下:难点复数的输出以及结果实部与虚部是否为零的判断
那个结果实部与虚部是否为零的判断本弱鸡是用绝对值
如果有更好的方法还请大佬*指出
#include<stdio.h>
#include<math.h>
char fu[5]={
' ','+','-','*','/'};
void shuchu(double a,double b,double c,double d,int i);
double shi(double a,double b,double c,doub