24NEW1.C
资源名称:C数据结构课程设计.rar [点击查看]
上传用户:janny_wxd
上传日期:2010-02-03
资源大小:261k
文件大小:5k
源码类别:
控制台编程
开发平台:
C/C++
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #define OK 1
- #define TRUE 1
- #define FALSE 0
- #define ERROR 0
- #define OVERFLOW -2
- #define STACK_INIF_SIZE 50
- #define STACKINCREMENT 10
- typedef int status;
- typedef struct sqstack{
- int *base;
- int *top;
- int stacksize;
- }sqstack;
- typedef struct sqlist{
- int bol;
- int num_ch;
- struct sqlist *next;
- }sqlist;
- sqlist *init_sq(){
- sqlist *l;
- l=(sqlist*)malloc(sizeof(sqlist));
- if(l==NULL){
- exit(OVERFLOW);
- }
- l->next=NULL;
- return l;
- }
- status insert_sq(sqlist **p,int e,int bl){
- sqlist *q;
- q=(sqlist*)malloc(sizeof(sqlist));
- q->num_ch=e;
- q->bol=bl;
- q->next=NULL;
- (*p)->next=q;
- (*p)=(*p)->next;
- printf("insert %d is succssed!n",e);
- return OK;
- }
- sqtack *initstack(){
- sqstack *s;
- s->base = (int*)malloc(STACK_INIF_SIZE*sizeof(int));
- if(s->base==NULL) exit(OVERFLOW);
- s->top=s->base;
- s->stacksize = STACK_INIF_SIZE;
- return s;
- }
- int *gettop(sqstack *s){
- int e;
- if(s->top==s->base){
- printf("NULL1n");
- return NULL;
- }
- e=*(s->top-1);
- return &e;
- }
- status push(sqstack *s,int e){
- if(s->top-s->base>=s->stacksize){
- s->base=(int*)realloc(s->base ,(s->stacksize+STACKINCREMENT)*sizeof(int));
- if(!s->base) exit(OVERFLOW);
- s->stacksize+= STACKINCREMENT;
- }
- *(s->(top++))=e;
- printf("push %d is OKn",e);
- return OK;
- }
- status pop(sqstack *s,int *e){
- if(s->top==s->base){
- printf("NULL2n");
- return ERROR;
- }
- *e=*((--s)->top);
- printf("pop %d is OK!/n",*e);
- return OK;
- }
- status chang(char *s,sqlist *l){
- int t=0,temp,i=0;
- int bl;
- int a1,a2,a,ii;
- sqlist *p=l;
- for (;i<strlen(s);i++){
- if(s[i]>47&&s[i]<58&&t==0){
- a1=(int)s[i]-48;
- t++;
- }
- else if(s[i]>47&&s[i]<58&&t==1){
- a2=(int)s[i]-48;
- a=a1*10+a2;
- t++;
- }
- else if(s[i]<48&&s[i]>39&&s[i]!=44&&s[i]!=46){
- if(t==1){
- bl=0;
- insert_sq(&p,a1,bl);
- t=0;
- }
- else if(t==2){
- bl=0;
- insert_sq(&p,a,bl);
- t=0;
- }
- bl=1;
- insert_sq(&p,s[i],bl);
- t=0;
- }
- } //end for
- i=strlen(s)-1;
- if(s[i]>47&&s[i]<58){
- if(s[i-1]>47&&s[i-1]<58){
- bl=0;
- insert_sq(&p,a,bl);
- }
- else {
- bl=0;
- insert_sq(&p,a1,bl);
- }
- }
- printf("chang is OKn");
- return OK;
- }
- int operate(int a,char c,int b){
- if(c=='+') return(a+b);
- else if(c=='-') return(a-b);
- else if(c=='*') return(a*b);
- else if(c=='/'){
- if (b==0) {
- printf("除数不能为零n");
- exit(ERROR);
- }
- else return (a/b);
- }
- }
- char precede(char c1,char c2){
- int tt=1;
- char c3;
- if(c1=='+'||c1=='-'){
- if(c2=='*'||c2=='/'||c2=='(') c3='<';
- else c3='>';
- }
- else if(c1=='*'||c1=='/'){
- if(c2=='(') c3='<';
- else c3='>';
- }
- else if(c1=='('){
- if(c2==')') c3='=';
- else if(c2=='#'){
- printf("ERROR2!n");
- tt=0;
- }
- else c3='<';
- }
- else if(c1==')'){
- if(c2==')')
- {printf("ERROR!2n"); tt=0; }
- else if(c2=='#') c3='=';
- else c3='<';
- }
- else printf("无此字符n");
- if(tt==0) exit(ERROR);
- return(c3);
- }
- int evaluateExpression(sqlist *l){
- int a,b,theta,result;
- char c,ch;
- sqlist *r=l;
- sqstack *optr,*opnd;
- ch='#';
- optr=initstack();
- push(optr,ch);
- opnd=initstack();
- c=r->num_ch;
- while(c!=35||gettop(optr)->ch!='#'){
- if(c>0&&c<14){
- push(opnd,c);
- r=r->next;
- c=r->num_ch;
- }
- else {
- switch(prcede(gettop(optr),c)){
- case'<':
- push(optr,c);
- r=r->next;
- c=r->num_ch;
- break;
- case'=':
- pop(optr,&c);
- r=r->next;
- c=r->num_ch;
- break;
- case'>':
- pop(optr,&theta);
- pop(opnd,&b);
- pop(opnd,&a);
- result=operate(a,theta,b);
- push(opnd,result);
- break;
- }//end switch
- } //end else
- } //end while
- return *gettop(opnd);
- }
- void main (){
- char *s,ch,tt[41];
- int t=1;
- int result;
- sqlist *l;
- l=init_sq();
- printf("/***************************************************/n");
- printf(" 24点游戏 dos 版本n");
- printf(" 北京工商大学微机024班 欧阳锦林 版权所有n");
- printf(" 完成于2004年4月15日n");
- printf("/***************************************************/n")
- printf("The four numbers are 3,4,A,QnWhen you input the formula,n");
- printf("you should look A as 1,J as 11,Q as 12,k as 13n");
- while(t!=0){
- gets(tt);
- s=tt;
- chang(s,l);
- result=evaluateExpression(l);
- if(result==24){
- printf("Very good!!It's right.");
- }
- else {
- printf("sorry!You are wrong!Thank you!");
- }
- printf("Contine?Or not??please input Y/N??");
- ch=getchar();
- if(ch=='n'||ch=='N')
- t=0;
- else if (ch=='Y'||ch=='y') continue;
- else{
- printf("your choic is not exact!!");
- t=0;
- }
- }//end while
- }