版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、吉林工程技术师范学院c语言程序课程设计报告书设计题目: 24点数学运算 专业: 班级: 学生姓名: 学号: 指导教师: 2010年06月信息工程学院目 录摘 要 2第一章 绪 论 3 1 .1 c语言概述 3 1 .2 c语言出现的历史背景 3第二章 开发环境及相关技术的介绍4 2 .1 开发环境的介绍 4 2 .2 有关开发环境的技术 4第三章 总体设计与详细设计7 3 .1 本程序解决的有关技术问题 7 3 .2 本程序流程图9第四章 编码实现104 .1 程序的总体实现与使用方法10 4 .2 实现本程序的关键c技术 12第五章 调试与测试14第六章 总结与心得 17附录: 参考文献18
2、源代码19摘 要 “巧算24点”是一种数学游戏,正如象棋、围棋一样是一种人们喜闻乐见的娱乐活动。 此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。它始于何年何月已无从考究,但它以自己独具的数学魅力和丰富的内涵正逐渐被越来越多的人们所接受。这种游戏方式简单易学,能健脑益智,是一项极为有益的活动。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 首先穷举的可行性问题。我把表达式如下分成三类 1、 无括号的简单表达式。 2、 有一个括号的简单表达式。 3、 有两
3、个括号的较复4、 杂表达式。 穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。关键字:24点,数学游戏,算24点第一章 绪 论1.1 c语言概述c语言是国际上广泛流行且很有发展前途的计算机高级语言,不仅用来编写应用软件,也用来编写系统软件。c语言功能丰富,使用灵活,可移植性好,深受广大用户欢迎。c语言的数据类型丰富,既具有高级程序设计语言的优点,又具有低级程序设计语言的特点;既可以用来编写系统程序,又可以用来编写应用程序。(例如,著名的unix操作系统就是用c语言编写的)因此,c语言正在被迅速地推广和普及。1 .2 c语言出现的历史背景在c语言诞生以前,操作系统及其他系
4、统软件主要是用汇编语言实现的。由于汇编语言程序设计依赖于计算机硬件,其可读性和可移植性都很差,而一般的高级语言又难以实现对计算机硬件的直接操作,因此人们需要一种兼有汇编语言和高级语言特性的语言。c语言就是在这种环境下产生的。它最早是由dennis richie于1973年设计并实现。它的产生同unix系统之间具有非常密切的联系c语言是在unix系统上开发的。而无论unix系统本身还是其上运行的大部分程序,都是用c语言编写实现。同时,它同样适合于编写不同领域中的大多数程序。c语言已经成为全球程序员的公共语言,并且由此产生了当前两个主流的语言c+和java它们都建立在c语言的语法和基本结构的基础上
5、,而且现在世界上的许多软件都是在c语言及其衍生的各种语言的基础上开发而成。 目前,在微机上广泛使用的c语言编译系统有turbo c、borland c+、microsoft visual c+等。虽然它们的基本部分都是相同的,但还是有一些差异,本程序的设计采用turbo c作为上机编程调试环境。第二章 开发环境及相关技术的介绍2 .1 开发环境的介绍在c语言诞生以前,操作系统及其他系统软件主要是用汇编语言实现的。由于汇编语言程序设计依赖于计算机硬件,其可读性和可移植性都很差,而一般的高级语言又难以实现对计算机硬件的直接操作,因此人们需要一种兼有汇编语言和高级语言特性的语言。c语言就是在这种环境
6、下产生的。它最早是由dennis richie于1973年设计并实现。它的产生同unix系统之间具有非常密切的联系c语言是在unix系统上开发的。而无论unix系统本身还是其上运行的大部分程序,都是用c语言编写实现。同时,它同样适合于编写不同领域中的大多数程序。c语言已经成为全球程序员的公共语言,并且由此产生了当前两个主流的语言c+和java它们都建立在c语言的语法和基本结构的基础上,而且现在世界上的许多软件都是在c语言及其衍生的各种语言的基础上开发而成。 目前,在微机上广泛使用的c语言编译系统有turbo c、borland c+、microsoft visual c+等。虽然它们的基本部分
7、都是相同的,但还是有一些差异,本程序的设计采用turbo c作为上机编程调试环境。2 .2 有关开发环境的技术c语言的特点:1. 简洁紧凑,灵活方便c语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示.它把高级语言的基本结构和语句与低级语言的实用性结合起来. c 语言可以象汇编语言一样对位,字节和地址进行操作, 而这三者是计算机最基本的工作单元.2. 运算符丰富 c的运算符包含的范围很广泛,共有种34个运算符.c语言把括号,赋值,强制类型转换等都作为运算符处理.从而使c的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算.3. 数据
8、结构丰富c的数据类型有:整型,实型,字符型,数组类型,指针类型,结构体类型,共用体类型等.能用来实现各种复杂的数据类型的运算.并引入了指针概念,使程序效率更高.另外c语言具有强大的图形功能, 支持多种显示器和驱动器.且计算功能,逻辑判断功能强大. 4. c是结构式语言结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立.这种结构化方式可使程序层次清晰, 便于使用,维护以及调试.c语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环,条件语句控制程序流向,从而使程序完全结构化. 5. c语法限制不太严格,程序设计自由度大 一般的高级语言语法检查比较
9、严,能够检查出几乎所有的语法错误.而c语言允许程序编写者有较大的自由度.6. c语言允许直接访问物理地址,可以直接对硬件进行操作因此既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位,字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件. 7. c语言程序生成代码质量高,程序执行效率高 一般只比汇编程序生成的目标代码效率低1020%.8. c语言适用范围大,可移植性好c语言有一个突出的优点就是适合于多种操作系统, 如dos,unix,也适用于多种机型.c#和.net平台的概貌c语言的缺点:1. c语言的缺点主要是表现在数据的封装性上,这一点使得c语言在数
10、据的安全性上做的有很大缺陷,这也是c和c+的一大区别。 2. c语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,c语言比其他高级语言较难掌握。第三章 总体设计与详细设计3 .1 本程序解决的有关技术问题本程序是一款巧算24点的小游戏。“巧算24点”的游戏内容如下:一副牌中抽去大小王剩下52张,(如果初练也可只用110这40张牌)任意抽取4张牌(称牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须用一次且只能用一次,如抽出的牌是3、8、8、9,那么算式为(98)83或38(98)或(988)3等。 “算24点”作为一种扑
11、克牌智力游戏,还应注意计算中的技巧问题。计算时,我们不可能把牌面上的4个数的不同组合形式去试,更不能瞎碰乱凑。这里向大家介绍几种常用的、便于学习掌握的方法:1 利用3824、4624求解。 把牌面上的四个数想办法凑成3和8、4和6,再相乘求解。如3、3、6、10可组成(1063)324等。又如2、3、3、7可组成(732)324等。实践证明,这种方法是利用率最大、命中率最高的一种方法。 2利用0、11的运算特性求解。 如3、4、4、8可组成384424等。又如4、5、j、k可组成11(54)1324等。 3在有解的牌组中,用得最为广泛的是以下六种解法:(我们用a、b、c、d表示牌面上的四个数)
12、 (ab)(cd) 如(104)(22)24等。 (ab)cd 如(102)2424等。 (abc)d 如(322)1224等。 (abc)d 如(952)224等。 abcd 如113l1024等。 (ab)cd 如(4l)6624等。1929年,波兰逻辑学家lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。 表达式 波兰表达式 a-b ab- (a-b)*c+d ab-c*d
13、+ a*(b+c/d)-e*f abcd/+*ef*- (b+c)/(a-d) bc+ad-/ ok,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。3 .2 本程序结构框图巧算24点绘制窗体输入模块执行模块运算模块判断模块输出模块第四章 编码实现4 .1 程序的总体设计与使用方法本程序是针对24点数学运算设计的一款巧算24点数学运算游戏。一副牌(52张)中,任意抽取4张可有1820种不同组合,其中有458个牌组算不出24点,如a、a、a、5。 不难看出,“巧算24点”能极大限度地调动眼、脑、手、
14、口、耳多种感官的协调活动,对于培养我们快捷的心算能力和反应能力很有帮助。 首先呈现在用户面前的是一个非常友好的用户界面,用户根据系统提示的4个数来计算如何使其为24点,当用户确认后,系统会判断用户输入的算式是否正确,如果用户算不出,可以按a键,系统将自动算出结果。在有解的牌组中,用得最为广泛的是以下六种解法:(我们用a、b、c、d表示牌面上的四个数) (ab)(cd) 如(104)(22)24等。 (ab)cd 如(102)2424等。 (abc)d 如(322)1224等。 (abc)d 如(952)224等。 abcd 如113l1024等。 (ab)cd 如(4l)6624等。4 .2
15、实现本程序的关键c技术本程序主要运用的系统函数:1.textcolor(tcolor);函数名: textcolor 功 能: 在文本模式中选择新的字符颜色 用 法: void textcolor(int newcolor); 参数说明:其中参数newcolor为要设置的颜色2.textbackground(bcolor);函数名: textbackground 功 能: 选择新的文本背景颜色 用 法: void textbackground(int color); 头文件: 包含在conio.h头文件中,但是在vc的conio.h中找不到这个函数,tc中有3.gotoxy函数功能:将光标移动
16、到指定位置说明,y行和x列;gotoxy(0,0)将光标移动到屏幕左上角。main() gotoxy(x,y);puts();gotoxy(x,y+1);printf();gotoxy(x,y+2);此程序段运用gotoxy函数实现菜单界面。4.cprintf函数名: cprintf 功 能: 送格式化输出至屏幕 用 法: int cprintf(const char *format, argument, .); 头文件: conio.h 说明:非ansi c标准,在vc6.0、tc中均有conio.h这个头文件。5.window功 能: 定义活动文本模式窗口 用 法: void window
17、(int left, int top, int right, int bottom);6. clrscr函数名: clrscr 功 能: 清除文本模式窗口 清屏的意思 就是把之前显示出的文字字符去掉 跟cmd里面的清屏的功能是一样的 实际上是clear screen的简写 用 法: void clrscr(void);7. puttext函数名: puttext 功 能: 将文本从存储区拷贝到屏幕 用 法: int puttext(int left, int top, int right, int bottom, void *source);第五章 调试与测试1.程序运行后,会出现一个友好的界
18、面,供用户选择。2.当用户输入算式正确时,显示的界面,程序会提示用户您输入的算式正确,并按任意键继续。3.当用户输入a时,系统会自动算出结果。4.当系统出的4个数无解时,系统会做出如下提示5当用户想退出系统时,输入会出现如下界面第六章 总结与心得回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能
19、真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温故。1929年,波兰逻辑学家lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。所谓表达式的线性化是指将中缀表达的表达式转
20、化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。不难看出,“巧算24点”能极大限度地调动眼、脑、手、口、耳多种感官的协调活动,对于培养我们快捷的心算能力和反应能力很有帮助。 你也来试试“巧算24点”吧,相信你会很快喜欢上它的。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题
21、,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢! 附 录:参考文献1c程序设计(第三版) 清华大学出版社 谭浩强.2. c语言程序设计 清华大学出版社 郭有强3. 全国计算机登记考试二级教程c预言程序设计 高等教育出版社 田树青附 录:源代码#include stdio.h#include #include #include #define left 0x4b00#define right 0x4d00#define enter 0x1c0dchar c4098;int total
22、= 0, correct = 0;int data4, old_data4, t112;char op = +, -, *, /;char *model = (axb)yc)zd, (ay(bxc)zd), az(by(cxd), az(bxc)yd), (axb)z(cyd);int *a, *b, *c, *d;char *x, *y, *z;int *opd;char *opr;char *sample;int *oprand = &a, &b, &c, &d;char *oprator = &x, &y, &z;void draw_3d_window(int l, int u, int
23、 r, int d, int tcolor, int bcolor);void draw_frame(int l, int u, int r, int d, int tcolor, int bcolor);void begin_print();void run();void trans(char ans, char postexp);int compute(char postexp);int auto_run();int calculate();int end_print();main() begin_print(); while (1) run();void draw_3d_window(i
24、nt l, int u, int r, int d, int tcolor, int bcolor)textbackground(black);window(l+2, u+1, r+2, d+1);clrscr();textcolor(tcolor);textbackground(bcolor);window(l, u, r, d);clrscr();void draw_frame(int l, int u, int r, int d, int tcolor, int bcolor)int i;textcolor(tcolor);textbackground(bcolor);for (i=l+
25、1; ir; i+)gotoxy(i, u);cprintf(%c, 196);gotoxy(i, d);cprintf(%c, 196);for (i=u+1; id; i+)gotoxy(l, i);cprintf(%c, 179);gotoxy(r, i);cprintf(%c, 179);gotoxy(l, u);cprintf(%c, 218);gotoxy(r, u);cprintf(%c, 191);gotoxy(l, d);cprintf(%c, 192);gotoxy(r, d);cprintf(%c, 217);void begin_print()int i, j;text
26、background(lightgray);clrscr();textcolor(blue);gotoxy(13, 4);cprintf(welcome to 24!);draw_frame(5, 7, 33, 13, blue, lightgray);window(6, 8, 32, 12);for (i=1; i=3; i+)for (j=1; j=5; j+)gotoxy( 7*i, j);cprintf(%c, 179);for (i=0; i4; i+)draw_frame(1+7*i, 1, 5+7*i, 5, blue, lightgray);textbackground(blu
27、e);window(5+2+7*i, 7+2, 5+4+7*i, 7+4);clrscr();window(6, 8, 32, 12);textcolor(blue);textbackground(lightgray);window(1, 1, 80, 25);gotoxy(5, 15);cprintf(your answer: ( to end);gotoxy(6, 18);for (i=0; i28; i+)cprintf(%c, 196);gotoxy(2, 24);cprintf(t: );gotoxy(9, 24);cprintf(c: );gotoxy(16, 24);cprint
28、f(rate: );gotoxy(27, 24);cprintf(%);gotoxy(29, 23);cprintf(ver 1.0);for (i=2; i=24; i+)gotoxy(38, i);cprintf(%c, 179);draw_frame(42, 2, 75, 23, blue, lightgray);window(43, 3, 74, 22);gotoxy(1, 3);cprintf(notes: rnn);gotoxy(1, 6);cprintf(1.direct enter to try next roundrn);cprintf(2.a stands 1.rnn);c
29、printf(3.j q k stand for 10.rnn);cprintf(4.press a to auto run.rnn);cprintf(5.press to quit the game.rnn);gotoxy(7, 17);cprintf(have a good time!);gettext(1, 1, 80, 25, c);void run()char str40, ans40;int i, k, r, flag = 0;randomize();while (1)window(1, 1, 80, 25);clrscr();puttext(1, 1, 80, 25, c);te
30、xtcolor(red);textbackground(lightgray);gotoxy(5, 24);cprintf(%-2d, total);gotoxy(12, 24);cprintf(%-2d, correct); gotoxy(22, 24);if (total = 0)cprintf(0.00);elsecprintf(%.2f, 100*(float)correct/(float)total);textattr(128+yellow+(lightgreen4);for (i=1; i=10; i+)ti0 = i;ti1 = 0;for (i=0; i=10 ? 10:k;ol
31、d_datai = k;switch(old_datai)case 1: cprintf(a); break;case 11: cprintf(j); break;case 12: cprintf(q); break;case 13: cprintf(k); break;default: cprintf(%d, old_datai); break;for (i=0; i=0&ansi-2=9)op.data+op.top = *;op.data+op.top = (;break;case ):while (op.dataop.top != ()postexpj+ = op.dataop.top
32、-;if (op.top =0&ch=0 & ch=0&ch=0 & ch=9)d = 10*d + (ch - 0);ch = postexpi+;st.data+st.top = d;counter+;td1 = td1=0 ? 0:td1-1;if (!(d=data0|d=data1|d=data2|d=data3)return (-100);ch = postexpi+;if (counter != 4)return (-200);for (i=1; i=10; i+)if (ti1)return (-300);return st.datast.top;int auto_run()i
33、nt i = 6, k;for (a=data; adata+4; a+)for (b=data; bdata+4; b+)if (b = a)continue;for (c=data; cdata+4; c+)if (c=a | c=b) continue;d = data+6-(a-data)-(b-data)-(c-data);for (x=op; xop+4; x+)for (y=op; yop+4; y+)for (z=op; zop+4;z+)for (k=0; k5; k+)opd = oprand;opr = oprator;sample = modelk;if (calculate() = 24)opd = oprand;opr = oprator;sample = modelk;while (*sample)switch(*sample)case a:case b:case c:case d:i += 2;gotoxy(i, 17);cprintf(%d, *opd+);break;case x:case y:case z:i += 2;gotoxy(i, 17);cprintf(%c, *opr+);break;case (:case ):i += 2;gotoxy(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社会工作专业实习报告
- 债券投资分析与交易方法与案例解析01(论文资料)
- 心灵成长(课件)-生产经营管理-经管营销-专业资料
- 吉林省长春市文曲星名校2025届高三(最后冲刺)英语试卷含解析
- 福建省泉州市德化一中2025届高三第一次调研测试英语试卷含解析
- 福建省泉州永春侨中2025届高三下学期联合考试英语试题含解析
- 安徽省阜阳四中、阜南二中、阜南实验中学2025届高三第二次联考语文试卷含解析
- 2025届云南省文山州广南二中高三适应性调研考试语文试题含解析
- 内蒙古一机集团第一中学2025届高三第三次测评数学试卷含解析
- 2025届山东省淄博一中高考临考冲刺语文试卷含解析
- 设备修理行业行业痛点与解决措施
- 售后工程师售后服务标准培训
- 年货节活动策划方案
- 重庆交通大学-答辩通用PPT模板
- 2024年鲁信科技股份有限公司招聘笔试参考题库含答案解析
- NB-T 47013.1-2015 承压设备无损检测 第1部分-通用要求
- 湘少版小学英语单词(含默写版)
- 2023年江财计量经济学大作业
- 地基基础检测题库(104道)
- 小学二年级数学小故事(十六篇)
- 山东工业技师学院招聘真题
评论
0/150
提交评论