利用棧求表達(dá)式的值_第1頁(yè)
利用棧求表達(dá)式的值_第2頁(yè)
利用棧求表達(dá)式的值_第3頁(yè)
利用棧求表達(dá)式的值_第4頁(yè)
利用棧求表達(dá)式的值_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)姓名:王宗敏班級(jí):軟件102111班學(xué)號(hào):10211112目錄:11需求分析……………21概要設(shè)計(jì)……………3□詳細(xì)設(shè)計(jì)……………41調(diào)試分析……………51用戶使用說(shuō)明………61測(cè)試結(jié)果……………利用棧求表達(dá)式的值,可供小學(xué)生作業(yè),并能給出分?jǐn)?shù)。需求分析任務(wù):通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能:此系統(tǒng)能夠輸入一個(gè)表達(dá)式,并計(jì)算該表達(dá)式的值??梢愿鶕?jù)計(jì)算結(jié)果給出分?jǐn)?shù)。能供小學(xué)生進(jìn)行簡(jiǎn)單的四則運(yùn)算,此外這里特別強(qiáng)調(diào)括號(hào)的匹配!要求:根據(jù)以上功能說(shuō)明,設(shè)計(jì)運(yùn)算信息,堆棧的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能;概要設(shè)計(jì)在此說(shuō)明每個(gè)部分的算法設(shè)計(jì)說(shuō)明(可以是描述算法的流程圖),每個(gè)程序中使用的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)說(shuō)明(如果指定存儲(chǔ)結(jié)構(gòu)請(qǐng)寫出該存儲(chǔ)結(jié)構(gòu)的定義)。詳細(xì)代碼#include"string.h"#include"stdio.h"#include"conio.h"#definemaxsize100#include"ctype.h"typedefchardatatype;typedefstruct{datatypestack[maxsize];inttop;}seqstack;voidstackinitiate(seqstack*s)s->top=0;}intstacknotempty(seqstacks){if(s.top<=0)return0;elsereturn1;}intstackpush(seqstack*s,datatypex){if(s->top>=maxsize){printf("堆棧已滿無(wú)法插入!\n");return0;}else{s->stack[s->top]=x;s->top++;return1;}}intstackpop(seqstack*s,datatype*d){if(s->top<=0){printf("堆棧已空無(wú)數(shù)據(jù)元素出棧!\n");return0;}else{s->top--;*d=s->stack[s->top];return1;}}intstacktop(seqstacks,datatype*d){if(s.top<=0){printf("堆棧已空!\n");return0;}else{*d=s.stack[s.top-1];return1;}}voidexpiscorrect(charexp[],intn){seqstackmystack;inti;charc;stackinitiate(&mystack);for(i=0;i<n;i++){if(exp[i]=='(')stackpush(&mystack,exp[i]);elseif((exp[i]==')')&&stacknotempty(mystack)&&stacktop(mystack,&c)&&c=='(')stackpop(&mystack,&c);elseif((exp[i]==')')&&!stacknotempty(mystack)){printf("右括號(hào)多余左括號(hào)!\n");return;}}if(stacknotempty(mystack))printf("左括號(hào)多余右括號(hào)!\n");elseprintf("左右括號(hào)匹配正確!\n");}staticfloatans[50];staticintcount=0;staticintright=0;staticfloatyourresult[50];intpostexp(charexp[])seqstackmystack;datatypex1,x2;inti;intj=0,ls;inttop=0;intisFalse=0;intisRead=0;charoprator='';stackinitiate(&mystack);for(i=0;exp[i]!='#';i++){if(isdigit(exp[i])){top=(int)(exp[i]-48);top*=10;}else{if(isRead==0){isRead++;top/=10;stackpush(&mystack,top);oprator=exp[i];top=0;}elseif(isRead==1){stackpush(&mystack,top);if(isRead==1){isRead++;stackpop(&mystack,&x2);}stackpop(&mystack,&x1);ls=x1;x1=x2;x2=ls;x1/=10;switch(oprator){case'+':{x1+=x2;break;}case'-':{x1-=x2;break;}case'*':{x1*=x2;break;}case'/':{if(x2==0.0){printf("除數(shù)為0錯(cuò)!\n");isFalse=1;}else{x1/=x2;}};break;}oprator=exp[i];x2=x1;top=0;}}}if(isRead==0){isRead++;top/=10;stackpush(&mystack,top);oprator=exp[i];top=0;}elseif(isRead==1){stackpush(&mystack,top);if(isRead==1){isRead++;stackpop(&mystack,&x2);}stackpop(&mystack,&x1);ls=x1;x1=x2;x2=ls;x1/=10;switch(oprator){case'+':{x1+=x2;break;}case'-':{x1-=x2;break;}case'*':{x1*=x2;break;}case'/':{if(x2==0.0){printf("除數(shù)為0錯(cuò)!\n");isFalse=1;}else{x1/=x2;}};break;}oprator=exp[i];x2=x1;top=0;}if(isFalse==1)return-1;ans[count]=x1;printf("請(qǐng)輸入您計(jì)算的結(jié)果:”);scanf("%f",&yourresult[count]);if(ans[count]==yourresult[count])right++;count++;getchar();}intmain(){inti=0;charexp[100];printf("———計(jì)算表達(dá)式———\n使用說(shuō)明:\n");printf("1.請(qǐng)輸入要計(jì)算的表達(dá)式,以#結(jié)尾,例如1+2#\n");printf("2.結(jié)束計(jì)算請(qǐng)輸入符號(hào)$\n");printf("3.在表達(dá)式中可以運(yùn)算括號(hào),中括號(hào)口和大括號(hào){}統(tǒng)一使用小括號(hào)代替()!\n");printf("4.程序輸入格式錯(cuò)誤時(shí),將會(huì)自動(dòng)結(jié)束程序,請(qǐng)注意格式正確!\n");printf("請(qǐng)輸入要計(jì)算的表達(dá)式,以#結(jié)尾。結(jié)束程序輸入$。\n");//c=getchar();scanf("%s",exp);while(exp[i]!='$'){expiscorrect(&exp,i);postexp(&exp);printf(" \n");printf("請(qǐng)輸入下一個(gè)表達(dá)式,以#結(jié)尾。結(jié)束程序輸入$。\n");scanf("%s",exp);//c=getchar();}printf("\n\n ******您的成績(jī)單*******也)printf(" \n");printf("序號(hào) 正確答案 您的答案結(jié)論\n");for(i=0;i<count;i++){printf("表達(dá)式%d %.2f %.2f %s\n",i+1,ans[i],yourresult[i],ans[i]==yourresult[i]?"正確!":"錯(cuò)誤!");}printf(" \n");printf("解答題目總共為%d道,其中\(zhòng)n",count);printf("正確解答%d道題,錯(cuò)誤解答%4道題。也 *****最后得分為%d分!*****\n",right,count-right,right*100/count);printf(" \n");getchar();getchar();return0;}.計(jì)算表達(dá).式3.在表達(dá)民讓尊的表達(dá)式,.需G至酷號(hào)以隨吉尾,例如工+壓束中自尾&嘉就大括號(hào)<〉統(tǒng)-'使用小括號(hào)代替C聿輸鬻意格式正確I以*結(jié)尾11.3.|i]Ant:方算的表達(dá)式,‘法刀口.在.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論