实验五模板与异常处理.docx

上传人:b****5 文档编号:5372010 上传时间:2022-12-15 格式:DOCX 页数:32 大小:401.26KB
下载 相关 举报
实验五模板与异常处理.docx_第1页
第1页 / 共32页
实验五模板与异常处理.docx_第2页
第2页 / 共32页
实验五模板与异常处理.docx_第3页
第3页 / 共32页
实验五模板与异常处理.docx_第4页
第4页 / 共32页
实验五模板与异常处理.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

实验五模板与异常处理.docx

《实验五模板与异常处理.docx》由会员分享,可在线阅读,更多相关《实验五模板与异常处理.docx(32页珍藏版)》请在冰豆网上搜索。

实验五模板与异常处理.docx

实验五模板与异常处理

 

皖西学院信息工程学院

SchoolofInformationandEngineering,WestAnhuiUniversity

 

《面向对象方法与C++程序设计》

实验报告

专业

计算机科学与技术专业

班级

计科1202班

姓名

柯冬生

学号

2012013854

任课教师

何富贵

 

实验五模板与异常处理(2学时)

学号:

2012013854姓名:

柯冬生班级:

计科1202班成绩:

实验名称:

模板与异常处理

实验地点:

综合楼207

所使用的工具软件及环境:

MicrosoftVisualC++6.0

一、实验目的:

(1)正确理解模板的概念。

(2)掌握函数模板和类模板的声明和使用方法。

(3)学习简单的异常处理方法。

二、实验内容:

1.分析并调试下列程序,写出运行结果并分析原因。

(1)

//test6_1_1.cpp

#include

usingnamespacestd;

template

Tmax(Tx,Ty)

{returnx>y?

x:

y;

}

intmax(inta,intb)

{returna>b?

a:

b;

}

doublemax(doublea,doubleb)

{returna>b?

a:

b;

}

intmain()

{cout<<”max(‘3’,’7’)is“<

return0;

}

(2)

//test6_1_2.cpp

#include

usingnamespacestd;

intmax(inta,intb)

{returna>b?

a:

b;

}

doublemax(doublea,doubleb)

{returna>b?

a:

b;

}

intmain()

{cout<<”max(‘3’,’7’)is“<

return0;

}

代码:

(1)

#include

usingnamespacestd;

template

Tmax(Tx,Ty)

{returnx>y?

x:

y;}

intmax(inta,intb)

{returna>b?

a:

b;}

doublemax(doublea,doubleb)

{returna>b?

a:

b;}

intmain()

{

cout<<"max('3','7')is"<

return0;

}

(2)

#include

usingnamespacestd;

intmax(inta,intb)

{returna>b?

a:

b;}

doublemax(doublea,doubleb)

{returna>b?

a:

b;}

intmain()

{

cout<<"max('3','7')is"<

return0;

}

实验结果:

(1)

定义了一个求最大值的函数模板,定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两个同名非模板函数与函数模板重载.’3’和’7’均是字符型,找不到与之匹配的函数,所以调用了函数模板,使其实例化,由’T’型转变为’char’型。

(2)

定义了一个求整型最大值的函数以及一个求双精度型最大值的函数,这两个同名函数重载.’3’和’7’均是字符型,找不到与之匹配的函数,所以得不出正确结果。

2.编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板。

代码:

#include

usingnamespacestd;

template

Tmax(T*x,intn)

