当前位置:文档之家› 模板与异常处理

模板与异常处理

实验14 模板与异常处理一、实验目的1.理解函数模板和类模板的概念。

2.会编写包含函数模板和类模板的程序。

3.正确理解C++的异常处理机制。

4.掌握异常处理的编程特点。

5.了解异常分类层次,常见系统异常。

6.学习自定义异常的定义及方法,异常的抛出与处理。

二、实验内容1.编写一个求绝对值的函数模板,并测试。

2.请将冒泡排序函数改写成为模板函数并编写一个程序进行测试。

3.编写一个任意类类型AnyType模板,并请编写一个程序来使用该AnyType类模板。

4.编写求阶乘n!的函数,当用户的输入太大时(如51),会出现错误,使用异常处理机制来解决这一问题;如果n小于零,也抛掷一个异常进行处理。

5.编程并观察当库函数sqrt()的参数为负数,log()的参数为0时,系统会出现什么情况,请解决之。

6. 编写一个程序,用于根据用户输入的命令行参数数量来计算长方形、正方形、三角形的面积。

如果输入的参数为一个、二个、三个则它们应分别对应正方形、长方形、三角形,如果没有参数,则通过异常处理方法显示错误消息。

三实验程序及结果1、#include<iostream.h>template <typename T>T fab(T a){if(a>0)return a;elsereturn -a;}void main(){double a;cout<<"请输入一个数:"<<'\n';cin>>a;cout<<a<<"的绝对值为:"<<fab(a)<<'\n';cout<<"感谢使用本程序哦!"<<'\n';}2、#include<iostream>using namespace std;template <typename T>void paixu(T *a,int i){for(int j=0;j<i;j++)for(int k=0;k<=j-1;k++)if(a[k]>a[k+1]){T m;m=a[k];a[k]=a[k+1];a[k+1]=m;}};void main(){int int_a[6]={12,15,1,4,798,20};float float_a[6]={1.1,2.2,1.3,15,156};cout<<"整型排序之前为:"<<'\n';for(int i=0;i<6;i++)cout<<int_a[i]<<'\t';paixu(int_a,6);cout<<'\n'<<"整型排序之后为:"<<'\n';for( i=0;i<6;i++)cout<<int_a[i]<<'\t';cout<<'\n'<<"浮点型排序之前为:"<<'\n';for( i=0;i<5;i++)cout<<float_a[i]<<'\t';paixu(float_a,5);cout<<'\n'<<"浮点型排序之后为:"<<'\n';for(i=0;i<5;i++)cout<<float_a[i]<<'\t';cout<<'\n'<<"感谢使用本程序哦!"<<'\n'; }3、#include<iostream>using namespace std;template <typename T>class shuzu{private:T a[12];int b; int b;public:shuzu(){cout<<"请输入类中数组元素的个数:"<<'\n';cin>>b;cout<<"请对数组的元素初始化:"<<'\n';for(int i=0;i<b;i++)cin>>a[i];}void output(){for(int i=0;i<b;i++)cout<<a[i]<<'\t';cout<<'\n';}void paixu(){int b;public:shuzu(){cout<<"请输入类中数组元素的个数:"<<'\n'; cin>>b;cout<<"请对数组的元素初始化:"<<'\n';for(int i=0;i<b;i++)cin>>a[i];}void output(){for(int i=0;i<b;i++)cout<<a[i]<<'\t';cout<<'\n';}void paixu(){for(int j=0;j<b;j++)for(int k=0;k<=j-1;k++)if(a[k]>a[k+1]){T m;m=a[k];a[k]=a[k+1];a[k+1]=m;}}};void main(){cout<<"整型数组:"<<'\n';shuzu<int> a;cout<<"整型排序之前为:"<<'\n';a.output();a.paixu();cout<<'\n'<<"整型排序之后为:"<<'\n';a.output();cout<<"浮点型数组:"<<'\n';shuzu<float>b;cout<<"浮点型排序之前为:"<<'\n';b.output();b.paixu();cout<<'\n'<<"浮点型排序之后为:"<<'\n';b.output();cout<<"字符型数组:"<<'\n';shuzu<char>c;cout<<"字符型排序之前为:"<<'\n';c.output();c.paixu();cout<<'\n'<<"字符型排序之后为:"<<'\n';c.output();cout<<'\n'<<"感谢使用本程序哦!"<<'\n'; }shuzu<float>b;cout<<"浮点型排序之前为:"<<'\n';b.output();b.paixu();cout<<'\n'<<"浮点型排序之后为:"<<'\n';b.output();cout<<"字符型数组:"<<'\n';shuzu<char>c;cout<<"字符型排序之前为:"<<'\n';c.output();c.paixu();cout<<'\n'<<"字符型排序之后为:"<<'\n';c.output();cout<<'\n'<<"感谢使用本程序哦!"<<'\n';}4、#include<iostream>using namespace std;int jc(int a){if(a>10)throw a;else{int mul=1;for(int i=1;i<=a;i++)mul=mul*i;return mul;}}void main(){cout<<"请输入要求数的阶乘:"<<'\n'; int i;cin>>i;try{cout<<i<<"的阶乘为:"<<jc(i);}catch(int){cout<<"输入的数过大,大于10啦!"<<'\n'; }cout<<"感谢使用本程序哦!"<<'\n';}5、#include<iostream.h>#include<math.h>void main(){cout<<"请输入被开方数:"<<'\n';double a;cin>>a;try{if(sqrt(a)==NULL)throw a;elsecout<<"a的算术平方根:"<<sqrt(a);}catch(double){cout<<"开放有误哦!被开放数为负数!"<<'\n'; }cout<<"请输入对数:"<<'\n';double b;cin>>b;try{if(log(b)==NULL)throw b;elsecout<<"log("<<b<<")="<<log(b)<<'\n';}catch(double){cout<<"对数为为负!"<<'\n';}cout<<"感谢使用本程序哦!"<<'\n';}6、#include<iostream>#include<cmath>using namespace std;void acer(double a){cout<<"正方型面积为:"<<a*a<<'\n';}void acer(double a,double b){cout<<"长方形的面积为:"<<a*b<<'\n';}void acer(double a,double b,double c){double pr=(a+b+c)/2;cout<<"三角形的面积为:"<<sqrt(pr*(pr-a)*(pr-b)*(pr-c))<<'\n'; }void acer(){throw 1;}void main(){try{acer(2);acer(1,2);acer(3,4,5);acer();}catch(int){cout<<"函数没有无参数的哦!"<<'\n';}cout<<"感谢使用本程序哦!"<<'\n';}。

相关主题