数据结构设计课题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计课题:猜数字游戏
一、问题描述:
该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。

玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。

A表示位置正确且数字正确,B表示数字正确而位置不正确。

二、功能要求:
1、本游戏显示这样的菜单:
(1)随机产生数据
(2)用户输入数据
(3)退出游戏
2、游戏成功与否都能返回主菜单
三、算法提示:
1、数据结构:数组
2、用简单的程序设计方法
四、测试数据:
测试数据: 3792
第一次输入: 1234
0A2B
第二次输入: 5678
0A1B
第三次输入: 0867
0A1B
第四次输入: 9786
1A1B
第五次输入: 1794
2A0B
第六次输入: 2793
2A2B
第七次输入: 3792
4A0B
游戏成功!!!
4 猜数字游戏
4.1问题分析
编写一个猜数字游戏,有一定的容错功能,界面友好,功能齐全。

游戏规则:
a,一个四位数,各位上的数字不重复,从1到9。

b,按以下提示猜出这个四位数。

c,每次猜测输入的数据给出类似的提示*A*B。

d,其中A前的*代表你本次猜对了多少个数字。

e,其中B前的*代表你本次猜对的数字并且位置正确的个数。

4.2数据结构与算法分析
本程序多次利用到了调用函数参数,for循环等,通过比较输入的四个数字和电脑随机的数字值大小来判断猜对的数字正确与否。

函数间的调用关系图如下:
图 4-2
6、流程图
图 4-3 4.3核心代码
#include <iostream.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include<time.h> //选用了以上几个程序为编程服务
int Rnd( ) //产生十以内的随机整数。

{
int Rteger;
Rteger=rand( )%10;
return Rteger;
}
void Get_b(int b[]) //得到用户输入的四位数,存储到数组b[4]中。

{
int i,j, m,n=10000;
cin>>m;
if(m>9999||m<999)
{cout<<"输入错误请重新输入:"<<endl;
cin>>m;
}
for(i=0;i<=3;i++)
{
b[i]=m/(n/10);
m=m-b[i]*(n/10);
n=n/10;
}
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if(b[i]==b[j]&&i!=j)
{ cout<<"输入重复请重新输入"<<endl;
Get_b(b);
}
}
void Iswantplay(char * wantplay) //判断用户还想不想玩。

{
cout<<"是否再玩一次:(y/n)\n";
cin>>wantplay;
cout<<"==============================================
========\n\n\n";
}
void Reset(int A[],int B[],int * score,int * a,int * b)
//用来初始化一些变量。

{
int i=0,t=0,j;
(*score)=0; //得分清零。

(*a)=0;
(*b)=0; //所猜对的数字的个数的计数器清零
for(j=0;j<10;j++)
A[j]=j; //初始化数组,为产生无重复随机数做准备。

while(i<4)
{
t=Rnd();
if(A[t]) B[i]=A[t],A[t]=0,i++;
} /*利用扑克牌中抽牌的思想,来产生无重复随机数,存储到B[](在main函数中为b[])中。

*/
cout<<"输入一个四位数开始吧! \n";
cout<<"-----------------------------\n";
}
void Check_ab(int a[],int b[],int * A,int * B) //此函数用来检查用户所输入的四位数与系
{ //统产生的四位数的相同情况。

int i,j;
for(i=0;i<=3;i++) //用两个嵌套的for循环来逐个比较a[]与b[]
for(j=0;j<=3;j++)
{
if(a[i]==b[j]) //如果数字相同。

{
if(i==j) //如果位置也相同。

(*A)++; //A自加。

if(!(i==j)) //如果位置不同。

(*B)++; //B自加。

}
}
}
void Welcome() //打印程序的开始界面。

{
cout<<"
*********************************************************** *************\n";
cout<<" * -----------------*\n";
cout<<" * ===================猜数字游戏============== *\n";
cout<<" * ----------------- *\n";
cout<<" * ----programed byzkk *\n";
cout<<"
*********************************************************** *************\n\n\n\n";
}
void Usage() //显示程序的用法。

{
cout<<"===============用法================================ \n";
cout<<" 1.计算机随机产生一个无重复数字的四位数由你来猜.\n"; cout<<" 2.若所猜的数位置与数字均正确,会显示一个A,若数字对位置不对,会显示一个B.\n";
cout<<"============================================== =============================\n\n";
}
void Printscore(int n) //显示用户的得分。

