桂林航天工业高等专科学校。
课程设计。题目:纸牌游戏。
系别:计算机系。
专业:计算机应用技术。
姓名:郭家兴。
学号:200902120128
指导老师: 杨华。
目录。一。 课程设计目的第3页。
二。 课程设计目标第3页。
三。 需求分析第3页。
四。 程序实现思想第3页。
五。 设计说明第4页。
六。 源**第6页。
七。 运行后的菜单展示第7页。
八。 调试分析第7页。
九。 课设总结第8页。
一。课程设计目的:
熟练掌握数据结构这门课程,掌握经性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用。
进一步熟悉抽象数据类型的定义和实现、如何利用数组的动态分酚实现顺序结构、继承的实现方式。
学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、想念结构及基相应的算法并初步掌握算法的时间分析和空间分析的技术。
基本掌握程序设计的基本思路和方法。
利用所学的基本知识和技能,解决简单的程序设计问题各算法描述。
培养我们的数据抽象能力。
二。设计目标:
题目:纸牌游戏。
任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;..再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:
这时正面向上的牌有哪些?
三。需求分析:
用函数node()按照题目要求的规则,用几个循环体来实现。
四。程序实现思想:
首先必须确定实现这个课程设计的主算法是使用链式存储结构还是栈又或是数组和广义表。
根据题目要求需要实现的功能有:
1、 数据录入:输入各种数据;
此处即创建链表的过程,调用一个成员函数负值。在此处还有一个方法实现,即先输入数据,然后再调用构造实现。
2、数据统计:
存储方式的选择,是使用链式存储结构还是栈又或是数组和广义表;遵守先定义后调用的原则;数组定义时注意下标的起始值和上限;链表定义时注意结点中的项;准确运用结点。
3、 数据输出:按要求的格式打印。
调用do循环和for循环,通过遍历链表实现输出,用cout函数出。
4、 查找,修改,删除:
这三个功能的核心是寻找成员,先遍历链表,然后寻找对应的id号来找到结点,然后再对结点实行删除,修改操作。
五.设计说明:
题目2:纸牌游戏。
一、概要设计。
1.当每个号码每次遇到是某个数的倍数时,都会相应的翻一次,这样,每张牌会翻的次数就各不一样,可能很多次,也可能只有一两次,结果就只是要输出在经过各个不同次数的翻牌后,正面向上的牌都有哪几个。举例说明一下,比如24,第一次它是2的倍数时要从正面翻到背面,当进行到3时,就又要从背面翻回来,而到4时还要在翻,同理呢,到6.
8.12…它都要来回的翻。如果它在多次的翻牌后,正面还向上了,那么它就是要输出的结果之一。
2.用#define opposite(i) i = i?0:1这个宏将牌的状态标志求反,也即为翻牌操作。
将所有的牌建立一个数组,运用for的循环嵌套执行以下操作:把52张牌初始化成正面朝上、控制基数和翻牌次数,判断最终的纸牌朝向并打印出结果,具体实现算法参看详细设计。
3.根据算法思想,画流程图如下:
六.源**:
#include <>
#define obverse 0 //正面朝上
#define adverse 1 //背面朝上
#define opposite(i) i = i?0:1 //这个宏是将牌的状态标志求反,也即为翻牌操作
void main()
int card[52];/52张牌。
for (int i = 0; i < 52; i++)
card[i] =obverse; /将52张牌初始化成正面朝上
for (int j=2; j<=52; j++)此层循环是控制基数的
for (int k = j; k <=52 ; k++)此层循环是控制从第几张牌开始
if (k%j ==0) /判断第k张牌除以基数j后的余数是否为0,如为0就是能整除
opposite(card[k-1]);翻牌
for (int h = 0; h < 52; h++)开始打印
if (card[h] =obverse) /判断牌的状态是否为正面朝上
printf("第%d张牌正面朝上", h+1);
七.运行后的菜单展示。
八.调试分析。
1.这题的时间复杂度是o(52)。
2.虽然本次程序的题目难度与其他问题相比不是很高,但仍有很多问题我们是很容易忽视的,其一:在理解题目的要求时,注意翻牌的次数可能有多次;其二:for循环的嵌套使用在书写时很容易漏掉大括弧。
3.运用更多的基础算法,使得程序和算法思想得到更好的表现,为增强算法的可读性,则算法改进如下:
#include<>
void main()
int i,j,card[52];
for(i=0;i<52;i++)52张牌所有状态均为1,即均为正面
card[i]=1;
for(j=2;j<=52;j++)对52张牌(序号放在i里)对2,3...52(放在j里)按i+1是否是j的倍数进行状态翻转。
for(i=0;i<52;i++)
if((i+1)%j==0)
card[i]=card[i]?0:1;
printf("positive card are:")
for(i=0;i<52;i++)对翻转处理后状态仍然是正面的(card保持为1)的将其编号输出。
if(card[i])
printf("%d ",i+1);
九.课设总结。
这个学期是我第一次接触《数据结构》,也是我第一次接触“课程设计”,在完成设计的过程中,我遇到了一系列的问题,能明显感觉到自己在很多方面的不足,但另一方面,问题是要分析解决的,找出问题以便为完善学习计划,改变学习内容与方法提供实践依据。所以在整个过程中,我不断加深了对数据结构的理解与一些程序写书时要注意的事项,体会了《数据结构》这门课程在解决现实生活问题上的可行性,也更进一步地激发了我的学习热情。
做一个课程设计要注意很多方面,无论是格式,还是书写的内容和要表达的思想都得严格要求自己,所以做起来真的不算容易。本次课程设计涉及了很多知识,由于往日没有学得很扎实,对某些问题仍然比较疑惑,所以要进行充足的补习。期间,我翻阅了很多书籍,知识总是联系很紧密的,解决完这个问题又发现了新的问题,之后,为了解决新问题又发现了更多的问题,就这样,我得等到一个一个把问题处理完。
问题越多,明白的也就会越来越多,做一次课程设计就像从头到尾做了一次系统的复习,从基础到难点,从轮廓到每个知识点,数据结构的研究内容在我的脑海里就再也不像以前那么模糊了。设计程序来解决现在存在的问题,把理论知识付诸于实践,对于我们这些计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践,这也是我们学习的目的。做完设计,我已深刻体会到了学习这门课程的重要性与必要性了,同时,它留给我很多思考:
学习是思考一个的过程,我们应该主动去想学习一门知识后怎么去运用,而不是一味地被动地接受。
数据结构课程设计题目 纸牌游戏
数据结构与算法b课程设计任务书。学院名称 数学与计算机学院课程 6013799 专业年级。一 设计题目。纸牌游戏。二 主要内容。编写一个翻纸牌的简单游戏,从2开始为基数地翻,求出求被翻动的牌。三 具体要求及应提交的材料。编号为1 52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直...
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...