7-36 | 复数四则运算

题目:


解答:

个人认为需要注意的地方是对负数的四舍五入;

#include "stdio.h"
#include "math.h"

void rounding(float *f){
    int flag=*f<0?-1:1;  
    int i=abs((int)(*f*100));
    if(i%10<5){
       i=i/10; 
    }else{
       i=i/10+1;
    }
    *f=flag==1?(float)i/10.0:-(float)i/10.0;
}

void print(float a1,float b1,float a2,float b2,float ret1,float ret2,char ch){
    printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = ",a1,b1,ch,a2,b2);
    rounding(&ret1);
    rounding(&ret2);
    if(ret1==0.0&&ret2==0.0){
        printf("0.0\n");
    }else if(ret1==0.0){
        printf("%.1fi\n",ret2);
    }else if(ret2==0.0){
        printf("%.1f\n",ret1);
    }else{
        printf("%.1f%+.1fi\n",ret1,ret2);
    }
}


int main(){
    float a1,b1,a2,b2;
    scanf("%f %f %f %f",&a1,&b1,&a2,&b2);
    print(a1,b1,a2,b2,a1+a2,b1+b2,'+');
    print(a1,b1,a2,b2,a1-a2,b1-b2,'-');
    print(a1,b1,a2,b2,a1*a2-b1*b2,a1*b2+a2*b1,'*');
    print(a1,b1,a2,b2,(a1*a2+b1*b2)/(a2*a2+b2*b2),(b1*a2-a1*b2)/(a2*a2+b2*b2),'/');
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值