c语言课程设计24点

合集下载

C语言写的24点游戏

C语言写的24点游戏
else
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点的算法程序

用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点游戏

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点游戏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点

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

c课程设计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语言课程设计

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语言软件课程设计-最终报告

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.验证计算结果算法由于输入的算式电脑以字符串形式存储,不能直接结算结果,需要进行一定转换。

速算24C语言课程设计

速算24C语言课程设计

速算24C语言课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法和结构,特别是运算符和表达式的使用。

2. 使学生理解速算24游戏规则,并能够运用C语言编写程序实现。

3. 帮助学生掌握至少两种算法解决速算24问题,并理解其算法原理。

技能目标:1. 培养学生运用C语言进行逻辑思考和编程的能力。

2. 提高学生在规定时间内分析问题、解决问题的能力。

3. 培养学生通过编写和调试程序,找出并修正错误的能力。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养其主动学习和探究的精神。

2. 培养学生合作交流的意识,使其学会在团队中发挥个人优势。

3. 培养学生面对困难时勇于尝试、坚持不懈的品质。

课程性质:本课程为选修课,旨在提高学生的编程能力和逻辑思维能力。

学生特点:学生具备一定的计算机操作基础,对编程有一定兴趣,但程度参差不齐。

教学要求:注重理论与实践相结合,关注个体差异,充分调动学生的积极性,提高课堂参与度。

通过讲解、示范、练习和讨论等多种教学方式,帮助学生达到课程目标,实现具体学习成果的分解和评估。

二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、表达式、控制结构(条件语句、循环语句)。

2. 速算24游戏规则介绍:游戏目标、数字选取与运算规则。

3. 算法讲解:- 穷举法:原理讲解、代码实现。

- 回溯法:原理讲解、代码实现。

4. 编程实践:- 编写程序实现速算24的穷举法求解。

- 编写程序实现速算24的回溯法求解。

5. 程序调试与优化:找出并修正程序中的错误,提高程序运行效率。

6. 教学案例分析与讨论:分析典型案例,讨论解决速算24问题的不同方法和技巧。

教材章节关联:1. C语言基础知识:参照教材第1-4章内容。

2. 算法讲解与编程实践:参照教材第5-7章内容,结合速算24案例进行讲解和实践。

3. 程序调试与优化:参照教材第8章内容。

教学内容安排与进度:1. 第1-2课时:回顾C语言基础知识,介绍速算24游戏规则。

C语言程序设计-24点

C语言程序设计-24点

prt24_4的完整代码
int prt24_4(int x,int y,int z,int w) { /*4选2,共6种组合*/ if (prt24_4B(x,y,z,w)) return 1; if (prt24_4B(x,z,y,w)) return 1; if (prt24_4B(x,w,y,z)) return 1; if (prt24_4B(y,z,x,w)) return 1; if (prt24_4B(y,w,x,z)) return 1; if (prt24_4B(z,w,x,y)) return 1; return 0; }
3数的设计思路
int prt24_3(int x,int y,int z) { 选取x,y,再任意选取运算…… 选取x,z,再任意选取运算…… 选取y,z,再任意选取运算…… } 定义子函数:对已经选定2个数的基础上, 任意选取运算并判24点,prt24_3B
prt24_3B的设计思路
prt24_3B的完整代码
int prt24_3B(int x,int y,int z) { if ( prt24_2(x+y,z) ) printf( "%d+%d=%d\t",x, y, x+y ); else if ( x>=y && prt24_2(x-y,z) ) printf( "%d-%d=%d\t",x, y, x-y ); else if ( y>x && prt24_2(y-x,z) ) printf( "%d-%d=%d\t",y, x, y-x ); else if ( prt24_2(x*y,z) ) printf( "%d*%d=%d\t",x, y, x*y ); else if ( y!=0 && x%y==0 && prt24_2(x/y,z) ) printf( "%d/%d=%d\t",x, y, x/y ); else if ( x!=0 && y%x==0 && prt24_2(y/x,z) ) printf( "%d/%d=%d\t",y, x, y/x ); else return 0; return 1; }

C程序设计 24点小游戏

C程序设计 24点小游戏

