PTA练习题

发布时间 2023-05-06 22:06:27作者: 新晋软工小白

复数类Complex有两个数据成员:a和b, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,用于计算两个复数的距离)的成员函数。 要求设计一个函数模板

template < class T >

double dist(T a, T b)

对int,float,Complex或者其他类型的数据,返回两个数据的间距。

以上类名和函数模板的形式,均须按照题目要求,不得修改

输入格式:

每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Complex类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为Complex型元素,输入两个Complex型数据(a1 b1 a2 b2),输入0时标志输入结束。

输出格式:

对每个输入,每行输出一个间距值。

输入样例:

1 2 5

3 2 4 5 9

2 2.2 9.9

0

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 template <class T>
 5 double dist(T a,T b)
 6 {
 7     return fabs(a-b); 
 8 }
 9 class Complex{
10     private:
11         double real;
12         double imag;
13     public:
14         Complex(double r,double i):real(r),imag(i){}
15         friend double operator - (Complex &c1,Complex &c2)
16         {
17             int i,j;
18             i=c1.real-c2.real;
19             j=c1.imag-c2.imag;
20             return sqrt(i*i+j*j);
21         }
22 };
23 int main()
24 {
25     int ty;
26     cin>>ty;
27     while(ty>0)
28     {
29         switch(ty)
30         {
31             case 1:
32                 int x,y;
33                 cin>>x>>y;
34                 cout<<dist(x,y)<<endl;
35                 break;
36             case 2:
37                 double x1,y1;
38                 cin>>x1>>y1;
39                 cout<<dist(x1,y1)<<endl;
40                 break;
41             case 3:
42                 double a,b,c,d;
43                 cin>>a>>b>>c>>d;
44                 Complex c1(a,b);
45                 Complex c2(c,d);
46                 cout<<dist(c1,c2);
47                 
48         }
49         cin>>ty; 
50     }
51 }