PTA基础编程题目集 7-36 复数四则运算(C语言实现)
摘要本文为 PTA 复数四则运算题解介绍了复数加减乘除的格式要求与 C 语言实现思路并给出完整代码。题目描述本题要求编写程序计算 2 个复数的和、差、积、商。输入格式输入在一行中按照 a1 b1 a2 b2 的格式给出 2 个复数 C1 a1 b1i 和 C2 a2 b2i 的实部和虚部。题目保证C2不为0。输出格式分别在 4 行中按照 (a1b1i) 运算符 (a2b2i) 结果的格式顺序输出 2 个复数的和、差、积、商数字精确到小数点后 1 位。如果结果的实部或者虚部为 0则不输出。如果结果为 0则输出 0.0。输入样例2 3.08 -2.04 5.061 1 -1 -1.01输出样例(2.03.1i) (-2.05.1i) 8.1i (2.03.1i) - (-2.05.1i) 4.0-2.0i (2.03.1i) * (-2.05.1i) -19.73.8i (2.03.1i) / (-2.05.1i) 0.4-0.6i(1.01.0i) (-1.0-1.0i) 0.0 (1.01.0i) - (-1.0-1.0i) 2.02.0i (1.01.0i) * (-1.0-1.0i) -2.0i (1.01.0i) / (-1.0-1.0i) -1.0代码部分实现#includestdio.h// 引入标准输入输出头文件#includemath.h// 引入数学函数头文件用于 fabs 求绝对值voidprintComplex(doublea,doubleb){// 打印复数的格式化输出函数if(fabs(a)0.05fabs(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(b0){// 虚部为正数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;// 定义结果复数的实部和虚部aa1a2;// 计算和的实部bb1b2;// 计算和的虚部printOp(a1,b1,,a2,b2,a,b);// 打印加法运算aa1-a2;// 计算差的实部bb1-b2;// 计算差的虚部printOp(a1,b1,-,a2,b2,a,b);// 打印减法运算aa1*a2-b1*b2;// 计算积的实部(a1*a2 - b1*b2)ba1*b2a2*b1;// 计算积的虚部(a1*b2 a2*b1)printOp(a1,b1,*,a2,b2,a,b);// 打印乘法运算doubledenoma2*a2b2*b2;// 计算除法分母C2模的平方a(a1*a2b1*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 b2printOp 输出加法结果计算差: a a1 - a2, b b1 - b2printOp 输出减法结果计算积: a a1*a2 - b1*b2, b a1*b2 a2*b1printOp 输出乘法结果计算商: denom a2^2 b2^2, a (a1*a2b1*b2)/denom, b (b1*a2-a1*b2)/denomprintOp 输出除法结果程序结束