《C++程序设计》实验指导书.docx
《《C++程序设计》实验指导书.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》实验指导书.docx(29页珍藏版)》请在冰豆网上搜索。
《C++程序设计》实验指导书
C++程序设计实验指导书
邵阳学院信息工程系
2010年9月
一、课程简介
C++是当今最流行的高级程序设计语言之一,应用十分广泛。
C++与C语言兼容,既支持结构化的程序设计方法,也支持面向对象的程序设计方法。
本课程是计算方法与程序设计(C语言)的后续课程,侧重点以C++语言中的面向对象机制为主。
开设本课程的目的是使学生通过学习掌握C++语言的语法规则、面向对象的程序设计方法,对面向对象方法和思想增加感性的认识;学会利用C++语言编写Windows实用程序,切实提高面向对象的程序设计能力,同时为后续的专业课程学习奠定程序设计基础。
本课程的任务是帮助学生掌握计算机程序设计的基础知识和基本技巧,建立面向对象程序设计的基本概念和思想。
二、实验教学目的及要求
目的:
通过本课程的学习及适当的实践,要求学生掌握面向对象的基本概念和设计思想,能比较熟练地用C++语言进行一般的面向对象的程序设计,并为今后的进一步深入学习其它课程打下良好的基础。
要求:
1.自始至终贯彻课程中所介绍的程序设计风格,养成良好的编程习惯。
2.独立完成所布置习题。
为保证尽量在统一安排的上机时间内编译运行通过程序,建议事先设计好程序。
三、实验项目设置表
序
号
实验名称
实验
学时
仪器
套数
每套
人数
实验
要求
实验
类型
面向专业
1
编制简单的C++程序
2
32
1
必开
验证性
电子信息工程
2
类和对象的设计
(一)
2
32
1
选开
验证性
电子信息工程
3
类和对象的设计
(二)
2
32
1
必开
设计性
电子信息工程
4
继承与派生类设计
2
32
1
必开
设计性
电子信息工程
5
继承与虚函数设计
2
32
1
选开
验证性
电子信息工程
6
多态性和虚函数设计
2
32
1
选开
设计性
电子信息工程
7
重载函数设计
2
32
1
选开
验证性
电子信息工程
8
运算符重载的设计
2
32
1
选开
验证性
电子信息工程
9
函数模板与类模板设计
2
32
1
选开
设计性
电子信息工程
10
C++的输入输出实验
2
32
1
选开
验证性
电子信息工程
11
文件输入输出实验
2
32
1
选开
验证性
电子信息工程
实验1编制简单的C++程序
实验目的及要求
1.熟悉VC++的集成开发环境,学习运行一个C++程序的步骤。
2.熟悉C++的运算符、表达式、语句的使用规则。
3.掌握变量命名规则,学会变量的定义和使用。
4.掌握函数的编写方法和基本规则。
实验内容
1.编写程序,从标准输入设备输入用户的名字,从标准输出设备输出欢迎信息。
2.编写函数swap()实现两个int型数据的交换。
要求:
(1)指针作参数
(2)引用作参数
主要仪器设备
电脑一台,安装VisualC++6.0
实验步骤
一、使用VisualC++6.0创建控制台应用程序
1.进入和退出VisualC++6.0集成开发环境
启动并进入VisualC++集成开发环境有至少有3种方法:
(1)选择“开始”菜单中的“程序”,然后选择MicrosoftVisualStudio6.0级联菜单,再选择MicrosoftVisualC++6.0。
(2)在桌面上创建MicrosoftVisualC++6.0的快捷方式,直接双击该图标;
(3)如果已经创建了某个VisualC++工程,双击该工程的dsw(DevelopStudioWorkshop)文件图标,也可进入集成开发环境,并打开该工程。
选择File|Exit菜单,可退出集成开发环境。
2.创建一个控制台应用程序工程。
(1)进入VisualC++集成开发环境后,选择File|New菜单,弹出New对话框,单击Projects标签,打开其选项卡,在其左边的列表框中选择Win32ConsoleApplication工程类型,在Projectname文本框输入工程名,在Location文本框输入工程路径,单击OK按钮,如图1.1所示。
图1.1创建新的应用程序界面
(2)在弹出的对话框(如图1.2所示)中,选择Anemptyproject,单击Finish按钮。
图1.2 创建Win32ConsoleApplication
(3)此时出现NewProjectInformation框,此对话框提示用户创建了一个空的控制台应用程序,并且没有任何文件被添加到新工程中,此时,工程创建完成。
3、程序的编辑、编译、建立、执行。
(1)选择File|New菜单项,出现New对话框,打开Files选项卡,在列表框中选择C++SourceFile,在File文本框中输入文件名,选中AddtoProject复选框,然后单击OK按钮,打开源文件编辑窗口,在其中输入源代码。
对于已经存在的源文件,选择Project|AddtoProject|Files…菜单项,在随后打开的插入文件对话框中选择待添加文件,按OK添加进工程。
(2)选择Build|Compile菜单项,即可编译源文件,系统会在Output窗口显出错误(Error)信息以及警告(Warning)信息。
当所有Error改正后,可得到目标文件(.obj)。
(3)选择Build|Build菜单项,连接并建立工程的EXE文件,得到可执行文件(.exe)。
这时编译器可能会给出连接错误(LinkingError)。
产生连接错误的原因可能是缺少所需要的库文件或目标文件,或程序中调用的外部函数没有定义等,只要补充相应文档再重新建立即可。
(4)选择Build|Execute菜单项,执行工程文件,会出现一个类似DOS操作系统的窗口,此时可以进行数据的输入和输出。
二、编程练习
1.编写程序,从标准输入设备输入用户的名字,从标准输出设备输出欢迎信息。
参考程序如下:
#include
#include
usingnamespacestd;
intmain()
{
stringfirstname;
cout<<"Pleaseenteryourfirstname:
"<cin>>firstname;
cout<<"Hello"<<<"...andgoodbye!
"<return0;
}
2.编写函数swap()实现两个int型数据的交换。
要求:
(1)指针作参数
(2)引用作参数
参考程序如下:
#include
usingnamespacestd;
voidswap1(intx,inty)
{
intt;
t=x,x=y,y=t;
}
voidswap2(int*x,int*y)
{
intt;
t=*x,*x=*y,*y=t;
}
voidswap3(int*x,int*y)
{
int*t;
t=x,x=y,y=t;
}
voidswap4(int&x,int&y)
{
intt;
t=x,x=y,y=t;
}
intmain()
{
intx,y;
x=3,y=5;swap1(x,y);
cout<<"x="<x=3,y=5;swap2(&x,&y);
cout<<"x="<x=3,y=5;swap3(&x,&y);
cout<<"x="<x=3,y=5;swap4(x,y);
cout<<"x="<return0;
}
注意事项
1.创建工程时,也可以选择A“HelloWorld!
”application,在集成开发环境提供的代码框架上进行修改。
2.对字符串的操作可以使用字符数组实现,此时,为了保证输入的用户名不超过设定的数组上限,可以使用setw()函数。
3.swap()如果写在主函数之后,需要在头文件或主函数中声明。
实验2类和对象的设计
(一)
实验目的及要求
1.掌握C++类的概念和基本组成、类的使用方法以及静态数据成员的使用;
2.熟悉各种成员函数包括构造函数、析构函数、内嵌函数的定义与使用。
实验内容
1.设计一个Birthday类,包含数据成员year、month、day,成员函数Print()和Age(),计算年龄并输出。
构造一个Birthday的对象进行测试。
2.改正以下程序中的错误,并分析错误原因。
提示:
该程序中point类的构造函数定义不正确,在main()中对数据成员的访问不正确。
#include
usingnamespacestd;
classpoint
{
intx1,x2;
public:
point(intx,inty);
};
voidmain()
{
pointdata(5,5);
cout<cout<}
主要仪器设备
电脑一台,安装VisualC++6.0
实验步骤
1.设计一个Birthday类,包含数据成员year、month、day,成员函数Print()和Age(),计算年龄并输出。
构造一个Birthday的对象进行测试。
参考程序如下:
#include
#include
usingnamespacestd;
classBirthday
{
public:
intyear,month,day,age;
voidPrint();
voidAge();
};
voidBirthday:
:
Print()
{
cout<<"Yourbirthday:
"
<cout<<"Yourage:
"<}
voidBirthday:
:
Age()
{
intcYear,cMonth,cDay;
time_tnowTime;
structtm*p;
time(&nowTime);
p=localtime(&nowTime);
cYear=1900+p->tm_year;
cMonth=1+p->tm_mon;
cDay=p->tm_mday;
cout<<"Today:
";
cout<age=cYear-year;
if(cMonthage--;
elseif(cMonth==month||cDayage--;
}
intmain()
{
Birthdaybirth;
cout<<"Inputyourbirthday:
";
cin>>birth.year>>birth.month>>birth.day;
birth.Age();
birth.Print();
return0;
}
2.改正以下程序中的错误,并分析错误原因。
参考改正代码如下,原因请自己加以分析:
#include
usingnamespacestd;
classpoint
{
public:
intx1,x2;
point(intx,inty);
};
point:
:
point(intx,inty)
{
x1=x;
x2=y;
}
intmain()
{
pointdata(5,5);
cout<cout<return0;
}
注意事项
可以将类的定义、类的实现、调用类的函数分别置于三个文件,并将这三个文件置于同一个工程中,以优化程序的结构。
实验3类和对象的设计
(二)
实验目的及要求
综合运用类的基本知识,包括:
类对象的定义、公有、私有和保护成员的含义、构造函数和析构函数的作用、定义方式等;设计并使用一个类。
实验内容
1.定义一个学生类,其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。
同时编写主函数使用这个类,实现对学生数据的赋值和输出。
2.定义日期类型Date。
要求有以下面成员:
(1)可以设置日期;
(2)日期加一天操作;
(3)输出函数,输出格式为“XXXX年XX月XX日”。
主要仪器设备
电脑一台,安装VisualC++6.0
实验步骤
1.运行VisualC++6.0,创建Win32ConsoleApplication。
2.使用Insert|ClassWizard…创建类。
3.在ClassView的类名称上点击右键,从弹出菜单中选择AddMemberFunction…和AddMemberVariable…,设计类的成员函数和成员变量。
4.在FileView中,选择文件,对类进行修改。
5.在FileView中,添加一个main.cpp文件,编写主函数,测试刚才设计的类的各个成员函数。
6.编译、调试、运行程序。
注意事项
1.引用自定义的头文件时,应使用””,而不是<>,例如,自定义的头文件为Date.h,则在引用部分,应写入:
#include“Date.h”
2.在设计时,应注意区分哪些成员函数和成员变量应当定义为public,哪些应当定义为private。
3.如果对成员函数的返回值类型、函数名或参数表进行修改,应同时修改.h和.cpp的文件,即需要手工同时修改定义部分和实现部分。
实验4继承与派生类的设计
实验目的及要求
综合运用继承的相关知识,包括:
继承的含义、派生类的定义方法和实现、公有继承下基类成员对派生类成员和派生类对象的可见性、保护成员在继承中的作用等,设计具有继承关系的类。
实验内容
编写一个程序计算出球、圆柱和圆锥的表面积和体积。
设计要求:
(1)定义一个基类圆,至少含有一个数据成员半径;
(2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。
(3)定义主函数,求球、圆柱、圆锥的表面积和体积。
主要仪器设备
电脑一台,安装VisualC++6.0
实验步骤
1.分析问题:
确定球、圆柱和圆锥的表面积和体积的计算公式。
2.运行VisualC++6.0,创建Win32ConsoleApplication。
3.使用Insert|ClassWizard…创建基类圆。
4.在ClassView的类名称上点击右键,从弹出菜单中选择AddMemberFunction…和AddMemberVariable…,设计基类的成员函数和成员变量。
基类圆至少含有一个数据成员半径。
5.编写基类的代码。
6.使用Insert|ClassWizard…创建派生类。
7.在各个派生类中编写具体实现的代码。
8.添加一个main.cpp文件,编写主函数,测试派生类的功能。
9.编译、调试、运行程序。
注意事项
1.一个派生类只从一个基类派生。
2.注意区分公有继承、私有继承和保护继承的使用。
实验5继承与虚函数设计
实验目的及要求
1.了解虚函数的作用及使用方法。
2.了解在派生类中如何使用基类的成员、基类成员在派生类中的访问控制以及虚函数对多态性的支持。
3.了解纯虚函数和抽象类的概念和用法。
实验内容
栈和队列两种数据结构具有很多相似的地方:
都存放了一系列的元素,元素的操作都在两头进行,元素个数都是动态可变的。
要求设计一个基类,完成队列和栈的共同功能,然后分别派生出队列类和栈类。
主要仪器设备
电脑一台,安装VisualC++6.0
实验步骤
1.分析实验要求。
2.编写代码,参考程序如下:
//base.h
#include
#include
usingnamespacestd;
classbase
{
public:
base();
virtual~base();
virtualvoidelem_in(intelem)=0;
virtualvoidelem_out(int&elem)=0;
voiddisplay();
protected:
vectorelems;
};
//base.cpp
#include"base.h"//class'sheaderfile
base:
:
base()
{
}
base:
:
~base()
{
}
voidbase:
:
display()
{
if(elems.empty())
cout<<"Noelements."<else
{
for(inti=0;icout<cout<}
}
//stack.h
#include"base.h"//inheritingclass'sheaderfile
classstack:
publicbase
{
public:
stack();
virtual~stack();
virtualvoidelem_in(intelem);
virtualvoidelem_out(int&elem);
};
//stack.cpp
#include"stack.h"//class'sheaderfile
stack:
:
stack()
{
}
stack:
:
~stack()
{
}
voidstack:
:
elem_in(intelem)
{
elems.push_back(elem);
}
voidstack:
:
elem_out(int&elem)
{
elem=elems[elems.size()-1];
elems.pop_back();
}
//queue.h
#include"base.h"//inheritingclass'sheaderfile
classqueue:
publicbase
{
public:
queue();
virtual~queue();
virtualvoidelem_in(intelem);
virtualvoidelem_out(int&elem);
};
//queue.cpp
#include"queue.h"//class'sheaderfile
queue:
:
queue()
{
}
queue:
:
~queue()
{
}
voidqueue:
:
elem_in(intelem)
{
elems.push_back(elem);
}
voidqueue:
:
elem_out(int&elem)
{
elem=elems[0];
for(inti=0;ielems[i]=elems[i+1];
elems.pop_back();
}
//main.cpp
#include"stack.h"
#include"queue.h"
intmain()
{
intelem;
stacks;
s.elem_in
(1);
s.elem_in
(2);
s.elem_in(3);
s.elem_in(4);
s.display();
s.elem_out(elem);
cout<<"Elemout:
"<s.display();
queueq;
q.elem_in
(1);
q.elem_in
(2);
q.elem_in(3);
q.elem_in(4);
q.display();
q.elem_out(elem);
cout<<"Elemout:
"<q.display();
return0;
}
3.编译、调试、运行程序。
注意事项
1.使用virtual标记成员函数为虚函数。
2.每一个虚拟函数,要么有定义,要么可以设为“纯”虚拟函数(purevirtualfunction),将函数赋值为0,可将其设为“纯”虚拟函数。
实验6多态性和虚函数的设计
实验目的及要求
综合运用类的多态性以及虚函数实现动态多态性的方法,设计并实现类。
实验内容
利用虚函数实现的多态性来求四种几何图形的面积。
这四种几何图形是:
三角形、矩形、正方形和圆。
几何图形的类型可以通过构造函数或通过成员函数来设置。
主要仪器设备
电脑一台,安装VisualC++6.0
实验步骤
1.分析问题:
确定四种图形的面积计算公式。
2.运行VisualC++6.0,创建Win32ConsoleApplication。
3.使用Insert|ClassWizard…创建一个“纯”的虚基类。
4.在ClassView的类名称上点击右键,从弹出菜单中选择AddMemberFunction…和AddMemberVariable…,设计虚基类的成员函数。
5.使用Insert|ClassWizard…创建多态类。
6.在各个多态类中编写具体实现的代码。
7.添加一个main.cpp文件,编写主函数,测试所设计各个类的功能。
8.编译、调试、运行程序。
注意事项
“纯”的虚基类是一个不完全的类,相当于“接口”,因此不需要在main.cpp中测试这个类。
实验7重载函数设计
实验目的及要求
1.理解函数重载的概念;
2.掌握重载函数的编写。
实验内容
1.编写一个函数product(),通过函数重载完成两个不同类型(float型、两个复数型)数值的乘法运算。
分别用两个float型、两个复数型数测试该程序。
2.编写一个函数find_element(),通过函数重载实现以下功能:
(1)从一个数组中查找某个元素;
(2)由用户输入一个整数n和一个整数e,判断e是否属于区间[0,