复数四则运算 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
- 复数四则运算 PAT
- 复数四则运算
- java求复数四则运算
- 复数的四则运算
- 6-17复数四则运算
- 6-17复数四则运算
- 6-17复数四则运算
- 结构-06. 复数四则运算
- 5-36 复数四则运算
- 复数的四则运算
- 5-36 复数四则运算
- 复数类的四则运算
- 【2039】复数四则运算
- <数据结构>复数四则运算
- 算法提高 复数四则运算
- 复数的四则运算
- ADV-120-复数四则运算
- 条件·复数四则运算
- hdu4521 线段树+dp
- 如何去掉XP系统中文件夹的只读属性
- Android窗口机制
- [leetcode Q36] valid sudoku
- 快速下单!简化EcStore的购物结算流程
- 复数四则运算 PAT
- 今日BBC
- [Guava源码日报](2)Strings分析
- 在职场该保持一种什么姿态?高调还是低调
- 数据模型(待填)
- 【ZOJ3229】Shoot the Bullet 有源汇上下界最大流
- VB.net中获取二维数组的元素个数
- AppBarLayout的使用
- windows下配置Mysql-5.7.9服务