收藏 分享(赏)

数据结构课程设计+24点游戏源代码.doc

上传人:精品资料 文档编号:9378110 上传时间:2019-08-04 格式:DOC 页数:53 大小:238KB
下载 相关 举报
数据结构课程设计+24点游戏源代码.doc_第1页
第1页 / 共53页
数据结构课程设计+24点游戏源代码.doc_第2页
第2页 / 共53页
数据结构课程设计+24点游戏源代码.doc_第3页
第3页 / 共53页
数据结构课程设计+24点游戏源代码.doc_第4页
第4页 / 共53页
数据结构课程设计+24点游戏源代码.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、课 程 设 计课程设计名称: 数据结构课程设计 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 1计算机科学与技术专业课程设计任务书学生姓名 专业班级 学号 题 目 24 点游戏课题性质 其它 课题来源 自拟课题指导教师 同组姓名 主要内容一副牌共 54 张,除去大小 King,还剩 52 张,从中任意取四张加入括号和加减乘除运算符,组成表达式,并使表达式的值等于 24。 (注:1. 每张牌只能用一次; 2.有些数字组合不能是表达式的值为 24)任务要求 1.程序产生四个随机的数字(在 1-13 之间),由用户计算 24 点2.用户输入四个数字(在 1-

2、13 之间),由程序计算 24 点参考文献1 张凤琴,张青凤.数据结构学习指导与习题详解,清华大学出版社,20072 严蔚敏,吴伟民.数据结构(C 语言版). 清华大学出版社,20083 潭浩强.C 语言程序设计(第三版). 清华大学出版社,20054 潭浩强.C 语言程序设计题解与上机指导(第三版). 清华大学出版社,20055 张 曼,朱小谷,吕士俊.数据结构习题与解答 . 北京希望电子出版社.2005审查意见指导教师签字:教研室主任签字: 年 月 日 21需求分析24点游戏主要有两个功能:(1)用户记算24点程序随机产生四个1-13的数,分别代表4张牌, 提示用户输入算式。如果用户认为程

3、序给出的一组数字不能算出24点(如1,1,2,2) ,则输入? ,然后程序对这四个数字进行计算,如果真的不能算出24点,则输出用户正确的信息,否则给出一个正确的算式,并显示用户错误的信息。(2).程序计算24点用户输入四个1-13的数,代表4张牌,程序需要通过一定的规则添加括号和运算符来使算式的值等于24,如果用户给出的四个数字不能算出24点,则输出错误信息!2概要设计抽象数据结构定义: 1ADT数据对象:D=a|a为大于0小于14的整数push(sqstack *s,int e) /压栈gettop(sqstack *s) /取得栈顶元素pop(sqstack *s,int *e) /出栈r

4、andomm() /产生四个随机数EvaluateExpression(char* MyExpression) /课本算法3.4-计算表达式的值init_sq(sqlist *l) /初始化链表insert_sq(sqlist *p,int e,int bl) /链表插入操作chang(char *s,sqlist *l) /将用户的输入转化为单链表check(sqlist l) /保证输入的数字是给出的四个数字Operate(int a,int theta, int b) /计算3precede(char Aop, char Bop) /求运算符优先级ReturnOpOrd(char op,

5、char* TestOp) /返回运算符优先级CalcOneExpress(int expression2)/课本算法3.4-计算表达式的值Calc24(int number24)/包含下面五个函数,即表达式的五种形式CalcArray1(int iNumInput24)/ a * b * c * d /7 个字符CalcArray2(int iNumInput24)/ (a * b) * c * d /9 numberCalcArray3(int iNumInput24)/ (a * b * c) * d /9 numberCalcArray4(int iNumInput24)/ (a *

6、b) * (c * d) /11 numbersCalcArray5(int iNumInput24)/ (a * b) * c) * d /11 numbersEqual24(int n) /判定结果是否等于24gameinformation() /游戏介绍menu() /菜单main() /主函数ADT模块划分 24Main()游戏介绍人算24点程序算24点计算24点并输出算式用户输入算式用户认为无法算出24点程序验证,输出正确或错误信息,用户继续玩程序验证,若能算出24点,则输出正确算式无法算出24点,输出错误信息3 运行环境硬件环境:PC机软件环境:Windows XPMicrosof