{
switch(n)
{
case 0: cout<<"你真是撞大运了!! 恭喜!! 恭喜!! 加十分!\n";break; //猜的次数小于3次
case 1: cout<<"恭喜你!猜对了! 你真是天才! 加九分!\n";break; //猜的次数小于6次大于等于3次
case 2: cout<<"不错! 不错! 猜对了! 你真够聪明! 加八分!\n";break; //猜的次数小于9次大于等于6次
case 3: cout<<"恭喜! 猜对了! 加七分!\n";break; //猜的次数小于12次大于等于9次
case 4: cout<<"猜对了! 及格. 加六分!\n"; //猜的次数小于15次大于等于12次
default : cout<<"猜对了,但不够快啊,继续努力!\n"; //猜的次数大于等于15次
}
cout<<"============================================== ===========\n\n";
}
void Printresult(int b[],int * A,int * B) //显示每次用户所猜的结果,供其思考判断。

{
int i;
cout<<" ";
for(i=0;i<=3;i++)
{
cout<<b[i];
}
cout<<" ";
for(i=0;i<(*A);i++)
cout<<"A";
for(i=0;i<(*B);i++)
cout<<"B";
cout<<"\n";
}
void main()
{
system("color 9f"); //定义一些最基本的变量,以及调用色彩,使界面变得更为丰富多样化。

int i=0,a[4],b[4],c[10],A=0,B=0,score=0;
char wantplay='y';
srand((unsigned int)time(NULL)); //初始化随机数生成器。

Welcome();
Usage();
while(wantplay=='y'||wantplay=='Y')
//如果还想玩。

{
Reset(c,a,&score,&A,&B); //初始化变
量。

while(A!=4) //只要还没猜对,继续猜。

{
Get_b(b); //输入所猜的数。

Check_ab(a,b,&A,&B); //电脑判断。

Printresult(b,&A,&B); //输出结果。

if(A!=4) A=0,B=0;
score++; //累计用户总共猜的次数。

}
Printscore(score/3); //打印得分。

Iswantplay(&wantplay); //还要不要玩。

}
}4.4运行结果
1.运行程序,打开主界面,如图4-1所示。

图4-1 主界面
2.根据菜单提示,输入四个不重复的数字如图4-2所示,输出猜对是数字结果“A”和“B”。

图4-2 猜数字
结论
紧张的两周数据结构实训很快过去了,通过这周的学习使我巩固了以前的知识并在此基础上对数据结构的特点和算法有了更深的了解,数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且已经成为其他理工专业的热门选修课。

在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性,同时这两周的学习也提高了我适应实际,实践编程的能力。

首先这两周的学习,使我在巩固了原有的理论知识上,培养了我灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我体会到自身知识和能力在实际中的应用和发挥。

其次,激发了我创新意识,开发创造的能力和培养沟通能力。

另外,让我进一步熟悉了数据结构的设计应用。

每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我数据结构的学习和提高很有益处,并且使我明白了程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、广义表、树和二叉树以及图等,然后确定处理过程——算法,可得最后结论。

最后,在这次实训过程中,我深刻的认识到了自己在学习方面的不足之处,我知道我还有太多的基本的思想没有真正的理解,当然我不会灰心,我会在以后的日子里努力弥补我的不足。

总之,两个礼拜的课程设计让我受益匪浅。

要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,不断经历失败,然后又不断的尝试才能获得成功。

两个多礼拜中,我有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。

两个礼拜的时间我经历了很多,也收获了很多。

与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。

经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。

对于我本人来讲这次实训的总体表现,我自己还比较满意,每天做到了按时的出勤,上机遵守机房的管理规定,遵循指导老师的安排并能适时地与老师进行沟通,觉得不足的是不能熟练地掌握C语言的设计技巧使编程的结果缺乏效率,不过我相信这只是我的一个开始,我更应该注重的是这次过程,我坚信我会在以后的学习和训练中不断地弥补自己的不足之处,不断的完善自己的编程能力,因为成功需要一点一点积累。

沈阳工程学院课程设计报告结论。

相关文档
最新文档