C語言程序設(shè)計(jì)-第十一章 綜合實(shí)訓(xùn)—學(xué)生成績管理系統(tǒng)_第1頁
C語言程序設(shè)計(jì)-第十一章 綜合實(shí)訓(xùn)—學(xué)生成績管理系統(tǒng)_第2頁
C語言程序設(shè)計(jì)-第十一章 綜合實(shí)訓(xùn)—學(xué)生成績管理系統(tǒng)_第3頁
C語言程序設(shè)計(jì)-第十一章 綜合實(shí)訓(xùn)—學(xué)生成績管理系統(tǒng)_第4頁
C語言程序設(shè)計(jì)-第十一章 綜合實(shí)訓(xùn)—學(xué)生成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)1項(xiàng)目項(xiàng)目十一十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)學(xué)生成績管學(xué)生成績管理系統(tǒng)理系統(tǒng)C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)2【項(xiàng)目要求項(xiàng)目要求】 將從鍵盤輸入的十進(jìn)制數(shù)轉(zhuǎn)換為將從鍵盤輸入的十進(jìn)制數(shù)轉(zhuǎn)換為N N(如二進(jìn)制、八進(jìn)制、(如二進(jìn)制、八進(jìn)制、十六進(jìn)制)進(jìn)制數(shù)據(jù),利用順序棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換問題十六進(jìn)制)進(jìn)制數(shù)據(jù),利用順序棧實(shí)現(xiàn)數(shù)制轉(zhuǎn)換問題 十進(jìn)制轉(zhuǎn)化成十進(jìn)制轉(zhuǎn)化成N進(jìn)制的算法是進(jìn)制的算法是 /整數(shù)部分為除整數(shù)部分為除N取余法取余法,小數(shù)部分為小數(shù)部分為乘乘N取整

2、法。例如:對取整法。例如:對1348這個數(shù),轉(zhuǎn)化為這個數(shù),轉(zhuǎn)化為N進(jìn)制,也就是解方程進(jìn)制,也就是解方程1348=aN5+bN4+cN3+dN2+eN1+f,目標(biāo)就是要求出系數(shù),目標(biāo)就是要求出系數(shù)a,b,c,d,e,f的值(也許的值(也許a的前面還有的前面還有w*N6甚至甚至7次方等等,但是次次方等等,但是次數(shù)太高的話就必然會是數(shù)太高的話就必然會是0),比如我們假定),比如我們假定N=10的話,那么求出來的話,那么求出來的結(jié)果必然是的結(jié)果必然是a=b=0,c=1,d=3,e=4,f=8 。對于。對于N進(jìn)制來說,進(jìn)制來說,a,b,c,d,e,f的值都必然要小于的值都必然要小于N(否則就會向高位進(jìn)一

3、),顯然求(否則就會向高位進(jìn)一),顯然求解的過程是:將解的過程是:將1348除以除以10(令(令N=10),則余數(shù)就是則余數(shù)就是f ,即,即8,則商則商則是則是aN4+bN3+cN2+dN1+e,這樣進(jìn)一步除以,這樣進(jìn)一步除以10得得e,依次得依次得到到d,c,b,a,可用堆棧來實(shí)現(xiàn)??捎枚褩韺?shí)現(xiàn)?!卷?xiàng)目分析項(xiàng)目分析】C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)3問題情境及實(shí)現(xiàn)問題情境及實(shí)現(xiàn)v/* v 堆棧的應(yīng)用-進(jìn)制轉(zhuǎn)換 v 將十進(jìn)制轉(zhuǎn)換成其他進(jìn)制 v*/ v#include v#define maNlen 100 v vtypedefty

4、pedef structstruct /堆棧的結(jié)構(gòu)大家應(yīng)該都很熟悉了 v v intint datamaNlen; v intint top; vSeqStack; v vvoidvoid InitStack(SeqStack * S) /置???v v S-top = -1; v v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)4問題情境及實(shí)現(xiàn)問題情境及實(shí)現(xiàn)vvoidvoid Pop(SeqStack * S, intint * N) /出棧,N用來接受被彈出的數(shù)的 v v *N = S-dataS-top; v S-top-; v v vv

