面向对象程序设计实验指导书版Word文档下载推荐.docx

上传人:b****4 文档编号:16291543 上传时间:2022-11-22 格式:DOCX 页数:83 大小:79.05KB
下载 相关 举报
面向对象程序设计实验指导书版Word文档下载推荐.docx_第1页
第1页 / 共83页
面向对象程序设计实验指导书版Word文档下载推荐.docx_第2页
第2页 / 共83页
面向对象程序设计实验指导书版Word文档下载推荐.docx_第3页
第3页 / 共83页
面向对象程序设计实验指导书版Word文档下载推荐.docx_第4页
第4页 / 共83页
面向对象程序设计实验指导书版Word文档下载推荐.docx_第5页
第5页 / 共83页
点击查看更多>>
下载资源
资源描述

面向对象程序设计实验指导书版Word文档下载推荐.docx

《面向对象程序设计实验指导书版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验指导书版Word文档下载推荐.docx(83页珍藏版)》请在冰豆网上搜索。

面向对象程序设计实验指导书版Word文档下载推荐.docx

四、主要仪器设备

装有C++集成开发环境的微型计算机。

五、实验项目及教学安排

序号

实验项目名称

实验基本方法和内容

项目学时

项目

类型

每组

人数

教学要求

1

C++对C的扩充

使用集成开发环境开发简单C++程序;

通过编写求斐波那契数列的第n项和前n项之和等简单程序,学习C++中的各种程序控制结构;

通过解决Josephus问题,学习C++中各种运算符的功能、优先级和结合性;

编写一个复杂的程序来学习自定义头文件的方法,学会调试多文件程序;

分析五子棋游戏程序,学习指针的基本用法;

编写简单程序学习动态内存的分配和释放,理解内存泄漏的危害。

2

基础

必修

类和对象

分析完整的Person类的定义,学习类和对象的概念、定义和使用方法;

实现一个带有头结点的单链表,学习用类和对象解决实际问题。

4

继承和组合

分析完整的Person类和Employee类的定义,学习继承和派生概念;

利用继承和组合的概念实现一个计算图形面积的类库。

多态、友元、虚函数、模板

利用抽象类设计一个计算图形面积的类库,学习动态联编的概念;

分析Complex类的实现,理解重载运算符的意义;

实现分数类,学习重载运算符方法,理解C++中的异常处理机制;

用类模板实现一个带有头结点的单链表。

5

课程设计

学习Windows程序的消息处理机制和编程模式,分析设计自动取款机模拟系统,学习面向对象编程方法的思想,练习用面向对象编程方法解决实际问题。

综合

选修

六、考核方式及成绩评定

根据学生实验出勤情况、实验态度、实验报告成绩、实验考核成绩等评定实验成绩。

实验报告(含实验理论)占实验成绩的30%,实验技能(含实验态度)占实验成绩的30%,实验考核占实验成绩的40%。

最终实验成绩占该课程考核总成绩的20%—30%。

七、实验教科书、参考书

1.实验教科书

自编实验指导书。

2.实验参考书

实验一 C++对C的扩充

基本信息

实验课程:

面向对象程序设计设课形式:

非独立

2实验项目:

项目类型:

基础项目学时:

实验预习

实验目的和要求:

1、了解在面向过程程序设计中C++对C语言的扩充与增强,并善于在编写程序过程中应用这些新的功能;

2、熟悉在Eclipse集成开发环境下编辑、编译、连接和运行C++程序的方法;

3、熟悉C++程序的结构和编程方法。

实验内容和原理或涉及的知识点:

1、验证大于等于4小于等于10000的偶数均可分解微量素数之和,并打印分解形式。

2、编写程序进行模拟仿真。

在码头酒馆和游船之间搭了一条长20米,宽4米的跳板,醉酒的船员和游客回艇时必须通过这个跳板。

通过跳板时,有三种可能的结果:

向前走,回到游船上休息,不再出来;

转身回到酒馆,重新开始喝酒,不再出来;

左右乱晃,落入水中淹死。

果醉酒者每次走一步,一步走1米。

而且他们向前走的概率是0.7,向左走、向右走和向后走的概率各为0.1。

