程序设计方法专题实验报告_第1页
程序设计方法专题实验报告_第2页
程序设计方法专题实验报告_第3页
程序设计方法专题实验报告_第4页
程序设计方法专题实验报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计方法专题实验报告 班级:电信(硕)81班 姓名:尹鑫 学号:实验指导教师 : 徐宏喆 唐亚哲 吴茜媛 实验地点:计算机教学中心 实验结束日期:2009年7月23日联系电话: 程序设计方法专题实验一 实验任务题目一:模拟图形界面的计算器 要求:(1) 利用图形函数模拟一个计算器界面;(2) 实现 + , - , * , / , C , CE 等数学计算功能;(3) 输入格式为yyyy/mm/dd的数据,然后按-运算按钮,再输入一个yyyy/mm/dd的数据,紧接着按=按钮即可得到两个日期之间相差的天数。例如2009/03/20-2009/03/19=12009/03/20-2009/03

2、/21=-1题目二:寻找基数 问题描述: 同一个数会由于采用不同的基数,而使得其表现形式完全不一样。我们熟悉的基数有10进制,12进制,60进制,2进制,8进制和16进制。比如数据12,如果我们用2进制表示,则它就是1100;如果用3进制表示就是110;如果用8进制表示则是14。本题目的任务就是与数的进制(也就是基数)有关。 本题目会给大家很多个数对(假设每个数对的数用X和Y表示),程序需要解决的问题就是为X和Y各选择一个最小的基数,以使得这两个数在其选择的基数上是一对相等的数。例如,12和5这个数对,我们可以为12选择基数3,为5选择基数6,这样一来12(base 3)=5(base 6),

3、因为12(base 3)就是10进制数5,而5(base 6)也是10进制数中的5。要求:输入:程序输入通过文件完成。文件中的每一行都包含一个数对X和Y,两个数通过一个或多个空格符分割,与X和Y相关联的有效基数范围为236。X和Y的合理数值表示字符包括09和AZ(表示数值1035)。文件的最后一行用一个数字0表示输入结束。输入样例文件(base.in):12 5 10 A12 34123 456 1 2 10 2 0 输出:结果存放在一个文件中。该文件中的每一行对应为输入文件中相应的那行数对,输出的格式按照下面的样例文件即可。 输出样例文件(base.out):12(base 3)=5(bas

4、e 6)10(base 10)=A(base 11)12(base 17)=34(base 5)123 is not equal to 456 in any base 2361 is not equal to 2 in any base 23610(base 2)=2(base 3)题目三:“贪吃蛇”游戏要求:(1) 一条蛇在一个密闭的围墙内,食物在墙内随机出现;(2) 通过键盘的光标键控制蛇的移动,可以在上、下、左、右四个方向移动;(3) 蛇头撞到食物,则表示蛇吃掉了食物,得10分,并且蛇的身体长长1节,接着食物再随机出现;(4) 蛇移动过程中,若撞到墙或者自己的身体,则游戏结束。二 实验内

5、容题目一所涉及的知识点:由于题目要求利用图形函数制作计算机界面,因此,该题目所涉及的主要知识点为图形函数的调用,其次是定义一系列加减乘除等运算函数并调用.在计算日期时,采用计算所给日期到公元0年0月0日之间的天数然后将所得天数相减的方法,所以在计算天数时要考虑平年闰年的情况,还要考虑每个月的天数不同.最后,所有的计算结果都存入一个字符型数组中,并在计算器的显示框内输出.题目二所涉及的知识点:首先读取文件,将读取的数以字符串的形式存入两个数组中,并比较两个数的大小,找出两个数中最大的字符,然后在从最大字符的下一个字符到Z等一系列的基下,将这两个数分别表示为十进制的数,并比较大小,最后将比较结果以