5、oidvoid Push(SeqStack * S, intint N) /入棧 v v S-top+; v S-dataS-top = N; v v vvoidvoid Conversion(SeqStack * S, intint n, intint d) /n為一個十進(jìn)制數(shù),d為進(jìn)制 v v ifif(d 0) v printf(ERROR!n); v ifif(n 0) v n = -n; v ifif(n = 0) v Push(S, 0); v whilewhile(n) v v Push(S, n%d); v n /= d; v v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜

6、合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)5問題情境及實(shí)現(xiàn)問題情境及實(shí)現(xiàn)vintint main() v v intint n,d,N; /n為一個十進(jìn)制數(shù),d為進(jìn)制 v SeqStack stack, *S; v S = &stack; v v whilewhile(scanf(%d %d,&n,&d) != EOF) v v InitStack(S); /初始化 v Conversion(S, n, d); v ifif(n top != -1) v v Pop(S, &N); v ifif(N top=0; s-top=0;v v 判空棧判空棧vint empty(stack in

7、t empty(stack * *s)s)v if(s-top=0) return if(s-top=0) return 1;1;v else return 0; else return 0;v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)12 入棧入棧 vvoid push (stack void push (stack * *s, datatype N)s, datatype N)v if (s-top=MAN-1) if (s-top=MAN-1) v printf( printf(棧滿棧滿); ); v else else v s-to

8、p+; s-top+;v s-datas-top=N; s-datas-top=N;v v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)13 出棧出棧 vvoid pop(stack void pop(stack * *s,datatype s,datatype * *N)N)v if(empty(s) if(empty(s) v printf( printf(??諚??;);v else elsev * *N=s-datas-top;N=s-datas-top;v s-top-; s-top-;v v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十

9、一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)14 取棧頂元素取棧頂元素 vdatatype get(stack datatype get(stack * *s)s)v if(empty(s) if(empty(s) v printf( printf(??諚??;);v else else v return(s-datas-top); return(s-datas-top);v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)151.3 1.3 雙棧的操作雙棧的操作v讓兩個棧共享一個數(shù)組的存儲空間,讓一個棧的讓兩個棧共享一個數(shù)組的存儲空間,

10、讓一個棧的棧底為該空間的始端,另一個棧的棧底為該空間的末棧底為該空間的始端,另一個棧的棧底為該空間的末端,當(dāng)元素進(jìn)棧時,都從兩端向中間靠攏,這樣就可端,當(dāng)元素進(jìn)棧時,都從兩端向中間靠攏,這樣就可以達(dá)到在使用過程中有的棧占有的空間多一些,有的以達(dá)到在使用過程中有的棧占有的空間多一些,有的棧占有的空間少一些,公共的剩余空間可以調(diào)節(jié)使用,棧占有的空間少一些,公共的剩余空間可以調(diào)節(jié)使用,從而提高了存儲空間的利用率。從而提高了存儲空間的利用率。 1 12 23 3 n n m mm+1 m+1 MAN-1MAN-1 data data a1 a2 a3 an bm b2 b1top1top2棧棧2底底棧

11、棧1底底 雙棧共享存儲空間雙棧共享存儲空間 C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)16存儲結(jié)構(gòu)可定義為存儲結(jié)構(gòu)可定義為v#define MAN #define MAN 雙棧中允許存放元素的最大個數(shù)雙棧中允許存放元素的最大個數(shù)vtypedef structtypedef structv datatype dataMAN; datatype dataMAN; v int top1,top2; int top1,top2;vbothstack;bothstack; 用用bothstack可以定義一個雙棧可以定義一個雙棧ds:bothstack

12、ds; 或或bothstack *ds; C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)171. 1. 進(jìn)棧進(jìn)棧 vvoid push (bothstack void push (bothstack * *ds, datatype N)ds, datatype N)v if(ds-top2= ds-top1+1) if(ds-top2= ds-top1+1) v printf( printf(棧滿棧滿); ); v else elsev ds-top2-; ds-top2-;v ds-datads-top2=N; ds-datads-top2=N

13、;v v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)182 2出棧出棧 vvoid pop(bothstack void pop(bothstack * *ds, datatype ds, datatype * *N)N)v if(ds-top2=MAN) if(ds-top2=MAN) v printf( printf(棧空???;);v else elsev * *N=ds-datads-top2;N=ds-datads-top2;v ds-top2+; ds-top2+;v v C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)

14、訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)191.4 1.4 棧的應(yīng)用棧的應(yīng)用算法思路:把十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)采用的方法是算法思路:把十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)采用的方法是“除除2取余取余”,直到商為,直到商為0。依次得到的余數(shù)是。依次得到的余數(shù)是k1,k2,k3,km,而轉(zhuǎn)換后的二進(jìn)制數(shù)是而轉(zhuǎn)換后的二進(jìn)制數(shù)是km km-1k3 k2 k1,從結(jié)果看恰好與計(jì)算過程相反,因此轉(zhuǎn)換過程中每得到一位從結(jié)果看恰好與計(jì)算過程相反,因此轉(zhuǎn)換過程中每得到一位二進(jìn)制數(shù)則進(jìn)棧保存,轉(zhuǎn)換完畢后依次出棧則正好是轉(zhuǎn)換結(jié)二進(jìn)制數(shù)則進(jìn)棧保存,轉(zhuǎn)換完畢后依次出棧則正好是轉(zhuǎn)換結(jié)果。此種方法同樣適用于將十進(jìn)制數(shù)轉(zhuǎn)換為果。此種方法同樣適