1设计内容有2、3、4、5、6、7、8、9、10、J、Q、K、A共13张牌,编一程序,判断对任意给定的4张牌,能否在进行加、减、乘、除运算后,其运算结果等于24。

其中J按11计算,Q按12计算,K按13计算,A按1计算。

如果能得到结果24,则输出可得到该结果的计算表达式。

若输入数据符合要求,且经过加、减、乘、除运算后,运行结果能得到24,如输入5,5,5,1,则显示可得到该结果的计算表达式,如5*(5-(1/5))。

若输入数据小于1或者大于13或者不是整数时,提示输入错误。

若输入不能运算出24的数据,如1,1,1,1,则显示经过加、减、乘、除运算后,运行结果不能得到24。

2程序设计2.1存储结构设计由于要储存的数据不多,主要是储存所输入的4个整数,所以采用一维数组(a[4])储存。

而计算过程会出现小数,所以数据类型采用浮点型(float)。

2.2主要程序设计程序采用穷举法,对输入的4个数进行排列,有 4!=24种。

用for来循环,if来判断,算法如下。

for (i=0;i<4;i++)for (j=0;j<4;j++)if (j!=i)for (k=0;k<4;k++)if (k!=j && k!=i)for (l=0;l<4;l++)if (l!=i && l!=j && l!=k){ calculate(a[i],a[j],a[k],a[l]);}用if来判断括号的类型,然后作出不同顺序的运算。

括号有两对,主要有两种类型:一种是( ) ( )型,如(a+b)*(c+d) ;另一种是( ( ) )型,继续细分又有4种类型,如下a*(b*(c+d)) ,(a*(b+c))*d ,a*((b+c)*d) ,((a+b)*c)*d。

算法如下if ((!(i==3 && b==0)) && (!(j==3 && c==0)) && (!(k==3 && d==0))) {sum1=arithmetic(i,a,b);sum2=arithmetic(j,sum1,c);sum3=arithmetic(k,sum2,d);}if (k==2){sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);sum3=sum1*sum2;}if (k==3){sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);if(sum2!=0){sum3=sum1/sum2;}}在输入方面,按要求,数据类型是 1 至13 的整数,符合则进行运算,不符合则重新输入。

Csharp24点游戏课程设计

Csharp24点游戏课程设计

Csharp24点游戏课程设计一、课程目标知识目标:1. 学生能理解Csharp编程语言的基本语法和结构。

2. 学生能掌握运用Csharp进行简单算术运算的方法。

3. 学生能理解24点游戏的规则和算法逻辑。

技能目标:1. 学生能运用Csharp编写出实现24点游戏的程序。

2. 学生能通过编程解决实际问题,提高逻辑思维能力和问题解决能力。

3. 学生能在团队协作中发挥个人优势,提高沟通与协作能力。

情感态度价值观目标:1. 学生培养对编程的兴趣,提高学习主动性和积极性。

2. 学生通过编程实践,培养勇于尝试、克服困难的精神。

3. 学生在团队协作中,学会尊重他人,培养合作意识和团队精神。

课程性质:本课程为实践性课程,以项目为导向,注重培养学生的动手能力和实际问题解决能力。

学生特点:学生具备一定的计算机操作基础,对编程有一定了解,但实际编程经验不足。

教学要求:结合学生特点,注重理论与实践相结合,通过讲解、示范、实践和团队协作等方式,使学生能够掌握Csharp编程的基本技能,并运用到实际项目中。

同时,关注学生情感态度的培养,激发学生的学习兴趣和自信心。

在教学过程中,将目标分解为具体的学习成果,便于后续的教学设计和评估。

二、教学内容本课程教学内容主要包括以下几部分:1. Csharp语言基础:- 数据类型与变量- 运算符与表达式- 控制语句(条件语句、循环语句)2. 数组与函数:- 数组的定义和使用- 函数的定义和调用- 递归函数3. 24点游戏算法:- 24点游戏规则介绍- 算法分析与设计- 编程实现24点游戏4. 项目实践:- 按照教学进度,分阶段完成24点游戏项目- 团队协作,分工合作- 项目测试与优化教学内容安排和进度:第一周:Csharp语言基础,包括数据类型、变量、运算符等第二周:控制语句,数组与函数第三周:24点游戏算法分析与设计第四周:项目实践,完成24点游戏编程教材章节关联:《Csharp编程与应用》第1章-第3章:Csharp语言基础《Csharp编程与应用》第4章:数组与函数《Csharp编程与应用》第6章:项目实践与案例三、教学方法为了提高教学效果,激发学生的学习兴趣和主动性,本课程将采用以下多样化的教学方法:1. 讲授法:教师通过生动的语言和形象的表达,对Csharp编程基础知识进行讲解,帮助学生掌握基本概念和原理。