6、文件的形式输出. 所以,所涉及的知识有文件的读取,字符的比较,数在不同基下的转换,结果以文件形式输出等等.题目三所涉及的知识点:贪吃蛇在运动过程中,靠方向键控制,只在墙内运动,并且蛇每吃到食物则蛇身增长一节,当蛇头撞到墙上或自己的身体上时,游戏结束.所以,该程序所涉及的知识有,利用函数生成围墙,并将围墙内的空间划分为一系列的小方块,利用ShowSnake()函数将蛇显示在界面内,利用SetFood()函数设置食物,设置方向键以控制蛇的运行,定义函数以判断蛇头是否撞墙,或者撞到自己的身体,如果撞到,则游戏结束.三 程序的算法描述 题目一 程序的算法的N-S图:为简单起见,将日期计算与一般计算分开

7、表述: (1)一般计算的N-S图:(2)日期计算的N-S图:题目二 程序的算法的N-S图:题目三 程序的算法描述:首先,构建围墙,设置围墙大小,并将围墙内的空间划分为一系列的小方块,为每个方块设置坐标,坐标与数组的下标相同.void CSnakeDlg:MakeMap() /设置窗口大小int cxWnd=GetSystemMetrics(SM_CXFRAME)*2+MAX_X*PANE_LEN-GetSystemMetrics(SM_CXEDGE);int cyWnd=GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME)*2+

8、MAX_Y*PANE_LEN-GetSystemMetrics(SM_CYEDGE);SetWindowPos(NULL,0,0,cxWnd,cyWnd,SWP_NOZORDER|SWP_NOMOVE); m_img.LoadBitmap(IDB_PANE); for(int i=0;iMAX_X;i+)for(int j=0;jMAX_Y;j+)m_mapij.Create(,WS_CHILD|SS_BITMAP|WS_DISABLED , /创建方块CRect(PANE_LEN*i,PANE_LEN*j,PANE_LEN*(i+1),PANE_LEN*(j+1),this);m_mapij

9、.SetBitmap(HBITMAP)m_img); m_mapij.SetPoint(i,j); /为每个方块设置坐标,坐标与数组下标相同 蛇在运行过程中,以方向键控制蛇的运动.具体程序如下:void CSnakeDlg:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call default/游戏的控制switch(nChar)case W:case VK_UP:m_snake.MoveUp(); break;case S:case VK_D

10、OWN:m_snake.MoveDown();break;case A:case VK_LEFT:m_snake.MoveLeft();break;case D:case VK_RIGHT:m_snake.MoveRight();break;case VK_ESCAPE:EndDialog(1); /退出程序break;default:;CDialog:OnKeyDown(nChar, nRepCnt, nFlags);通过以下程序将蛇显示出来:void CSnakeDlg:ShowSnake()int len=m_snake.GetBodyLen();for(int i=0;ilen;i+)

11、 m_mapm_snake.m_bodyi.xm_snake.m_bodyi.y.ShowWindow(SW_SHOW); m_mapm_snake.m_preEnd.xm_snake.m_preEnd.y.ShowWindow(SW_HIDE);蛇在运动过程中,吃到食物,则蛇身增加一节,这时,食物从新设置,蛇也以新的形态显示出来,在设置食物时,食物不能与蛇身重合,如果运动时撞墙或者撞到自己的身体,则游戏结束.void CSnakeDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call

