*结构-06. 复数四则运算

  1 /*
  2  * Main.c
  3  * F6-结构-06. 复数四则运算
  4  *  Created on: 2014年8月26日
  5  *      Author: Boomkeeper
  6  ********部分通过***********
  7  */
  8
  9 #include <stdio.h>
 10 #include <math.h>
 11
 12 #define EPSINON 0.1
 13
 14 /*
 15  * 复数结构体,c1、c2对应于题目中的c1、c2
 16  */
 17 struct complexNumber {
 18     float real;
 19     float imaginary;
 20 } c1, c2;
 21
 22 /*
 23  * 按照“(a1+b1i) 运算符 (a2+b2i) = 结果”的格式顺序输出2个复数
 24  * ch对应于"+" "-" "*" "/"4个运算符
 25  */
 26 void printComplex(struct complexNumber c1, char ch, struct complexNumber c2) {
 27
 28     if (c1.imaginary < 0) {
 29         if (c2.imaginary < 0)
 30             printf("(%.1f%.1fi) %c (%.1f%.1fi) = ", c1.real, c1.imaginary, ch,
 31                     c2.real, c2.imaginary);
 32         if (c2.imaginary > 0)
 33             printf("(%.1f%.1fi) %c (%.1f+%.1fi) = ", c1.real, c1.imaginary, ch,
 34                     c2.real, c2.imaginary);
 35     } else if (c1.imaginary > 0) {
 36         if (c2.imaginary < 0)
 37             printf("(%.1f+%.1fi) %c (%.1f%.1fi) = ", c1.real, c1.imaginary, ch,
 38                     c2.real, c2.imaginary);
 39         if (c2.imaginary > 0)
 40             printf("(%.1f+%.1fi) %c (%.1f+%.1fi) = ", c1.real, c1.imaginary, ch,
 41                     c2.real, c2.imaginary);
 42     }
 43 }
 44
 45 /*
 46  * 输出2个复数的和、差、积、商
 47  */
 48 void printResult(float re, float im) {
 49
 50     if (fabs(re) < EPSINON)
 51         re = 0;
 52     if (fabs(im) < EPSINON)
 53         im = 0;
 54
 55     if (re == 0 && im == 0)
 56         printf("0.0\n");
 57     else {
 58         if (re != 0 && im > 0)
 59             printf("%.1f+%.1fi\n", re, im);
 60         if (re != 0 && im < 0)
 61             printf("%.1f%.1fi\n", re, im);
 62         if (re != 0 && im == 0)
 63             printf("%.1f\n", re);
 64         if (re == 0 && im != 0)
 65             printf("%.1fi\n", im);
 66     }
 67 }
 68
 69 int main(void) {
 70
 71     float re = 0, im = 0; //临时变量,计算实部和虚部
 72
 73     scanf("%f %f %f %f", &c1.real, &c1.imaginary, &c2.real, &c2.imaginary);
 74
 75     //和
 76     printComplex(c1, ‘+‘, c2);
 77     re = c1.real + c2.real;
 78     im = c1.imaginary + c2.imaginary;
 79     printResult(re, im);
 80
 81     //差
 82     printComplex(c1, ‘-‘, c2);
 83     re = c1.real - c2.real;
 84     im = c1.imaginary - c2.imaginary;
 85     printResult(re, im);
 86
 87     //积
 88     printComplex(c1, ‘*‘, c2);
 89     re = c1.real * c2.real - c1.imaginary * c2.imaginary;
 90     im = c1.real * c2.imaginary + c1.imaginary * c2.real;
 91     printResult(re, im);
 92
 93     //商
 94     printComplex(c1, ‘/‘, c2);
 95     re = (c1.real * c2.real + c1.imaginary * c2.imaginary)
 96             / (c2.real * c2.real + c2.imaginary * c2.imaginary);
 97     im = (c1.imaginary * c2.real - c1.real * c2.imaginary)
 98             / (c2.real * c2.real + c2.imaginary * c2.imaginary);
 99     printResult(re, im);
100
101     return 0;
102 }

1.这个题目最让我抓心的是复数的虚部的符号的输出,复数四则运算还好计算,就是这个正负号,一不小心就乱了;