c语言24点课程设计报告

c语言24点课程设计报告

c语言 24点 课程设计报告一、课程目标知识目标:1. 学生能理解24点游戏的规则和基本算法。

2. 学生能掌握C语言的基本输入输出、运算符使用和逻辑判断。

3. 学生能运用循环和条件语句编写24点的求解程序。

技能目标:1. 学生能运用C语言编写简单的算法,解决实际问题。

2. 学生能通过分析问题,设计出求解24点的算法步骤。

3. 学生能进行基本的代码调试和修改,提高程序的稳定性。

情感态度价值观目标:1. 学生培养对编程的兴趣,增强学习C语言的积极性。

2. 学生养成合作、探究的学习习惯,提高团队协作能力。

3. 学生在解决问题的过程中,培养勇于挑战、坚持不懈的精神。

课程性质:本课程为C语言编程实践课,旨在通过解决实际问题,巩固所学知识,提高学生的编程能力和逻辑思维。

学生特点:学生为初中生,对计算机编程有一定的基础,对游戏类问题感兴趣,具备一定的逻辑思维能力。

教学要求:注重培养学生动手实践能力,鼓励学生独立思考,发挥团队协作精神,将所学知识应用于实际问题的解决。

通过本课程的学习,使学生具备解决类似问题的能力。

二、教学内容1. C语言基础知识回顾:变量定义、数据类型、运算符、基本输入输出。

教材章节:第一章至第三章- 变量定义和数据类型的选择- 基本运算符的使用- 输入输出函数的应用2. 控制结构:顺序结构、选择结构(if语句)、循环结构(for循环、while循环)。

教材章节:第四章至第六章- 逻辑判断与if语句- 循环控制与for、while循环3. 函数的定义与调用:编写自定义函数,实现代码的模块化。

教材章节:第七章- 自定义函数的编写- 函数调用的方法4. 24点游戏编程实践:- 游戏规则介绍与算法分析- 编写程序实现24点的计算- 调试与优化程序5. 课程总结与拓展:- 分析算法的优化方向- 探讨类似问题的解决方法- 鼓励学生进行创新与改进教学内容安排与进度:第一课时:C语言基础知识回顾,介绍24点游戏规则第二课时:控制结构学习,算法分析与函数定义第三课时:编写程序,实现24点的计算第四课时:程序调试与优化,课程总结与拓展三、教学方法1. 讲授法:教师通过讲解C语言的基础知识,如数据类型、运算符、控制结构等,为学生奠定扎实的理论基础。

C语言计算24点(原创完美版)

C语言计算24点(原创完美版)

