题目:实现复数集合类
要求:
1、实现两个类:集合类(Cassemblage )和复数类(Cmycomplex)。
2、输入:分别输入集合中元素个数和元素(实部和虚部)。
3、输出:按照复数模的大小从小到大输出,不考虑两个复数模相等的情况。 当为空集时,输出empty。 对于复数虚部为负时,输出形如(1-1i)。
4、集合中不能出现相同元素。
5、实现集合的并(+)、交(&)、差(-)。
样例1:
输入
3
1 2
2 4
1 -1
4
1 3
2 4
2 2
1 2
输出
(1-1i) (1+2i) (2+2i) (1+3i) (2+4i)
(1+2i) (2+4i)
(1-1i)
样例2:
输入
3
1 2
2 4
3 2
3
1 2
2 4
3 2
输出
(1+2i) (3+2i) (2+4i)
(1+2i) (3+2i) (2+4i)
empty
#include <iostream>
#include <cmath>
using namespace std;
class Cmycomplex {
private:
double a;
double b;
public:
Cmycomplex(int c_a = 0, int c_b = 0) : a(c_a), b(c_b) {};
void Set(int c_a, int c_b);
double getA();
double getB();
friend istream& operator>> (istream& in, Cmycomplex& cc);
friend ostream& operator<< (ostream& out, const Cmycomplex& cc);
int operator== (Cmycomplex &cc);
};
void Cmycomplex::Set(int c_a, int c_b) {
a = c_a;
b = c_b;
}
double Cmycomplex::getA() {
return a;
}
double Cmycomplex::getB() {
return b;
}
istream& operator>> (istream& in, Cmycomplex& cc) {
in >> cc.a >> cc.b;
return in;
}
ostream& operator<< (ostream& out, const Cmycomplex& cc) {
if (cc.b < 0) {
out << "(" << cc.a << cc.b << "i)";
} else {
out << "(" << cc.a << "+" << cc.b << "i)";
}
return out;
}
int Cmycomplex::operator==(Cmycomplex &cc) {
if (a == cc.a && b == cc.b) {
return 1;
} else {
return 0;
}
}
template <class T>
class Cassemblage {
private:
T elem[1000];
int count;
public:
Cassemblage() : count(0) {};
void Set(T *c_elem, int c_count);
Cassemblage operator+ (Cassemblage &c);
Cassemblage operator& (Cassemblage &c);
Cassemblage operator- (Cassemblage &c);
void Show();
};
template <class T>
void Cassemblage<T>::Set(T *c_elem, int c_count) {
// 初始对象
for (int i = 0; i < c_count; i++) {
if (count == 0) {
elem[count++] = c_elem[i];
} else {
int flag = 1;
for (int j = 0; j < count; j++) {
if (c_elem[i] == elem[j]) {
flag = 0;
continue;
}
}
if (flag) {
elem[count++] = c_elem[i];
}
}
}
// 对象元素排序
for (int i = 0; i < count; i++) {
for (int j = 1; j < (count - i); j++) {
if ((elem[j].getA() * elem[j].getA() + elem[j].getB() * elem[j].getB()) < ((elem[j-1].getA() * elem[j-1].getA() + elem[j-1].getB() * elem[j-1].getB()))) {
T temp = elem[j];
elem[j] = elem[j-1];
elem[j-1] = temp;
}
}
}
}
template <class T>
Cassemblage<T> Cassemblage<T>::operator+ (Cassemblage &c) {
Cassemblage<T> t;
T t_elem[1000];
int t_count = 0;
for (int i = 0; i < count; i++) {
t_elem[t_count++] = elem[i];
}
for (int i = 0; i < c.count; i++) {
t_elem[t_count++] = c.elem[i];
}
t.Set(t_elem, t_count);
return t;
}
template <class T>
Cassemblage<T> Cassemblage<T>::operator& (Cassemblage &c) {
Cassemblage<T> t;
T t_elem[1000];
int t_count = 0;
for (int i = 0; i < count; i++) {
for (int j = 0; j < c.count; j++) {
if(elem[i] == c.elem[j]) {
t_elem[t_count++] = elem[i];
}
}
}
t.Set(t_elem, t_count);
return t;
}
template <class T>
Cassemblage<T> Cassemblage<T>::operator- (Cassemblage &c) {
Cassemblage<T> t;
T t_elem[1000];
int t_count = 0;
for (int i = 0; i < count; i++) {
int flag = 1;
for (int j = 0; j < c.count; j++) {
if(elem[i] == c.elem[j]) {
flag = 0;
}
}
if (flag) {
t_elem[t_count++] = elem[i];
}
}
t.Set(t_elem, t_count);
return t;
}
template <class T>
void Cassemblage<T>::Show() {
if (count != 0) {
for (int i = 0; i < count; i++) {
cout << elem[i] << " ";
}
} else {
cout << "empty";
}
}
int main() {
Cassemblage <Cmycomplex> z1, z2, x1, x2, x3;
int i, n1, n2;
Cmycomplex a1[1000], a2[1000];
cin >> n1;
for(i=0; i<n1; i++) {
cin >> a1[i];
}
z1.Set(a1, n1);
cin >> n2;
for(i=0; i<n2; i++) {
cin >> a2[i];
}
z2.Set(a2, n2);
x1=z1+z2;
x1.Show();
cout << endl;
x2=z1&z2;
x2.Show();
cout << endl;
x3=z1-z2;
x3.Show();
return 0;
}
运行结果: