7-36 复数四则运算 (15分)
本题要求编写程序,计算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.创建加减乘除字符数组ch[4],
2.创建结果字符串数组result[4][20];
3.switch求出各个算法的结果,并把结果以字符串形式存储进入result数组中;
4.根据b,d的正负来确定前边儿的输出形式,并组合输出最终结果;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <stdio.h> #include <math.h> int main() {<!-- --> char ch[4]={<!-- -->'+','-','*','/'}; char result[4][20]; double a,b,c,d; double x,y,z; int i; scanf( "%lf %lf %lf %lf", &a,&b,&c,&d ); for( i=0; i<4; i++ ) {<!-- --> switch(ch[i]) {<!-- --> case '+': {<!-- --> x = a+c; y = b+d; break; } case '-': {<!-- --> x = a-c; y = b-d; break; } case '*': {<!-- --> x = (a*c) - (b*d); y = (b*c) + (a*d); break; } case '/': {<!-- --> z = pow(c,2)+pow(d,2); x = (a*c+b*d)/z; y = (b*c-a*d)/z; break; } } if( fabs(x)<0.05 && fabs(y)<0.05 ) sprintf( result[i],"0.0" ); else if( fabs(x)<0.05 ) sprintf( result[i],"%.1fi", y ); else if( fabs(y)<0.05 ) sprintf( result[i],"%.1f", x ); else {<!-- --> if( y>0 ) sprintf( result[i],"%.1f+%.1fi", x, y ); else sprintf( result[i],"%.1f%.1fi" , x, y ); } if( b<0 && d<0 ) printf("(%.1f%.1fi) %c (%.1f%.1fi) = %s", a, b, ch[i], c, d, result[i] ); else if( b<0 ) printf("(%.1f%.1fi) %c (%.1f+%.1fi) = %s", a, b, ch[i], c, d, result[i] ); else if( d<0 ) printf("(%.1f+%.1fi) %c (%.1f%.1fi) = %s", a, b, ch[i], c, d, result[i] ); else printf("(%.1f+%.1fi) %c (%.1f+%.1fi) = %s", a, b, ch[i], c, d, result[i] ); if( i<3 ) printf("\n"); } return 0; } |