#include<stdio.h>char cha[4]="+-*/",c=0;float fun(float a1,float a2,int b){switch(b) //选择四则运算{case 0:return (a1+a2);case 1:return (a1-a2);case 2:return (a1*a2);case 3:return (a1/a2);}}void algebra(int x[4])//计算满足要求的表达式{int i,j,k;float temp1,temp2,temp3;for(i=0;i<4;i++)for(j=0;j<4;j++)for(k=0;k<4;k++){temp1=fun(x[0],x[1],i);temp2=fun(temp1,x[2],j);temp3=fun(temp2,x[3],k);if(temp3==24){printf("\t\t\t\t[(%d%c%d)%c%d]%c%d=24\n",x[0],cha[i],x[1],cha[j],x[2],cha [k],x[3]);c=1;}temp1=fun(x[0],x[1],i);temp2=fun(x[2],x[3],k);temp3=fun(temp1,temp2,j);if(temp3==24){printf("\t\t\t\t(%d%c%d)%c(%d%c%d)=24\n",x[0],cha[i],x[1],cha[j],x[2],cha [k],x[3]);c=1;}temp1=fun(x[1],x[2],j);temp2=fun(temp1,x[0],i);temp3=fun(temp2,x[3],k);if(temp3==24){printf("\t\t\t\t[%d%c(%d%c%d)]%c%d=24\n",x[0],cha[i],x[1],cha[j],x[2],cha [k],x[3]);c=1;}temp1=fun(x[1],x[2],j);temp2=fun(temp1,x[3],k);temp3=fun(temp2,x[0],i);if(temp3==24){printf("\t\t\t\t%d%c[(%d%c%d)%c%d]=24\n",x[0],cha[i],x[1],cha[j],x[2],cha [k],x[3]);c=1;}temp1=fun(x[2],x[3],k);temp2=fun(temp1,x[1],j);temp3=fun(temp2,x[0],i);if(temp3==24){printf("\t\t\t\t%d%c[%d%c(%d%c%d)]=24\n",x[0],cha[i],x[1],cha[j],x[2],cha [k],x[3]);c=1;}}}int arrange(int num[4])//将四个数排列为24种方式{int i,j,k,l;int temp[4];for(i=0;i<4;i++)for(j=0;j<4;j++)for(k=0;k<4;k++)for(l=0;l<4;l++){if(i!=j&&i!=k&&i!=l&&j!=k&&j!=l&&k!=l){temp[0]=num [i];temp[1]=num[j];temp[2]=num[k];temp[3]=num[l];algebra(temp);}}}int main(){int i, num[4];char ch;printf(" **计算24点游戏**\n\n请输入4个整数,然后按“回车”键: \n");for(i=0;i<4;i++)scanf("%d",&num[i]);//将四个数输入到数组中去printf("结果是:\n");arrange(num);if(c==0)printf("无解.\n");printf("是否继续?(y,n): ");fflush(stdin);ch=getchar();fflush(stdin);if(ch=='n'){printf("\t\t\t\t ****再见!****\n\n");return 0;}while(ch!='y'){printf("输入错误,请重输(y或n): ");ch=getchar();fflush(stdin);if(ch=='n')return 0;}while(ch=='y'){printf("请输入四个整数:");for(i=0;i<4;i++)scanf("%d",&num[i]);//将四个数输入到数组中去fflush(stdin);printf("结果是:\n");arrange(num);if(c==0)printf("无解.\n");printf("是否继续?(y,n): ");ch=getchar();fflush(stdin);if(ch=='n'){printf("\t\t\t\t ******再见!****\n\n");return 0;}while(ch!='y'){printf("输入错误,请重输(y或n): ");ch=getchar();fflush(stdin);if(ch=='n'){printf("\t\t\t\t ******再见!****\n\n");return 0;} }}return 0;}。

24点游戏 高质量C语言程序

24点游戏  高质量C语言程序

设计题目: 24点游戏2012年 9 月 1 日目录一题目及要求二项目概述三项目分析四程序思路分析五总结六答辩记录七教师意见一题目及要求计算24点游戏输入四个数,通过加减乘除计算出24,显示计算过程,并提示成功信息。

二项目概述我设计的是24点游戏,它功能是输出给定4个数运算得出24的算式。

大概思路很简单,就是穷举4个数字排列组合后的所算式,选择其中结果为24的,并筛选符合数学法则的输出,难点在于穷举三项目分析通过题目这是大家很熟悉的游戏,大家也都知道直接计算很难,想不出具体的算法,但考虑到计算机的特点——运算速度快,不知疲倦,我们可以另辟蹊径,让计算机算出所有与这4个数字相关的算式,选择其中得24的算输出即可。

所以确定思路,穷举。

大概分几个模块,主函数,转化四则运算的fun函数,for 循环,if选择,scanf,printf。

四程序思路分析程序要求给出4个数字,输出算出等于24的结果的所有算式,所以大体上首先scanf4个数字储存在数组中,然后试用定义的fun函数,fun函数为将4则运算转化为数字的函数,然后用多个for语句实现数字的排列组合,关于括号的问题,分两种情况,一种是“三一”的,一种是“二二”的。

