0
点赞
收藏
分享

微信扫一扫

C++编程练习||实现两个类:集合类和复数类。输出:按照复数模的大小从小到大输出

题目:实现复数集合类

   要求:

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;
}

运行结果:

C++编程练习||实现两个类:集合类和复数类。输出:按照复数模的大小从小到大输出_C++

C++编程练习||实现两个类:集合类和复数类。输出:按照复数模的大小从小到大输出_虚数_02

举报

相关推荐

0 条评论