15、用于將十進(jìn)制數(shù)轉(zhuǎn)換為r進(jìn)制的數(shù)。把十進(jìn)制的數(shù)。把十進(jìn)制整數(shù)進(jìn)制整數(shù)11轉(zhuǎn)換為二進(jìn)制的過程如下:轉(zhuǎn)換為二進(jìn)制的過程如下: 211 余數(shù)余數(shù)二進(jìn)制位二進(jìn)制位 低低 高高 25 1k1 1 22 1k2 2 21 0 k3 30 1k4 4例例 2-3 編寫一個算法將給定的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)輸出。編寫一個算法將給定的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)輸出。C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)20數(shù)值轉(zhuǎn)換的算法數(shù)值轉(zhuǎn)換的算法v typedef int datatype; #define MAN 10typedef int datatype; #defi

16、ne MAN 10v void transfer(int n,int r) void transfer(int n,int r)void transfer(int n,int r) void transfer(int n,int r)v stack s; int sMAN,top; / stack s; int sMAN,top; /* *定義一定義一個順序棧個順序棧* */ /v datatype N; int N; datatype N; int N;v init(s); init(s); top=0; top=0; / /* *初始化棧初始化棧* */ /v while(n) while

17、(n) while(n) while(n)v push(s,n%r ); push(s,n%r ); s+top=n%r; / s+top=n%r; /* *余數(shù)入棧余數(shù)入棧* */ /v n=n/r; n=n/r; n=n/r; n=n/r; / /* *商作為被除數(shù)繼續(xù)商作為被除數(shù)繼續(xù)* */ /v v while(!empty(s) while(top!=0) while(!empty(s) while(top!=0)v pop(s,N) ; pop(s,N) ; N=stop-; N=stop-;v printf(%d,N ); printf(%d,N ); printf(%d,N);

18、 printf(%d,N);v v v 算法一算法一 算法二算法二C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)21例例2-4 2-4 棧與遞歸棧與遞歸 v下面以下面以 n!n!為例,介紹如何將遞歸的算法改寫為為例,介紹如何將遞歸的算法改寫為堆棧的非遞歸算法。堆棧的非遞歸算法。 n! =1 n n=0 0或或n n=1 /1 /* *遞歸終止條件遞歸終止條件* */ /n n* *(n-1)! (n-1)! n0 /n0 /* *遞歸步驟遞歸步驟* */ /int fact(int n) if(n=0|n=1) return 1 ; else r

19、eturn(n*fact(n-1) ;C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)22程序的執(zhí)行過程圖示程序的執(zhí)行過程圖示fact(3)n=3f=3*fact(2)return ff=3*2*1*1n=2f=2*fact(1)return ff=2*1*1n=1f=1*fact(0)return ff=1*1n=0f=1return ff=1int fact(int n) if(n=0|n=1) return 1 ; else return(n*fact(n-1) ;C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)

20、學(xué)生成績管理系統(tǒng)23階乘的堆棧算法階乘的堆棧算法( (非遞歸非遞歸) )v typedef int datatype; #define MAN 20typedef int datatype; #define MAN 20v int fact(int n) int fact(int n) int fact(int n)int fact(int n)v stack s;datatype N;int m=1; int sMAN,top=0,N,m=1; stack s;datatype N;int m=1; int sMAN,top=0,N,m=1; v init(s); init(s); if(n

21、=0|n=1) if(n=0|n=1) m=1;m=1;v if(n=0|n=1) m=1; else while(n1) if(n=0|n=1) m=1; else while(n1) v else while(n1) else while(n1) s+top=n; s+top=n; v push(s,n);n-; push(s,n);n-; n-; n-;v v while(!empty(s) while(top!=0) while(!empty(s) while(top!=0)v pop(s,N) ; pop(s,N) ; N=stop-; N=stop-;v m=m m=m* *N;

22、N; m=m m=m* *N;N;v v v return m; return m; return m; return m;v v 算法一算法一 算法二算法二C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)24例例2-5 2-5 算術(shù)表達(dá)式的求值算術(shù)表達(dá)式的求值 v1. 1. 算術(shù)表達(dá)式的兩種表示方法算術(shù)表達(dá)式的兩種表示方法v 中綴表達(dá)式中綴表達(dá)式 v所謂中綴表達(dá)式就是把運(yùn)算符放在兩個運(yùn)算對所謂中綴表達(dá)式就是把運(yùn)算符放在兩個運(yùn)算對象之間的表達(dá)式。如象之間的表達(dá)式。如3+53+5* *3 3。實(shí)際中綴表達(dá)式就是經(jīng)。實(shí)際中綴表達(dá)式就是經(jīng)常習(xí)慣使用的算術(shù)

23、表達(dá)式。常習(xí)慣使用的算術(shù)表達(dá)式。v 有括號出現(xiàn)時先算括號內(nèi)的,后算括號外的,有括號出現(xiàn)時先算括號內(nèi)的,后算括號外的,多層括號,由內(nèi)向外進(jìn)行;多層括號,由內(nèi)向外進(jìn)行;v 在無括號或同層括號內(nèi)的情況下,先做乘除在無括號或同層括號內(nèi)的情況下,先做乘除運(yùn)算,運(yùn)算,S S后做加減運(yùn)算;后做加減運(yùn)算;v 同一優(yōu)先級運(yùn)算,從左向右依次進(jìn)行。同一優(yōu)先級運(yùn)算,從左向右依次進(jìn)行。 C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)25 后綴表達(dá)式后綴表達(dá)式 v所謂后綴表達(dá)式就是把運(yùn)算符放在兩個運(yùn)算對所謂后綴表達(dá)式就是把運(yùn)算符放在兩個運(yùn)算對象之后的表達(dá)式。如象之后的表達(dá)式

