1.试使用函数模板实现输出一个数组各元素的值,要求编写测试程序。
//使用模板函数
#include <iostream>
using namespace std;
//模板函数(通用函数)
template <class T> //表示T是一个模板参数类型
void print(T *array,int size)
{
for(int i=0;i<size;i++)
{
cout<<array[i];
if(i<(size-1))
{
cout<<",";
}
}
cout<<endl;
}
int main()
{
const int max=5;
int iArray[max]={10,20,30,40,50};
float fArray[max]={1.1,1.2,1.3,1.4,1.5};
const char *cArray[max]={"one","two","three","four","five"};
print(iArray,max); //调用时确定T的类型
print(fArray,max);
print(cArray,max);
return 0;
}
2.编写一个使用数组类模板 Array 对数组求最大值和求元素和的程序,要求编写出测 试程序。
【问题描述】
根据主函数代码,编写求一维数组中最大、最小元素及所有元素平均值的函数模板,使程序正确运行。
【输入形式】
【输出形式】
【样例输入】
【样例输出】
【样例说明】
【评分标准】
#include <iostream>
#include<iostream>
#include<cassert>
using namespace std;
//求一维数组中最大、最小元素及所有元素平均值的函数模板
template<typename T, int size = 10>
T GetValue(T *arr, T &max_value, T &min_value)
{
double sum = 0;
//取数组第一个元素为最大、最小值
max_value = min_value = arr[0];
for(int i=0;i<size;++i){
sum += *(arr+i);
if(*(arr+i)>max_value){ //比较找最大值
max_value = *(arr+i);
}
if(*(arr+i)<min_value){ //比较找最小值
min_value = *(arr+i);
}
}
return (sum/size); //返回平均值
}
int main()
{
int imax, imin;//分别保存最大、最小值
double* pd = new double[5];
assert(pd);
for (int i(0); i < 5; i++)
cin >> pd[i];
int iarry[] = { -20,30,40,50,33,5,8,9,-7,0 };
cout << GetValue<int>(iarry, imax, imin) << endl;//返回平均值
cout << imax << "," << imin << endl;//输出最大、最小值
double dmax, dmin;
cout <<GetValue<double, 5>(pd, dmax, dmin) << endl;//返回平均值
cout << dmax << "," << dmin << endl;//输出最大、最小值
return 0;
}
3. 编写程序,定义抽象基类 Shape(形状),由它派生出 2 个派生类: Circle(圆形)和 Square (正方形),用函数 ShowArea()分别显示各种图形的面积,要求用基类指针数组,数组的每个 元素指向一个派生类对象。
【问题描述】
根据给出的程序片段编程,使程序正确运行。由基类Shape派生出圆类Circle(数据成员:半径)、正方形类Square(数据成员:边长)、三角形类Triangle(数据成员:三条边边长),3个派生类都有输入和显示信息函数Input、Output,计算面积的函数Area,计算周长的函数Perim。【输入形式】
【输出形式】
【样例输入】
【样例输出】
【样例说明】
【评分标准】
#include <iostream>
#include<iomanip>
#include <cmath>
using namespace std;
const double PI = 3.14159;
//定义基类Shape
class Shape
{
public:
virtual double Area() const
{ return 0; }
virtual double Perim() const
{ return 0; }
virtual void Input() {}
virtual void Output() { }
static void SetFormat()
{ cout << setiosflags(ios::fixed) << setprecision(2); }
protected:
Shape(){}
};
class Circle :public Shape
{
protected:
double r, area, perim;
public:
void Input();
void Output();
double Area()const;
double Perim()const;
};
void Circle::Input()
{
cin >> r;
area = PI * r * r;
perim = 2 * PI * r;
}
void Circle::Output()
{
cout << perim << "," << area << endl;
}
double Circle::Area() const
{
return area;
}
double Circle::Perim() const
{
return perim;
}
class Square :public Shape
{
protected:
double k, area, perim;
public:
void Input();
void Output();
double Area()const;
double Perim()const;
};
void Square::Input()
{
cin >> k;
area = k * k;
perim = 4 * k;
}
void Square::Output()
{
cout << perim << "," << area << endl;
}
double Square::Area() const
{
return area;
}
double Square::Perim() const
{
return perim;
}
class Triangle :public Shape
{
protected:
double a, b, c, area, perim;
public:
void Input();
void Output();
double Area()const;
double Perim()const;
};
void Triangle::Input()
{
cin >> a >> b >> c;
double p = (a + b + c) / 2;
area = sqrt(p * (p - a) * (p - b) * (p - c));
perim = a + b + c;
}
void Triangle::Output()
{
cout << perim << "," << area << endl;
}
double Triangle::Area() const
{
return area;
}
double Triangle::Perim() const
{
return perim;
}
int main()
{
Circle circle;
Square square;
Triangle triangle;
Shape* pt[3] = { &circle,&square,&triangle };
Shape::SetFormat();
//输入各图形数据,空白字符隔开
for (int i = 0; i < 3; i++)
pt[i]->Input();
//输出各图形周长和面积,周长和面积值之间逗号隔开
for (int i = 0; i < 3; i++)
pt[i]->Output();
return 0;
}