现在假设开始时他们都是站在酒馆的门口,编写程序模拟出若干个醉酒者的最终行为结果。

3、编写程序解决Josephus问题。

Josephus问题是说,一群小孩围坐成一圈,现在任意取一个数n,从当前编号为一的孩子开始数起,依次数到n(因为围成了一圈,所以可以不停的数下去),这时被数到n的孩子离开,然后圈子缩小一点。

如此重复进行,小孩数不断减少,圈子也不断缩小。

最后所剩的那个小孩就是胜利者。

请找出这个胜利者。

4、编写程序实现五子棋棋游戏。

五子棋的规则为:

双方各执一色棋子,轮流下子(将子放在棋盘的任一未下子的点上),直到有一方的棋子有5个排成一线(无论是横、竖还是斜均可),则棋局结束,该方胜利。

实验条件:

1、装有Windows操作系统的微型计算机;

2、Eclipse集成开发环境和CDT插件;

3、MinGW编译环境。

实验设计方案:

1、熟悉在Eclipse集成开发环境下编辑、编译、连接和运行C++程序的方法。

2、借助流程图对程序进行“自顶向下、逐步求精”的结构化分析。

3、熟悉C++中const、引用、new、delete的用法。

4、利用“筛法”生成素数表。

5、实现模拟仿真要利用随机值函数。

实验过程

1、根据实验预习阶段的实验设计方案,编写应用程序。

参考代码如下。

#include<

iostream>

cmath>

constintM=10001;

//定义验证范围

//函数CreatPrimeList():

生成素数表

voidCreatPrimeList(int*PrimeList,intn)

{

inti,j;

//将PrimeList的各元素设置为从0开始的正整数

for(i=0;

i<

n;

i=i+1)

{

PrimeList[i]=i;

}

//分别从表中去掉已经确定的各素数的倍数(将其置为0)

i=2;

while(i<

=sqrt(n))

for(j=i+1;

j<

j=j+1)

{

if(PrimeList[j]!

=0&

&

PrimeList[j]%PrimeList[i]==0)

{

PrimeList[j]=0;

}

}

//确定下一个素数的位置

i=i+1;

while(PrimeList[i]==0)

i=i+1;

}

//函数NextPrimeNumber():

求下一个素数

intNextPrimeNumber(intp,int*PrimeList)

p=p+1;

while(PrimeList[p]==0)

p=p+1;

returnPrimeList[p];

//主函数:

在从4到M的范围内验证哥德巴赫猜想

intmain()

intPrimeList[M];

//说明存放素数表的数组

intx,p;

//变量x:

偶数,p:

素数

//建立素数表

CreatPrimeList(PrimeList,M);

//对从4到M的所有偶数验证哥德巴赫猜想

x=4;

while(x<

M)

//检查偶数减去一个素数后的剩余部分是否仍为素数

p=PrimeList[2];

while(p<

=x/2&

PrimeList[x-p]==0)

p=NextPrimeNumber(p,PrimeList);

//输出检查结果

if(p>

x/2)//找到了一个不能分解为两个素数和的偶数

std:

:

std:

cout<

<

"

Greatdiscovery:

Goldbachiswrong!

"

<

std:

endl;

else//PrimeList[x-p]≠0,分解成功

Theevennumber"

x<

="

p<

+"

x-p

<

//检查下一个偶数

x=x+2;

return0;

2、根据实验预习阶段的实验设计方案,编写应用程序。

ctime>

cstdlib>

constintSHIP=1;

constintBAR=2;

constintWATER=3;

//一个醉酒者行为的模拟仿真

intdrunkard()

intx=-10;

//记录醉酒者的x坐标,开始时在酒馆门口

inty=0;

//记录醉酒者的y坐标,开始时在跳板的中央

intstep=0;

//记录醉酒者一共走了多少步

while(abs(x)<

=10&

abs(y)<

=2)

switch(rand()%10)

case0:

//向左走

y=y-1;

break;

case1:

//向右走

y=y+1;

case2:

//向后走

x=x-1;

case3:

//向前走

case4:

case5:

case6:

case7:

case8:

case9:

x=x+1;

step=step+1;

