高级语言程序设计之24点游戏.docx
- 文档编号:11571417
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:10
- 大小:123.27KB
高级语言程序设计之24点游戏.docx
《高级语言程序设计之24点游戏.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计之24点游戏.docx(10页珍藏版)》请在冰豆网上搜索。
高级语言程序设计之24点游戏
《高级语言程序设计》课程设计
说明书
设计题目:
算24游戏
1.课程设计的目的……………………………………………1
2.课程设计任务内容…………………………………………1
2.1说明……………………………………………………1
2.2算法分析………………………………………………1
2.3用户使用说明…………………………………………1
2.4模块说明………………………………………………1
3.系统模块图…………………………………………………1
4.效果预览……………………………………………………3
5.经验和体会…………………………………………………4
6.参考文献……………………………………………………4
7.附录…………………………………………………………4
一、课程设计的目的
《高级语言程序设计》课程设计是电子信息专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习,其目的在于加深对程序设计基本知识的理解,掌握使用C语言进行模块化软件设计的基本方法,提高通过编写程序解决实际问题能力,为今后从事设计工作和后续各种编程课程的学习打好基础。
二、课程设计任务内容
算24游戏
【说明】
主要功能:
(1)能罗列出四张牌用四则运算凑成24的游戏。
(2)凑不成给出提示。
【算法分析】
计算24点主要应用四种运算.开始状态有四个操作数,一个运算符对应两个操作数,所以一开始选择两个操作数分别对四个操作符进行循环检测,每一次运算后产生了新的数,两个数运算变成一个数,整体是少了一个操作数,所以四个数最终是三次运算。
由于操作的层数比较少(只有三层),所以可以用回溯的算法来进行检测,当找到一个解时便结束查找。
以此循环,最终找到所有解。
如果所有的情况都找过后仍然没有,则输出无解的信息。
【用户使用说明】
当游戏界面出现时,玩家可以按照系统提示从1到13之间任意选择4个整数,然后可以多人同时进行四则运算快速得出计算出24点的运算方法。
最后可以通过对程序的运行得到所有的解法。
如果所给的数能够得到24点,计算机将会罗列出所有的算法;如果不能构成24点,计算机将会给出提示。
【模块说明】
从大的方面讲,本程序可以分为两个大的模块。
一个模块是对使用者所给数字的分析说明以及程序算法;另一个模块是对运算符的分析说明与使用。
本程序主要采用了循环的结构体,通过回溯法对所给数字进行四则运算,然后通过循环体的功能将所有结果输出,以得到所有满足条件的算法。
三、系统模块图
四、效果预览
表一:
表二:
五、经验和体会
高级语言程序设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的可用程序,都是一个很好的学习和锻炼的过程。
使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决问题的能力。
使我们体会到自身知识和能力能在实际问题中的应用和发挥。
不但可以激发创新意识,还可以开发创造能力、培养沟通能力。
这次设计时间虽然仅有一两个星期,但确实使我受益非浅。
通过程序设计我丰富了计算机操作经验,更加深了对高级语言的了解,熟悉了其环境,更增强了VC的使用技巧。
六、参考文献
【1】《C语言程序设计教程》(第三版)谭浩强张基温编著
【2】《C语言上机指导》谭浩强张基温编著
【3】《二级C语言教程与题解》等级考试教程编写组编
【4】《高级语言程序设计与应用教程》陈静,杨青,郑世珏主编
七、附录
#include"stdio.h"
#defineGOAL24
typedefenum_BOOL{FALSE,TRUE}BOOL;
BOOLisHaveSolution=FALSE;
typedefstruct_NUM
{
intvalue;
BOOLisCanUse;
}NUM;
voidsearch24(intnumber1,intnumber2,intnumber3,intnumber4,intgoal);
doublecalTwo(doublenum1,doublenum2,charch);
intmain(void)
{
NUMnumbers[4];
intarray[24][4];
inti=0,j,count=0;
inttemp1,temp2,temp3;
printf("******24点游戏******\n");
printf("准备好了吗?
\n");
printf("请从1-13中任选四个整数!
\n");
for(i=0;i<4;i++)
{
printf("请输入第%d个数字:
",(i+1));
scanf("%d",&numbers[i].value);
numbers[i].isCanUse=TRUE;
}
for(i=0;i<4;i++)
{
numbers[i].isCanUse=FALSE;
for(temp1=0;temp1<4;temp1++)
{
if(!
numbers[temp1].isCanUse)
{
continue;
}
numbers[temp1].isCanUse=FALSE;
for(temp2=0;temp2<4;temp2++)
{
if(!
numbers[temp2].isCanUse)
{
continue;
}
numbers[temp2].isCanUse=FALSE;
for(temp3=0;temp3<4;temp3++)
{
if(!
numbers[temp3].isCanUse)
{
continue;
}
numbers[temp3].isCanUse=FALSE;
j=0;
array[count][j++]=numbers[i].value;
array[count][j++]=numbers[temp1].value;
array[count][j++]=numbers[temp2].value;
array[count][j++]=numbers[temp3].value;
count++;
numbers[temp3].isCanUse=TRUE;
}
numbers[temp2].isCanUse=TRUE;
}
numbers[temp1].isCanUse=TRUE;
}
numbers[i].isCanUse=TRUE;
}
for(i=0;i { for(j=0;j { for(temp1=0;temp1<4;temp1++) { if(array[i][temp1]! =array[j][temp1]) break; } if(temp1>=4) { break; } } if(j>=i) search24(array[i][0],array[i][1],array[i][2],array[i][3],GOAL); } if(! isHaveSolution) { printf("对不起,您选择的数不能构成24点"); } getchar(); getchar(); return0; } voidsearch24(intnumber1,intnumber2,intnumber3,intnumber4,intgoal) { charop[4]; inti1,i2,i3; doubletemp1=0,temp2=0,temp3=0,temp4=0; op[0]='+'; op[1]='-'; op[2]='*'; op[3]='/'; for(i1=0;i1<4;i1++) { for(i2=0;i2<4;i2++) { for(i3=0;i3<4;i3++) { temp1=calTwo(calTwo(number1,number2,op[i1]),calTwo(number3,number4,op[i3]),op[i2]); temp2=calTwo(calTwo(number1,calTwo(number2,number3,op[i2]),op[i1]),number4,op[i3]); temp3=calTwo(calTwo(calTwo(number1,number2,op[i1]),number3,op[i2]),number4,op[i3]); temp4=calTwo(number1,calTwo(number2,calTwo(number3,number4,op[i3]),op[i2]),op[i1]); if(goal==(int)temp1) { printf("((%d%c%d)%c(%d%c%d))=%d\n", number1,op[i1],number2,op[i2],number3,op[i3],number4,(int)temp1); temp1=0; isHaveSolution=TRUE; } if(goal==(int)temp2) { printf("((%d%c(%d%c%d))%c%d)=%d\n", number1,op[i1],number2,op[i2],number3,op[i3],number4,(int)temp2); temp2=0; isHaveSolution=TRUE; } if(goal==(int)temp3) { printf("(((%d%c%d)%c%d)%c%d)=%d\n", number1,op[i1],number2,op[i2],number3,op[i3],number4,(int)temp3); temp3=0; isHaveSolution=TRUE; } if(goal==(int)temp4) { printf("(%d%c(%d%c(%d%c%d)))=%d\n", number1,op[i1],number2,op[i2],number3,op[i3],number4,(int)temp4); temp4=0; isHaveSolution=TRUE; } } } } } doublecalTwo(doublenum1,doublenum2,charch) { switch(ch) { case'+': returnnum1+num2; case'-': returnnum1-num2; case'*': returnnum1*num2; case'/': returnnum1/num2; default: printf("ERROR"); return0; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计 24 游戏