{

Tmax=x[0];

for(inti=1;i

max=max>x[i]?

max:

x[i];

returnmax;

}

template

Tmin(T*x,intn)

{Tmin=x[0];

for(inti=1;i

min=min

min:

x[i];

returnmin;

}

intmain()

{inta[5]={1,4,2,3,5};

doubleb[5]={1.1,4.4,2.2,3.3,5.5};

cout<<"数组a[5]={1,4,2,3,5}的最大值is:

"<

cout<<"数组a[5]={1,4,2,3,5}的最小值is:

"<

cout<<"数组b[5]={1.1,4.4,2.2,3.3,5.5}的最大值is:

"<

cout<<"数组b[5]={1.1,4.4,2.2,3.3,5.5}的最小值is:

"<

return0;

}

实验结果:

3.编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。

【提示】

设计一个类模板

template

classArray{

...

};

具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int型和double型的两个模板类,分别对整型数组与双精度数组完成所要求的操作。

代码:

#include

usingnamespacestd;

template

classArray1{

public:

Array1(Type*a,intlength)

{len=length;

for(inti=0;i

Array[i]=a[i];

}

//template

voidsort()//排序

{

Typea[10],temp;

for(intn=0;n

{

a[n]=Array[n];

}

for(intj=0;j

{

for(inti=0;i

if(a[i]>a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

}

cout<<"数组排序"<

for(intm=0;m

{

cout<

}

cout<

}

//template

voidinvert()//倒置

{

Typeinvert[10];

for(intj=0;j

{

invert[j]=Array[len-1-j];

}

cout<<"数组倒置"<

for(intm=0;m

{cout<

cout<

}

voidseek(Typey)//查找

{

inti=0;

for(intj=0;j

{

if(Array[j]==y)

{cout<<"查找成功!

"<<"在第"<

i=j;

}

//break;

}

if(i==0)

cout<<"查找不成功!

"<

}

//template

voidsum()//求和

{

Typesum=Array[0];

for(intj=1;j

sum=sum+Array[j];

cout<<"数组之和:

"<

}

private:

intlen;

TypeArray[10];

};

intmain()

{

intc[5]={1,8,2,7,9};

doubled[4]={3.1,8.9,56.9,2.9};

Array1a(c,5);

Array1b(d,4);

cout<<"***int型数组***"<

cout<<"原函数为:

"<

for(inti=0;i<5;i++)

{

cout<

}

cout<

a.sort();

a.invert();

a.seek(3);

a.sum();

cout<<"***double型数组***"<

cout<<"原函数为:

"<

for(intj=0;j<4;j++)

{

cout<

}

cout<

b.sort();

b.invert();

b.seek(8.9);

b.sum();

return0;

}

实验结果:

4.编写一个程序,求输入数的平方根。

设置异常处理,对输入负数的情况给出提示。

代码:

#include

#include

usingnamespacestd;

voidmain()

{

doublenumber;

doubleresult;

cout<<"请输入一个数:

";

cin>>number;

try

{

if(number<0)

{

throwexception("输入的数是负数!

");

}

result=sqrt(number);

cout<<"平方根是:

"<

}

catch(exceptione)

{

cout<

}

}

实验结果:

3、实验总结:

1.在使用非模板函数时要注意输入的语句应符合函数的类型,或者定义一个函数模板使其实例化,否则无法得出正确结论。

2.对异常处理有了一些理解,但不知道异常处理(如第4题)可以循环吗?

3.对用类模板实现线性表不是很懂。

 

任课教师签名:

实验六C++的流类库与输入输出(2学时)

学号:

2012013854姓名:

柯冬生班级:

计科1202班成绩:

实验名称:

C++的流类库与输入输出

实验地点:

综合楼207

所使用的工具软件及环境:

MicrosoftVisualC++6.0

一、实验目的:

(1)掌握C++格式化的输入输出方法。

(2)掌握重载运算符“<<”和“>>”的方法。

(3)掌握磁盘文件的输入输出方法。

二、实验内容:

1.下面给出的test7_1_1.cpp程序用于打印九九乘法表,但程序中存在错误。

请上机调试,使得此程序运行后,能够输出如下所示的九九乘法表。

*123456789

11

224

3369

4481216

5510152025

661218243036

77142128354249

8816243240485664

991827364554637281

//test7_1_1.cpp

#include

#include

usingnamespacestd;

intmain()

{

inti,j;

cout<<”*”;

for(i=1;i<=9;i++)

cout<

cout<

for(i=1;i<=9;i++)

{cout<

for(j=1;j<=i;j++)

Cout<

}

return0;

}

代码:

#include

#include

usingnamespacestd;

intmain()

{

inti,j;

cout<

:

right)<

for(i=1;i<=9;i++)

cout<

:

right)<

cout<

for(i=1;i<=9;i++)

{

cout<

:

right)<

for(j=1;j<=i;j++)

cout<

:

right)<

cout<

}

return0;

}

实验结果:

2.下面的程序用于统计文件xyz.txt中的字符个数,请填空完成程序。

//test7_2_1.cpp

#include

#include

usingnamespacestd;

intmain()

{charch;

inti=0;

ifstreamfile;

file.open(“xyz.txt”,ios:

:

in);

if(

{

cout<<”xyz.txtcannotopen”<

abort();

}

While(!

file.eof())

{

i++;

}

cout<<”文件字符个数:

”<

return0;

}

代码:

#include

#include

usingnamespacestd;

intmain()

{

charch;

inti=0;

ifstreamfile;

file.open("xyz.txt",ios:

:

in);

if(!

file)

{

cout<<"xyz.txtcannotopen"<

abort();

}

while(!

file.eof())

{

file.get(ch);

if((ch<=122&&ch>=97)||(ch<=90&&ch>=65))

i++;

}

cout<<"文件字符个数:

"<

file.close();

return0;

}

实验结果:

3.重载运算符“<<”和“>>”,使其能够输入一件商品的信息和输出这件商品的信息。

商品的信息由编号、商品名和价格。

假如商品类Merchandise的框架如下:

classmerchandise{

public:

Merchandiss();

~Merchandiss();

friendistream&operator>>(istream&in,Merchandiss&s);

friendostream&operator<<(ostream&out,Merchandiss&s);

private:

intno;

char*name;

doubleprice;

};

要求实现该类,并编写以下的main函数对该类进行操作。

intmain()

{Merchandisemer;

cin>>mer;

cout<

return0;

}

代码:

#include

classMerchandise

{

public:

Merchandise();

~Merchandise();

friendistream&operator>>(istream&in,Merchandise&s);

friendostream&operator<<(ostream&out,Merchandise&s);

private:

intno;

char*name;

doubleprice;

};

Merchandise:

:

Merchandise()

{

no=0;

name=newchar[20];

price=0;

}

Merchandise:

:

~Merchandise()

{

deletename;

}

istream&operator>>(istream&in,Merchandise&s)

{

cout<<"inputtheMerchandise^s:

"<

cout<<"no:

";

in>>s.no;

cout<<"name:

";

in>>s.name;

cout<<"price:

";

in>>s.price;

returnin;

}

ostream&operator<<(ostream&out,Merchandise&s)

{

out<<"Merchandise:

"<

out<<"no:

"<

out<<"name:

"<

out<<"price:

"<

returnout;

}

intmain()

{

Merchandisemer;

cin>>mer;

cout<

return0;

}

实验结果:

4.编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。

代码:

#include

#include

usingnamespacestd;

intmain()

{

charch;

ifstreamfile1;

ifstreamfile2;

ofstreamfile3;

file1.open("xyz.txt",ios:

:

in);

file2.open("qwe.txt",ios:

:

in);

file3.open("asd.txt",ios:

:

out);

if(!

file1||!

file2)

{

cout<<"xyz.txtcannotopen"<

abort();

}

file1.seekg(0);

file2.seekg(0);

while(!

file1.eof())

{

file1.get(ch);

if(ch<=122&&ch>=97)

ch=ch-32;

file3.put(ch);

cout<

}

while(!

file2.eof())

{

file2.get(ch);

if(ch<=122&&ch>=97)

ch=ch-32;

file3.put(ch);

cout<

}

file1.close();

file2.close();

file3.close();

return0;

}

实验结果:

3、实验总结:

通过这次试验,我学习掌握了C++格式化的输入输出方法,掌握了重载运算符“<<”和“>>”的方法,掌握了磁盘文件的输入输出方法,能够更加熟悉地运用VisualC++6.0的系统。

任课教师签名:

实验七Windows程序框架及MFC编程(2学时)

学号:

2012013854姓名:

柯冬生班级:

计科1202班成绩:

实验名称:

Windows程序框架及MFC编程

实验地点:

综合楼207

所使用的工具软件及环境:

MicrosoftVisualC++6.0

一、实验目的:

1.学习windows基于消息事件驱动方式的程序设计

2.学习一个完整的窗口编制的四个操作步骤

3.了解Windows提供的窗口类

4.了解回调函数

5.学习MFC对话框和单文档编程的一般方法

5.学习使用MSDN帮助解决问题

二、实验内容:

1.写一个Win32Application应用程序,要求当点击关闭时,弹出对话框确定关闭,否则不关闭。

运行初始时,在文档窗口显示“Hello”。

代码:

//-----初始化

BOOLCTestDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//Add"About..."menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

//Settheiconforthisdialog.Theframeworkdoesthisautomatically

//whentheapplication'smainwindowisnotadialog

SetIcon(m_hIcon,TRUE);//Setbigicon

SetIcon(m_hIcon,FALSE);//Setsmallicon

//TODO:

Addextr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1