12、defaultm_snake.KeepMoving(); /保持原方向移动一步if(!m_snake.IsTouch(MAX_X,MAX_Y) /撞墙处理KillTimer(1); InitGame(); else /不撞墙处理/吃到食物处理if(m_snake.IsEat(m_food) /蛇变长m_snake.Grow(); /放置新食物m_food=SetFood();/显示蛇ShowSnake(); 蛇吃掉食物后,按照如下方式重新设置食物:CPoint CSnakeDlg:SetFood() int x=0; int y=0;CPoint food;bool flag=true;/随机

13、产生,合适的坐标while(flag) srand(time(NULL);x=rand()%MAX_X;y=rand()%MAX_Y;food.x=x;food.y=y;for(int i=0;im_snake.GetBodyLen();i+)if(food!=m_snake.m_bodyi) /坐标不能与蛇身重合 flag=false;m_mapxy.ShowWindow(SW_SHOW); return food;在编写程序的过程中,还应考虑在游戏开始时,蛇头随机出现,但不能出现在食物上,蛇身上和墙上,这样,所编写的程序才能正常运行.四 程序运行结果 题目一程序运行结果: 题目二程序运行结

14、果:题目三程序运行结果:五 实验总结通过这次实验,我感觉收获很多.首先,由于我只是在大一上学期学过程序设计与C语言,并且未学其中有关于文件的知识,所以,半年后从新拾起编程的题目,倍感吃力.于是就到图书馆借了几本有关Visual C+程序设计的书,再加上自己大一时的课本,弄到这些资料后,就在寝室研究起来,在上机之前的那几天里,终于把编这三个程序所需要的知识弄明白了.由于在之前的两节课里,老师已经把这三个题目大致讲了,所以在看完资料后,对这三个题目的处理方法已经有所了解,再也不像刚开始接触题目时那样一头雾水了.从这三个程序编写过程中,我感觉自己的自学能力得到了提高,并且眼界得以扩展,学到了很多新的

15、很有用的东西.其次,这次实验,培养了自己勇于面对困难的优良品质,使自己明白,在面对困难时应该勇敢的迎上去而不应该选择逃避,这样才能解决问题.在刚拿到实验题目时,便是一头雾水,感觉实验难度极大,于是便萌生退意,于是在上第一节课时,就和几个同学一起去找老师,看看能不能把课退掉.后来看到不行,就只能硬着头皮去研究这几个题目,最终在自己的努力,同学的帮助和老师的指导下完成了这几个程序的编写.世上无难事,只要肯攀登,这句话的含义在这一刻显得如此刻骨铭心.再次,通过这次实验,自己的思维方式发生了很大的变化.众所周知,C+面向对象程序设计与C语言的面向过程程序设计相比,是一种全新的思维方式,这种思维方式使得

16、我得以以一种全新的方式看待问题,从而以一种科学的方式来处理问题.这将是我一生都受益无穷的.最后,就程序设计方法专题实验课提一点拙见.(1) 程序设计方法专题实验课最好不要放在一个学期的学期末开课,因为此时学校放假,大部分学生都回家了,并且夏天天气很热,这时学生无法静下心来好好分析实验题目,更无从谈起做题,这样很多人就会产生应付了事的想法,甚至抄袭他人的程序,以求完成任务,达不到该课程培养学生编程兴趣的目的.因此,对于这门课,最好能放在学期内和其他课程一样开课.(2) 对于实验题目,我想,最好能设置一系列难度系数的题目,学生可以在这些题目里面随意选取三个适合自己的题目,提交后按照所选题目的难度系

17、数折算分数,这样,既可以使每个同学的能力得到充分的发挥,提高学生的编程兴趣,又可以防止学生因题目太难而抄袭.可以有效地达到开设该门课程的目的.六 致谢词通过这次程序设计方法专题实验课,我学到了很多有用的东西,比如说面对困难要迎难而上不应害怕逃避,比如说新的面向对象的思维方式等等.当然,所有的这些东西都离不开老师的教导和同学的帮助的.首先,各位老师的谆谆教导是我各种优良品质得以形成的主要因素,在我做这三个编程题目时,但凡遇到困难,各位老师都不厌其烦的给我讲解,教会了我很多知识,并且在提交程序的过程中给我点出错误,告诉我解决的方法,让我受益匪浅.其次,在课下编写程序的过程中,我遇到了很多不懂的地方,比如,在编写计算器的程序时如何对鼠标消息进行响应,又如,在编写贪吃蛇程序过程中,蛇吃食物后如何增加长度等,这时无法向老师请教,很多同学给予了我很大的帮助,使得我可以顺利编写出程序,顺利完成任务.所以,在这里,我要感谢帮助我的各位老师,正是你们的教导,让我学到了很多有用的东西,使得我受益匪浅.同时我也要感谢帮助我的同学,正是有了他们的帮助,我才能顺利写出程序,才

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论