5月5日

1、复数类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

 

输出样例:

3

5.83095

7.7

代码部分:

#include<iostream>
#include<math.h>
using namespace std;
template < class T >
double dist(T a, T b) {
double distance = a - b;
return fabs(distance);

}
class Complex {
private:
double real;
double imag;

public:
Complex(double r = 0, double i = 0) {
real = r;
imag = i;
}

double operator-(Complex p) {
double distance = 0;
double t = (real - p.real) * (real - p.real) + (imag - p.imag) * (imag - p.imag);
distance = sqrt(t);
return distance;

}
};
int main() {
int ch = 0;
while (cin >> ch) {
if (ch == 0)
break;
else if (ch == 1) {
int a, b,distance;
cin >> a >>b;
distance=dist(a, b);
cout <<distance <<endl;

}
else if (ch == 2) {
float a, b;
double distance;
cin >> a >> b;
distance = dist(a, b);
cout << distance << endl;
}
else if (ch == 3) {
double a, b, c, d,distance;
cin >> a >> b >> c >> d;
Complex p1(a, b), p2(c, d);
distance = dist(p1, p2);
cout << distance << endl;
}
}
return 0;
}

2、两个类如下设计:类Time有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类Date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载>(<)(大于号或者小于号)的成员函数。

要求设计一个函数模板

template <class T>

double maxn(T x[], int len);

对int,float,time和date或者其他类型的数据,返回最大值。

main主函数有如下变量的定义:

int intArray[100];

double douArray[100];

Time timeArray[100];

Date dateArray[100];

其中,hh = 3600 ss, mm = 60 ss, year = 365 day, month = 30 day,对于Time和Date类型,数据在转换成ss或者day后进行运算。

输入格式:

每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Time类型,4为Date类型,若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据(hh1 mm1 ss1 hh2 mm2 ss2),以0结束。若为Date型数据,输入Date型数据(year1 month1 day1 year2 month2 day2),以0结束。输入-1时表示全体输入结束。

输出格式:

对每次输入,输出一个最大值。

样例输入:

1 4 5 9 3 7 0

2 4.4 5.5 6.9 3.2 2.7 0

3 18 21 22 18 20 31 18 21 49 0

4 2013 5 14 2013 5 15 2013 4 1 0

-1

样例输出:

9

6.9

18 21 49

2013 5 15

代码部分:

#include<iostream>
#include<cmath>
using namespace std;
template <class T>
T maxn(T x[], int len)
{
T a = x[0];
for (int i = 1; i <= len; i++)
{
if (a > x[i])
{
a = a;
}
else
{
a = x[i];
}
}
return a;
}
class Time {
private:
int hh;
int mm;
int ss;
public:

Time(int h=0, int m=0, int s=0)
{
hh = h;
mm = m;
ss = s;
}
int operator -(Time p)
{
int a = hh - p.hh;
int b = mm - p.mm;
int c = ss - p.ss;
return 3600* fabs(a) + 60 * fabs(b) + fabs(c);
}
int out()
{
return 3600 * hh + 60 * mm + ss;
}
};
class Date {
private:
int year;
int month;
int day;
public:
Date(int y=1, int m=1,int d=1)
{
year = y;
month = m;
day = d;
}
int operator >(Date p)
{
int a = year * 365 + month * 30 + day;
int b = p.year * 365 + p.month * 30 + p.day;
if (a > b)
return 1;
else
return 0;
}
int out()
{
return year * 365 + month * 30 + day;
}
};
int main()
{
int intArray[100];
double douArray[100];
Time timeArray[100];
Date dateArray[100];
int x=0;
int a;
double b;
while (cin >> x)
{
if (x == -1)
break;
else if (x == 1)
{
int i = 0;
while (cin >> a)
{
if (a == 0)
break;
else
{
intArray[i] = a;
i++;
}
}
cout << maxn(intArray, i);
}
else if (x == 2)
{
while (cin >> x)
{
if (x == 0)
break;
else
{
int i = 0;
while (cin >> b)
{
if (b == 0)
break;
else
{
intArray[i] = b;
i++;
}
}
cout << maxn(intArray, i);
}
}
}
else if (x == 3)
{
while (cin >> x)
{
if (x == 0)
break;
else
{
int i = 0;
int a, b, c;
while (cin >>a>>b>>c)
{
if (a == 0)
break;
else
{
int h, j;
Time k(a, b,c);
timeArray[i]=k;
i++;
}
}
Time p = maxn(douArray, i);
cout <<p.out() ;
}
}
}
else if (x == 4)
{
while (cin >> x)
{
if (x == 0)
break;

else
{
int a, b, c;
int i = 0;
while (cin >> a>>b>>c)
{
if (a == 0)
break;
else
{
Date l(a, b, c);
dateArray[i] = l;
i++;
}
}
Date p = maxn(dateArray, i);
cout << p.out();
}
}
}
}
return 0;
}

 

posted @ 2023-05-05 22:51  石铁生  阅读(19)  评论(0编辑  收藏  举报