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");
}
}
通过此次数据结构课程设计,我学到了不少课堂上没学到的新知识。在实践中锻炼了自己的动手能力。要善于分析