然后写一个报错的语句,关于结果用printf输出,如果结果为-24,-1/24,1/24的,可以改变输出结果的顺序。

下面附上源程序:#include<stdio.h>double fun(double a1,double a2,int b){ switch(b){case 0:return (a1+a2);case 1:return (a1-a2);case 2:return (a1*a2);case 3:return (a1/a2);}}void main(){int g;for(g=0;g<100;){int i,j,k,l,n,m,r,save[4];double num[4]={1,1,1,1},tem1,tem2,tem3,abc=1111;char sign[5]="+-*/";printf("请输入4个数,数字与数字之间用空格隔开:");for(i=0;i<4;i++){scanf("%lf",num+i);save[i]=num[i];}for(i=0;i<4;i++)for(j=0;j<4;j++)if(j!=i){for(k=0;k<4;k++)if(k!=i&&k!=j){for(l=0;l<4;l++)if(l!=i&&l!=j&&l!=k){for(n=0;n<4;n++)for(m=0;m<4;m++)for(r=0;r<4;r++){tem1=fun(num[i],num[j],n);tem2=fun(tem1,num[k],m);tem3=fun(tem2,num[l],r);if(tem3==24.0)printf("{(%d%c%d)%c%d}%c%d=24\n",save[i],sign[n],sa ve[j],sign[m],save[k],sign[r],save[l]);elseif(tem3==-24.0)printf("{%d%c(%d%c%d)}%c%d=24\n",save[k],sign[m],save[ i],sign[n],save[j],sign[r],save[l]);elseif(tem3==1.0/24.0)printf("%d%c{(%d%c%d)%c%d}=24\n",save[l],sign[r],sa ve[i],sign[n],save[j],sign[m],save[k]);elseif(tem3==-1.0/24.0)printf("%d%c{%d%c(%d%c%d)}=24\n",save[l],sign[r],s ave[k],sign[n],save[i],sign[m],save[j]);else{tem1=fun(num[i],num[j],n);tem2=fun(num[k],num[l],r);if(tem2 == 2 && m == 3)printf("此处省略出现的一个非法运算\n");else{tem3=fun(tem1,tem2,m);if(tem3==24.0)printf("(%d%c%d)%c(%d%c%d)=24\n",save[i],sign[n],save[j],sign[m], save[k],sign[r],save[l]);}}}}}}g++;}}下面详细说明:double fun(double a1,double a2,int b) //定义fun函数{switch(b){case 0:return (a1+a2);case 1:return (a1-a2);case 2:return (a1*a2);case 3:return (a1/a2); }}用switch语句将四则运算转化。

24点c语言课程设计

24点c语言课程设计

24点c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言中基本的数据类型、运算符和表达式。

2. 使学生了解并掌握循环结构、选择结构在24点游戏中的应用。

3. 帮助学生掌握函数的定义、调用以及递归函数在解决24点问题中的应用。

技能目标:1. 培养学生运用C语言编写程序解决实际问题的能力。

2. 培养学生运用逻辑思维和分析问题的能力,将24点游戏转化为C语言程序。

3. 提高学生在编程过程中调试、修改程序的能力。

情感态度价值观目标:1. 培养学生对C语言编程的兴趣,激发学生的学习热情。

2. 培养学生勇于尝试、克服困难的精神,增强学生的自信心。

3. 引导学生树立团队协作意识,学会与他人分享编程经验和成果。

课程性质分析:本课程为C语言程序设计课程,以解决实际问题的形式引导学生学习C语言编程。

结合24点游戏,使学生掌握C语言基本语法和编程技巧。

学生特点分析:学生已具备一定的C语言基础,掌握基本的数据类型、运算符和表达式,但对循环结构、选择结构和函数的运用尚不熟练。

教学要求:1. 教师应注重引导学生运用所学知识解决实际问题,提高学生的编程能力。

2. 教师应关注学生的学习进度,及时解答学生在编程过程中遇到的问题。

3. 教师应鼓励学生积极参与讨论,培养学生的团队协作意识。

二、教学内容1. C语言基本语法回顾:数据类型、变量、常量、运算符、表达式。

2. 控制结构:- 循环结构:for循环、while循环、do-while循环。