24、。如3+53+5* *3 3的后綴表達(dá)式是的后綴表達(dá)式是 3 5 3 3 5 3 * * + +其中運(yùn)算對象和運(yùn)算符之間用空格隔開。其中運(yùn)算對象和運(yùn)算符之間用空格隔開。 v在后綴表達(dá)式中,不再引入括號,所有的計(jì)算在后綴表達(dá)式中,不再引入括號,所有的計(jì)算按運(yùn)算符出現(xiàn)的順序,嚴(yán)格從左向右進(jìn)行,即遇到按運(yùn)算符出現(xiàn)的順序,嚴(yán)格從左向右進(jìn)行,即遇到運(yùn)算符就將運(yùn)算符前的兩個運(yùn)算對象進(jìn)行計(jì)算,而運(yùn)算符就將運(yùn)算符前的兩個運(yùn)算對象進(jìn)行計(jì)算,而不用再考慮運(yùn)算規(guī)則和級別。所以計(jì)算機(jī)掃描一次不用再考慮運(yùn)算規(guī)則和級別。所以計(jì)算機(jī)掃描一次就能完成運(yùn)算。就能完成運(yùn)算。v把中綴表達(dá)式轉(zhuǎn)換成對應(yīng)的后綴表達(dá)式的規(guī)則把中綴表達(dá)式轉(zhuǎn)

