c++程序设计实验指导.docx
《c++程序设计实验指导.docx》由会员分享,可在线阅读,更多相关《c++程序设计实验指导.docx(37页珍藏版)》请在冰豆网上搜索。
![c++程序设计实验指导.docx](https://file1.bdocx.com/fileroot1/2023-6/7/2c036dc2-d918-497f-9e75-727835379144/2c036dc2-d918-497f-9e75-7278353791441.gif)
c++程序设计实验指导
《C++程序设计》实验指导
海南软件职业技术学院
HainanSoftwareProfessionInstitute
(2006-2007学年度第一学期)
教师姓名:
季文天
系部:
软件工程系
授课专业:
软件技术
授课班级:
05软件技术3班
目录
实验一:
VisualC++6.0开发环境2
实验二:
C++数据类型、表达式、语句、控制结构实验4
实验三:
函数实验5
实验四:
选择排序算符6
实验五:
设计一个栈类8
实验六:
公司雇员档案管理10
实验七:
计算函数的定积分13
实验八:
函数模板16
实验九:
类模板实例18
实验十:
插入与提取运算符重载实例20
实验十一:
文件操作实例22
实验一:
VisualC++6.0开发环境
一、实验目的:
1.掌握VisualC++6.0的启动和退出方法
2.熟悉选单的基本操作
3.掌握用应用程序向导创建一个控制台应用项目的方法
4.掌握源代码文件的新建、打开、保存和关闭等基本操作
5.掌握Visualc++6.0项目的编译、连接和执行
6.掌握代码简单语法错误修正和调试的一般过程
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、VisualC++开发环境
2、简单程序的调试
四、试验步骤:
1、从程序菜单启动VisualC++开发环境
2、认识VisualC++继承开发环境各菜单、窗口。
3、输入简单代码、编译、调试程序。
1.在“程序”表中选择MicrosoftVisualC++6.0,进入到VisualC++6.0的集成环境窗口。
2.在“File”菜单下选择“new”项(编一个新程序),出现“new”对话窗口。
3.在“new”窗口,点击“Projects”标签,在对话框中,选择“win32consoleApplication”(win32控制台应用);在“Projectsname”位置下输入项目名称,例如demo1(把我们的编程工作称为一个名为demo1的Project);在“Location”位置下,选择工作区空间(指定编程及运行中所生成的文件存放的的位置)的地址,就是确定新建的以demo1为名的工作区目录的地址,完成后按“OK”。
4.在下一对话窗口中,由用户选择项目类型,例如,可选择“Anemptyproject”完成后按“Finish”按纽。
5.进入编程环境窗口,窗口分为四部分:
上部:
菜单和工具条;中右:
视图区,是显示和编辑程序文件的操作区;中左:
工作区(workspace)显示窗口,这里显示工作中与项目相关的各种文件种类,工作区窗口可用View菜单关闭或打开;下部:
输出区,程序调试过程中,进行编译、链接、运行中输出的相关信息在这里显示,它也可由View菜单关闭或打开;
6.在上部的菜单中选择“Project/AddToProject/new”,出现对话框,点击“Files”,在出现的文件类型表中选择“C++SonrceFile”,填入项目名,“demo1”,源文件名“main”和工作区目录的位置路径,按“OK”回到主环境窗口;
7.在左侧的工作区,点“FileView”,打开demo1files:
SourceFile/main.cpp;
8.这时,右侧的视图区是空的,把program2-1(或其它源程序)输入其中;
9.在上方的“Build”菜单下,选“compilermain.app”,进行编译;查看下部output区的输出信息,如有出错信息,修改源程序重新编译;
10.编译通过后,在上方的“Build”菜单下,选“Builddemo.exe”,进行链接,如有出错信息,进行修改;
11.在“Build”菜单下,选“Executedemo.exe”运行程序,得到输出结果。
可使用下面代码:
#include
intmain(intargc,char*argv[])
{
cout<<”HelloC++World”<}
4、运行课本例1_1,1_2,1_3。
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验二:
C++数据类型、表达式、语句、控制结构实验
一、实验目的:
1.掌握C++数据类型,熟悉定义变量、赋值得方法
2.学会使用C++的有关运算符以及相应的表达式
3.掌握cin和cout的输入、输出的方法,能正确使用各种格式转换
4.了解C++语言表示逻辑量的方法,熟练掌握if和switch语句
5.熟悉用while语句、do…while语句和for语句实现循环的方法
6.进一步掌握控制台应用项目的创建、编译方法
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、计算圆面积
2、设计一个简单的英文加密程序,加密规则如下,对每一个英文字母用该字母后面的第2个字母和这个字母本身进行异或运算,设置9个变量,分别存储字符串WeiXiong中的每一个字符,进行运算,检查输出结果和理论计算的结果是否一致。
四、试验步骤:
1、创建工程Program_2_1,输入下列代码
//program3-2.cpp
#include
voidmain()
{
constfloatpai=3.14;
floatradius;
cout<<"Enterradius:
";
cin>>radius;
floatarea=pai*radius*radius;
cout<<"\nTheareaofcircleis";
cout<
}
2、自行设计完成实验内容2。
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验三:
函数实验
一、实验目的:
1.了解函数的意义
2.熟悉并掌握函数的定义、调用
3.体会函数在面向结构程序设计中的地位
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、三次方根求根程序设计
四、试验步骤:
1、公式3.1
2、为了从系数p、q计算实根xr,把公式(3.1)的计算分解为下面几步:
1)令实数xr=A+B;
2)令实数A,B分别为实数R,S的立方根:
3)令R=-q/2+a,S=-q/2-a;(3.2)
4)令a=sqrt((q/2)*(q/2)+(q/3)*(q/3)*(q/3));(3.3)
实际的计算过程为:
用公式(5.3)计算得到a;
用公式(5.2)计算得到R和S;
求出R和S的立方根A和B;
最后得到实根xr。
3、设计函数实现求立方根。
4、完整的程序代码
#include<iostream.h>
#include<math.h>
floatcuberoot(float);
voidmain(void)
{
floatp,q,xr;
cout<<″Inputparametersp,q:
″;
cin>>p>>q;
floata=sqrt((q/2)*(q/2)+(q/3)*(q/3)*(q/3));
xr=cuberoot(-q/2+a)+cuberoot(-q/2-a);
cout<<endl<<″Therealrootoftheequationis″<<xr;
}
floatcuberoot(floatx)
{
floatroot,croot;
constfloateps=1e-6;
croot=x;
do{
root=croot;
croot=(2*root+x/(root*root))/3;
}
while(fabs(croot-root)>eps);
return(croot);
}
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验四:
选择排序算符
一、实验目的:
1.熟悉并掌握指针的定义
2.学会使用指针
3.掌握排序算符的设计
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、排序算法的实现
四、试验步骤:
1、排序算法原理:
排序的任务是把已经存在一个数组里的n个数按从大到小的顺序排列,可以采用多种不同的方法实现,选择排序算法的思路简单,容易理解,每次总是从无序的序列中选出最大者,交换到序列的左端,于是,无序的序列越来越短,经过n-1步,达到排序的目的。
2、程序实现:
#include
#include
#include
voidssort(float*,int);
voidmain(void){
inti,seed,n=20;
cout<cin>>seed;
cout<srand(seed);
floatlist[20],*pf;
for(i=0;ilist[i]=rand();
cout<if((i+1)%8==0)
cout<i=0;cout<pf=&list[0];
ssort(pf,n);
while(icout<i++;
if(i%8==0)
cout<}
cout<}
voidswap1(float*a,float*b){
floattemp;
temp=*a;
*a=*b;
*b=temp;
}
voidssort(float*a,intm){
inti,j,index;
floatelem;
for(i=0;ielem=*(a+i);
index=i;
for(j=i+1;jif(*(a+j)>elem){
elem=*(a+j);
index=j;
}
swap1(a+i,a+index);
}
}
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验五:
设计一个栈类
一、实验目的:
1.熟悉并掌握类的定义
2.掌握类的成员结构
3.掌握类的构造函数、析构函数
4.理解类和对象
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、设计一个栈类
四、试验步骤:
1、栈的原理
栈(stack)是程序设计过程中经常碰到的一种数据结构形式,它对于数据的存放和操作有下面这样的特点:
(1)它只有一个对数据进行存入和取出的端口;
(2)后进者先出,即最后被存入的数据将首先被取出。
其形式很像一种存储硬币的小容器,每次只可以从顶端压入一个硬币,而取出也只可从顶端进行,即后进先出。
2、程序代码:
#include
constintmaxsize=6;
classstack{
floatdata[maxsize];
inttop;
public:
stack(void);
~stack(void);
boolempty(void);
voidpush(floata);
floatpop(void);
};
stack:
:
stack(void){
top=0;
cout<<"stackinitialized."<}
stack:
:
~stack(void){
cout<<"stackdestroyed"<}
boolstack:
:
empty(void){
returntop==0;
}
voidstack:
:
push(floata){
if(top==maxsize){
cout<<"Stackoverflow!
"<return;
}
data[top]=a;
top++;
}
floatstack:
:
pop(void){
if(top==0){
cout<<"Anemptystack!
"<return0;
}
top--;
returndata[top];
}
voidmain(){
stacks1,s2;
for(inti=1;i<=maxsize;i++)
s1.push(2*i);
for(i=1;i<=maxsize;i++)
cout<for(i=1;i<=maxsize;i++)
s1.push(2.5*i);
for(i=1;i<=maxsize;i++)
s2.push(s1.pop());
cout<do
cout<while(!
(s2.empty()));
}
3、程序执行结果
stackinitialized.
stackinitialized.
12108642
2.557.51012.515
stackdestroyed.
stackdestroyed.
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验六:
公司雇员档案管理
一、实验目的:
1.熟悉并掌握继承与派生
2.掌握如何处理继承与派生类的关系
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、公司雇员档案管理
四、试验步骤:
1、公司雇员档案管理:
假设公司雇员分为:
雇员(employee)、经理(manager)、工程师(engineer)、高级主管(director)。
而且假定只关心这几类雇员各自的如下一些数据:
employee(雇员)类:
姓名、年龄、工资;
manager(经理)类:
姓名、年龄、工资、行政级别;
engineer(工程师)类:
姓名、年龄、工资、专业、学位;
director(高级主管)类:
姓名、年龄、工资、专业、学位、职务。
2、程序代码:
#include
#include
classemployee{//自定义的employee类,它将作为其它几个类的基类
shortage;
floatsalary;
protected:
char*name;
public:
employee(shortag,floatsa,char*na){//基类构造函数
age=ag;
salary=sa;
name=newchar[strlen(na)+1];
strcpy(name,na);
}
voidprint()const{
cout<<""<";
cout<";
cout<}
~employee(){delete[]name;}
};
classmanager:
publicemployee{//派生类manager
intlevel;//行政级别
public:
manager(shortag,floatsa,char*na,intlev)
:
employee(ag,sa,na){//派生类构造函数
level=lev;
}
voidprint()const{
employee:
:
print();//调用基类的print显示“共性”数据
//调用基类(父类)的公有函数成员print时要通过类名限定
cout<<"level:
"<}
};
classengineer:
publicemployee{//派生类engineer
charspeciality,adegree;
/*分别表示专业:
'E'--电子,'M'--机械,'C'--计算机,'A'--自动化专业;
学位:
'O'--博士,'M'--硕士,'B'--学士,'N'--无学位*/
public:
engineer(shortag,floatsa,char*na,charsp,charad)
:
employee(ag,sa,na){//派生类构造函数
speciality=sp;
adegree=ad;
}
voidprint()const{
employee:
:
print();//调用基类print
cout<<"speciality:
"<cout<<"academicdegree:
"<}
};
enumptitle{PS,GM,VPS,VGM};
classdirector:
publicmanager{//派生类director
ptitlepost;
public:
director(shortag,floatsa,char*na,intlev,ptitlepo)
:
manager(ag,sa,na,lev){//派生类构造函数
post=po;
}
voidprint()const{
manager:
:
print();
cout<<"post:
"<}
};
voidmain(){//主函数,对所定义的类进行使用
employeeemp1(23,610.5,"zhang"),emp2(27,824.75,"zhao");
managerman1(32,812.45,"li",11),man2(34,1200.5,"cui",7);
engineereng(26,1420.10,"meng",'E','M');
directordir(38,1800.2,"zhou",2,GM);
emp1.print();//输出雇员emp1的有关全部信息
emp2.print();//输出雇员emp2的有关全部信息
man1.print();//输出管理人员man1的有关全部信息
man2.employee:
:
print();//调用基类的公有函数成员print
//显示man2的有关雇员信息
eng.print();//输出工程师eng的有关全部信息
dir.print();//输出高级主管dir的有关全部信息
}
3、程序执行结果
zhang:
23:
610.5
zhao:
27:
824.75
li:
32:
812.45
level:
11
cui:
34:
1200.5
meng:
26:
1420.1
speciality:
E
academicdegree:
M
zhou:
38:
1800.2
level:
2
post:
1
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验七:
计算函数的定积分
一、实验目的:
1.熟悉并掌握虚函数
2.学会使用虚函数处理实际问题
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、计算函数的定积分
四、试验步骤:
1、要求:
假设函数f(x)=4/(1+x*x),求函数f(x)的定积分:
的值。
设计一个程序,计算定积分的近似值,可以有三种近似算法供选择,它们都须首先把区间[a,b]分成n个等份,于是每一小段h=(b-a)/n,函数f(x)的自变量将顺序取为:
a,a+h,a+2h,⋯⋯,a+(n-1)h,a+nh=b,共有n+1个点。
矩形法积分近似计算公式为:
sum=(f(a)+f(a+h)+f(a+2h)+⋯⋯+f(a+(n-1)h))h
梯形积分计算公式为:
sum=(f(a)+2f(a+h)+2f(a+2h)+⋯⋯+2f(a+(n-1)h)+f(b))h/2
simpson法积分公式为:
sum=(f(a)+4f(a+h)+2f(a+2h)+4f(a+3h)+2f(a+4h)+⋯⋯+2f(a+
(n-2)h+4f(a+(n-1)h)+f(b))h/3
2、程序代码:
#include
floatfunction(floatx){//欲积分的函数
return4.0/(1+x*x);
}
classinte_algo{//基类inte_algo
protected:
floata,b;//a,b为积分区间的左右边界
intn;//n