- 选择结构:if语句、if-else语句、switch语句。

3. 函数:- 函数定义、声明和调用。

- 递归函数的编写和应用。

4. 24点游戏编程实现:- 游戏规则介绍。

- 算法设计:穷举法、回溯法。

- 编程实践:编写C语言程序实现24点游戏。

5. 程序调试与优化:- 代码调试技巧。

- 优化算法,提高程序执行效率。

教学内容安排和进度:第一课时:C语言基本语法回顾,介绍24点游戏规则。

第二课时:循环结构在24点游戏中的应用。

c语言程序 计算24点

c语言程序 计算24点

for (f2=0;f2<4;f2++)
for (f3=0;f3<4;f3++) // 运算符 f1,f2,f3
{
4 、 //----------- 未 用 循 环 , 直 接 穷 举 三 个 运 算 符 的 优 先 级 : 3!-1=5 种
( 3*2-1=5)-------------------
3、24 点计算。定义 double t1,t2,t3;
t1,t2,t3 用于存放计算的中间值,
两个两个地按优先级进行计算。
4、判断是否为 24。在运算过程中除法的特殊性——除数不能为零。因为可能会
用到除法,所以要考虑精度问题。这里通过结果减去 24 取绝对值与一个接近 0
的小数(如 0.001)比较,如小于它,即可判定结果是 24。
比较运算结果 是否等于 24

2、编程实现。
1、加减乘除运算
否 是否循环结束

结束
double {
}
cal(double a,double b,int op)
switch (op) { case 0: return(a+b); case 1: return(a-b); case 2: return(a*b); }
//i 表示 v[i]下标的位置 i1
i2 i3 i4 不能相等(分别为 0 1 2 3) 表示 4 个数排列在数组 4 个不同的位置

for (i2=0;i2<4;i2++)
// 四重循环对四个数穷举
if (i2!=i1)
for (i3=0;i3<4;i3++)
if (i3!=i2 && i3!=i1)

c24点课程设计

c24点课程设计

c 24点课程设计一、课程目标知识目标:1. 学生掌握24点游戏的规则,理解其数学内涵;2. 学生能够运用加减乘除四种运算解决24点问题;3. 学生了解数的分解和组合,提高数学思维。

技能目标:1. 学生通过解决24点问题,提高计算速度和准确性;2. 学生培养逻辑思维和分析问题的能力;3. 学生能够运用所学知识,创新性地解决类似数学问题。

情感态度价值观目标:1. 学生培养对数学的兴趣和热情,认识到数学的趣味性;2. 学生在游戏中体验团队合作,培养协作能力和竞争意识;3. 学生在解决问题过程中,锻炼克服困难的意志,增强自信心。

课程性质:本课程以游戏为载体,结合数学运算,旨在提高学生的数学思维能力,培养团队合作精神。

学生特点:四年级学生具备一定的数学基础,对新奇有趣的游戏有较高的兴趣,喜欢挑战和竞争。

教学要求:教师应注重引导和启发,关注学生的个体差异,鼓励学生积极参与,充分调动学生的主观能动性。

将目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容1. 教学大纲:a. 介绍24点游戏的起源和规则;b. 通过实例讲解加减乘除在24点游戏中的应用;c. 引导学生运用数的分解和组合方法解决24点问题;d. 组织学生进行小组合作,开展24点游戏竞赛;e. 总结与拓展,提高学生数学思维能力。

2. 教学内容安排与进度:a. 第一节课:介绍24点游戏规则,让学生了解游戏背景;b. 第二节课:讲解加减乘除在24点游戏中的应用,举例说明;c. 第三节课:引导学生运用数的分解和组合方法,解决24点问题;d. 第四节课:组织小组合作,进行24点游戏竞赛,培养学生团队合作精神;e. 第五节课:总结与拓展,提高学生数学思维能力。

3. 教材章节与内容:a. 课本第四章:数的运算;- 4.1 加减乘除运算;- 4.2 乘法口诀;- 4.3 数的分解与组合;b. 课本第八章:数学游戏与竞赛;- 8.1 24点游戏;- 8.2 数学竞赛。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)判断用户名是否存在:判断用户名是否存在。

相关文档
最新文档