PTA基础编程题目集 7-36 复数四则运算(C语言实现)

PTA基础编程题目集 7-36 复数四则运算(C语言实现)

摘要:本文为 PTA 复数四则运算题解,介绍了复数加减乘除的格式要求与 C 语言实现思路,并给出完整代码。

题目描述

本题要求编写程序,计算 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。

输入样例:

2 3.08 -2.04 5.06
1 1 -1 -1.01

输出样例:

(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
(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

代码部分实现

#include<stdio.h>// 引入标准输入输出头文件#include<math.h>// 引入数学函数头文件(用于 fabs 求绝对值)voidprintComplex(doublea,doubleb){// 打印复数的格式化输出函数if(fabs(a)<0.05&&fabs(b)<0.05){// 实部虚部都接近 0printf("0.0");// 输出 0.0}elseif(fabs(a)<0.05){// 只有实部接近 0printf("%.1fi",b);// 只输出虚部,带 i}elseif(fabs(b)<0.05){// 只有虚部接近0printf("%.1f",a);// 只输出实部}elseif(b>0){// 虚部为正数printf("%.1f+%.1fi",a,b);// 输出实部+虚部i}else{// 虚部为负数printf("%.1f%.1fi",a,b);// 输出实部-|虚部|i(负号自带)}}voidprintOp(doublea1,doubleb1,charop,doublea2,doubleb2,doublea,doubleb){// 打印完整运算表达式printf("(");// 输出左括号printComplex(a1,b1);// 打印第一个复数printf(") %c (",op);// 输出运算符和第二个复数的左括号printComplex(a2,b2);// 打印第二个复数printf(") = ");// 输出等号printComplex(a,b);// 打印计算结果printf("\n");// 输出换行}intmain(){doublea1,b1,a2,b2;// 定义两个复数的实部和虚部scanf("%lf %lf %lf %lf",&a1,&b1,&a2,&b2);// 读取两个复数doublea,b;// 定义结果复数的实部和虚部a=a1+a2;// 计算和的实部b=b1+b2;// 计算和的虚部printOp(a1,b1,'+',a2,b2,a,b);// 打印加法运算a=a1-a2;// 计算差的实部b=b1-b2;// 计算差的虚部printOp(a1,b1,'-',a2,b2,a,b);// 打印减法运算a=a1*a2-b1*b2;// 计算积的实部:(a1*a2 - b1*b2)b=a1*b2+a2*b1;// 计算积的虚部:(a1*b2 + a2*b1)printOp(a1,b1,'*',a2,b2,a,b);// 打印乘法运算doubledenom=a2*a2+b2*b2;// 计算除法分母:C2模的平方a=(a1*a2+b1*b2)/denom;// 计算商的实部b=(b1*a2-a1*b2)/denom;// 计算商的虚部printOp(a1,b1,'/',a2,b2,a,b);// 打印除法运算return0;// 程序正常结束}

流程图

开始

读取 a1, b1, a2, b2

计算和: a = a1 + a2, b = b1 + b2

printOp 输出加法结果

计算差: a = a1 - a2, b = b1 - b2

printOp 输出减法结果

计算积: a = a1*a2 - b1*b2, b = a1*b2 + a2*b1

printOp 输出乘法结果

计算商: denom = a2^2 + b2^2, a = (a1*a2+b1*b2)/denom, b = (b1*a2-a1*b2)/denom

printOp 输出除法结果

程序结束