2.浮点数与0的比较,针对这道题目,因为输出结果只需要精确到0.1,所以<=0.1 && >=-0.1就判断为0。起初我参考了其他文章,按照0.00001来判断,输出结果总是不合题意。

题目链接:

http://pat.zju.edu.cn/contests/basic-programming/%E7%BB%93%E6%9E%84-06

参考:

http://blog.csdn.net/rabbit8848/article/details/30284651

http://blog.sina.com.cn/s/blog_64a475370101119h.html

时间: 2024-12-22 12:27:06

*结构-06. 复数四则运算的相关文章

结构-06. 复数四则运算(15)

1 #include <cstdio> 2 #include <cmath> 3 #define EPS 1e-1 4 5 void print1(double a,double b,double c,double d,char op) 6 { 7 printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = ",a,b,op,c,d); 8 } 9 10 void print2(double a,double b) 11 { 12 if(fab

7-36 复数四则运算(15 分)

7-36 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

7-36 复数四则运算

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

蓝桥杯 算法提高 6-17 复数四则运算

算法提高 6-17复数四则运算 时间限制:1.0s   内存限制:512.0MB 设计复数库,实现基本的复数加减乘除运算. 输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔:输出时按a+bi的格式在屏幕上打印结果.参加样例输入和样例输出. 注意考虑特殊情况,无法计算时输出字符串"error". 样例输入 2 4 * -3 2 样例输出 -14-8i 样例输入 3 -2 + -1 3 样例输出 2+1i 1 #include<iostream> 2 #inc

算法提高 6-17复数四则运算

时间限制:1.0s   内存限制:512.0MB 设计复数库,实现基本的复数加减乘除运算. 输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔:输出时按a+bi的格式在屏幕上打印结果.参加样例输入和样例输出. 注意考虑特殊情况,无法计算时输出字符串"error". 样例输入 2 4 * -3 2 样例输出 -14-8i 样例输入 3 -2 + -1 3 样例输出 2+1i 有一组数据就是通不过. #include <iostream> #include &l

算法笔记_156:算法提高 6-17复数四则运算(Java)

目录 1 问题描述 2 解决方案   1 问题描述 设计复数库,实现基本的复数加减乘除运算. 输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔:输出时按a+bi的格式在屏幕上打印结果.参加样例输入和样例输出. 注意考虑特殊情况,无法计算时输出字符串"error". 样例输入 2 4 * -3 2 样例输出 -14-8i 样例输入 3 -2 + -1 3 样例输出 2+1i 2 解决方案 此题判断错误主要在除法运算上,除法运算有可能获得小数,所以在获取输入数字时,就得用

6-17复数四则运算 --- 蓝桥杯

设计复数库,实现基本的复数加减乘除运算. 输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符分隔:输出时按a+bi的格式在屏幕上打印结果.参加样例输入和样例输出. 注意考虑特殊情况,无法计算时输出字符串"error". 样例输入 2 4 * -3 2 样例输出 -14-8i 样例输入 3 -2 + -1 3 样例输出 2+1i 解题分析: 复数运算法则 http://baike.baidu.com/link?url=i7MKOzPCWS-sN0-NEuy_4kVejT1TZ

极其简单的复数类,只是不想再推演一遍复数四则运算

class Complex { private: double real_ = 0.0; double imag_ = 0.0; public: Complex() = default; explicit Complex(double real, double imag): real_(real), imag_(imag) {} Complex(const Complex& other) { real_ = other.real_; imag_ = other.imag_; } Complex(

复数的复习

理解复数,首先要理解虚数,在实数范围内,负数开方无解,于是引入虚数的概念,虚数i2=-1,实数与虚数组成的数叫复数. 形式:a+bi,a为实部,b为虚部,i为虚数单位,这样实数可以看做虚部为0的复数,虚数可以看做实部为0的复数. 虚数的几何解释 假设我们有一个坐标系,横轴为实数,纵轴为虚数,将i想象成沿坐标轴逆时针旋转90°,如下图 实数1经过一次90°旋转结果为i,再旋转90°结果为-1. 如果是顺时针旋转,如图可知,旋转-90°得到-i,再旋转-90°结果-1,与逆时针结果相同,由此可知,s