数据结构课程设计实践报告.docx
- 文档编号:8840885
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:12
- 大小:72.41KB
数据结构课程设计实践报告.docx
《数据结构课程设计实践报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实践报告.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构课程设计实践报告
淮阴工学院实践报告
数据结构课程设计
设计题目:
纸牌游戏
系别:
江淮学院
专业:
计算机科学与技术
班级:
计算机3111
学生姓名:
卞玲玲学号:
**********
起止日期:
2012年12月24日~2013年1月6日
指导教师:
寇海洲、龚乐君
摘要:
纸牌游戏是一副或多幅纸牌提供娱乐的牌戏,是大家熟知的益智游戏。
早期的纸牌大部分为数码牌,中国的玩法通常是高点数胜低点数,或以特殊组合牌型取胜,此二原则仍为两大牌戏派别中论计胜负的标准。
而在当今社会,纸牌游戏已成为高雅的社交与智力活动,是我们娱乐休闲的方式之一,所以在游戏之余,我们不但要学会怎么玩纸牌游戏,而且更要尝试去做一种纸牌游戏。
关键词:
纸牌游戏,翻牌,流程图,数据结构,C语言
3.2.1创建链表函数5
3.2.2创建翻牌函数6
3.2.3输出结果函数7
3.3主函数7
1需求分析
1.1课题设计目的
纸牌游戏是一种休闲娱乐方式,通过与《数据结构》课程的联系,设计一段完整的程序,开发一种新的游戏玩法,使学生在掌握数据结构的同时,懂得怎样去开发,去实际应用所学到的知识。
1.2课程设计任务:
编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:
这时正面向上的牌有哪些?
2概要设计
2.1设计思路
编号为1的牌没有进行翻牌,所以仍然是正面向上,当从第二个编号开始的每张牌每次遇到是其倍数时,都会相应的翻一次,比如24,第一次它是2的倍数时要从正面翻到背面,当进行到3时,就又要从背面翻回来,而到4时还要在翻,以此类推,到6.8.12…它都要来回的翻。
如果它在多次的翻牌后,正面还向上了,那么它就是要输出的结果之一。
2.2设计流程
2.2.1主要步骤
1)定义单链表结点结构
2)创建与52张牌分别对应的含52个结点的链表;
3)调用翻牌算法按照其中判断规则创建翻牌函数;
4)输出在执行翻牌算法之后的结果,即通过for循环的嵌套,输出所有正面向上的牌,达到课程设计目的。
2.2.2流程图
3详细设计
3.1定义单链表结点
typedefstructnode
{
intdata;//牌的编号
intcount;//记录翻牌的次数
structnode*next;//指向下一个结点的指针
}LinkList;//该单链表为LinkList类型
3.2主要函数功能
3.2.1:
创建链表函数
创建带有头结点的单链表LinkList*creat(intk)//创建链表函数
一开始定义LinkList类型的三个指针变量:
LinkList*head,*p,*q;
然后定义并初始化记录结点个数的变量i:
inti=0;
定义完这些变量后,
继而首先申请头结点空间:
head=(LinkList*)malloc(sizeof(LinkList));
指针p指向头结点head:
p=head;
然后利用指针q再申请结点空间:
q=(LinkList*)malloc(sizeof(LinkList));
将结点链接成链表的具体操作如下:
while(i { q->data=i+1;//给每个结点的data赋值 q->count=0;//给每个结点的count赋值 p->next=q;//q链接到p之后 p=q;//将q作为新的p q=q->next;//q指针后移 q=(LinkList*)malloc(sizeof(LinkList));//申请结点空间 i++; } p->next=NULL;//将最后一个结点的next域赋为空 return(head);//返回头结点 3.2.2创建翻牌函数: 翻牌函数: LinkList*overcard(LinkList*head,intk) 说明: 形参分别指的是头指针和结点个数。 定义一个LinkList类型指针p: LinkList*p 因为翻牌时从第二张(也就是2)开始,可以使用for循环: for(inti=2;i<=k;i++)//从第二张牌开始 { p=head->next;//p指向首元素结点 while(p! =NULL) { if((p->data)%i==0)//若牌的编号能被基数i整除,则使p->count++ p->count++; p=p->next;}//p指针后移 } return(head); } 3.2.3: 输出结果函数 输出正面朝上的牌的函数voidresult(LinkList*head) 定义一个LinkList类型指针q: LinkList*q; q=head->next;//q指向首元素结点 printf("正面向上的牌编号为: "); while(q! =NULL) { if((q->count)%2==0)//若翻页的次数为偶数则正面朝上,输出 printf("%4d",q->data); q=q->next;//q指针后移 } printf("\n"); 3.3主函数: voidmain() { charch;//定义一个名字为ch变量为char类型 intk=52;//共有52张牌 { printf("\n\n\t\t\t数据结构课程设计\n"); printf("\n\t\t\t题目: 纸牌游戏\n"); printf("\n\t\t\t专业: 计算机科学与技术\n"); printf("\n\t\t\t班级: 计算机3111\n"); printf("\n\t\t\t姓名: 卞玲玲\n"); printf("\n\t\t\t学号: **********"); printf("\n******************************************************************************\n"); } LinkList*head,*p; printf("执行此程序(Y),不执行此程序(N)\n"); scanf("%c",&ch);//格式控制符 while (1) { if(ch=='Y') { head=creat(k); p=overcard(head,k); result(p);//输出正面向上的牌编号 } elseif(ch=='N') { printf("退出程序! \n"); break; } scanf("%c",&ch);//格式化输入函数 } } 4调试与操作说明 进入主界面后,用户可以根据窗口提示得到想要的结果。 即输入Y则运行该程序,得到所有正面朝上的牌的编号,输入N则不运行该程序,退出运行窗口。 程序开始运行,进入界面,如下图所示。 如果用户想要执行程序,选择Y,进入下一界面,如下图所示。 如果用户不想要执行程序,选择N,进入界面,如下图所示。 总结 纸牌游戏是传统的中国智力游戏,它所要求的程序需要按一个完整的步骤去进行。 当然首先必须弄懂要开发的是什么样的纸牌游戏,它的目的是什么,在弄懂之后要构思用什么样的方法去解决问题,我通过在网上查找资料,并且问同学和老师我一些不懂的问题。 然后画出程序的流程图,并依照图来设计出解决问题的各种算法随后编程序。 最后将写好的程序进行调试和运行,直到满足题目的要求为止。 在这次课程设计中,我遇到了一系列的问题,能明显感觉到自己学习的知识还远远不够。 但是,为了完成这次程序设计并能很好的展示,我不断加深对数据结构要注意事项的理解,学习和掌握此门功课,掌握了面向对象程序设计方法。 在这个过程中也会在为了解决问题的时候发现新的问题,这样激发了自己主动学习的斗志,从而更好的理解所学到的知识点,用对地方。 通过这次课程设计的综合训练,不仅让我体会到了学习数据结构的重要性,而且培养了我们实际分析问题和动手编程的能力,从而更深层次的掌握了该门课程的主要内容。 感谢学校和老师给予我们这次机会,学无止境,我会继续努力,在学习的这条路上不断攀登,更多的去学会如何运用所学的知识,相信我会做的更好! 致谢 非常感谢学校为我们计算机专业的学生提供了为期两周的课程设计,让我们认识到计算机独有的魅力,也很感谢寇海州老师和龚乐君老师对我的细心指导,以及同学们对我的帮助和支持。 参考文献 [1]严蔚敏,吴伟民.数据结构(C语言版),清华大学出版社,2007 [2]王昆仑.数据结构与算法[M].北京: 中国铁道出版社,2007 [3]刘振鹏张晓莉郝杰.数据结构.北京: 中国铁道出版社.2005 [4]谭浩强.C语言程序设计题解与上机指导(第三版)[M].北京: 清华大学出版社 [5]潘新民,王燕芳.微型计算机控制技术[M],第2版.北京: 电子工业出版社,2003.4: 305-350 附录 源程序代码: #include #include typedefstructnode//定义单链表结点结构 { intdata;//牌的编号 intcount;//记录翻牌的次数 structnode*next;//指向下一个结点的指针 }LinkList;//该单链表为LinkList类型 LinkList*creat(intk)//创建链表函数 { LinkList*head,*p,*q;//定义LinkList类型的三个指针变量 inti=0;//定义并初始化记录结点个数的变量 head=(LinkList*)malloc(sizeof(LinkList));//申请头结点空间 p=head;//指针p指向头结点 q=(LinkList*)malloc(sizeof(LinkList));//申请结点空间 while(i { q->data=i+1;//给每个结点的data赋值 q->count=0;//给每个结点的count赋值 p->next=q;//q链接到p之后 p=q;//将q作为新的p q=q->next;//q指针后移 q=(LinkList*)malloc(sizeof(LinkList));//申请结点空间 i++; } p->next=NULL;//将最后一个结点的next域赋为空 return(head);//返回头结点 } LinkList*overcard(LinkList*head,intk)//翻牌函数 { LinkList*p;//定义一个LinkList类型指针p for(inti=2;i<=k;i++)//从第二张牌开始 { p=head->next;//p指向首元素结点 while(p! =NULL) { if((p->data)%i==0)//若牌的编号能被基数i整除,则使p->count++ p->count++; p=p->next;}//p指针后移 } return(head); } voidresult(LinkList*head)//输出结果函数 { LinkList*q;//定义一个LinkList类型指针q q=head->next;//q指向首元素结点 printf("正面向上的牌编号为: "); while(q! =NULL) { if((q->count)%2==0)//若翻过的次数为偶数则正面朝上,输出 printf("%4d",q->data);//定义int类型 q=q->next;//q指针后移 } printf("\n"); } voidmain() { charch;//定义一个名字为ch变量为char类型 intk=52;//共有52张牌 { printf("\n\n\t\t\t数据结构课程设计\n"); printf("\n\t\t\t题目: 纸牌游戏\n"); printf("\n\t\t\t专业: 计算机科学与技术\n"); printf("\n\t\t\t班级: 计算机3111\n"); printf("\n\t\t\t姓名: 卞玲玲\n"); printf("\n\t\t\t学号: **********"); printf("\n******************************************************************************\n"); } LinkList*head,*p; printf("执行此程序(Y),不执行此程序(N)\n"); scanf("%c",&ch);//格式控制符 while (1) { if(ch=='Y') { head=creat(k); p=overcard(head,k); result(p);//输出正面向上的牌编号 } elseif(ch=='N') { printf("退出程序! \n"); break; } scanf("%c",&ch);//格式化输入函数 } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实践 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)