logo资料库

数据结构课程设计 纸牌游戏.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
1 问题描述
2 需求分析
该程序所做的工作的是按照一定翻牌规则,实现最后输出这面向上的所有牌。此程序规定:
3 概要设计
3.1 抽象数据类型定义
(1)ADT main{
数据对象V:一个集合,该集合中的所有元素具有相同的特性
数据关系R:R={VR}
VR={|P(x,y)^(x,y属于V)}
基本操作:
1、void main();
2、int Meum();
3、int beginGame();
4、void load( );
5、void show( ) ;
6、int game( );
7、void result( );
8、void SystemInfo();
9、void load( );
10、void show(int count);
……
3.2 子程序及功能要求
(1)void main():主函数,通过该子程序可调用其他游戏方式的子程序。
(2)int Meum():提供纸牌游戏的游戏规则。
(3)void result():游戏结果。
……
3.3 各程序模块之间的调用关系(子程序编号见上)
主函数可调用子程序1,2,3,5
子程序2调用子程序3,4
子程序3调用子程序4,5,6,7
……
4 详细设计
4.1 设计相应数据结构
(1)游戏规则菜单的定义
int Meum(){ //游戏规则菜单//
int choice; //游戏选项//
puts(" \n\t\n");
puts(" 纸牌游戏 \n ")
puts(" Copyright zhouwenz
puts(" \t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(" \t\t\t 0-------------翻牌规则\n\n");
printf(" \t\t\t 1-------------手动翻牌\n\n");
printf(" \t\t\t 2-------------自动翻牌\n\n");
printf(" \t\t\t 3-------------查看结果\n\n");
printf(" \t\t\t 5-------------退出系统\n\n");
puts(" \t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(" \t\t\t请选择: ");
scanf("%d",&choice);
fflush(stdin);
return choice; //返回游戏选项//
}
(2)游戏开始定义
int beginGame(){ //开始游戏//
int k,i,j; //输入整型变量i,j,k//
load();
printf("\n按回车键继续翻牌..."); //按回车键继续翻牌//
getchar();
for( i=2;i<53;i++) //牌编号满足的条件//
{
k=1; //变量k的初始化//
for( j=i;j<53;j=i*k) //翻牌规则//
{
card[j]=-card[j]; //数组//
k++;
}
show(i-1);
printf("\n按回车键继续翻牌...");
getchar();
}
return 0;
4.2主要模块的算法描述(用流程图标示)
主函数流程图描述如下:
5 测试分析
1 输入数据
2 输出结果
上图为前两次翻牌输出结果
下图为最后两次翻牌的输出结果
6 课程设计总结
通过此次数据结构课程设计,我学到了不少课堂上没学到的新知识。在实践中锻炼了自己的动手能力。要善于分析
做什么事情,都要对其认真,既然是该由你做的事,肯定是你应该有这个能力,即使能力不够,也是应该借这个机
在此我非常要感谢的是我的指导老师康雄杰老师,感谢老师的细心认真的辅导,教给我许多原来不知道的知识。这
参考文献:
附录(源程序清单)
#include
#include
int card[53];
/*
void load( );
void show( );
int game( );
void result( );
*/
int Meum(){
int choice;
puts(" \n\t\n");
puts(" 纸牌游戏 \n ");
puts(" Copyright zhouwenz
puts(" \t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(" \t\t\t 0-------------翻牌规则\n\n");
printf(" \t\t\t 1-------------手动翻牌\n\n");
printf(" \t\t\t 2-------------自动翻牌\n\n");
printf(" \t\t\t 3-------------查看结果\n\n");
printf(" \t\t\t 5-------------退出系统\n\n");
puts(" \t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf(" \t\t\t请选择: ");
scanf("%d",&choice);
fflush(stdin);
return choice;
}
void SystemInfo(){
FILE *fp;
if(!(fp=fopen("系统信息.txt","r")))
{
puts("说明文件丢失!");
return ;
}
puts("\n\n\n\n");
puts("----------------------------------------");
puts(" 系统信息 \n ");
puts("----------------------------------------");
while(!feof(fp))
putchar(fgetc(fp));
putchar(10);
puts("--------------------------------------\n");
}
void load( ){
for(int i=1;i<53;i++)
card[i]=1;
}
void show(int count){
printf("\n第%2d次翻牌结果为...\n",count);
for(int i=1;i<53;i++)
{
if(card[i]==1)
printf(" 正");
else if(card[i]==-1)
printf(" 反");
else
printf("×");
if(i%26==0)
printf("\n");
}
}
int beginGame(){
int k;
load();
printf("\n按回车键继续翻牌...");
getchar();
for(int i=2;i<53;i++)
{
k=1;
for(int j=i;j<53;j=i*k)
{
card[j]=-card[j];
k++;
}
show(i-1);
printf("\n按回车键继续翻牌...");
getchar();
}
return 0;
}
int autoGame(){
int k;
load();
printf("\n按回车键开始游戏...");
getchar();
for(int i=2;i<53;i++)
{
k=1;
for(int j=i;j<53;j=i*k)
{
card[j]=-card[j];
k++;
}
show(i-1);
}
return 0;
}
void result(){
int count=0;
printf("\n翻牌结束!此时正面向上牌的编号为:");
for(int i=1;i<53;i++)
if(card[i]==1)
{
printf("%d ",i);
count++;
}
printf(" 共有%d张.\n",count);
}
void Results(){
int k;
load();
for(int i=2;i<53;i++)
{
k=1;
for(int j=i;j<53;j=i*k)
{
card[j]=-card[j];
k++;
}
}
result();
}
void main(){
load();
int flag=1;
while((flag=Meum())<4)
{
switch(flag)
{
case 0:SystemInfo(); break;
case 1:beginGame(); result(); break;
case 2:autoGame(); result(); break;
case 3:Results(); break;
default:exit(0);
}
printf("\n\n\n任意键继续...");
getchar();
printf("\n\n");
}
}
通过此次数据结构课程设计,我学到了不少课堂上没学到的新知识。在实践中锻炼了自己的动手能力。要善于分析
课程设计(论文) 题 目 名 称 纸牌游戏 课 程 名 称 数据结构课程设计 学 生 姓 名 周 文 专 学 号 0741227130 系 、专 业 信息工程系、信息类 指 导 教 师 康 雄 杰 2008 年 12 月 8 日
目 录 1 问题描述···············································································2 2 需求分析···············································································2 3 概要设计···············································································2 3.1 抽象数据类型定义·························································2 3.2 子程序及功能要求·························································3 3.3 各程序模块之间的调用关系·············································· 3 4 详细设计······································································3 4.1 设计相应数据结构·························································3 4.2 主要模块的算法描述····························································· 6 5 测试分析·····································································7 6 课程设计总结································································ 8 参考文献·················································································8 附录(源程序清单)··································································9 2
1 问题描述 该系统是一个翻纸牌的小游戏,翻牌规则如下:将 52 张纸牌编号 1-52,初 始时正面向上,从第 2 张牌开始,以 2 位基数,使 2 的倍数的牌翻一次,直到最 后一张牌;然后,从第 3 张牌开始,以 3 位基数,是 3 的倍数的牌翻一次,直到 最后一张牌;然后以 4 为基数翻牌......直到以 52 为基数翻过;最后输出正面 向上的牌的有哪些。 2 需求分析 该程序所做的工作的是按照一定翻牌规则,实现最后输出这面向上的所有 牌。此程序规定: (1)在程序中输入牌编号时,需输入整型数据;若出现符合规则的牌号时, 就输出“正”,反之,就输出“反”;选择功能时,应输入与所选功能对应的一个 整型数据。 (2)程序的输出信息主要是:最后输出正面向上的牌的有哪些。 3 概要设计 3.1 抽象数据类型定义 (1)ADT main{ 数据对象 V:一个集合,该集合中的所有元素具有相同的特性 数据关系 R:R={VR} VR={|P(x,y)^(x,y 属于 V)} 基本操作: 1、void main(); 2、int Meum(); 3、int beginGame(); 4、void load( ); 5、void show( ) ; 6、int game( ); 3
7、void result( ); 8、void SystemInfo(); 9、void load( ); 10、void show(int count); …… 3.2 子程序及功能要求 (1)void main():主函数,通过该子程序可调用其他游戏方式的子程序。 (2)int Meum():提供纸牌游戏的游戏规则。 (3)void result():游戏结果。 …… 3.3 各程序模块之间的调用关系(子程序编号见上) 主函数可调用子程序 1,2,3,5 子程序 2 调用子程序 3,4 子程序 3 调用子程序 4,5,6,7 …… 4 详细设计 4.1 设计相应数据结构 (1)游戏规则菜单的定义 int Meum(){ int choice; puts(" puts(" //游戏规则菜单// //游戏选项// \n\t\n"); 纸牌游戏 \n "); puts(" puts(" printf(" printf(" printf(" Copyright zhouwenzhuan \n "); \t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); \t\t\t 0-------------翻牌规则\n\n"); \t\t\t 1-------------手动翻牌\n\n"); \t\t\t 2-------------自动翻牌\n\n"); 4
printf(" printf(" puts(" printf(" scanf("%d",&choice); fflush(stdin); return choice; } (2)游戏开始定义 int beginGame(){ int k,i,j; load(); \t\t\t 3-------------查看结果\n\n"); \t\t\t 5-------------退出系统\n\n"); \t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); \t\t\t 请选择: "); //返回游戏选项// //开始游戏// //输入整型变量 i,j,k// printf("\n 按回车键继续翻牌..."); //按回车键继续翻牌// getchar(); for( i=2;i<53;i++) //牌编号满足的条件// { k=1; //变量 k 的初始化// for( j=i;j<53;j=i*k) //翻牌规则// { } card[j]=-card[j]; //数组// k++; show(i-1); printf("\n 按回车键继续翻牌..."); getchar(); 5
} return 0; 4.2 主要模块的算法描述(用流程图标示) 主函数流程图描述如下: FILE*fp; if(!(fp=fopen(" Y N Puts(文件丢失?… Return; puts("\n\n\n\n"); !feof(fp) Putchar(fgetc(fp)); Putchar(10); Y N 5 测试分析 6
1 输入数据 2 输出结果 上图为前两次翻牌输出结果 下图为最后两次翻牌的输出结果 7
6 课程设计总结 通过此次数据结构课程设计,我学到了不少课堂上没学到的新知识。在 实践中锻炼了自己的动手能力。要善于分析程序代码的核心思想,并且在充 分理解了代码内容之后,要有所创新。对于出现的调试错误要仔细分析错误 原因,根据错误提示,按照自顶向下的程序设计原则,逐个进行排错。同时 还要善于利用各种资源,提高自己的编程效率。编程过程中加入必要的注释 十分重要这不仅是为了能够更容易看懂程序,更重要的是自己未来便于修改 方便。 做什么事情,都要对其认真,既然是该由你做的事,肯定是你应该有这 个能力,即使能力不够,也是应该借这个机会来培养。所以放心大胆地做, 对自己有信心,就有动力。这就是我这次课程设计中得到的最大的体会,受 益匪浅。 在此我非常要感谢的是我的指导老师康雄杰老师,感谢老师的细心认真 的辅导,教给我许多原来不知道的知识。这次课程设计能够顺利的完成,当 然有我个人的努力,但同时也离不开指导老师的答疑解惑。 参考文献: [1] 黄同成. 数据结构(C 语言版)[M]. 北京:中国电力出版社,2002 [2] 牛莉.C 语言程序设计 北京:中国铁道出版社,2003 [3] 李春葆.数据结构习题与解析(C 语言篇)[M].北京:清华大学出版社, 2000 #include #include int card[53]; /* void load( ); void show( ); 附录(源程序清单) 8
分享到:
收藏