数据结构课程设计实践报告Word文档下载推荐.docx
《数据结构课程设计实践报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实践报告Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
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<
k)
{
q->
data=i+1;
//给每个结点的data赋值
count=0;
//给每个结点的count赋值
p->
next=q;
//q链接到p之后
p=q;
//将q作为新的p
q=q->
next;
//q指针后移
q=(LinkList*)malloc(sizeof(LinkList));
//申请结点空间
i++;
}
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->
//p指向首元素结点
while(p!
=NULL)
if((p->
data)%i==0)//若牌的编号能被基数i整除,则使p->
count++
count++;
p=p->
}//p指针后移
}
return(head);
3.2.3:
输出结果函数
输出正面朝上的牌的函数voidresult(LinkList*head)
定义一个LinkList类型指针q:
LinkList*q;
q=head->
//q指向首元素结点
printf("
正面向上的牌编号为:
"
);
while(q!
if((q->
count)%2==0)//若翻页的次数为偶数则正面朝上,输出
%4d"
q->
data);
q=q->
//q指针后移
\n"
3.3主函数:
voidmain()
charch;
//定义一个名字为ch变量为char类型
intk=52;
//共有52张牌
\n\n\t\t\t数据结构课程设计\n"
printf("
\n\t\t\t题目:
纸牌游戏\n"
\n\t\t\t专业:
计算机科学与技术\n"
printf("
\n\t\t\t班级:
计算机3111\n"
\n\t\t\t姓名:
卞玲玲\n"
\n\t\t\t学号:
**********"
\n******************************************************************************\n"
LinkList*head,*p;
执行此程序(Y),不执行此程序(N)\n"
scanf("
%c"
&
ch);
//格式控制符
while
(1)
if(ch=='
Y'
)
head=creat(k);
p=overcard(head,k);
result(p);
//输出正面向上的牌编号
elseif(ch=='
N'
退出程序!
break;
scanf("
//格式化输入函数
}
4调试与操作说明
进入主界面后,用户可以根据窗口提示得到想要的结果。
即输入Y则运行该程序,得到所有正面朝上的牌的编号,输入N则不运行该程序,退出运行窗口。
程序开始运行,进入界面,如下图所示。
如果用户想要执行程序,选择Y,进入下一界面,如下图所示。
如果用户不想要执行程序,选择N,进入界面,如下图所示。
总结
纸牌游戏是传统的中国智力游戏,它所要求的程序需要按一个完整的步骤去进行。
当然首先必须弄懂要开发的是什么样的纸牌游戏,它的目的是什么,在弄懂之后要构思用什么样的方法去解决问题,我通过在网上查找资料,并且问同学和老师我一些不懂的问题。
然后画出程序的流程图,并依照图来设计出解决问题的各种算法随后编程序。
最后将写好的程序进行调试和运行,直到满足题目的要求为止。
在这次课程设计中,我遇到了一系列的问题,能明显感觉到自己学习的知识还远远不够。
但是,为了完成这次程序设计并能很好的展示,我不断加深对数据结构要注意事项的理解,学习和掌握此门功课,掌握了面向对象程序设计方法。
在这个过程中也会在为了解决问题的时候发现新的问题,这样激发了自己主动学习的斗志,从而更好的理解所学到的知识点,用对地方。
通过这次课程设计的综合训练,不仅让我体会到了学习数据结构的重要性,而且培养了我们实际分析问题和动手编程的能力,从而更深层次的掌握了该门课程的主要内容。
感谢学校和老师给予我们这次机会,学无止境,我会继续努力,在学习的这条路上不断攀登,更多的去学会如何运用所学的知识,相信我会做的更好!
致谢
非常感谢学校为我们计算机专业的学生提供了为期两周的课程设计,让我们认识到计算机独有的魅力,也很感谢寇海州老师和龚乐君老师对我的细心指导,以及同学们对我的帮助和支持。
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版),清华大学出版社,2007
[2]王昆仑.数据结构与算法[M].北京:
中国铁道出版社,2007
[3]刘振鹏张晓莉郝杰.数据结构.北京:
中国铁道出版社.2005
[4]谭浩强.C语言程序设计题解与上机指导(第三版)[M].北京:
清华大学出版社
[5]潘新民,王燕芳.微型计算机控制技术[M],第2版.北京:
电子工业出版社,2003.4:
305-350
附录
源程序代码:
#include<
stdio.h>
//定义输入/输出函数
malloc.h>
//动态内存分配
typedefstructnode//定义单链表结点结构
LinkList*creat(intk)//创建链表函数
LinkList*head,*p,*q;
//定义LinkList类型的三个指针变量
inti=0;
//定义并初始化记录结点个数的变量
head=(LinkList*)malloc(sizeof(LinkList));
//申请头结点空间
p=head;
//指针p指向头结点
//申请结点空间
while(i<
q->
return(head);
LinkList*overcard(LinkList*head,intk)//翻牌函数
LinkList*p;
//定义一个LinkList类型指针p
for(inti=2;
p=head->
while(p!
{
if((p->
voidresult(LinkList*head)//输出结果函数
LinkList*q;
//定义一个LinkList类型指针q
q=head->
while(q!
if((q->
count)%2==0)//若翻过的次数为偶数则正面朝上,输出
//定义int类型
intk=52;
LinkList*head,*p;
while
(1)
if(ch=='
head=creat(k);
}
elseif(ch=='
printf("
break;
scanf("