数据结构课程设计(学生).doc
湖南工业大学课 程 设 计资 料 袋 理 学院(系、部) 2010 2011 学年第 2 学期 课程名称 数据结构 指导教师 职称 学生姓名 专业班级 学号 题 目 纸牌游戏 成 绩 起止日期 2011 年 6 月 22 日 2011 年 6 月 28 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书2课程设计说明书3456湖南工业大学课程设计任务书20 20 学年第 学期 学院(系、部) 专业 班级课程名称: 数据结构 设计题目: 纸牌游戏 完成期限:自 2011 年 6 月 22 日至 2011 年 6 月 28 日共 1 周内容及任务任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;.再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?进度安排起止日期工作内容2011.6.222011.6.23需求分析的确定,设计2011.6.242011.6.26系统代码编写,运行及测试2011.6.272011.6.28分析总结主要参考资料 数据结构 包震宇 孙干 中国铁道出版社指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日(课程设计名称)设计说明书(题目)纸牌游戏起止日期: 2011 年 6 月 22 日 至 2011 年 6 月 28 日学生姓名 班级 学号 成绩指导教师(签字)理学院(部)2011年 6 月 28 日文章编辑一、需求分析 任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;.再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?二、概要设计开始主函数顺序存储链式存储二维数组栈计算被翻的次数计算被翻的次数计算被整除的个数每一列求和输出结果退出部分模块流程图栈开始 int a52;a0=1for(i=0;i<52;i+) ai=1+i;for(top=top-1;top>=0;top=top-1)m=0;for(h=52;2<=h;h-)if(atop)%h=0)m=m+1; if(m%2=0)printf("第 %d 牌正面向上n",+top);top=top-1; j=j+1;输出结束三、详细设计#include<stdio.h>#include<stdlib.h>struct list int data; struct list *next;typedef struct list node;typedef node *link;void main() H:printf("请选择方式:1 顺序存储,2 链式存储,3 栈 ,4 二维数组n");int p;scanf("%d",&p);while(p=1) /*顺序存储*/int a53; int i=0;a0=0; for(i=1;i<53;i+) ai=a0; /*ai表示第i张牌被翻的次数*/ printf("n"); L:printf("请输入要查询从第几张开始翻牌后的状态n");int n; scanf("%d",&n);printf("n=%dnn",n);if(n>52)printf("n输入有误n"); goto L; int x=2;for(;x<=n;x+) /*以x为基数翻牌*/ for(i=1;i<53;i+)if(i%x=0) /*是x的倍数是被翻次数加1*/ai=+ai; int m=0;for(i=1;i<53;i+)if(ai%2=0) /*被翻偶数次的正面向上*/printf("第 %d 牌正面向上n",i);m=1+m;printf("n正面向上有%d张牌n",m);break;while(p=2) /*链式存储*/link ptr,head; int i; ptr=(link)malloc(sizeof(node); head=ptr; for(i=1;i<=52;i+) ptr->data=0;ptr->next=(link)malloc(sizeof(node);if(i=52) ptr->next=NULL;else ptr=ptr->next; ptr=head; K:printf("请输入要查询从第几张开始翻牌后的状态n");int n; scanf("%d",&n);printf("n=%dnn",n);if(n>52)printf("n输入有误n"); goto K; int x=2;for(;x<=n;x+) for(i=1;i<=52;i+) if(i%x=0) (ptr->data)=1+(ptr->data); ptr=ptr->next; ptr=head; ptr=head; i=1; int m=0; while(ptr!=NULL) if(ptr->data)%2=0)printf("第 %d 牌正面向上n",i);m=1+m; ptr=ptr->next;i=+i; printf("n正面向上有%d张牌n",m);break; while(p=3) int a52; int i=0;a0=1; for(i=0;i<52;i+) ai=1+i; int top=52,h,m,j=0;for(top=top-1;top>=0;top=top-1)m=0;for(h=52;2<=h;h-)if(atop)%h=0)m=m+1; if(m%2=0)printf("第 %d 牌正面向上n",+top); top=top-1; j=j+1;printf("n正面向上有%d张牌n",j);break; while(p=4) int a5353;int i,j;for(i=0;i<53;i+)for(j=0;j<53;j+)aij=0;for(i=2;i<53;i+)for(j=1;j<53;j+) if(j%i=0) aij=1;printf("n"); V:printf("请输入要查询从第几张开始翻牌后的状态n");int n; scanf("%d",&n);printf("n=%dnn",n);if(n>52)printf("n输入有误n"); goto V;int s,m=0;for(j=1;j<53;j+)for(i=1,s=0;i<=n;i+)s=s+aij; if(s%2=0)m=m+1;printf("第 %d 张牌正面向上n",j); printf("n正面向上有%d张牌n",m);break;goto H; /*可循环查询*/ 四、调试分析:1. 测试数据及结果显示的目录顺序储存链式存储组二维数组五、总结在本次课程设计中我的心得体会总结如下:1、在编程之前要清楚自己要实现什么功能,以及基本的框架结构即起初要有一个流程图来引导编程2、多多向别人请教,从中学习到新的知识;并多多向老师请教,从中很快地更正自己的错误。 3.独立完成了一个课题从中学会了独立思考和解决问题。 4.本次实习我从新复习了一边C语言基础知识