25、換成對應(yīng)的后綴表達(dá)式的規(guī)則是:把每個運(yùn)算符都移到他的兩個運(yùn)算對象的后面,是:把每個運(yùn)算符都移到他的兩個運(yùn)算對象的后面,然后刪掉所有的括號即可。然后刪掉所有的括號即可。C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)26v例如例如: :對下列各中綴表達(dá)式對下列各中綴表達(dá)式v 5/2-7 5/2-7v 15+6 15+6* *(2+4(2+4)v 3 3* *(N+y)/(2-y)(N+y)/(2-y)v (25+N) (25+N)* *(a(a* *(a+b)+b)(a+b)+b)v對應(yīng)的后綴表達(dá)式分別為對應(yīng)的后綴表達(dá)式分別為v 5 2 / 7 -

26、5 2 / 7 -v 15 6 2 4 + 15 6 2 4 + * * + +v 3 N y + 3 N y + * * 2 y - / 2 y - /v 25 N + a a b + 25 N + a a b + * * b + b + * *C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)272. 2. 中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式v在將中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)示的算法中,在將中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)示的算法中,為了討論方便我們設(shè)表達(dá)式中的運(yùn)算對象只有一位為了討論方便我們設(shè)表達(dá)式中的運(yùn)算對象只有一位數(shù)字,并將中綴表達(dá)式

27、保存在字符數(shù)組數(shù)字,并將中綴表達(dá)式保存在字符數(shù)組a a中,轉(zhuǎn)換中,轉(zhuǎn)換后的后綴表達(dá)式存儲在字符數(shù)組后的后綴表達(dá)式存儲在字符數(shù)組b b中,用一個字符中,用一個字符數(shù)組數(shù)組s s作為棧,設(shè)字符作為棧,設(shè)字符= = 為表達(dá)式的結(jié)束符。算為表達(dá)式的結(jié)束符。算法思路如下:法思路如下:C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)28v 先將輸入的中綴表達(dá)式,存入字符數(shù)組先將輸入的中綴表達(dá)式,存入字符數(shù)組a a中,取出中,取出a a數(shù)組中數(shù)組中的每一個字符存于的每一個字符存于c c變量中,對于每一個變量中,對于每一個c c變量的值做如下變量的值做如下處理:處

