复数四则运算 PAT

来源:互联网 发布:阿凡达妹妹实力知乎 编辑:程序博客网 时间:2024/05/21 10:41

原题如下:

本题要求编写程序,计算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
该题需要注意的地方有以下几点:

1、判断ch1, ch2, ch3的正负,也即b1、b2和计算结果的虚部是否小于零;

2、需要将输入的四个值保留1位小数输出;

3、计算结果不是用保留了1位小数的四个值,而是用原来的输入值,比如第一个测试用例的加,如果按照四舍五入之后的数进行计算的话,所得虚部应该是8.2的,而用原来的3.08+5.06得到的值却是8.1;

4、在对double型数据进行非零判断时不能用a == 0或者a!=0这样的语句(a是double型的),而应该用fabs(a - 0) < 0.05 和 fabs(a - 0) >= 0.05;

代码如下:

#include <stdio.h>#include <math.h>int main(){double c1, c2, temp, ratio[4], orignalratio[4];int i;char ch1, ch2, ch3, Operator[4] = {'+', '-', '*', '/'};for (i = 0; i < 4; i++)//输入四个系数,并且保留一位小数位{scanf("%lf", &ratio[i]);orignalratio[i] = ratio[i];if (ratio[i] < 0){temp = -ratio[i];ratio[i] = (-1) * (int)(temp * 10 + 0.5) / 10.0;}else{temp = ratio[i];ratio[i] = (int)(temp * 10 + 0.5) / 10.0;}}if (ratio[1] < 0)ch1 = '-';elsech1 = '+';if (ratio[3] < 0)ch2 = '-';elsech2 = '+';for (i = 0; i < 4; i++){switch (Operator[i]){case '+':c1 = orignalratio[0] + orignalratio[2];c2 = orignalratio[1] + orignalratio[3];if (c2 < 0)ch3 = '-';elsech3 = '+';if (fabs(c1 - 0) < 0.05 && fabs(c2 - 0) >= 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c2);else if(fabs(c1 - 0) >= 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1);else if(fabs(c1 - 0) < 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = 0.0\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]));elseprintf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf%c%.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1, ch3, fabs(c2));break;case '-':c1 = orignalratio[0] - orignalratio[2];c2 = orignalratio[1] - orignalratio[3];if (c2 < 0)ch3 = '-';elsech3 = '+';if (fabs(c1 - 0) < 0.05 && fabs(c2 - 0) >= 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c2);else if (fabs(c1 - 0) >= 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1);else if (fabs(c1 - 0) < 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = 0.0\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]));elseprintf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf%c%.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1, ch3, fabs(c2));break;case '*':c1 = orignalratio[0] * orignalratio[2] - orignalratio[1] * orignalratio[3];c2 = orignalratio[0] * orignalratio[3] + orignalratio[1] * orignalratio[2];if (c2 < 0)ch3 = '-';elsech3 = '+';if (fabs(c1 - 0) < 0.05 && fabs(c2 - 0) >= 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c2);else if (fabs(c1 - 0) >= 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1);else if (fabs(c1 - 0) < 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = 0.0\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]));elseprintf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf%c%.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1, ch3, fabs(c2));break;case '/':c1 = (orignalratio[0] * orignalratio[2] + orignalratio[1] * orignalratio[3]) / (orignalratio[2] * orignalratio[2] + orignalratio[3] * orignalratio[3]);c2 = (-orignalratio[0] * orignalratio[3] + orignalratio[1] * orignalratio[2]) / (orignalratio[2] * orignalratio[2] + orignalratio[3] * orignalratio[3]);if (c2 < 0)ch3 = '-';elsech3 = '+';if (fabs(c1 - 0) < 0.05 && fabs(c2 - 0) >= 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c2);else if (fabs(c1 - 0) >= 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1);else if (fabs(c1 - 0) < 0.05 && fabs(c2 - 0) < 0.05)printf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = 0.0\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]));elseprintf("(%.1lf%c%.1lfi) %c (%.1lf%c%.1lfi) = %.1lf%c%.1lfi\n", ratio[0], ch1, fabs(ratio[1]), Operator[i], ratio[2], ch2, fabs(ratio[3]), c1, ch3, fabs(c2));break;default :break;}}return 0;}





0 0
原创粉丝点击