模板与异常处理

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;

}

posted @ 2018-02-12 09:52  夜游星  阅读(993)  评论(0编辑  收藏  举报