600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 24速算c语言实训报告ppt C语言速算24数据结构课程设计.doc

24速算c语言实训报告ppt C语言速算24数据结构课程设计.doc

时间:2019-09-20 12:30:29

相关推荐

24速算c语言实训报告ppt C语言速算24数据结构课程设计.doc

C语言速算24数据结构课程设计.doc

课程设计论文题 目 名 称 速算 24 课 程 名 称 数据结构课程设计 学 生 姓 名 王浩明 学 号 0941301253 系 、专 业 信息工程系、信息类 指 导 教 师 谢兵 12 月 22 日摘 要设计一个简单的速算24程序,由系统发出4张扑克牌,输入一个利用扑克牌的数字及运算符号“”,“-”,“*”,“/”,及“(”和“)”组成计算表达式,系统运行后得出计算结果,如果结果等于24,则显示“”,否则,显示“”,接着询问是否继续,按字符n后程序结束,否则系统重复上述步骤。用栈来解决。关键词速算24;栈;计算;SummaryDesign a simple speed is 24, the system to make four playing card, enters a playing card number and operation of using the notation and - and man, and ( and ) of the expression, the system to run after the calculation, if the result is 24, and and then asked whether to go on a n after the application or system to repeat steps above. in the stack to solve.Keywords speed is 24 ;Stack ; the stack ;目 录1 问题描述12 需求分析13 概要设计,131设计思路132模块划分133流程图24 详细设计341数据类型的定义342程序分析343基本程序35 分析结果6 课程设计总结18参考文献181 问题描述用C语言,结构体实现速算24的运算,从一副牌中随机发出4张扑克,用扑克牌的数字及运算符号“”、“-”、“”、“/”及括号“(”和“)”组成一个计算表达式,从键盘上输入该计算表达式,系统运行后得出计算结果,如果结果等于24,则显示“very good”,否则,显示“wrong”,接着询问是否继续,按字符n后程序结束,否则系统重复上述步骤。2 需求分析用二维数组char p413存放扑克,用A表示1,0表示10,J、Q、K分别表示11、12、13。建立两个栈分别存放随机发的四张牌和运算符进行入栈出栈操作进行速算,输出计算的值判断如果结果等于24则成功若结果不为24继续循环操作直到结果为24或者输入n或N终止。3 概要设计,31设计思路(1)首先定义全局变量,引入标准输入与输出函数,建立结构体对速速24进行相关的操作。(2)主函数main,判断栈空,计算机随机发发出四张牌进行入1栈操作。(3)利用出栈操作栈1栈2进行运算操作。(4)运算结果等于24结束不等于24继续循环直到出现24或者按n或N结束。32模块划分本程序包括一个模块主程序模块,main 初始化;定义数据类型;初始化栈;发牌进行入栈出栈运算操作;33流程图开始发四张牌输入表达式字符s1调用change函数将中缀表达式变后缀表达式调用计算函数计算表达式的值返回结果result结果24jieguo输出结果“wrong”输出结果“very good”是否继续YN不输入字符输入N或n入栈1入栈2结束4 详细设计41数据类型的定义(1)数组类型define N 20define COL 100define ROW 40include stdio.hinclude time.h /*系统时间函数*/include alloc.h/*动态地址分配函数*/include stdlib.h /*库函数*/include string.h /*字符串函数*/include ctype.h /*字符操作函数*/(2)栈Stack1,stack2;42程序分析此程序只包含主函数部分;主函数包含,(1)栈的建立及初始化(2)随机发牌;(3)牌的入栈;(4)中缀字符转后缀(5)出栈计算;(6)判断计算值(7)计算值等于24停止不等于24继续循环。5 分析结果测试数据及结果如下从结果显示来看,此程序正确。6 课程设计总结 通过这次数据结构课程设计让我对有了更深刻的了解,也让我认识到数据结构这门课对于我们专业的重要性,更让我体会了团队的力量。这次课程设计我有幸被分到和唐玉柏同学一组,他是一个十分优秀的合作伙伴,正是他让我领略了团队合作的真谛。从一开始拿到课程设计,我跟唐玉柏经过讨论,达成了一个分工合作的共识,他主要负责源程序这一块,而我就负责流程图那一部分。在接下来这些日子里我们都在各自努力的进行着,但中间并不缺少交流与讨论。一个星期过去了,我们的课程设计也基本快完成了。为了让课程设计能更好,我们就请教了一些优秀的同学,当然还有我们负责任的老师谢老师。 这次课程设计能顺利完成,我要感谢许许多多的人,正因为他们的支持与指导,才能让我在课程设计过程中不那么笨拙。最后,我要感谢我的合作伙伴唐玉柏同学,是他给了我无尽的支持与合作,当然还要感谢我的指导老师谢兵老师,是他给了我无穷的耐心与指导。谢谢你们参考文献1 黄同成,黄俊民,董建寅数据结构2张福祥,牛莉. C语言程序设计. 附录(源程序清单) define N 20define COL 100define ROW 40include stdio.hinclude time.h /*系统时间函数*/include alloc.h/*动态地址分配函数*/include stdlib.h /*库函数*/include string.h /*字符串函数*/include ctype.h /*字符操作函数*/char p413A,2,3,4,5,6,7,8,9,0,J,Q,K,/*扑克牌,10用0来表示*/A,2,3,4,5,6,7,8,9,0,J,Q,K,A,2,3,4,5,6,7,8,9,0,J,Q,K,A,2,3,4,5,6,7,8,9,0,J,Q,K struct node *link; STACK1; /*栈1*/typedef struct node2 char data; struct node2 *link; STACK2; /*栈2*/void playvoid;/*发牌的具体过程*/void rand1int j;/*随机发牌函数*/void changechar *e,char *a; /*中缀变后缀函数*/int computerchar *s; /*后缀表达式计算函数*/STACK1 *initstack1STACK1 *top; /*栈1初始化*/STACK1 *pushSTACK1 *top,int x; /*栈1入栈运算*/STACK1 *popSTACK1 *top; /*栈1删除栈顶元素*/int topxSTACK1 *top; /*栈1读栈顶元素*/STACK1 *ptopSTACK1 *top,int *x; /*栈1读出栈顶元素值并删除栈顶元素*/int emptySTACK1 *top; /*判栈1是否为空函数*/STACK2 *initstack2STACK2 *top; /*栈2初始化*/STACK2 *push2STACK2 *top,char x; /*栈2入栈运算*/STACK2 *pop2STACK2 *top; /*栈2删除栈顶元素*/char topx2STACK2 *top; /*栈2读栈顶元素*/STACK2 *ptop2STACK2 *top,char *x; /*栈2读出栈顶元素值并删除栈顶元素*/int empty2STACK2 *top; /*判栈2是否为空函数*int text1char *s ; /*显示文本*/main char sN,s1N,ch; int i,result; int gdriver, gmode; init; /*初始化函数*/ while1 play; /*发牌*/ gotoxy1,15; /*移动光标*/ printfNote-n; printf Please enter express accroding to above four numbern; /*提示信息*/ printf at as follows2.*5.7.n;/*提示输入字符串格式*/ printf n; scanfsc,s1,ch; /*输入字符串压回车键*/ changes1,s; /*调用change函数将中缀表达式s1转换为后缀表达式s*/ resultcomputers; /*计算后缀表达式的值,返回结果result */ ifresult24 /*如果结果等于24*/ text1very good; /*调用函数text1显示字符串very good*/ else text1wrong;/*否则函数text1显示字符串wrong*/ printfContinue y/nn; /*提示信息,是否继续*/ scanfc,ch; /*输入一字符*/ ifchnchN /*如果该字符等于n或N*/ break; /*跳出循环,程序结束*/ /*否则,开始下一轮循环*/ close; return; /*返回*/ void rand1int j/*随机发牌函数*/int kind,num; char str3,n; randomize;while1/*循环直到有牌发*/ numrandom13; /*大小随机数*/ ifpkindnum-1 /*该数未取过*/ npkindnum; /*取相应位置的扑克牌数*/ pkindnum-1; /*牌发好以后相应位置的元素置-1*/ break; ifn0/*输出其牌他*/ settextstyle0,0,3; sprintfstr,c,n; outtextxyCOLj*100-5,ROW100-5,str;/*显示牌的大小*/ else/*输出10的时候*/ sprintfstr,d,10; outtextxyCOLj*100-6,ROW100-5,str; void playvoid/*发牌的具体过程*/ int j; forj0;j4;j rand1j; /*随机取牌*/ delay10000; /*延时显示*/ void changechar *e,char *a /*中缀字符串e转后缀字符串a函数*/ STACK2 *topNULL; /* 定义栈顶指针*/ int i,j;char w; i0; j0; whilee0 /*当字符串没有结束时*/ ifisdigite /*如果字符是数字*/ do aje; /*将数字原样拷贝到数组a中*/ i; /*e数组的下标加1*/ j; /*a数组的下标加1*/ whilee.; /*直到字符为数字结束符“.”为止*/ aj. /*将数字结束符“.”拷贝到a数组依然保持结束标记*/ ife /*如果字符是“”时*/ toppush2top,e; /*将其压入堆栈*/ ife /*如果字符是“”时*/ topptop2top,w; /*取出栈顶元素,并从栈顶删除该元素*/ whilew /*如果字符不是“”时反复循环*/ ajw; /*将栈顶元素存入a数组*/ j; /*下标加1*/topptop2top,w ; /*取出栈顶元素,并从栈顶删除该元素*/ ifee- /*如果字符是加或减号时*/ ifempty2top /*如栈不为空*/ wtopx2top; whilew /*当栈顶元素不是“”时反复循环*/ ajw; j; /*将栈顶元素存入表达式a中,a的下标加1*/ toppop2top; /*删除栈顶元素*/ ifempty2top /*如果栈为空*/ break; /*跳出循环*/ else wtopx2top; /*否则读栈顶元素*/ toppush2top,e; /*将当前e的字符元素压入堆栈*/ ife*e/ /*如果字符是乘或除号时*/ ifempty2top /*如栈不为空*/ wtopx2top; /*读栈顶元素存入w*/ whilew*w//*当栈顶元素是乘或除时反复循环*/ ajw; j; /*将栈顶元素存入字符串a中,a的下标加1*/ toppop2top; /*删除栈顶元素*/ ifempty2top /*如果栈为空*/ break; /*跳出循环*/ else wtopx2top; /*否则读栈顶元素*/ toppush2top,e; /*将当前e字符元素压入堆栈*/ i; /*e的下标加1*/ whileempty2top /*当不为空时反复循环*/ topptop2top,aj; /*将栈顶元素存入数组a中*/ aj0 int i,k,num1,num2,result; i0; whiles0 /*当字符串没有结束时作以下处理*/ ifisdigits /*判字符是否为数字*/ k0; /*k初值为0*/ do k10*ks-0 /*i加1*/ whiles.; /*当字符不为.时重复循环*/ toppushtop,k; /*将生成的数字压入堆栈*/ ifs /*如果为号*/ topptoptop,num2; /*将栈顶元素取出存入num2中*/ topptoptop,num1; /*将栈顶元素取出存入num1中*/ resultnum2num1; /*将num1和num2相加存入result中*/ toppushtop,result; /*将result压入堆栈*/ ifs- /*如果为-号*/ topptoptop,num2; /*将栈顶元素取出存入num2中*/ topptoptop,num1; /*将栈顶元素取出存入num1中*/ resultnum1-num2; /*将num1减去num2结果存入result中*/ toppushtop,result; /*将result压入堆栈*/ ifs* /*如果为*号*/ topptoptop,num2; /*将栈顶元素取出存入num2中*/ topptoptop,num1; /*将栈顶元素取出存入num1中*/ resultnum1*num2; /*将num1与num2相乘结果存入result中*/ toppushtop,result; /*将result压入堆栈*/ ifs/ /*如果为/号*/ topptoptop,num2; /*将栈顶元素取出存入num2中*/ topptoptop,num1; /*将栈顶元素取出存入num1中*/ resultnum1/num2; /*将num1除num2结果存入result中* toppushtop,result; /*将result压入堆栈*/ i; /*i加1*/ topptoptop,result; /*最后栈顶元素的值为计算的结果*/ return result; /*返回结果*/ STACK1 *initstack1STACK1 *top /*初始化*/ topNULL; /*栈顶指针置为空*/ return top; /*返回栈顶指针*/ STACK1 *pushSTACK1 *top,int x /*入栈函数*/ STACK1 *p; /*临时指针类型为STACK1*/ pSTACK1 *mallocsizeofSTACK1; /*申请STACK1大小的空间*/ ifpNULL /*如果p为空*/ printfmemory is overflown; /*显示内存溢出*/ exit0; /*退出*/ p-datax; /*保存值x到新空间*/ p-linktop; /*新结点的后继为当前栈顶指针*/ topp; /*新的栈顶指针为新插入的结点*/ return top; /*返回栈顶指针*/ STACK1 *popSTACK1 *top /*出栈*/ STACK1 *q; /*定义临时变量*/ qtop; /*保存当前栈顶指针*/ toptop-link; /*栈顶指针后移*/ freeq; /*释放q*/ return top; /*返回栈顶指针*/ int topxSTACK1 *top /*读栈顶元素*/ iftopNULL /*栈是否为空*/ printfStack is nulln; /*显示栈为空信息*/ return 0; /*返回整数0*/ return top-data; /*返回栈顶元素*/ STACK1 *ptopSTACK1 *top,int *x /*取栈顶元素,并删除栈顶元素*/ *xtopxtop; /*读栈顶元素*/ toppoptop; /*删除栈顶元素*/ return top; /*返回栈顶指针*/ int emptySTACK1 *top /*判栈是否为空*/ iftopNULL /*如果为空*/ return 1; /*返回1*/ else return 0; /*否则返回0*/ STACK2 *initstack2STACK2 *top /*初始化*/ topNULL; /*栈顶指针置为空*/ return top; /*返回栈顶指针*/ STACK2 *push2STACK2 *top,char x /*入栈函数*/ STACK2 *p; /*临时指针类型为STACK2*/ pSTACK2 *mallocsizeofSTACK2; /*申请STACK2大小的空间*/ ifpNULL /*如果p为空*/ printfmemory is overflown; /*显示内存溢出*/ exit0; /*退出*/ p-datax; /*保存值x到新空间*/ p-linktop; /*新结点的后继为当前栈顶指针*/ topp; /*新的栈顶指针为新插入的结点*/ return top; /*返回栈顶指针*/ STACK2 *pop2STACK2 *top /*出栈*/ STACK2 *q; /*定义临时变量*/ qtop; /*保存当前栈顶指针*/ toptop-link; /*栈顶指针后移*/ freeq; /*释放q*/ return top; /*返回栈顶指针*/ char topx2STACK2 *top /*读栈顶元素*/ iftopNULL /*栈是否为空*/ printfStack is nulln; /*显示栈为空信息*/ return data; /*返回栈顶元素*/ STACK2 *ptop2STACK2 *top,char *x /*取栈顶元素,并删除栈顶元素*/ *xtopx2top; /*读栈顶元素*/ toppop2top; /*删除栈顶元素*/ return top; /*返回栈顶指针*/ int empty2STACK2 *top /*判栈是否为空*/ iftopNULL /*如果为空*/ return 1; /*返回1*/ else return 0; /*否则返回0*/ int text1char *s settextstyle1, 0, 8;/*三重笔划字体, 放大8倍*/ outtextxy120, 120, s; /*输出字符串s*/ setusercharsize2, 1, 4, 1;/*水平放大2倍, 垂直放大4倍*/settextstyle3, 0, 5; /*无衬字笔划, 放大5倍*/ outtextxy220, 220, s; /*输出字符串s*/ getch; /*键盘输入任一字符*/ return ; /*返回*/ 21

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。