1、已知下列主函数:
int main()
{
cout<<min(10,5,3)<<endl;
cout<<min(10.2,5.6,3.8)<<endl;
cout<<min('a','b','c')<<endl;
return 0;
}
声明求3个数中最小者的函数模板,并写出调用此函数模板的完整程序。
#include<iostream>
using namespace std;
template<class t>
t min(t a,t b,t c)
{
t m;
m=a;
if(m>b)m=b;
if(m>c)m=c;
return m;
}
int main()
{
cout<<min(10,5,3)<<endl;
cout<<min(10.2,5.6,3.8)<<endl;
cout<<min('a','b','c')<<endl;
return 0;
}
2、编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型也可以是双精度类型。
#include<iostream>
using namespace std;
template<class t>
t max(t a[],int n)
{
t max=a[0];
for(int i=0;i<n;i++)
{
if(a[i]>max)
max=a[i];}return max;
}
template<class t>
t min(t a[],int n)
{
t min=a[0];
for(int i=0;i<n;i++)
{
if(a[i]<min)
min=a[i];
}return min;
}
int main()
{
int a[3]={3,5,9};
double b[3]={1.2,5.6,6.9};
char c[3]={'a','c','y'};
cout<<"数组a的最大元素为:"<<max(a,3)<<endl;
cout<<"数组a的最小元素为:"<<min(a,3)<<endl;
cout<<"数组b的最大元素为:"<<max(b,3)<<endl;
cout<<"数组b的最小元素为:"<<min(b,3)<<endl;
cout<<"数组c的最大元素为:"<<max(c,3)<<endl;
cout<<"数组c的最小元素为:"<<min(c,3)<<endl;
return 0;
}
3、编写一个函数模板,使用冒泡排序将数组内容由小到大排列并打印出来,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型也可以是双精度型。
#include<iostream>
using namespace std;
template <typename T>
void sort(T *a,int n)
{
T t;
int i,j;
for(j=0;j<n;j++)
for(i=0;i<n-j-1;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
cout<<"排序后为:"<<endl;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int main()
{
int b[5]={2,5,3,7,6};
double c[4]={1.2,3.3,6.1,3.5};
sort(b,5);
sort(c,4);
return 0;
}
4、编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。
【提示】
设计一个类模板
template<class Type>
class Array
{
……
};
具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别是int型和double型的两个模板类,分别对整型数组与双精度数组完成所要求的操作。
#include<iostream>
using namespace std;
template<class tape>
class array
{
private:
tape *a;
public:
array(tape *b)
{
a=b;
cout<<"原数组为:"<<endl;
for(int i=0;i<5;i++)
cout<<a[i]<<' ';cout<<endl;
}
void paixu()
{
int i,j;tape temp;
tape c[5];
for(i=0;i<5;i++)
{
c[i]=a[i];
}
cout<<"数组从小到大排序为:"<<endl;
for(j=0;j<5;j++)
for(i=0;i<5-j-1;i++)
{
if(c[i]>c[i+1])
{
temp=c[i];
c[i]=c[i+1];
c[i+1]=temp;
}
}
for(i=0;i<5;i++)
cout<<c[i]<<" ";cout<<endl;
}
void daozhi()
{
tape c[5];
for(int i=0;i<5;i++)
{
c[i]=a[i];
}
cout<<"数组倒置后为:"<<endl;
for(i=4;i>=0;i--)
cout<<c[i]<<" ";cout<<endl;
}
void chazhao()
{
tape h;
cout<<"请输入要查找的数字:"<<endl;
cin>>h;
for(int i=0;i<5;i++)
{
if(a[i]==h)
cout<<"所查找的数字为第"<<i+1<<"个数字"<<endl;
}
}
void qiuhe()
{
tape t=0;
for(int i=0;i<5;i++)
{
t+=a[i];
}
cout<<"数组求和为:"<<t<<endl;
}
};
int main()
{
int s[5]={2,3,5,1,4};
array<int>array1(s);
array1.paixu();
array1.daozhi();
array1.chazhao();
array1.qiuhe();
double d[5]={2.1,4.1,3.1,1.1,5.1};
array<double>array2(d);
array2.paixu();
array2.daozhi();
array2.chazhao();
array2.qiuhe();
return 0;
}
5、编写一个程序,求输入数的平方根。设置异常处理,对输入负数的情况给出提示。
#include<iostream>
#include<cmath>
using namespace std;
double f(double a)
{
if(a<0)
throw 1;
return sqrt(a);
}
int main()
{
int c;
cout<<"请输入一个数:";
cin>>c;
try
{
cout<<c<<"的平方根是:"<<f(c)<<endl;
}
catch(int)
{
cout<<"输入的数是负数!"<<endl;
}
return 0;
}