c语言课程设计24点
C语言写的24点游戏

if((m%4)==0&&newp[j]%newp[q]==0&&c==3&&newp[q+1]%s2==0)
printf("%d%c((%d%c%d)%c%d)=%d\n",p[3],p1[2],p[0],p1[0],p[1],p1[1],p[2],s3);
}
}
}
}
}
}
}
}
for(c=0;c<4;c++)
{
switch(b[c])
{
case 1:s3=s2+newp[q+1];sign='+';break;
case 2:s3=s2-newp[q+1];sign='-';break;
int a[4],newp[4],b[4]={1,2,3,4};//a[4]数组存放随机生成的四个数
char p1[3],sign; //定义存储运算符的字符数组
printf("四个数是:");
for(i=0;i<4;i++)
{
a[i]=rand()%13+1; //获得随机数
printf("(%d%c%d)%c(%d%c%d)=%d\n",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s3);
else
printf("(%d%c%d)%c(%d%c%d)=%d\n",p[0],p1[0],p[1],p1[1],p[2],p1[2],p[3],s3);
用C语言实现24点的算法程序

//#include "stdafx.h"# include <stdio.h>#include "conio.h"#include "stdlib.h"#include "time.h"#include "math.h"#include "string.h"#include "iostream.h"/*从一副扑克牌中,任取4张。
2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按1 计算要求通过加减乘除四则运算得到数字24。
本程序可以随机抽取纸牌,并用试探法求解。
*/int s[21][4]={-1};int sum=0;void GivePuzzle(char* buf){char card[] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};for(int i=0; i<4; i++){buf[i] = card[rand() % 13];}}void SetPuzzle(char *buf){scanf("%c %c %c %c",&buf[0],&buf[1],&buf[2],&buf[3]);}void shuffle(char * buf){for(int i=0; i<5; i++){int k = rand() % 4;char t = buf[k];buf[k] = buf[0];buf[0] = t;}}int GetCardValue(int c){if(c=='T') return 10;if(c>='0' && c<='9') return c - '0';return 1;}char GetOper(int n){switch(n){case 0:return '+';case 1:return '-';case 2:return '*';case 3:return '/';}return ' ';}double MyCalcu(double op1, double op2, int oper){switch(oper){case 0:return op1 + op2;case 1:return op1 - op2;case 2:return op1 * op2;case 3:if(fabs(op2)>0.0001)return op1 / op2;elsereturn 100000;}return 0;}void MakeAnswer(char* answer, int type, char* question, int* oper){char p[4][3];for(int i=0; i<4; i++){if( question[i] == 'T' )strcpy(p[i], "10");elsesprintf(p[i], "%c", question[i]);}switch(type){case 0:sprintf(answer, "%s %c (%s %c (%s %c %s))",p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);break;case 1:sprintf(answer, "%s %c ((%s %c %s) %c %s)",p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);break;case 2:sprintf(answer, "(%s %c %s) %c (%s %c %s)",p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);break;case 3:sprintf(answer, "((%s %c %s) %c %s) %c %s",p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);break;case 4:sprintf(answer, "(%s %c (%s %c %s)) %c %s",p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);break;}}bool TestResolve(char* question, int* oper, char* answer){// 等待考生完成int type[5]={0,1,2,3,4};//计算类型double p[4];double sum=0;for(int i=0; i<4; i++) //循环取得点数{p[i]=GetCardValue(int(question[i]));}for(i=0;i<5;i++){MakeAnswer(answer,type[i],question,oper); //获取可能的答案//printf("Doing:%s\n", answer);switch(type[i]){case 0:sum=MyCalcu(p[0],MyCalcu( p[1],MyCalcu(p[2], p[3], oper[2]),oper[1]),oper[0]); //A*(B*(c*D))break;case 1:sum=MyCalcu(p[0],MyCalcu(MyCalcu(p[1], p[2], oper[1]),p[3],oper[2]),oper[0]); //A*((B*C)*D)break;case 2:sum=MyCalcu(MyCalcu(p[0], p[1], oper[0]),MyCalcu(p[2], p[3], oper[2]),oper[1]); // (A*B)*(C*D)break;case 3:sum=MyCalcu(MyCalcu(MyCalcu(p[0], p[1], oper[0]),p[2],oper[1]),p[3],oper[2]); //((A*B)*C)*Dbreak;case 4:sum=MyCalcu(MyCalcu(p[0],MyCalcu(p[1], p[2], oper[1]),oper[0]),p[3],oper[2]); //(A*(B*C))*Dbreak;}if(sum==24) return true;}return false;}bool permNum(int* oper, int i,int N,char*question,char*answer) //递归实现重新排列数字、运算符{int j, k;char tmp;if(i < N){for(j = i; j < N; j++){tmp = question[j];for(k = j; k > i; k--)question[k] = question[k-1];question[i] = tmp;if( permNum(oper, i+1,N,question,answer)) return true;for(k = i; k < j; k++)question[k] = question[k+1];question[j] = tmp;}}else{//int type;if( TestResolve(question, oper, answer) ){//getch();return true;}}return false;}bool perm(int* num, int i,int N,char*question,char*answer) //递归实现重新排列数字、运算符{int j, k, tmp;if(i < N){for(j = i; j < N; j++){tmp = num[j];for(k = j; k > i; k--)num[k] = num[k-1];num[i] = tmp;if(perm(num, i+1,N,question,answer)) return true;for(k = i; k < j; k++)num[k] = num[k+1];num[j] = tmp;}}else{if (permNum(num,0,4,question,answer)) return true;}return false;}int ifcan(int str[4]){for(int i=0;i<sum;i++){if(s[i][0]==str[0]&&s[i][1]==str[1]&&s[i][2]==str[2]) {return 1;}}s[i-1][0]=str[0];s[i-1][1]=str[1];s[i-1][2]=str[2];sum++;return 0;}bool Chooseoper(int *oper,char*question,char*answer) //递归从四个运算符获取三个运算符{int n=3,m=12,i,j;int oper1[12];for (i=0;i<n;i++){oper1[i]=i;}for (i=0;i<n;i++){oper[i]=oper1[i]/3;}if (!ifcan(oper)){if(perm(oper,0,n,question,answer)) return true;}j=n-1;while (1){if (oper1[n-1]==m-1)j--;else j=n-1;oper1[j]++;for (i=j+1;i<n;i++)oper1[i]=oper1[i-1]+1;for (i=0;i<n;i++){oper[i]=oper1[i]/3;}if (!ifcan(oper)){if(perm(oper,0,n,question,answer)) return true;}if (oper1[0]>=m-n)break;}return false;}bool Try(int *oper,char*question,char* answer){if(Chooseoper(oper,question,answer)) return true;return false;}int main(int argc, char* argv[]){// 初始化随机种子srand( (unsigned)time( NULL ) );char buf1[4]; // 题目char buf2[30]; // 解答printf("***************************\n");printf("计算24\n");printf("A J Q K 均按1计算,其它按牌点计算,T 代表10\n");printf("目标是:通过四则运算组合出结果:24\n");printf("Mode 1 of Give Puzzle: Rand to give puzzle\n");printf("Else Type of Give Puzzle:Give by Youself \n");printf("***************************\n\n");int mode=1; //默认为1printf("Mode:");scanf("%d",&mode);getchar();printf("***************************\n");for(;;){if (mode==1){GivePuzzle(buf1); // 出题模式1}else{printf("Num:");SetPuzzle(buf1); //出题模式2}getchar();printf("题目:");for(int j=0; j<4; j++){if( buf1[j] == 'T' )printf("10 ");elseprintf("%c ", buf1[j]);}printf("\n按任意键参考答案...\n");getch();int type[4];if( Try(type, buf1,buf2) ) //1全局搜索解法,精确解printf("参考:%s\n", buf2);elseprintf("无解...\n");for (int i=0;i<sum;i++){for(int j=0;j<3;j++)s[i][j]=-1;}sum=0;printf("按任意键出下一题目,x 键退出...\n");if( getch() == 'x' ) break;}return 0;}。
c语言实现24点游戏

#include "stdio.h"#include "math.h"#include "time.h"void main(){void first();void second();int third();time_t t; /设置机器时间int close=0;char get;clrscr();/清除屏幕缓冲区及液晶显示缓冲区光标位置回到屏幕左上角。
srand((unsigned) time(&t)); /系统时间来初始化for(;;){clrscr();清除屏幕缓冲区及液晶显示缓冲区光标位置回到屏幕左上角printf("24 POINTS SYSTEM v2.2\n"); printf("MADE BY DANTE WANG\n");printf("Jul.28th 2006\n\n");printf("Please choose mode!\n\n");printf("1. Game Mode\n");printf("2. Count Mode\n");printf("3. Quit\n\n");get=getch();等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句switch(get){case '1': first(); break;case '2': second();break;case '3': close=third(); break;default: printf("Please input 1, 2 or 3!\n"); getch(); }if(close)break;}}void first(){int jdgsgn(int a,int b,int c,int d); 1)统计出求不出24的所有组合数目(2)将每一种组合的计算结果写入文件result.txt,每两个组合占一行。
24点游戏C语言代码及报告

24点游戏C语言代码及报告24点游戏一,问题分析二十四点游戏规则:给出4个数字,所给数字均为有理数,用加、减、乘、除(可加括号)把给出的数算成24(每个数必须用一次且只能用一次,先算出结果者获胜。
步骤:比如下面的例子:例:3、8、8、9,答案1:(9—8)×8×3答案2: 3×8 ?(9—8)答案3:(9—8?8)×3利用3×8,24、4×6,24求解我的主要想法是首先穷举的可行性问题。
我把表达式如下分成三类—— 1、无括号的简单表达式。
2、有一个括号的简单表达式。
3、有两个括号的较复4、杂表达式。
穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。
我利用一个嵌套函数实现四个数的排列二,源程序及注释//首先穷举的可行性问题。
我把表达式如下分成三类——//1、无括号的简单表达式。
//2、有一个括号的简单表达式。
//3、有两个括号的较复4、杂表达式。
//穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。
我利用一个嵌套函数实现四个数的排列#include <iostream>#include <string>using namespace std;int number=0;string sss[5000];float cal(float a,float b,int p) {switch(p){case 1:return a+b;case 2:return a-b;case 3:return a*b;case 4:return a/b;case 5:return b-a;case 6:return b/a;}}string link(string a,string b,int p) {string st=a;switch(p){case 1:st+=("+"+b);break;case 2:st+=("-"+b);break;case 3:st+=("*"+b);break;case 4:st+=("/"+b);break;case 5:st=b+"-"+st;break;case 6:st=b+"/"+st;break;}st="("+st+")";return st;}void putout1(string c[],int p[]) { string st;st=link(c[1],c[2],p[1]);st=link(st,c[3],p[2]);st=link(st,c[4],p[3]);st=st.erase(0,1);st=st.erase(st.length()-1,1); number++;sss[number]=st;}void putout2(string c[],int p[]) { string st1,st2,st;st1=link(c[1],c[2],p[1]);st2=link(c[3],c[4],p[3]);st=link(st1,st2,p[2]);st=st.erase(0,1);st=st.erase(st.length()-1,1);number++;sss[number]=st;}void suan(float a[],string c[]) {int p[4];int i;float sum,sum1,sum2;for(p[1]=1;p[1]<=6;p[1]++)for(p[2]=1;p[2]<=6;p[2]++)for(p[3]=1;p[3]<=6;p[3]++){sum=cal(a[1],a[2],p[1]);sum=cal(sum,a[3],p[2]);sum=cal(sum,a[4],p[3]);if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) putout1(c,p); sum1=cal(a[1],a[2],p[1]);sum2=cal(a[3],a[4],p[3]);sum=cal(sum1,sum2,p[2]);if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) putout2(c,p); }}void disorder(float a[],string c[]){float b[5];string d[5];int i,j,k,l;for(i=1;i<=4;i++)for(j=1;j<=4;j++){if(j==i)continue;for(k=1;k<=4;k++){if(k==i||k==j)continue;for(l=1;l<=4;l++){if(l==i||l==j||l==k)continue;b[1]=a[i];b[2]=a[j];b[3]=a[k];b[4]=a[l]; d[1]=c[i];d[2]=c[j];d[3]=c[k];d[4]=c[l]; suan(b,d);}}}}int main(){cout<<"请输入四个数字";float a[5];int i,j;string c[5];for(i=1;i<=4;i++){cin>>a[i];if(a[i]==10)c[i]="10" ;else c[i]=int(a[i])+'0';}disorder(a,c);int v=1,u=0;for(i=1;i<=number;i++){v=1;for(j=1;j<i;j++)if(sss[i]==sss[j])v=0;if(v==1){cout<<sss[i]<<endl;u=1;}}if(u==0)cout<<"无解"<<endl;system("pause");return 0;}三,运行结果显示四,调试和运行程序过程中产生的问题及采取的措施:。
c语言课程设计24点

21.教学地点:计算机实验室,确保学生有足够的实践机会;
22.教学安排还应考虑学生的实际情况和需要,如学生的作息时间、兴趣爱好等,尽量安排在学生较为轻松的时间段进行授课,并提供与学生兴趣相关的编程实例。
七、差异化教学
根据学生的不同学习风格、兴趣和能力水平,本节课采取以下差异化教学措施:
6.学生分组讨论,合作编写24点游戏的程序;
7.学生展示自己的程序,互相评价,教师进行点评和总结。
三、教学方法
本节课采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
8.讲授法:教师讲解C语言的基本语法、编程技巧和24点游戏的实现方法;
9.讨论法:学生分组讨论,合作编写程序,互相交流思路和经验;
十、跨学科整合
本节课将考虑不同学科之间的关联性和整合性,促进跨学科知识的交叉应用和学科素养的综合发展:
32.结合数学学科:通过编写程序解决数学问题,如计算几何图形的面积、体积等,培养学生运用编程解决数学问题的能力;
33.结合物理学:利用编程模拟物理现象,如模拟物体运动、碰撞等,让学生了解编程在物理学领域的应用。
十一、社会实践和应用
为了培养学生的创新能力和实践能力,本节课将设计以下社会实践和应用相关的教学活动:
34.参观企业:学生参观软件开发企业,了解企比赛,如“蓝桥杯”等,提高学生的编程能力和竞争意识;
36.实际项目参与:为学生提供参与实际项目的机会,如合作开发一个小型的软件系统,让学生在实践中提升编程能力。
23.学习风格:提供多种教学资源,如教材、参考书、多媒体资料等,满足不同学习风格的学生;
24.兴趣:结合学生的兴趣爱好,选择有趣的编程实例进行教学,提高学生的学习积极性;
c课程设计24点

c 课程设计24点一、教学目标本课程的教学目标是让学生掌握24点游戏的规则和解题技巧,培养学生的逻辑思维能力和运算能力。
具体目标如下:1.知识目标:使学生了解24点游戏的历史背景和基本规则,掌握加、减、乘、除四则运算。
2.技能目标:培养学生独立完成24点游戏的能力,提高学生的运算速度和准确性。
3.情感态度价值观目标:培养学生团队合作精神,增强学生面对挑战的信心和勇气。
二、教学内容本课程的教学内容主要包括24点游戏的规则讲解、解题技巧训练和游戏实践。
具体安排如下:1.第一课时:介绍24点游戏的基本规则和玩法。
2.第二课时:讲解24点游戏的解题技巧,如数字拆分、运算顺序等。
3.第三课时:进行24点游戏实践,学生分组进行比赛,教师点评并指导。
4.第四课时:总结24点游戏的学习心得,学生分享自己的解题经验。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用以下教学方法:1.讲授法:教师讲解24点游戏的规则和解题技巧。
2.讨论法:学生分组讨论解题策略,分享心得体会。
3.案例分析法:教师出示典型病例,学生分析并解答。
4.实验法:学生动手实践,进行24点游戏比赛。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《24点游戏教程》2.参考书:《数学思维训练教程》3.多媒体资料:24点游戏教学视频、动画演示等。
4.实验设备:计算器、纸张、笔等。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,评估学生的学习态度和积极性。
2.作业:布置适量的作业,评估学生的掌握程度和运算能力。
3.考试:进行期中和期末考试,全面测试学生的知识水平和解题技巧。
4.比赛:24点游戏比赛,评估学生在实际操作中的表现。
评估方式应客观、公正,能够全面反映学生的学习成果。
教师应及时给予反馈,鼓励学生持续进步。
六、教学安排本课程的教学安排如下:1.课时:共8课时,每周2课时。
24点c语言课程设计

24点c语言课程设计一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生运用C语言进行程序设计的能力,提高学生的逻辑思维和问题解决能力。
具体来说,知识目标包括:1.掌握C语言的基本语法和规则;2.理解数据类型、运算符和控制结构的使用;3.熟悉函数的定义和调用;4.了解C语言的面向对象编程思想。
技能目标包括:1.能够使用C语言编写简单的程序;2.具备基本的程序调试和优化能力;3.能够运用C语言解决实际问题。
情感态度价值观目标包括:1.培养学生对计算机科学的兴趣和热情;2.培养学生良好的编程习惯和团队协作精神;3.培养学生解决问题的自信心和耐心。
二、教学内容根据课程目标,教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识。
具体安排如下:1.第一章:C语言概述,介绍C语言的发展历史、特点和基本语法。
2.第二章:数据类型和运算符,讲解整型、浮点型、字符型数据以及各类运算符的使用。
3.第三章:控制结构,讲解条件语句、循环语句和开关语句的用法。
4.第四章:函数,介绍函数的定义、声明和调用,包括内置函数和用户自定义函数。
5.第五章:数组和字符串,讲解数组的声明和使用,字符串的基本操作。
6.第六章:指针,介绍指针的概念、声明和运算,指针与数组、函数的关系。
7.第七章:结构体和联合体,讲解结构体的定义和使用,联合体的特点和应用。
8.第八章:文件操作,介绍文件的概念、文件的打开和关闭,文件的读写操作。
三、教学方法为了达到课程目标,我们将采用以下教学方法:1.讲授法:教师通过讲解C语言的基本语法、概念和实例,让学生掌握知识要点。
2.案例分析法:教师通过分析典型程序案例,引导学生理解编程思路和技巧。
3.实验法:学生通过上机实验,亲手编写程序,巩固所学知识,提高实际编程能力。
4.讨论法:学生在课堂上相互交流、讨论,共同解决问题,培养团队协作精神。
c语言软件课程设计-最终报告

软件课程设计终期报告一、具体设计任务“计算24 点”小游戏:出四张扑克牌,每张牌的点数从1~13 点(A~K),对这四个数进行加、减、乘、除运算(允许使用括号)得到计算结果为24,每张牌只能计算一次。
通过软件程序来模拟这个实际日常生活中的小游戏实现过程。
游戏者点击开始,计算机随机显示四张牌相当于出题,游戏者在一定时间内思考答案并输入电脑,计算机验证答案是否正确,正确和错误电脑分别给予不同的反应。
若游戏者无法解答,电脑可以自己计算出答案。
运用C++Builder 软件开发平台,尽量使游戏图形界面美观,操作简便。
二、基本思路及应用程序功能的详细说明游戏要吸引人首先要给游戏者一个美观的界面和公平的规则,电脑要模拟游戏的全过程,一方面要考虑操作简便、规则明确,另一方面要考虑游戏者可能会找游戏的漏洞。
24点游戏程序具体功能如下:1.随机产生四张牌,并以图片的形式显示给游戏者,模拟出题。
2.提供游戏者输入界面,游戏者通过点击图片和按钮输入想到的表达式,做到方便快捷。
游戏者按键的同时在窗口显示现在的算式,删除按钮允许游戏者在提交最终答案之前修改式子。
3.有效判断用户是否违反游戏规则,具体有如下形式违规a)重复使用某张牌或未使用某张牌;b)运算符在最前面或最后面;c)两个运算符或两个数字相连;d)除数为零;e)括号不匹配。
4.程序读取用户输入的式子,并算出字符串形式的算式的结果,判断是否为24。
若结果为24,答对了表示庆贺;若不为24则答错了,鼓励再接再厉。
5. 定时动能,在界面上显示一个300秒的定时器,当游戏者使用时间超过300,游戏失败,禁止游戏者继续操作,点确认重新开始。
6. 当游戏者实在无法解答时可以选择让电脑给出答案,电脑调用内部程序提供一种计算24点的方法,电脑解答后不允许继续答题。
三、 方案设计1. 方案的框架图如下随机产生四个数读取游戏者输入是否符合算式规定?是否超过时间?是开始算式结果是否为24?是否否表示庆祝是否失败提示2.具体算法分析:i.验证计算结果算法由于输入的算式电脑以字符串形式存储,不能直接结算结果,需要进行一定转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告题目 24点游戏课程名称软件项目实践(二)院部名称龙蟠学院专业计算机科学与技术班级学生姓名学号课程设计地点校内实验室课程设计学时 2周(40学时)指导教师沈奇金陵科技学院教务处制成绩课程设计报告目录一、实验目的和要求 (2)二、实验仪器和设备 (2)三、实验过程 (2)四、实验结果与分析 (6)五、实验心得 (10)一、实验目的和要求1.实验目的1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4)训练用系统的观点和软件开发一般规范进行软件开发。
5)培养快速学习新的知识,并在项目中使用的能力。
2.实验要求设计并实现24点游戏,满足以下基本要求:①运行系统后,用户登录,输入用户名后,可以进入游戏,或查看英雄榜。
②玩家开始游戏后,系统随机产生四个1-13的数,分别代表13张牌。
提示玩家输入算式。
判断玩家输入的表达式是否合法,其中算式中的四个数字只能是程序所给的四个数字。
当玩家正确输入算式后,运用“用堆栈求解表达式”的原理,求出结果并判断是否为24,得出用户是输是赢的结果。
③如果用户赢,计算其所用时间(从输入算式开始计算,直至输入算式结束),并与英雄榜中成绩进行比较。
可以进入英雄榜的,则需更新英雄榜。
英雄榜只按成绩降序记录1-5名相关信息。
二、实验仪器和设备Microsoft WindowsXP / Windows 7Turbo C/Visual C++三、实验过程一.需求分析1.1 需求概述分析本系统共分为四个模块:普通用户登录模块,用户模块,游戏模块和更改用户模块以下是各个模块的功能简介。
(1)普通用户登录模块检测用户名是否存在,检查密码是否正确;(2)用户模块选择用户需要执行的操作(进入游戏、查看英雄榜、切换用户、退出)。
(3)游戏模块用户进行游戏,计算用户游戏时间,更新英雄榜。
(4)更改用户模块提供对用户的更改功能。
1.2模块分析24算法游戏的功能模块不多,也比较容易实现。
基本思想就是由程序先随机产生4张扑克牌,每张扑克牌对应一个整数,所以首先要有一个产生随机数模块。
接下来就是用户用程序产生的随机数来算24点了,所以要有一个输入用户去接表达式的模块。
用户输入完成后,判断输入表达式是否合法,所以要有一个判断表达式合法与否的模块。
如果表达式合法程序就开始计算表达式了,所以要有一个计算表达式的模块。
程序计算完表达式后就要判断用户输入的表达式是不是为24点了,所以还有一个判断表达式正误的模块。
这5个模块是逐步递进的,是要前一个模块的功能完成后,才能执行后一个模块,否则程序就将出错。
程序所涉及的数据结构主要为整形和字符型,整形数据结构主要是用来计算表达式的,字符型数据结构主要是用来输入表达式的。
程序所涉及的数据库结构主要有数组和栈,数组在计算表达式和产生随机数是都要用到,栈只是用来计算表达式的。
二.面向对象分析2.1 用例图(1) 用户用例图(2)系统用例图用户2.2类图2.3 流程图24点程序整体流程图:游戏算法流程图:数据有误将输入求解的算术表达式转换成后缀表达式的流程图:三.分工在此次课程设计中主要负责24点表达式的算法。
由系统给出的四个随机数字(1-13)按要求输入计算表达式,并且验证表达式结果是否为24。
同时还有将算术表达式转换为后缀表达式四.项目总结这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。
因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好。
在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。
没能够使自己编写出来的程序等到想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。
此次课程设计系统要求的功能都具备了。
还算是成功的。
四、实验结果与分析4.1.系统模块的运行界面游戏界面:(1)回答正确(2)回答错误英雄榜界面:4.2编码部分源代码:void change(char *e,char *a) /*中缀字符串e转后缀字符串a函数*/ { STACK2 *top=NULL;int i=0,j=0;char w;while(e[i] != '\0'){ if(isdigit(e[i])){ do{a[j]=e[i]; /*将数字原样拷贝到数组a中*/i++; /*e数组的下标加1*/j++; /*a数组的下标加1*/}while(e[i]!='.'); /*直到字符为数字结束符"."为止*/a[j]='.';j++; /*将数字结束符"."拷贝到a数组依然保持结束标记*/ }if(e[i]=='(') /*如果字符是"("时*/top=push2(top,e[i]); /*将其压入堆栈*/if(e[i]==')') /*如果字符是")"时*/{ top=ptop2(top,&w); /*取出栈顶元素,并从栈顶删除该元素*/ while(w!='(') /*如果字符不是"("时反复循环*/{ a[j]=w; /*将栈顶元素存入a数组*/j++; /*下标加1*/top=ptop2(top,&w) ; /*取出栈顶元素,并从栈顶删除该元素*/}}if(e[i]=='+'||e[i]=='-') /*如果字符是加或减号时*/{if(!empty2(top)) /*如栈不为空*/{ w=topx2(top);while(w!='(') /*当栈顶元素不是"("时反复循环*/{ a[j]=w;j++; /*将栈顶元素存入表达式a中,a的下标加1*/top=pop2(top); /*删除栈顶元素*/if(empty2(top)) /*如果栈为空*/break; /*跳出循环*/elsew=topx2(top); /*否则读栈顶元素*/}}top=push2(top,e[i]); /*将当前e的字符元素压入堆栈*/}if(e[i]=='*'||e[i]=='/') /*如果字符是乘或除号时*/{ if(!empty2(top)) /*如栈不为空*/{ w=topx2(top); /*读栈顶元素存入w*/while(w=='*'||w=='/')/*当栈顶元素是乘或除时反复循环*/{ a[j]=w;j++; /*将栈顶元素存入字符串a中,a的下标加1*/top=pop2(top); /*删除栈顶元素*/if(empty2(top)) /*如果栈为空*/break; /*跳出循环*/elsew=topx2(top); /*否则读栈顶元素*/}}top=push2(top,e[i]); /*将当前e字符元素压入堆栈*/}i++;}while(!empty2(top)) /*当不为空时反复循环*/top=ptop2(top,&a[j++]); /*将栈顶元素存入数组a中*/ a[j]='\0'; /*将字符串结束标记写入最后一个数组元素中构成字符串*/ }int computer(char *s) /* 计算函数*/{STACK1 *top=NULL;int i,k,num1,num2,result;i=0;while(s[i]!='\0') /*当字符串没有结束时作以下处理*/{ if(isdigit(s[i])) /*判字符是否为数字*/{ k=0; /*k初值为0*/do{ k=10*k+s[i]-'0'; /*将字符连接为十进制数字*/i++; /*i加1*/}while(s[i]!='.'); /*当字符不为‘.'时重复循环*/top=push(top,k); /*将生成的数字压入堆栈*/}if(s[i]=='+') /*如果为'+'号*/{top=ptop(top,&num2); /*将栈顶元素取出存入num2中*/top=ptop(top,&num1); /*将栈顶元素取出存入num1中*/result=num2+num1; /*将num1和num2相加存入result中*/top=push(top,result); /*将result压入堆栈*/}if(s[i]=='-') /*如果为'-'号*/{top=ptop(top,&num2); /*将栈顶元素取出存入num2中*/top=ptop(top,&num1); /*将栈顶元素取出存入num1中*/result=num1-num2; /*将num1减去num2结果存入result中*/top=push(top,result); /*将result压入堆栈*/}if(s[i]=='*') /*如果为'*'号*/{ top=ptop(top,&num2); /*将栈顶元素取出存入num2中*/top=ptop(top,&num1); /*将栈顶元素取出存入num1中*/result=num1*num2; /*将num1与num2相乘结果存入result中*/top=push(top,result); /*将result压入堆栈*/}if(s[i]=='/') /*如果为'/'号*/{top=ptop(top,&num2); /*将栈顶元素取出存入num2中*/top=ptop(top,&num1); /*将栈顶元素取出存入num1中*/result=num1/num2; /*将num1除num2结果存入result中*/top=push(top,result); /*将result压入堆栈*/}i++; /*i加1*/}top=ptop(top,&result); /*最后栈顶元素的值为计算的结果*/return result; /*返回结果*/}STACK1 *initstack1(STACK1 *top) /*初始化*/{ top=NULL; /*栈顶指针置为空*/return top; /*返回栈顶指针*/}STACK1 *push(STACK1 *top,int x) /*入栈函数*/{ STACK1 *p; /*临时指针类型为STACK1*/p=(STACK1 *)malloc(sizeof(STACK1)); /*申请STACK1大小的空间*/ if(p==NULL) /*如果p为空*/{printf("memory is overflow\n!!"); /*显示内存溢出*/exit(0); /*退出*/}p->data=x; /*保存值x到新空间*/p->link=top; /*新结点的后继为当前栈顶指针*/top=p; /*新的栈顶指针为新插入的结点*/return top; /*返回栈顶指针*/}STACK1 *pop(STACK1 *top) /*出栈*/{ STACK1 *q; /*定义临时变量*/q=top; /*保存当前栈顶指针*/top=top->link; /*栈顶指针后移*/free(q); /*释放q*/return top; /*返回栈顶指针*/}int topx(STACK1 *top) /*读栈顶元素*/{ if(top==NULL) /*栈是否为空*/{printf("Stack is null\n"); /*显示栈为空信息*/return 0; /*返回整数0*/}return top->data; /*返回栈顶元素*/}STACK1 *ptop(STACK1 *top,int *x) /*取栈顶元素,并删除栈顶元素*/{ *x=topx(top); /*读栈顶元素*/top=pop(top); /*删除栈顶元素*/return top; /*返回栈顶指针*/}int empty(STACK1 *top) /*判栈是否为空*/{ if(top==NULL) /*如果为空*/return 1; /*返回1*/elsereturn 0; /*否则返回0*/}STACK2 *initstack2(STACK2 *top) /*初始化*/{ top=NULL; /*栈顶指针置为空*/return top; /*返回栈顶指针*/}4.3功能逻辑设计登录a)判断用户名是否存在:判断用户名是否存在。