皖西学院信息工程学院School of Information and Engineering, West Anhui University《面向对象方法与C++程序设计》实验报告专业计算机科学与技术专业班级计科1202班姓名柯冬生学号2012013854任课教师何富贵实验五模板与异常处理(2学时)学号:2012013854 姓名:柯冬生班级:计科1202班成绩:}代码:(1)#include<iostream>using namespace std;template <typename T>T max(T x,T y){ return x>y?x:y;}int max(int a,int b){ return a>b?a:b;}double max(double a,double b){ return a>b?a:b;}int main(){cout<<"max('3','7') is "<<max('3','7')<<endl;return 0;}(2)#include<iostream>using namespace std;int max(int a,int b){ return a>b?a:b;}double max(double a,double b){ return a>b?a:b;}int main(){cout<<"max('3','7') is "<<max('3','7')<<endl;return 0;}实验结果:(1)定义了一个求最大值的函数模板,定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两个同名非模板函数与函数模板重载.’3’和’7’均是字符型,找不到与之匹配的函数,所以调用了函数模板,使其实例化,由’T’型转变为’char’型。
(2)定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两个同名函数重载.’3’和’7’均是字符型,找不到与之匹配的函数,所以得不出正确结果。
2.编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板。
代码:#include <iostream>using namespace std;template<typename T>T max (T * x,int n){T max=x[0];for(int i=1;i<n;i++)max=max>x[i]? max:x[i];return max;}template<typename T>T min (T * x,int n){ T min=x[0];for(int i=1;i<n;i++)min=min<x[i]? min:x[i];return min;}int main(){ int a[5]={ 1,4,2,3,5 };double b[5]={1.1,4.4,2.2,3.3,5.5};cout<<"数组a[5]={ 1,4,2,3,5}的最大值is: "<<max(a,5)<<endl;cout<<"数组a[5]={ 1,4,2,3,5}的最小值is: "<<min(a,5)<<endl;cout<<"数组b[5]={1.1,4.4,2.2,3.3,5.5}的最大值is: "<<max(b,5)<<endl;cout<<"数组b[5]={1.1,4.4,2.2,3.3,5.5}的最小值is: "<<min(b,5)<<endl;return 0;}实验结果:3.编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。
【提示】设计一个类模板template <class Type>class Array{...};cout<<"***int型数组***"<<endl;cout<<"原函数为:"<<endl;for(int i=0;i<5;i++){cout<<c[i]<<" ";}cout<<endl;a.sort();a.invert();a.seek(3);a.sum();cout<<"***double型数组***"<<endl;cout<<"原函数为:"<<endl;for(int j=0;j<4;j++){cout<<d[j]<<" ";}cout<<endl;b.sort();b.invert();b.seek(8.9);b.sum();return 0;}实验结果:4.编写一个程序,求输入数的平方根。
设置异常处理,对输入负数的情况给出提示。
代码:#include <iostream>#include <cmath>using namespace std;void main(){double number;double result;cout << "请输入一个数: ";cin >> number;try{if (number < 0){throw exception("输入的数是负数! ");}result = sqrt(number);cout << "平方根是:" << result << endl;}catch (exception e){cout << e.what() << endl;}}实验结果:三、实验总结:1.在使用非模板函数时要注意输入的语句应符合函数的类型,或者定义一个函数模板使其实例化,否则无法得出正确结论。
2.对异常处理有了一些理解,但不知道异常处理(如第4题)可以循环吗?3.对用类模板实现线性表不是很懂。
任课教师签名:实验六C++的流类库与输入输出(2学时)学号:2012013854 姓名:柯冬生班级:计科1202班成绩:#include <iomanip>using namespace std;int main(){int i,j;cout<<setiosflags(ios::right)<<setw(4)<<"*";for(i=1;i<=9;i++)cout<<setiosflags(ios::right)<<setw(4)<<i;cout<<endl;for(i=1;i<=9;i++){cout<<setiosflags(ios::right)<<setw(4)<<i;for(j=1;j<=i;j++)cout<<setiosflags(ios::right)<<setw(4)<<i*j;cout<<endl;}return 0;}实验结果:2.下面的程序用于统计文件xyz.txt中的字符个数,请填空完成程序。
//test7_2_1.cpp#include<iostream>#include<fstream>using namespace std;int main(){ char ch;int i=0;ifstream file;file.open(“xyz.txt”,ios::in);if( ① ){cout<<”xyz.txt cannot open”<<endl;abort();}While (!file.eof()){②i++;}cout<<”文件字符个数:”<<i<<endl;③return 0;}代码:#include<iostream>#include<fstream>using namespace std;int main(){char ch;int i=0;ifstream file;file.open("xyz.txt",ios::in);if(!file){cout<<"xyz.txt cannot open"<<endl;abort();}while (!file.eof()){file.get(ch);if((ch<=122&&ch>=97)||(ch<=90&&ch>=65))i++;}cout<<"文件字符个数:"<<i<<endl;file.close();return 0;}实验结果:3.重载运算符“<<”和“>>”,使其能够输入一件商品的信息和输出这件商品的信息。
商品的信息由编号、商品名和价格。
假如商品类Merchandise的框架如下:class merchandise{public:cout<<"name:";in>>;cout<<"price:";in>>s.price;return in;}ostream&operator<<(ostream& out,Merchandise& s){out<<"Merchandise:"<<endl;out<<"no:"<<s.no<<endl;out<<"name:"<<<<endl;out<<"price:"<<s.price<<endl;return out;}int main(){Merchandise mer;cin>>mer;cout<<mer;return 0;}实验结果:4.编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。