7-36 复数四则运算
来源:互联网 发布:机器码加密软件 编辑:程序博客网 时间:2024/05/30 04:24
本题要求编写程序,计算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
我又崩溃了。。。我只改了第77行void printResult(COMPLEX x, COMPLEX y, COMPLEX rlt, char f)输出格式的又不能AC。
当void printResult(COMPLEX x, COMPLEX y, COMPLEX rlt, char f)这样的时候
void printResult(COMPLEX x, COMPLEX y, COMPLEX rlt, char f){ printf("("); printComplex(x); printf(")"); printf(" %c ", f); printf("("); printComplex(y); printf(")"); printf(" = "); printComplex(rlt);}
void printResult(COMPLEX x, COMPLEX y, COMPLEX rlt, char f){ printf("("); if(x.imaginary>=0) printf("%.1f+%.1fi", x.real, x.imaginary); else printf("%.1f-%.1fi", x.real, x.imaginary); printf(")"); printf(" %c ", f); printf("("); printComplex(y); if(y.imaginary>=0) printf("%.1f+%.1fi", y.real, y.imaginary); else printf("%.1f%.1fi", y.real, y.imaginary); printf(")"); printf(" = "); printComplex(rlt);}
WTF,用例2干嘛,我格式哪里又错了????
以下是全部代码
#include <stdio.h>#include <stdlib.h>typedef struct{double real;double imaginary;}COMPLEX;double myRounding(const double x, int n);COMPLEX buildComplex(double x, double y);COMPLEX addComplex(COMPLEX x, COMPLEX y);COMPLEX subComplex(COMPLEX x, COMPLEX y);COMPLEX mutiComplex(COMPLEX x, COMPLEX y);COMPLEX divComplex(COMPLEX x, COMPLEX y);void printComplex(COMPLEX x);void printResult(COMPLEX x, COMPLEX y, COMPLEX rlt, char f);int main(){ double a, b, c, d; COMPLEX cpx1; COMPLEX cpx2; COMPLEX rlt; scanf("%lf %lf %lf %lf", &a, &b, &c, &d); cpx1 = buildComplex( a, b); cpx2 = buildComplex( c, d); rlt = addComplex(cpx1, cpx2); printResult(cpx1, cpx2, rlt, '+'); printf("\n"); rlt = subComplex(cpx1, cpx2); printResult(cpx1, cpx2, rlt, '-'); printf("\n"); rlt = mutiComplex(cpx1, cpx2); printResult(cpx1, cpx2, rlt, '*'); printf("\n"); rlt = divComplex(cpx1, cpx2); printResult(cpx1, cpx2, rlt, '/'); printf("\n"); system("pause");}COMPLEX divComplex(COMPLEX x, COMPLEX y){ COMPLEX rlt; rlt.real = (x.real*y.real+x.imaginary*y.imaginary)/(y.real*y.real+y.imaginary*y.imaginary); rlt.imaginary = (x.imaginary*y.real-x.real*y.imaginary)/(y.real*y.real+y.imaginary*y.imaginary); return rlt;}COMPLEX subComplex(COMPLEX x, COMPLEX y){ COMPLEX rlt; rlt.real = x.real - y.real; rlt.imaginary = x.imaginary - y.imaginary; return rlt;}COMPLEX mutiComplex(COMPLEX x, COMPLEX y){ COMPLEX rlt; rlt.real = x.real*y.real - x.imaginary*y.imaginary; rlt.imaginary = x.real*y.imaginary + x.imaginary*y.real; return rlt;}COMPLEX addComplex(COMPLEX x, COMPLEX y){ COMPLEX rlt; rlt.real = x.real + y.real; rlt.imaginary = x.imaginary + y.imaginary; return rlt;}COMPLEX buildComplex(double x, double y){ COMPLEX rlt; rlt.real = x; rlt.imaginary = y; return rlt;}void printResult(COMPLEX x, COMPLEX y, COMPLEX rlt, char f){ printf("("); printComplex(x);// if(x.imaginary>=0)// printf("%.1f+%.1fi", x.real, x.imaginary);// else// printf("%.1f-%.1fi", x.real, x.imaginary); printf(")"); printf(" %c ", f); printf("("); printComplex(y);// if(y.imaginary>=0)// printf("%.1f+%.1fi", y.real, y.imaginary);// else// printf("%.1f%.1fi", y.real, y.imaginary); printf(")"); printf(" = "); printComplex(rlt);}void printComplex(COMPLEX x){ x.real = myRounding(x.real, 1); x.imaginary = myRounding(x.imaginary, 1); if(x.real==0 && x.imaginary==0) { printf("0.0"); } if(x.real!=0 && x.imaginary==0) { printf("%.1f", x.real); } if(x.real==0 && x.imaginary!=0) { printf("%.1fi", x.imaginary); } if(x.real!=0 && x.imaginary>0) { printf("%.1f+%.1fi", x.real, x.imaginary); } if(x.real!=0 && x.imaginary<0) { printf("%.1f%.1fi", x.real, x.imaginary); }}/** 求double型的小数位的四舍五入 * x为待操作数 * n表示求小数点的后n位 * \return 为处理好的数 */double myRounding(const double x, int n){ int i; double tmp = 1.0; double rlt = x; if(x<0) { rlt = -rlt; } for(i=0; i<n; i++) { tmp *=10.0; } rlt = (int)(rlt*tmp+0.5)/tmp; if(x<0) { rlt = -rlt; } return rlt;}
阅读全文
0 0
- 7-36 复数四则运算
- 7-36 复数四则运算(15 分)
- 5-36 复数四则运算
- 5-36 复数四则运算
- PTA 5-36 复数四则运算
- 复数四则运算
- 5-36 复数四则运算 c语言
- 5-36 复数四则运算 (15分)
- 5-36 复数四则运算 (15分)
- 5-36 复数四则运算 (15分)
- java求复数四则运算
- 复数的四则运算
- 6-17复数四则运算
- 6-17复数四则运算
- 6-17复数四则运算
- 结构-06. 复数四则运算
- 复数四则运算 PAT
- 复数的四则运算
- WPF的一点理解
- 网络编程(TCP)
- Laravel关系模型指定条件查询
- 用几张图片教你相关的IT知识
- Java并发编程——线程池的使用(一) 简单创建线程池
- 7-36 复数四则运算
- Java8新特性之Optional详解
- H5跳转到APP指定页面
- SpringMVC的各种参数绑定方式
- 只要7步就能画出专业的PERT图,你确定不看看?
- 深度学习之数学基础(2)
- iOS 用最简单的方法做缓存
- SparkSql之DataFrame操作
- ORACLE定期清理INACTIVE会话