当前位置: 首页 > article >正文

2025-03-02 学习记录--C/C++-PTA 7-36 复数四则运算

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

在这里插入图片描述
在这里插入图片描述

二、代码(C语言)⭐️

#include <stdio.h>
#include <math.h>

/**
 * 输出结果
 * @param symbol 运算符:'+' '-' '*' '/'
 * @param a1 复数1的实部
 * @param b1 复数1的虚部
 * @param a2 复数2的实部
 * @param b2 复数2的虚部
 * @param opt1 结果的实部
 * @param opt2 结果的虚部
 */
void getContent(char symbol, double a1, double b1, double a2, double b2,double opt1,double opt2) {
    /** 输出等号左边的内容 */
    // 处理b1、b2前是否加符号"+":若大于等于0,则加上;否则,不处理。
    if(b1 >= 0) {
        // %.1f 在 C 语言中是 四舍五入 到小数点后一位,而不是向下取整。
        printf("(%.1f%+.1fi) %c (%.1f",a1, b1, symbol, a2);
    } else {
        printf("(%.1f%.1fi) %c (%.1f",a1, b1, symbol, a2);
    }
    if(b2 >= 0) {
        printf("+%.1fi) = ", b2);
    } else {
        printf("%.1fi) = ", b2);
    }

    /** 输出等号右边的内容 */
    if((int)(opt1 * 10) == 0 && (int)(opt2 * 10) == 0) {
        // 假如 opt1 与 opt2 保留一位小数时,结果是0.0或-0.0时,输出 0.0
        // -0 == 0
        printf("0.0\n");
    } else if((int)(opt1 * 10) == 0) {
        // 假如 opt1 保留一位小数时,结果是0.0或-0.0时,只展示 opt2
        // -0 == 0
        printf("%.1fi\n",opt2);
    } else if((int)(opt2 * 10) == 0) {
        // 假如 opt2 保留一位小数时,结果是0.0或-0.0时,只展示 opt1
        // -0 == 0
        printf("%.1f\n",opt1);
    } else if(opt2 > 0){
        // 如果 opt2 大于0,则其前加个符号"+"
        printf("%.1f+%.1fi\n",opt1,opt2);
    } else {
        // 否则不特殊处理
        printf("%.1f%.1fi\n",opt1,opt2);
    }
}

int main() {
    double a1,b1,a2,b2;
    double addR1,addR2, // 加
           subtractR1,subtractR2, // 减
           multiplyR1,multiplyR2, // 乘
           divideR1,divideR2; // 除
    scanf("%lf %lf %lf %lf",&a1,&b1,&a2,&b2);

    // 加 (a+bi) + (c+di) = (a+c)+(b+d)i
    addR1 = a1 + a2;
    addR2 = b1 + b2;
    getContent('+', a1, b1, a2, b2, addR1, addR2);

    // 减 (a+bi) - (c+di) = (a-c)+(b-d)i
    subtractR1 = a1 - a2;
    subtractR2 = b1 - b2;
    getContent('-', a1, b1, a2, b2, subtractR1, subtractR2);

    // 乘 (a+b)(c+d)=ac+ad+bc+bd、i^2=-1
    multiplyR1 = a1 * a2 + (-1) * b1 * b2; // i^2 == -1
    multiplyR2 = a1 * b2 + b1 * a2;
    getContent('*', a1, b1, a2, b2, multiplyR1, multiplyR2);

    // 除
    divideR1 = (a1 * a2 + b1 * b2) / (pow(a2,2) + pow(b2,2));
    divideR2 = (b1 * a2 - a1 * b2) / (pow(a2,2) + pow(b2,2));
    getContent('/', a1, b1, a2, b2, divideR1, divideR2);

    return 0;
}

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/570620.html

相关文章:

  • 登录服务器后如何找到对应的drupal所在的文件夹
  • 网上花店微信小程序+论文源码调试讲解
  • ICP-通过一组匹配的3D点估计相机运动
  • 数列极限入门习题
  • 从零搭建微服务项目Pro(第1-2章——Quartz实现定时任务模块优化)
  • 《OpenCV》——卷积神经网络人脸检测
  • c++ std::stack、std::queue、std::priority_queue使用笔记
  • 系统讨论Qt的并发编程2——介绍一下Qt并发的一些常用的东西
  • Mac上安装Pycharm
  • 《OpenCV》—— dlib库(性别年龄预测)
  • 2024华为OD机试真题-热点网站统计(C++)-E卷-100分
  • 鸿蒙系统分布式文件概述、访问、拷贝
  • K8S学习之基础六:k8s中pod亲和性
  • 单例模式(线程案例)
  • 使用Java操作Excel
  • R语言基础| 基本图形绘制
  • 数据集/API 笔记:新加坡风速 API
  • Linux12-UDP\
  • 打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第一天)
  • go语言逆向-符号恢复