7、t Visual C+ 6.04 开发工具和编程语言开发工具:Microsoft Visual C+ 6.0 编程语言:C语言5 详细设计(1)全局变量和栈,链表的定义int number24;enumeNumber = 0,/操作数eOperator = 1/算子;5int oper7=43,45,42,47,40,41,35;课本 表3.1 算符间的优先关系:unsigned char Prior77 = , ,: / 退栈并将运算结果入栈pop(pop( pop(push(break;default:printf(“没有这个运算符n“);return 0; / switch/else /

8、 whileresult=gettop(return result; / end CalcOneExpress(4)由用户计算24点的算法分析:先由程序产生4个随机数; 1int randomm()int i=0;srand(unsigned)time(NULL);for(;inext;c=q-num_ch;bl=q-bol;while (c!= 35 | gettop(q=q-next;c=q-num_ch;bl=q-bol; / 不是运算符则进栈elsetop=gettop(switch (precede(char)top, (char)c)case next;c=q-num_ch;13b

9、l=q-bol;break;case =: / 脱括号并接收下一字符pop(q=q-next;c=q-num_ch;bl=q-bol;break;case : / 退栈并将运算结果入栈pop(pop(pop(push(break;default :printf(“没有这个运算符!n“);return 0;result=gettop(return result;else printf(“你的输入有错误!n“);return 0;14代码2. 将用户的输入转化为单链表:int chang(char *s,sqlist *l) int t=0;unsigned int i=0;int bl,ch;i

10、nt a1,a2,a;sqlist *p=l;for (;i47insert_sq(t=0;else if(t=2)bl=0;insert_sq(t=0;15bl=1;ch=(int)si;insert_sq(t=0;else printf(“%c不是有效的运算符!n“,si);i=strlen(s)-1;if(si47q-bol=bl;q-next=NULL;(*p)-next=q;(*p)=(*p)-next;return 1;6.调式分析1在解决某一个问题之前一定要把算法想清楚,考虑到全局,以免造成大量不必要的改动。2用 scanf 输入数据时,一定要注意格式,否则就会出错!3在函数调用

11、时,参数类型一定要一致,否者会产生警告信息,甚至导致结果出错。4.如果不使用 time 函数,则产生的随机数是重复出现的。5.用户输入的算式,也可以转化为数组进行操作,但算式的形式不确定,转化为链表似乎省去了很多麻烦。6.刚开始没有对 CalcArray(int iNumInput24)函数中的循环加以控制,结果造成数字重复使用。7.在单链表形成之后,在其中取数据元素,要从 q-next 开始,其头结点中不含要用的数据,应跳过,否则结果不可预料。8.如果想通过调用函数来改变几个变量的值,那么用指针应该是很方便的。9.要改变指针值,需要使用二级指针10由于在 C 语言中函数都是全局作用域的,因此

12、不要使用和库中的函数名相同的标识符,否则会出现错误。包括宏标识符也有这样的问题。177测试结果图(1)用户界面图 1(2)用户输入数据,程序算出结果图 2(3)用户输入的数据算不出 24 点图 3(4)程序给出数字,用户认为算不出 24 点18图 4(5)用户计算出错图 5(6)程序给出数字,用户算出正确结果19图 68.参考文献1 张凤琴,张青凤.数据结构学习指导与习题详解,清华大学出版社,20072 严蔚敏,吴伟民.数据结构(C 语言版). 清华大学出版社,20083 潭浩强.C 语言程序设计(第三版). 清华大学出版社,20054 潭浩强.C 语言程序设计题解与上机指导(第三版). 清华

13、大学出版社,20055 张 曼,朱小谷,吕士俊.数据结构习题与解答 . 北京希望电子出版社.200520课程设计总结源代码:(此为可运行的源代码直接复制粘贴过来的,如直接复制不能运行,可粘贴到文本中进行字符过滤,然后自粘贴到编译器中)#include#include#include#include#define OPSETSIZE 7#define STACK_INIF_SIZE 50#define STACKINCREMENT 10int number24;enumeNumber = 0, /操作数21eOperator = 1 /算子;int oper7=43,45,42,47,40,41

14、,35;char OPSETOPSETSIZE=+ , - , * , / ,( , ) , #;typedef struct sqlistint bol;/bol 是 0 时,num-ch 是一个数字;bol 是 1 时 num_ch 运算符int num_ch;struct sqlist *next;sqlist;/线性表typedef struct sqstackint *base;int *top;int stacksize;sqstack;/栈的定义unsigned char Prior77 = / 课本 表 3.1 算符间的优先关系, ,next=NULL;return 1;int

15、 insert_sq(sqlist *p,int e,int bl)/链表插入操作sqlist *q;q=(sqlist*)malloc(sizeof(sqlist);q-num_ch=e;q-bol=bl;q-next=NULL;(*p)-next=q;(*p)=(*p)-next;return 1;int check(sqlist l)/保证输入的数字是给出的四个数字int right=1,find=0,i;sqlist *q=q=q-next ;for (;q-next!=NULL;q=q-next)if(q-bol=1)if(q-num_ch num_ch57|q-num_ch=44|

16、q-num_ch=46)23right=0;printf(“%c 不是有效的运算符!n“);else find=0;for(i=0;inum_ch )number1i=1;find=1;break;if(find=0)printf(“%d 不在给出的四个数字中!n“,q-num_ch );right=0;/end forfor (i=0;i47insert_sq(t=0;else if(t=2)bl=0;insert_sq(t=0;bl=1;ch=(int)si;25insert_sq(t=0;else printf(“%c 不是有效的运算符!n“,si); /end fori=strlen(

17、s)-1;if(si47if(s)-base=NULL) exit(-2);(s)-top=(s)-base;(s)-stacksize = STACK_INIF_SIZE;return 1;int gettop(sqstack *s) /取得栈顶元素int e;if(s-top=s-base)printf(“栈空,无法取得栈顶元素!n“);return 0;e=*(s-top-1);return e;int push(sqstack *s,int e) /压栈if(s-top-s-base=s-stacksize)s-base=(int*)realloc(s-base,(s-stacksiz

18、e+STACKINCREMENT)*sizeof(int);if(!s-base) exit(-2);28s-stacksize+= STACKINCREMENT;*(s-top+)=e;return 1;int pop(sqstack *s,int *e) /出栈if(s-top=s-base)printf(“栈空,出栈错误!n“);return 0;*e=*(-s-top);return 1;int EvaluateExpression(char* MyExpression) / 算法 3.4-计算表达式的值/ 算术表达式求值的算符优先算法。/ 设 OPTR 和sqstack OPTR;

19、/ 运算符栈,字符元素sqstack OPND; / 运算数栈,实数元素int c,bl,a,b,theta,top;sqlist *q,l;char *s=MyExpression;init_sq(if(chang(s,initstack(push(initstack (q=q-next;c=q-num_ch;bl=q-bol;while (c!= 35 | gettop(q=q-next;c=q-num_ch;bl=q-bol; / 不是运算符则进栈elsetop=gettop(switch (precede(char)top, (char)c)case next;c=q-num_ch;bl=q-bol;break;case =: / 脱括号并接收下一字符pop(q=q-next;c=q-num_ch;bl=q-bol;break;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报