面向对象程序设计实验指导书.docx
《面向对象程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验指导书.docx(19页珍藏版)》请在冰点文库上搜索。
![面向对象程序设计实验指导书.docx](https://file1.bingdoc.com/fileroot1/2023-6/8/8dce7787-fd7f-47c7-bba0-b4df40e62ca9/8dce7787-fd7f-47c7-bba0-b4df40e62ca91.gif)
面向对象程序设计实验指导书
实验一
[实验日期]年月日
[实验目的]:
了解C++开发工具的特点,熟悉C++开发环境,学习用C++编写标准的C++程序;
[实验内容]:
使用C++来建立一个非图形化的标准C++程序,编译、运行下例程序:
#include
voidmain(void)
{
cout<<”Hello!
\n”;
cout<<”WelcometoC++!
\n”;
}
[实验原理和步骤]:
(1)启动VisualC++或C++Builder开发环境
(2)创建一个项目
A)单击File菜单中的New选项,显示示新建对话框
B)选择ConsoleWizard(C++Builder)或Win32ConsoleApplication(VC++)。
C)选择项目所在路径及输入项目的名称
D)依次按‘下一步’直至完成为止。
(3)至此,C++Builder已经建立好工程相关的文件(请不要随意更改其自动生成的文件),在生成的main函数中写入必要的内容即可。
(4)对于VC,请继续下面的步骤:
A)建立C++源程序文件
a)选选菜单命令Project|AddtoProject|New,弹出New对话框
b)在New对话框的Files选项卡中选择C++SourceFile,并填入文件名称,单击OK按钮,完成新建C++源程序文件
B)编辑C++源程序文件
a)在文件编辑窗口中输入代码
b)完成后,选择菜单File|Save保存这个文件
C)建立并运行可执行程序
a)选择菜单命令Build,建立可执行程序
如果你正确输入了源程序,此时便成功地生成了可执行程序。
如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build建立可执行程序。
b)选择菜单命令Run,运行程序,观察屏幕显示内容。
D)关闭工作空间
选择菜单命令File|ColseWorkSpace关闭工作空间。
[实验结果]:
#include
usingnamespacestd;
intmain()
{
cout<<”Hello!
\n”;
cout<<”WelcometoC++!
\n”;
}
[实验总结]:
这个实验是个基础,他让我初步了解了C++以及它的运行环境工具。
实验中开始对iostream.h与iostream之间的不同不了解导致错误。
这次实验让我学会了C++的基本格式,以后实验前要先对实验进行初步了解。
实验二
[实验日期]年月日
[实验目的]:
学会编写简单的C++程序,练习使用简单的输入输出,观察头文件的作用,学会使用VC++6.0的DEBUG调试程序。
[实验内容]:
(1)输入并运行教材《C++语言程序设计》中的例题2-7,即:
用do-while语句编程,求自然数1~10之和。
程序正确运行之后,去掉源程序中的#include语句,重新编译,观察会有什么问题。
(2)do-while语句用for语句代替,完成相同的功能。
(3)程计算图形的面积。
程序可计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积后将其显示出来。
a)使用debug调试功能观察程序运行中变量值的变化情况。
b)定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。
[实验原理和步骤]:
(1)建立一个控制台应用程序项目lab2_1,向其中添加一个C++源文件lab2_1.cpp,输入教材《C++语言程序设计》中例2-7的代码,检查一下确认没有输入错误,选择菜单命令编译源程序,再选择Execute运行程序,观察输出是否与教材中的答案一致。
(2)建立项目lab2_3,计算图形面积。
圆形的面积计算公式为S=PI*r*r,长方形的面积计算公式为S=a*b,正方形的面积市场计算公式为S=a*a。
程序中定义一个整型变量iType表示图形的类型,用cout语句输出提示信息让用户选择图形的型,用cin读入iType的值,然后,使用switch语句判断图形的类型,分别提示用户输入需要的参数值,计算出面积的值后用cout语句显示出来。
最后编译运行程序。
(3)定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来
[实验结果]:
(1)#include
usingnamespacestd;
intmain()
{
inti=1,sum=0;
do
{
sum+=i;
i++;
}
while(i<=10);
cout<<"sum="<return0;
}
运行出错,无法进行正常运作。
(2)#include
usingnamespacestd;
intmain()
{
inti,sum=0;
for(i=1;i<=10;)
{
sum+=i;
i++;
}
cout<<"sum="<return0;
}
(3)
#include
usingnamespacestd;
constfloatPI=3.1416;
intmain()
{
intiType;
floatr,a,b,S;
cout<<"图形的类型(1-圆2-长方形3-正方形):
";
cin>>iType;
switch(iType)
{
case1:
cout<<"r=";
cin>>r;
S=PI*r*r;
cout<<"S="<
break;
case2:
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
S=a*b;
cout<<"S="<
break;
case3:
cout<<"a=";
cin>>a;
S=a*a;
cout<<"S="<
break;
default:
cout<<"不是合法的输入值!
"<}
return0;
}
(4)
#include
usingnamespacestd;
structtime
{
intyear,month,day,hour,minute,second;
};
intmain()
{
structtimet;
cout<<"输入相应year,month,day,hour,minute,second:
"<cin>>t.year>>t.month>>t.day>>t.hour>>t.minute>>t.second;
cout<return0;
}
[实验总结]:
这次试验我初步学会了一些基本的C++知识,输入输出以及将C语言的知识运用到C++上实现一些基本程序的编写,了解了头文件的作用。
另外我还学会了运行工具中的调试工具。
总体说来,这实验学到了基础方便以后的学习。
要学会区分C语言与C++之间的区别与相同之处。
实验三
[实验日期]年月日
[实验目的]:
掌握函数的定义和调用方法,练习重载函数使用,练习函数模板的使用,练习使用系统函数。
实验内容]:
(1)编写一个函数把华氏温度转换为摄氏温度,转换公式为:
C=(F-32)*5/9。
(2)编写重载函数Max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。
(3)使用重函数模板重新实现上小题中的函数Max1。
(4)使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。
a)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。
[实验原理和步骤]:
1)编写函数floatConvert(floatTempFer),参数的返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。
程序名为lab3_1.cpp.
2)分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。
程序名:
lab3_2.cpp。
3)使用函数模板实现求任意类型数的最大值,针对不同的参数个数,编写两个同名函数模板max1,其参数个数不同,实现函数重载,在main()函数中测试函数的功能。
和序名:
lab3_3.cpp。
4)在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。
程序名:
lab3_4.cpp。
5)编写递归函数intfib(intn),在主程序中输入n的值,调用fib函数计算Fibonacci级数。
公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib
(1)=fib
(2)=1。
使用if语句判断函数的出口,在程序中用cout语句输出提示信息。
程序名:
lab3_5.cpp。
6)使用debug中的StepInfo追踪到函数的内部,观察函数的调用过程,参考程序如下:
//lab3_5
#include
intfib(intn);
intmain()
{
intn,answer;
cout<<”Enternumber:
”;
cin>>n;
cout<<”\n\n”;
answer=fib(n);
cout<return0;
}
intfib(intn)
{
if(n<3)return1;
elsereturnfib(n-2)+fib(n-1);
}
7)调试操作步骤如下:
i.选择菜单命令Build|StartDebug|StepIn,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时光标停在main()函数的入口处。
ii.把光标移到语句answer=fib(n)前,从Debug菜单单击RunToCursor,在程序运行的DOS窗口中按提示输入数字10,这时回到可视界面中,光标停在第11行,观察一下n的值。
iii.从Debug菜单中单击StepInto,程序进入fib函数,观察一下n的值,把光标移到语句return(fib(n-2)+fib(n-1))前,从Debug菜单单击RuntoCursor,再单击StepInto,程序递归调用fib函数,又进入fib函数,观察n的值。
iv.继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。
v.再试试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。
[实验结果]:
(1)
#include
usingnamespacestd;
floatConvert(floatTempFer)
{
floatC;
C=(TempFer-32)*5/9;
returnC;
}
floatConvert(floatTempFer);
intmain()
{
floatF,C;
cout<<"输入华氏温度="<cin>>F;
Convert(F);
C=Convert(F);
cout<<"相应的摄氏度="<}
(2)
#include
usingnamespacestd;
intMax1(inta,intb)
{
if(a>b)
returna;
else
returnb;
}
intMax1(inta,intb,intc)
{
intd=Max1(a,b);
if(c>d)
returnc;
else
returnd;
}
doubleMax1(doublea,doubleb)
{
if(a>b)
returna;
else
returnb;
}
doubleMax1(doublea,doubleb,doublec)
{
doubled=Max1(a,b);
if(c>d)
returnc;
else
returnd;
}
intmain()
{
inta,b,c;
doublee,f,g;
cout<<"输入二个整数"<cin>>a>>b;
cout<cout<<"输入三个整数"<cin>>a>>b>>c;
cout<cout<<"输入二个双精度数"<cin>>e>>f;
cout<cout<<"输入三个双精度数"<cin>>e>>f>>g;
cout<return0;
}
(3)
模板函数使用
#include
usingnamespacestd;
template
MMax1(Mt1,Mt2,Mt3)
{
Mt=t1>t2?
t1:
t2;
returnt>t3?
t:
t3;
}
template
NMax2(Nt1,Nt2)
{
Nt=t1>t2?
t1:
t2;
returnt;
}
intmain()
{
inta,b,c;
doubled,e,f;
cout<<"输入二个整数:
"<cin>>a>>b;
cout<cout<<"输入二个双精度浮点数:
"<cin>>d>>e;
cout<cout<<"输入三个整数:
"<cin>>a>>b>>c;
cout<cout<<"输入三个双精度浮点数:
"<cin>>d>>e>>f;
cout<return0;
}
(4)
#include
#include
usingnamespacestd;
intpow(intx,inty)
{
intm=1;
for(y>=1;y--;)
m=m*x;
returnm;
}
intmain()
{
intx,y;
floatm;
cout<<"x=";
cin>>x;
cout<<"y=";
cin>>y;
cout<return0;
}
(5)
#include
usingnamespacestd;
floatfib(intn)
{
if(n<=2)
return1;
else
returnfib(n-2)+fib(n-1);
}
intmain()
{
intn;
cout<<"输入n:
"<cin>>n;
cout<<"fibonacci级数为:
"<return0;
}
[实验总结]:
这次实验我初步掌握了函数的定义与其的调用方法,使用重载函数来进行运算,练习函数模板并使用系统函数。
这次实验中出现错误相对比较多。
首先在函数的定义与调用中多次出现定义函数与调用不一致导致无法运行。
重载函数上运用也比较生疏。
在函数模板的使用上经常出现错误。
总体说来这次实验中学到的东西还是比较多的。
实验四
[实验日期]年月日
[实验目的]:
掌握类的定义和使用,掌握类的定义和对象的声明,复习具有不同访问属性的成员的访问方式,察构造函数和析构函数的执行过程,学习类的聚集使用方法,使用DEBUG来调试程序,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
[实验内容]:
1)定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。
其中rank为枚举类型CPU_Rank,定义为enumCPU_Rank={P1=1,P2,P3,P4,P5,P6,P7},frequency为单位为MHz的整型数,voltage为浮点型的电压值。
观察构造函数和析构函数的调用顺序。
2)定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。
3)(选做)设计一个用于人事管理的People(人员)类。
考虑到通用性,这里只抽象出所有类型人员都具有的属性:
number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。
其中“出生日期”定义为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:
构造函数和析构函数、拷贝构造函数、内联成员函数。
[实验原理和步骤]:
(1)首先定义枚举类型CPU_Rank,例如enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。
在主程序中定义一个CPU类的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。
程序名:
lab4_1.cpp。
(2)使用debug调试功能观察lab4_1.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
参考程序如下:
(3)调试操作步骤如下:
Build|StartDebug|StepInto命令,系统进行单步执行状态,程序开始运行,一个DOS窗口出现,此时光标停在main()函数的入口处;
A)从Debug菜单栏中单击StepOver,此时,光标下移,程序准备执行CPU对象的初始化;
B)单击StepInto,程序准备执行CPU类的构造函数;
C)连续单击StepOver,观察构造函数的执行情况,直到执行完构造函数,程序回到主函数;
D)此时程序准备执行CPU对象的run()函数,单击StepInto,程序进入run()成员函数,连续单击StepOver,直到回到main()函数;
E)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识;
F)再试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。
G)选定义CPU类、RAM类、CDROM类。
再定义Computer类:
定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提标信息居主程序中定义一个Computer的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。
程序名:
lab4_2.cpp。
(5)使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。
[实验结果]:
[实验总结]:
实验一
[实验日期]年月日
[实验目的]:
[实验内容]:
[实验原理和步骤]:
[实验结果]:
[实验总结]: