久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

數據結構24點游戲源代碼

時間:2019-05-12 22:29:44下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《數據結構24點游戲源代碼》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《數據結構24點游戲源代碼》。

第一篇:數據結構24點游戲源代碼

#include #include #include #include #define OPSETSIZE 7 #define STACK_INIF_SIZE 50 #define STACKINCREMENT 10 int number[2][4];enum { eNumber = 0, //操作數

eOperator = 1 //算子 };

int oper[7]={43,45,42,47,40,41,35};

char OPSET[OPSETSIZE]={'+' , '-' , '*' , '/' ,'(' , ')' , '#'};

typedef struct sqlist{ int bol;//bol 是 0 時,num-ch是一個數字;bol 是 1 時 num_ch 運算符

int num_ch;struct sqlist *next;}sqlist;//線性表

typedef struct sqstack{ int *base;int *top;int stacksize;}sqstack;//棧的定義

unsigned char Prior[7][7] = {// 課本 表3.1 算符間的優先關系

'>','>','<','<','<','>','>','>','>','<','<','<','>','>','>','>','>','>','<','>','>','>','>','>','>','<','>','>','<','<','<','<','<','=',' ','>','>','>','>',' ','>','>','<','<','<','<','<',' ','=' };

int init_sq(sqlist *l){//初始化鏈表

l=(sqlist*)malloc(sizeof(sqlist));if(l==NULL){

exit(-2);} l->next=NULL;return 1;}

int 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;return 1;}

int check(sqlist l)//保證輸入的數字是給出的四個數字 { int right=1,find=0,i;sqlist *q=&l;q=q->next;for(;q->next!=NULL;q=q->next){

if(q->bol==1){

if(q->num_ch <=39||q->num_ch>57||q->num_ch==44||q->num_ch==46){

right=0;

printf(“%c不是有效的運算符!n”);

}

}

else {

find=0;

for(i=0;i<4;i++){

if(number[1][i]==0&&number[0][i]==q->num_ch){

number[1][i]=1;

find=1;

break;

}

}

if(find==0){

printf(“%d 不在給出的四個數字中!n”,q->num_ch);

right=0;

}

} }//end for for(i=0;i<4;i++){

if(number[1][i]==0){

printf(“%d沒有用上!n”,number[0][i]);

right=0;

} } return right;}

int chang(char *s,sqlist *l){//將用戶的輸入轉化為單鏈表

int t=0;unsigned int i=0;int bl,ch;int a1,a2,a;sqlist *p=l;for(;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;

ch=(int)s[i];

insert_sq(&p,ch,bl);

t=0;

}

else {

printf(“%c不是有效的運算符!n”,s[i]);

} }

//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);

} } bl=1;a=35;insert_sq(&p,a,bl);return(check(*l));}

int Operate(int a,int theta, int b){//計算

switch(theta){ case 43: return a+b;case 45: return a-b;case 42: return a*b;case 47:

{

if(b==0){

return-2000;

}

if(a%b==0){

return a/b;

}

else {//printf(“不能為小數n”);

return-10000;

}

} default : return 0;} }

int ReturnOpOrd(char op,char* TestOp)// precede()函數調用求優先級 { int i;for(i=0;i< OPSETSIZE;i++){

if(op == TestOp[i])return i;} return 0;}

char precede(char Aop, char Bop){ return Prior[ReturnOpOrd(Aop,OPSET)][ReturnOpOrd(Bop,OPSET)];}

int initstack(sqstack *s){(s)->base =(int*)malloc(STACK_INIF_SIZE*sizeof(int));if((s)->base==NULL)exit(-2);(s)->top=(s)->base;(s)->stacksize = STACK_INIF_SIZE;return 1;}

int gettop(sqstack *s){ //取得棧頂元素

int e;if(s->top==s->base){

printf(“棧空,無法取得棧頂元素!n”);

return 0;} e=*(s->top-1);return e;}

int 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(-2);

s->stacksize+= STACKINCREMENT;} *(s->top++)=e;return 1;}

int pop(sqstack *s,int *e){ //出棧 if(s->top==s->base){

printf(“棧空,出棧錯誤!n”);

return 0;} *e=*(--s->top);return 1;}

int EvaluateExpression(char* MyExpression){ // 算法3.4----計算表達式的值

// 算術表達式求值的算符優先算法。

// 設OPTR和&&OPND分別為運算符棧和運算數棧

int result;sqstack OPTR;

// 運算符棧,字符元素

sqstack OPND;

// 運算數棧,實數元素

int c,bl,a,b,theta,top;sqlist *q,l;char *s=MyExpression;init_sq(&l);if(chang(s,&l)!=0){

q=&l;

initstack(&OPTR);

push(&OPTR, 35);

initstack(&OPND);

q=q->next;

c=q->num_ch;

bl=q->bol;

while((c!= 35 || gettop(&OPTR)!=35)){

if(bl!=1){

push(&OPND, c);

q=q->next;

c=q->num_ch;

bl=q->bol;

} // 不是運算符則進棧

else{

top=gettop(&OPTR);

switch(precede((char)top,(char)c)){

case '<': // 棧頂元素優先權低

push(&OPTR, c);

q=q->next;

c=q->num_ch;

bl=q->bol;

break;

case '=':

// 脫括號并接收下一字符

pop(&OPTR, &c);

q=q->next;

c=q->num_ch;

bl=q->bol;

break;

case '>':

// 退棧并將運算結果入棧

pop(&OPTR, &theta);

pop(&OPND, &b);

pop(&OPND, &a);

push(&OPND, Operate(a, theta, b));

break;

default :

printf(“沒有這個運算符!n”);

return 0;

} // switch

}//else

} // while

result=gettop(&OPND);

return result;} else {

printf(“你的輸入有錯誤!n”);

return 0;} }

int randomm()//產生四個隨機數 {

int i=0;srand((unsigned)time(NULL));for(;i<4;i++){

number[0][i]=0;

number[0][i]=rand();

number[0][i]%=13;

number[0][i]++;

number[1][i]=0;} return number[2][4];}

int CalcOneExpress(int expression[][2])// 計算表達式 {

// 算術表達式求值的算符優先算法。

// 設OPTR和&&OPND分別為運算符棧和運算數棧,OP為運算符集合。int index=0,result,c,theta,a,b;sqstack OPTR;

// 運算符棧,字符元素 sqstack OPND;

// 運算數棧,實數元素 initstack(&OPTR);push(&OPTR, 35);initstack(&OPND);c=expression[index][0];while(c!= 35 || gettop(&OPTR)!=35){ if(expression[index][1]!=1){

push(&OPND, c);

index++;

c=expression[index][0];} // 不是運算符則進棧

else {

switch(precede((char)gettop(&OPTR),(char)c))

{

case '<': // 棧頂元素優先權低

push(&OPTR, c);

index++;

c=expression[index][0];

break;

case '=':

// 脫括號并接收下一字符

pop(&OPTR, &c);

index++;

c=expression[index][0];

break;

case '>':

// 退棧并將運算結果入棧

pop(&OPTR, &theta);

pop(&OPND, &b);

pop(&OPND, &a);

push(&OPND, Operate(a, theta, b));

break;

default :

printf(“沒有這個運算符n”);

return 0;

} // switch }//else } // while result=gettop(&OPND);return result;}

int Equal24(int n){ if(n==24){

return 1;} else

return 0;}

//括號的幾種情況 //1 無括號 //2(a b)c d 同a b(c d), 下省略 //3(a b c)d //4(a b)(c d)//5((a b)c)d

int CalcArray1(int iNumInput[2][4]){ // a * b * c * d 7 個字符

int expression[8][2],ii,jj,kk;int i,j,k,l,dRes;for(i=0;i<4;i++){

for(j=0;j<4;j++)

{

if(j==i)

{

continue;

}

for(k=0;k<4;k++)

{

if(k==i||k==j)

{

continue;

}

for(l=0;l<4;l++)

{

if(l==i||l==j||l==k)

{

continue;

}

expression[0][0]=iNumInput[0][i];

expression[2][0]=iNumInput[0][j];

expression[4][0]=iNumInput[0][k];

expression[6][0]=iNumInput[0][l];

expression[0][1]=eNumber;

expression[2][1]=eNumber;

expression[4][1]=eNumber;

expression[6][1]=eNumber;

for(ii=0;ii<4;ii++)

{

for(jj=0;jj<4;jj++)

{

for(kk=0;kk<4;kk++)

{

expression[1][0] = oper[ii];

expression[1][1] = eOperator;

expression[3][0] = oper[jj];

expression[3][1] = eOperator;

expression[5][0] = oper[kk];

expression[5][1] = eOperator;

expression[7][0] = oper[6];

expression[7][1] = eOperator;

dRes = CalcOneExpress(expression);

if(Equal24(dRes))

{

printf(“可以這樣運算:%d%c%d%c%d%c%dn”,expression[0][0],oper[ii],expression[2][0],oper[jj],expression[4][0],oper[kk],expression[6][0]);

return 1;

}

}

}

}//end of for oper

}

}

} } return 0;} int CalcArray2(int iNumInput[2][4]){ //(a * b)* c * d //9 number int expression[10][2];int ii,jj,i,j,k,l,kk;int dRes;for(i=0;i<4;i++){

for(j=0;j<4;j++)

{

if(j==i)

{

continue;

}

for(k=0;k<4;k++)

{

if(k==i||k==j)

{

continue;

}

for(l=0;l<4;l++)

{

if(l==i||l==j||l==k)

{

continue;

}

expression[1][0]=iNumInput[0][i];

expression[3][0]=iNumInput[0][j];

expression[6][0]=iNumInput[0][k];

expression[8][0]=iNumInput[0][l];

expression[1][1]=eNumber;

expression[3][1]=eNumber;

expression[6][1]=eNumber;

expression[8][1]=eNumber;

for(ii=0;ii<4;ii++)

{

for(jj=0;jj<4;jj++)

{

for(kk=0;kk<4;kk++)

{

expression[0][0] = oper[4];

expression[0][1] = eOperator;

expression[2][0] = oper[ii];

expression[2][1] = eOperator;

expression[4][0] = oper[5];

expression[4][1] = eOperator;

expression[5][0] = oper[jj];

expression[5][1] = eOperator;

expression[7][0] = oper[kk];

expression[7][1] = eOperator;

expression[9][0] = oper[6];

expression[9][1] = eOperator;

dRes = CalcOneExpress(expression);

if(Equal24(dRes))

{

printf(“可以這樣運算:%c%d%c%d%c%c%d%c%dn”,oper[4],expression[1][0],oper[ii],expression[3][0],oper[5],oper[jj],expression[6][0],oper[kk],expression[8][0]);

return 1;

}

}

}

}//end of for oper

}

}

} } return 0;}

int CalcArray3(int iNumInput[2][4]){ //(a * b * c)* d //9 number int expression[10][2];int ii,jj,i,j,k,l,kk;int dRes;for(i=0;i<4;i++){

for(j=0;j<4;j++)

{

if(j==i)

{

continue;

}

for(k=0;k<4;k++)

{

if(k==i||k==j)

{

continue;

}

for(l=0;l<4;l++)

{

if(l==i||l==j||l==k)

{

continue;

}

expression[1][0]=iNumInput[0][i];

expression[3][0]=iNumInput[0][j];

expression[5][0]=iNumInput[0][k];

expression[8][0]=iNumInput[0][l];

expression[1][1]=eNumber;

expression[3][1]=eNumber;

expression[5][1]=eNumber;

expression[8][1]=eNumber;

for(ii=0;ii<4;ii++)

{

for(jj=0;jj<4;jj++)

{

for(kk=0;kk<4;kk++)

{

expression[0][0] = oper[4];

expression[0][1] = eOperator;

expression[2][0] = oper[ii];

expression[2][1] = eOperator;

expression[4][0] = oper[jj];

expression[4][1] = eOperator;

expression[6][0] = oper[5];

expression[6][1] = eOperator;

expression[7][0] = oper[kk];

expression[7][1] = eOperator;

expression[9][0] = oper[6];

expression[9][1] = eOperator;

dRes = CalcOneExpress(expression);

if(Equal24(dRes))

{

printf(“可以這樣運算:%c%d%c%d%c%d%c%c%dn”,oper[4],expression[1][0],oper[ii],expression[3][0],oper[jj],expression[5][0],oper[5],oper[kk],expression[8][0]);

return 1;

}

}

}

}//end of for oper

}

}

} } return 0;}

int CalcArray4(int iNumInput[2][4]){ //(a * b)*(c * d)//11 numbers int expression[12][2];int ii,jj,i,j,k,l,kk;int dRes;for(i=0;i<4;i++){

for(j=0;j<4;j++)

{

if(j==i)

{

continue;

}

for(k=0;k<4;k++)

{

if(k==i||k==j)

{

continue;

}

for(l=0;l<4;l++)

{

if(l==i||l==j||l==k)

{

continue;

}

expression[1][0]=iNumInput[0][i];

expression[3][0]=iNumInput[0][j];

expression[7][0]=iNumInput[0][k];

expression[9][0]=iNumInput[0][l];

expression[1][1]=eNumber;

expression[3][1]=eNumber;

expression[7][1]=eNumber;

expression[9][1]=eNumber;

for(ii=0;ii<4;ii++)

{

for(jj=0;jj<4;jj++)

{

for(kk=0;kk<4;kk++)

{

expression[0][0] = oper[4];

expression[0][1] = eOperator;

expression[2][0] = oper[ii];

expression[2][1] = eOperator;

expression[4][0] = oper[5];

expression[4][1] = eOperator;

expression[5][0] = oper[jj];

expression[5][1] = eOperator;

expression[6][0] = oper[4];

expression[6][1] = eOperator;

expression[8][0] = oper[kk];

expression[8][1] = eOperator;

expression[10][0] = oper[5];

expression[10][1] = eOperator;

expression[11][0] = oper[6];

expression[11][1] = eOperator;

dRes = CalcOneExpress(expression);

if(Equal24(dRes))

{

printf(“可以這樣運算:%c%d%c%d%c%c%c%d%c%d%cn”,oper[4],expression[1][0],oper[ii],expression[3][0],oper[5],oper[jj],oper[4],expression[7][0],oper[kk],expression[9][0],oper[5]);

return 1;

}

}

}

}//end of for oper

}

}

} } return 0;}

int CalcArray5(int iNumInput[2][4]){ //((a * b)* c)* d //11 numbers int expression[12][2];int ii,jj,i,j,k,l,kk;int dRes;for(i=0;i<4;i++){

for(j=0;j<4;j++)

{

if(j==i)

{

continue;

}

for(k=0;k<4;k++)

{

if(k==i||k==j)

{

continue;

}

for(l=0;l<4;l++)

{

if(l==i||l==j||l==k)

{

continue;

}

expression[2][0]=iNumInput[0][i];

expression[4][0]=iNumInput[0][j];

expression[7][0]=iNumInput[0][k];

expression[10][0]=iNumInput[0][l];

expression[2][1]=eNumber;

expression[4][1]=eNumber;

expression[7][1]=eNumber;

expression[10][1]=eNumber;

for(ii=0;ii<4;ii++)

{

for(jj=0;jj<4;jj++)

{

for(kk=0;kk<4;kk++)

{

expression[0][0] = oper[4];

expression[0][1] = eOperator;

expression[1][0] = oper[4];

expression[1][1] = eOperator;

expression[3][0] = oper[ii];

expression[3][1] = eOperator;

expression[5][0] = oper[5];

expression[5][1] = eOperator;

expression[6][0] = oper[jj];

expression[6][1] = eOperator;

expression[8][0] = oper[5];

expression[8][1] = eOperator;

expression[9][0] = oper[kk];

expression[9][1] = eOperator;

expression[11][0] = oper[6];

expression[11][1] = eOperator;

dRes = CalcOneExpress(expression);

if(Equal24(dRes))

{

printf(“可以這樣運算:%c%c%d%c%d%c%c%d%c%c%dn”,oper[4],oper[4],expression[2][0],oper[ii],expression[4][0],oper[5],oper[jj],expression[7][0],oper[5],oper[kk],expression[10][0]);

return 1;

}

}

}

}//end of for oper

}

}

} } return 0;}

int Calc24(int number[2][4]){ int find=0;//括號的 5 種情況

//1 a b c d //2(a b)c d 同 a b(c d)和 a(b c)d

//3(a b c)d //4(a b)(c d)//5((a b)c)d

同(a(b c))d

if(CalcArray1(number)){

find=1;

return 1;} if(CalcArray2(number)){

find=1;

return 1;} if(CalcArray3(number)){

find=1;

return 1;} if(CalcArray4(number)){

find=1;

return 1;} if(CalcArray5(number)){

find=1;

return 1;} if(find==0){

printf(“這四個數字算不出24點.n”);

return 0;} return 0;}

void gameinformation(){ printf(“┌────────────────────────┐n”);printf(“│

│n”);printf(“│

學號:

│n”);printf(“│

設計人:XXX

│n”);printf(“│

完成時間:2015年7月20日

│n”);printf(“└────────────────────────┘nn”);}

void menu(){ char s[40],ch,mood;int result,t=1,t0=1,nall=0,nright=0,t1=1;double right;while(t==1){

printf(“本游戲有以下三種模式可選擇↓n”);

printf(“┌────────────────────────┐n”);

printf(“│→ 0.開始游戲

│n”);

printf(“│◇ 1.游戲規則

│n”);

printf(“│→ 2.退出游戲

│n”);

printf(“└────────────────────────┘nn”);

printf(“請輸入選項所對應的數字↑:”);

scanf(“ %c”,&mood);

if(mood=='0'){

//計算機成四個數字,游戲者求表達式

nall=0;

nright=0;

t0=1;

while(t0==1)

{

number[2][4]=randomm();

printf(“這四個數是: %d %d %d %dn”,number[0][0],number[0][1],number[0][2],number[0][3]);

printf(“請輸入算式n”);

printf(“如果你認為這四個數算不出24點,請輸入'?'n”);

printf(“計算機將會給出答案,算不出也是一種答案!n”);

printf(“你的算式是:”);

scanf(“%s”,s);

if(s[0]=='?'){

if(Calc24(number)==0){

nright++;

}

nall++;

}

else

{

result=EvaluateExpression(s);

printf(“你輸入的算式的結果是: %d n”,result);

if(result==24)

{

printf(“你贏了!n”);

nright++;

nall++;

}

else

{

printf(“你輸了!n”);

nall++;

}

}//else

right=(double)nright/nall;

printf(“你共做了 %d 道,做對了 %d 道,正確率為:%.2f%%n”,nall,nright,right*100);

printf(“繼續這個模式嗎?請選擇: 'y':繼續 'n':退出?n”);

scanf(“ %c”,&ch);

if(ch=='n'||ch=='N'){

t0=0;

}

else if(ch=='Y'||ch=='y')t0=1;

else{

printf(“你的選擇(輸入)有誤!n”);

t0=0;

}

}

}//end mood 0

else if(mood=='1'){ //游戲規則說明

printf(“

規則其實很簡單:

n”);

printf(“

只能使用+,-,*,/,(,)這6種符號完成表達式

printf(”

當然也允許改變數字順序n“);

printf(”

下面請看示例:n“);

printf(”

系統給出的數字為:1 5 5 5n“);

printf(”

你只要輸入(5-1/5)*5 即可n“);

printf(”n“);

printf(”n“);

printf(”n“);

}//end mood 1

else if(mood=='2'){//退出游戲

printf(”游戲結束!n“);

t=0;

}

else {

printf(”mood =%cn“,mood);

printf(”您的輸入有誤,游戲結束!n“);

t=0;

} }//end big while

n”);}

void main(){ gameinformation();//輸出作者信息

menu();//輸出功能菜單,游戲開始 }

第二篇:數據結構課程設計 文章編輯 源代碼

#include #include #include #include #define MAXSIZE 1000 typedef char DataType;typedef struct node { DataType ch[MAXSIZE];struct node *next;}Lstring;/*****輸入文章*****/ Lstring *input(){ Lstring *p,*head;int i=0;printf(“請輸入一頁文章,若要換行,請直接敲回車鍵,若想結束請按@:n”);p=(Lstring *)malloc(sizeof(Lstring));head=p;p->ch[i]=NULL;p->next=NULL;char str[200];while(1){

gets(str);

if(strlen(str)>100)

{

printf(“每行最多輸入100字符”);

break;

}

if(str[0]==64)

{

str[0]='

主站蜘蛛池模板: 免费不卡无码av在线观看| 久久精品水蜜桃av综合天堂| 2019日韩中文字幕mv| 少妇的肉体aa片免费| 国产精品女人呻吟在线观看| 日韩一卡2卡3卡4卡新区亚洲| 亚洲综合网站精品一区二区| 无套内射极品少妇chinese| 国产乱辈通伦影片在线播放亚洲| 成年女人a级毛片免费观看| 亚洲一区二区三区av激情| 欧美日韩中文字幕视频不卡一二区| 日韩a片无码毛片免费看| 国内露脸中年夫妇交换| 精品无码一区二区三区水蜜桃| 精品国品一二三产品区别在线观看| 日韩精品一区二区大桥未久| 中文字幕 人妻熟女| 久久日韩乱码一二三四区别| 久久久婷婷五月亚洲97色| 国产精品高清一区二区三区| 国产成人精品视频ⅴa片软件竹菊| 好爽毛片一区二区三区四| 国产精品久久久久久tv| 欧美国产成人精品二区芒果视频| 日韩区欧美国产区在线观看| 亚洲欧美成人一区二区在线电影| 久爱无码精品免费视频在线观看| 三上悠亚精品一区二区久久| 色欲久久综合亚洲精品蜜桃| 国产成人精品无码专区| 一本大道东京热无码| 五月丁香啪啪| 欧美牲交黑粗硬大| 欧美放荡的少妇| 日韩人妻无码中文字幕一区| 欧美va亚洲va在线观看| 国产精品扒开腿做爽爽爽视频| 免费99精品国产自在现线| 久久亚洲精品久久国产一区二区| 又湿又紧又大又爽a视频国产|