if(x<

-10)

std:

After"

step

<

steps,themanreturnedtothebaranddrunkagain"

returnBAR;

else

if(x>

10)

step<

steps,themanreturnedtotheship"

returnSHIP;

else

steps,themandroppedintothewater"

returnWATER;

//反映若干个醉酒者最终行为的模拟仿真的主函数

srand(time(0));

//初始化随机种子

intdrunkardnumber;

//醉酒者总数

intshipnumber=0;

//到达船上的人数

intbarnumber=0;

//返回酒馆的人数

intwaternumber=0;

//掉进水中的人数

Pleaseinputthenumberofdrunkard"

cin>

>

drunkardnumber;

for(inti=0;

switch(drunkard())

caseSHIP:

shipnumber=shipnumber+1;

caseBAR:

barnumber=barnumber+1;

caseWATER:

waternumber=waternumber+1;

******************************"

Ofallthe"

drunkardnumber<

drunkards:

shipnumber<

returnedtotheship"

barnumber<

wenttothebaranddrunkagain"

waternumber<

droppedintothewater"

3、根据实验预习阶段的实验设计方案,编写应用程序。

constintTotal=7;

//小孩总数,可以改动。

intChooseNum;

//用户随机选取的数

intboy[Total];

//表示小孩的数组

Total;

i++)

boy[i]=i+1;

//给小孩编号

Pleaseinputthenumberwhichistobeeliminated:

;

ChooseNum;

//用户随机输入一个剔除的数

Beforeeliminating,theboysare:

boy[i]<

\t"

intk=1;

//第k个离开的小孩

intn=-1;

//数组下标,下一个为0表示从第一个孩子开始数数

while(true)

//在圈中开始剔除

for(intj=0;

n=(n+1)%Total;

if(boy[n]!

=0)//如果该小孩还在圈中,则参加计数

j++;

if(k==Total)//如果已经全部剔除完成,则跳出循环

boy[n]=0;

k<

timeselimination,theboysleftare:

for(i=0;

if(boy[i]!

=0)

std:

k++;

//break语句跳转至此,输出胜利者编号

TheNo."

boy[n]<

boyisthewinner."

4、根据实验预习阶段的实验设计方案,编写应用程序。

constintM=7;

//规定棋盘大小

constintN=5;

//玩几子棋

voidInitChess(char*);

voidHumanMove(char*);

voidComputerMove(char*);

voidShowChess(char*);

charWinCheck(char*);

char*chess=newchar[M*M];

if(NULL==chess)

return0;

chardone;

cout<

---GameofChess---"

Humanagainstthestupidcomputer"

done='

*'

InitChess(chess);

do

ShowChess(chess);

HumanMove(chess);

done=WinCheck(chess);

//检查是否有赢家

if(done!

='

break;

//如有赢家,则跳出循环

ComputerMove(chess);

done=WinCheck(chess);

}while(done=='

);

//显示棋局最终状态

if(done=='

H'

Humanwon!

Computerwon!

!

delete[]chess;

//初始化棋盘

voidInitChess(char*chess)

M;

j++)

chess[i+M*j]='

//下棋人的落子

voidHumanMove(char*chess)

intx,y;

EnterX,Ycoordinatesforyourmove:

x>

y;

x--;

y--;

if(chess[x+M*y]!

Invalidmove,tryagain."

chess[x+M*y]='

//计算机落子

voidComputerMove(char*chess)

for(j=0;

if(chess[i+M*j]=='

if(chess[i+M*j]=='

if(i*j==M*M)

Diamondcutdiamond"

exit(0);

chess[i+M*j]='

C'

//在屏幕上显示棋局

voidShowChess(char*chess)

chess[i+M*j]<

endl<

//检查是否有赢家

charWinCheck(char*chess)

chart=chess[i+M*j];

intcount=1;

for(inta=i+1,b=j+1;

chess[a+M*b]==t&

a<

M&

b<

a++,b++)

{

count++;

if(count>

=N)

returnt;

count=1;

for(a=i,b=j+1;

chess[a+M*b]==t&

b++)

if(

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

当前位置:首页 > 高中教育 > 英语

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

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