28、理:v 若若c c為數(shù)字,則存于數(shù)組為數(shù)字,則存于數(shù)組b b中;中;v 若若c c為左括號為左括號(,則將其壓入棧,則將其壓入棧s;s;v 若若c c為右括號為右括號),則將棧,則將棧s s中左括號中左括號(以后的運(yùn)以后的運(yùn)算符依次出棧,存于數(shù)組算符依次出棧,存于數(shù)組b b中,然后將左括號中,然后將左括號(出棧;出棧;v 若若c c為為+或或-,則將棧,則將棧s s中左括號中左括號(以后的所有以后的所有運(yùn)算符依次出棧,存于數(shù)組運(yùn)算符依次出棧,存于數(shù)組b b中,然后將中,然后將c c壓入棧壓入棧s s中;中;v 若若c c為為 * * 或或/,則將棧,則將棧s s中的棧頂端連續(xù)的中的棧頂端連續(xù)的

29、 * * 或或/出棧,存于數(shù)組出棧,存于數(shù)組b b中,然后將中,然后將c c壓入棧壓入棧s s中中v 若若c c為為=,則將棧,則將棧S S中的所有運(yùn)算符依次出棧,存于數(shù)中的所有運(yùn)算符依次出棧,存于數(shù)組組b b中,然后將中,然后將c c存于數(shù)組存于數(shù)組b b中,最后得到的后綴表達(dá)式存儲中,最后得到的后綴表達(dá)式存儲在字符數(shù)組在字符數(shù)組b b中。中。C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)29v 中綴轉(zhuǎn)后綴的算法如下所示中綴轉(zhuǎn)后綴的算法如下所示: :v #define MAN 50#define MAN 50v Void trans()Void

30、 trans()v char aMAN,bMAN, char aMAN,bMAN, v sMAN,c; sMAN,c;v int i=0,j,t=1,top=0; int i=0,j,t=1,top=0;v do dov i+; i+;v scanf(%c,&ai); scanf(%c,&ai);v while(ai!=&iMAN); while(ai!=&i=0&c=0&c=9)v bt=c;t+; bt=c;t+;v else if(c=() else if(c=()v top+;stop=c; top+;stop=c;v else if(c=) else if(c=)v while(st

31、op!=() while(stop!=()v bt=stop;top-;t+ bt=stop;top-;t+v top-; top-;v v else if(c=+|c=-)else if(c=+|c=-)v while(top!=0 & stop!=() while(top!=0 & stop!=()v bt=stop;top-;t+; bt=stop;top-;t+;v top+;stop=c; top+;stop=c;v v else if(c= else if(c=* *|c=/)|c=/)v while( stop!= while( stop!=* *|stop!=/)|stop!=

32、/)v bt=stop;top-;t+; bt=stop;top-;t+;v top+;stop=c; top+;stop=c;v v c=ai;i+; c=ai;i+;v v while(top!=0) while(top!=0)v bt=stop;t+;top-; bt=stop;t+;top-;v bt=; bt=;v for(j=1;jt;j+) printf(%c ,bj);for(j=1;j=0 & c=0 & cf=q-r=0; 判空隊(duì)列判空隊(duì)列 int empty(queue *q) if(q-f=0 & q-r=0) return 1; else return 0;C語言程序

33、設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)40 入隊(duì)入隊(duì) v入隊(duì)時,首先判隊(duì)是否滿了,隊(duì)滿的條件為:入隊(duì)時,首先判隊(duì)是否滿了,隊(duì)滿的條件為:q-r= =MAN-1q-r= =MAN-1,隊(duì)滿時,不能入隊(duì),可以進(jìn)行溢出,隊(duì)滿時,不能入隊(duì),可以進(jìn)行溢出錯誤處理,若可以入隊(duì)則先將隊(duì)尾指針后移錯誤處理,若可以入隊(duì)則先將隊(duì)尾指針后移 (q-r+)(q-r+),再將元素賦給隊(duì)尾單元。,再將元素賦給隊(duì)尾單元。 void insert (queue *q,datatype N) if(q-r=MAN-1) printf(隊(duì)滿隊(duì)滿); else if(q-f=0 & q-r=0) q-f=+q-r; else q-r+; q-dataq-r=N; C語言程序設(shè)計(jì)語言程序設(shè)計(jì)項(xiàng)目十一項(xiàng)目十一 綜合實(shí)訓(xùn)綜合實(shí)訓(xùn)-學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)41 出隊(duì)列出隊(duì)列 v先判隊(duì)列是否為空,為空時不能出隊(duì),若可以出先判隊(duì)列是否為空,為空時不能出隊(duì),若可以出隊(duì),則可先將隊(duì)首元素賦給指定變量(若不需要保留,隊(duì),則可先將隊(duì)首元素賦給指定變量(若不需要保留,可以省去這一步),隊(duì)首指針后移(可以省去這一步),隊(duì)首指針后移(q-f-q-f-

溫馨提示

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

最新文檔

評論

0/150

提交評論