版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 課程名稱(chēng): 數(shù)據(jù)結(jié)構(gòu) </p><p> 學(xué)院名稱(chēng): </p><p> 班 號(hào): </p><p> 姓 名:
2、 </p><p> 指導(dǎo)教師: </p><p><b> 目錄</b></p><p><b> 一、迷宮問(wèn)題</b></p><p><b> 二、訂票系統(tǒng)</b></p><
3、;p><b> 三、一元多項(xiàng)式計(jì)算</b></p><p><b> 四、猴子選大王</b></p><p><b> 五、紙牌游戲 </b></p><p><b> 六、拓?fù)渑判?lt;/b></p><p><b> 七、文章編輯
4、</b></p><p><b> 八、總結(jié)</b></p><p><b> 迷宮問(wèn)題</b></p><p> 一、需求分析:利用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出。</p><p> 首先由用戶(hù)輸入一組二維數(shù)組來(lái)組成迷宮,確認(rèn)后程序自動(dòng)運(yùn)行,當(dāng)迷宮有完整路徑
5、可以通過(guò)時(shí),以0和1所組成的迷宮形式輸出,標(biāo)記所走過(guò)的路徑結(jié)束程序;當(dāng)迷宮無(wú)路徑時(shí),提示輸入錯(cuò)誤結(jié)束程序。</p><p> 二、概要設(shè)計(jì):1.抽象數(shù)據(jù)類(lèi)型定義:ADT Find{數(shù)據(jù)對(duì)象:D={ai?ai ∈ElemSet,i=1,2,…,n,n≥0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>?ai-1, ai∈D }基本操作: find
6、(&S)初始條件:已初始化棧S,且棧為空操作結(jié)果:從棧S中找出相對(duì)應(yīng)的數(shù)據(jù)關(guān)系,并輸出結(jié)果}ADT Find2. 主程序的流程以及各程序模塊之間的調(diào)用關(guān)系:(1).定義變量i、j、w、z為整形變量(2).輸入迷宮二維數(shù)組maze(0:m,0:n)(3).調(diào)用子程序find ()(4).結(jié)束程序</p><p><b> 三、詳細(xì)設(shè)計(jì):</b></p>
7、<p> #include"stdio.h"</p><p> #include"stdlib.h" </p><p> #define m 8</p><p> #define n 6</p><p> #define maxsize 50</p><p>
8、; int maze[m+2][n+2];</p><p> typedef struct/*試探方向*/</p><p> { int x,y;</p><p><b> }item;</b></p><p> item move[8]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1
9、,-1},{-1,0},{-1,1}};</p><p> typedef struct/*棧元素設(shè)計(jì)*/</p><p> {int x,y,d; </p><p> }datetype;</p><p> typedef struct/*棧*/</p><p> {datetype data[maxsiz
10、e];</p><p><b> int top;</b></p><p> }SeqStack;</p><p> SeqStack *Init_SeqStack()/*置空棧*/</p><p> {SeqStack *s;</p><p> s=(SeqStack *)malloc
11、(sizeof(SeqStack));</p><p> s->top=0;return s;</p><p><b> }</b></p><p> int Empty_SeqStack(SeqStack *s)/*判???/</p><p> {if(s->top==0)return 1;<
12、/p><p> else return 0;</p><p><b> }</b></p><p> int Push_SeqStack(SeqStack *s,datetype x)/*入棧*/</p><p> {if(s->top==maxsize-1)return 0;</p><p
13、> else{s->top++;</p><p> s->data[s->top]=x;return 1;}</p><p><b> }</b></p><p> int Pop_SeqStack(SeqStack *s,datetype *x)/*出棧*/</p><p> {if(
14、Empty_SeqStack(s))return 0;</p><p> else {*x=s->data[s->top];</p><p> s->top--; return 1;}</p><p><b> }</b></p><p> int path(SeqStack *s)/*尋找路徑
15、*/</p><p><b> {</b></p><p> datetype temp;</p><p> int x,y,d,i,j;</p><p> temp.x=1;temp.y=1;temp.d=-1;</p><p> Push_SeqStack (s,temp);<
16、/p><p> while (!Empty_SeqStack(s))</p><p> {Pop_SeqStack (s,&temp);</p><p> x=temp.x;y=temp.y;d=temp.d+1;</p><p> while (d<4)</p><p> {i=x+move[d]
17、.x;j=y+move[d].y;</p><p> if (maze[i][j]==0)</p><p> {temp.x=x;temp.y=y;temp.d=d;</p><p> Push_SeqStack (s,temp);</p><p> x=i;y=j;maze[x][y]=-1;</p><p>
18、; if (x==m&&y==n) </p><p><b> return 1;</b></p><p><b> else d=0;</b></p><p><b> }</b></p><p><b> else d++;</b&
19、gt;</p><p><b> }</b></p><p> }return 0;</p><p><b> }</b></p><p> void print(SeqStack *s)/*輸出棧*/</p><p><b> {int i;</b
20、></p><p> for(i=1;i<=s->top;i++)</p><p> {printf("{[%d,%d],%d}", s->data[i].x,s->data[i].y,s->data[i].d);</p><p> if(i<s->top)printf("→&quo
21、t;);</p><p> if(i%3==0) printf("\n");</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p> int
22、main() </p><p> {SeqStack *s ;</p><p> int i,k,j,w;</p><p> printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");</p><p> printf(" 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-迷宮問(wèn)題 \n")
23、;</p><p> printf(" ------------------------- \n");</p><p> printf(" 1--隨機(jī)迷宮 \n");</p><p> printf(" 0--退出 \n&q
24、uot;);</p><p> printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");</p><p> scanf("%d",&w);</p><p><b> switch(w)</b></p><p> {case 1:for
25、( i = 1; i <=m;i++ ) </p><p> for(j=1;j<=n;j++)</p><p> {maze[i][j]=rand()%2;/*隨機(jī)數(shù)組*/</p><p><b> }</b></p><p> maze[1][1]=0;maze[6][8]=0;/*入口和出口*/
26、</p><p> for(i=0;i<m+2;i++) /*添加外圍*/</p><p> {maze[i][0]=1;maze[i][n+1]=1; </p><p><b> } </b></p><p> for (j=0;j<n+2;j++)</p><p> {m
27、aze[0][j]=1;maze[m+1][j]=1;</p><p> } </p><p> printf("隨機(jī)生成的迷宮圖為:\n\n");</p><p> for(i=0;i<m+2;i++)</p><p> {for(j=0;j<n+2;j++)</p&g
28、t;<p> printf("%2d ",maze[i][j]);</p><p> printf("\n");</p><p><b> }</b></p><p> s=Init_SeqStack();</p><p> k=path(s);</p
29、><p><b> if (k==1)</b></p><p><b> {if(k==1)</b></p><p> printf("迷宮有路:\n");</p><p><b> print(s);</b></p><p>
30、 for(i=0;i<m+2;i++)</p><p> {for(j=0;j<n+2;j++)</p><p> printf("%2d ",maze[i][j]);</p><p> printf("\n");</p><p><b> }}</b><
31、/p><p><b> else </b></p><p> printf("迷宮沒(méi)路\n\n");</p><p><b> break;</b></p><p><b> }</b></p><p><b> }&
32、lt;/b></p><p><b> 四、運(yùn)行結(jié)果:</b></p><p> 輸入一個(gè)矩陣,例如:1 0 0 1 1</p><p> 0 0 1 1 1 </p><p><b> 1 0 0 0 1</b></p><p> 0 1 0 1 1 &l
33、t;/p><p> 1 1 0 0 0 </p><p> 輸入入口行坐標(biāo)和列坐標(biāo):1 2</p><p> 輸入出口行坐標(biāo)和列坐標(biāo):5 5</p><p><b> 通路路徑為:</b></p><p><b> 訂票系統(tǒng)</b></p><p&
34、gt;<b> 一、需求分析:</b></p><p> 采用基數(shù)排序法對(duì)于一組具有結(jié)構(gòu)特點(diǎn)的飛機(jī)航班號(hào)進(jìn)行排序,利用二分查找法對(duì)排好序的航班記錄按航班號(hào)實(shí)現(xiàn)快遞查找,按其他次關(guān)鍵字的查找可采用最簡(jiǎn)單的順序查找方法進(jìn)行。</p><p> 任務(wù):通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能:</p><p> 錄入:可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)
35、據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)</p><p> 查詢(xún):可以查詢(xún)某個(gè)航線的情況(如,輸入航班號(hào),查詢(xún)起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿(mǎn)倉(cāng));可以輸入起飛抵達(dá)城市,查詢(xún)飛機(jī)航班情況;</p><p> 訂票:可以訂票(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定),如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班;</p><p> 退票:
36、可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶(hù)資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。</p><p> 修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件</p><p> 要求:根據(jù)以上功能說(shuō)明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能; </p><p><b> 二、概要設(shè)計(jì):</b></p><p
37、><b> 三.詳細(xì)設(shè)計(jì):</b></p><p> #include <stdio.h></p><p> #include <string.h></p><p> #define maxspace 100</p><p> #define keylen 7</p>
38、<p> #define radix_n 10</p><p> #define radix_c 26</p><p> typedef char keytype;</p><p> typedef struct </p><p><b> {</b></p><p> c
39、har start[6];</p><p> char end[6];</p><p> char sche[10];</p><p> char time1[5];</p><p> char time2[5];</p><p> char model[4];</p><p> i
40、nt price;</p><p> }infotype;</p><p> typedef struct</p><p><b> {</b></p><p> keytype keys[keylen];</p><p> infotype others;</p><
41、;p><b> int next;</b></p><p><b> }slnode;</b></p><p> typedef struct</p><p><b> {</b></p><p> slnode sl[maxspace];</p>
42、<p> int keynum;</p><p> int length;</p><p><b> }sllist;</b></p><p> typedef int arrtype_n[radix_n];</p><p> typedef int arrtype_c[radix_c];</
43、p><p> void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e)</p><p><b> {</b></p><p><b> int j,p;</b></p><p> for(j=0;j<radix_n;j++)<
44、/p><p><b> {</b></p><p> f[j]=e[j]=0;</p><p><b> }</b></p><p> for(p=sl[0].next;p;p=sl[p].next)</p><p><b> {</b></
45、p><p> j=sl[p].keys[i]%48;</p><p><b> if(!f[j])</b></p><p><b> f[j]=p;</b></p><p><b> else</b></p><p> sl[e[j]].next=
46、p;</p><p><b> e[j]=p;</b></p><p><b> }</b></p><p><b> }</b></p><p> void collect(slnode *sl,arrtype_n f,arrtype_n e)</p>
47、<p><b> {</b></p><p><b> int j,t;</b></p><p> for(j=0;!f[j];j++);</p><p> sl[0].next=f[j];</p><p><b> t=e[j];</b></p>
48、;<p> while(j<radix_n-1)</p><p><b> {</b></p><p> for(j=j+1;j<radix_n-1&&!f[j];j++);</p><p><b> if(f[j])</b></p><p><
49、;b> {</b></p><p> sl[t].next=f[j];</p><p><b> t=e[j]; </b></p><p><b> }</b></p><p><b> }</b></p><p> sl[
50、t].next=0;</p><p><b> }</b></p><p> void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e)</p><p><b> {</b></p><p><b> int j,p;&l
51、t;/b></p><p> for(j=0;j<radix_c;j++)</p><p><b> {</b></p><p> f[j]=e[j]=0;</p><p><b> }</b></p><p> for(p=sl[0].next;p;p
52、=sl[p].next)</p><p><b> {</b></p><p> j=sl[p].keys[i]%65;</p><p><b> if(!f[j])</b></p><p><b> f[j]=p;</b></p><p>&l
53、t;b> else</b></p><p> sl[e[j]].next=p;</p><p><b> e[j]=p;</b></p><p><b> }</b></p><p><b> }</b></p><p>
54、void collect_c(slnode *sl,arrtype_c f,arrtype_c e)</p><p><b> {</b></p><p><b> int j,t;</b></p><p> for(j=0;!f[j];j++);</p><p> sl[0].next=f
55、[j];</p><p><b> t=e[j];</b></p><p> while(j<radix_c-1)</p><p><b> {</b></p><p> for(j=j+1;j<radix_c-1&&!f[j];j++);</p>
56、<p><b> if(f[j])</b></p><p><b> {</b></p><p> sl[t].next=f[j];</p><p><b> t=e[j]; </b></p><p><b> }</b></p&
57、gt;<p><b> }</b></p><p> sl[t].next=0;</p><p><b> }</b></p><p> void radixsort(sllist &l)//鏈?zhǔn)?lt;/p><p><b> {</b></p
58、><p><b> int i;</b></p><p> arrtype_n fn,en;</p><p> arrtype_c fc,ec;</p><p> for(i=0;i<l.length;i++)</p><p> l.sl[i].next=i+1;</p>
59、<p> l.sl[l.length].next=0;</p><p> for(i=l.keynum-1;i>=2;i--)</p><p><b> {</b></p><p> distribute(l.sl,i,fn,en);</p><p> collect(l.sl,i,fn,en
60、);</p><p><b> }</b></p><p> for(i=1;i>=0;i--)</p><p><b> {</b></p><p> distribute_c(l.sl,i,fc,ec);</p><p> collect_c(l.sl,i
61、,fc,ec);</p><p><b> }</b></p><p><b> }</b></p><p> void arrange(sllist &l)//重新整理</p><p><b> {</b></p><p> int
62、p,q,i;</p><p> slnode temp;</p><p> p=l.sl[0].next;</p><p> for(i=1;i<l.length;i++)</p><p><b> {</b></p><p> while(p<i)</p>&
63、lt;p> p=l.sl[p].next;</p><p> q=l.sl[p].next;</p><p><b> if(p!=i)</b></p><p><b> {</b></p><p> temp=l.sl[p];</p><p> l.sl[
64、p]=l.sl[i];</p><p> l.sl[i]=temp;</p><p> l.sl[i].next=p;</p><p><b> }</b></p><p><b> p=q;</b></p><p><b> }</b><
65、;/p><p><b> }</b></p><p> int binsearch(sllist l,keytype key[])</p><p><b> {</b></p><p> int low,high,mid;</p><p><b> low=1
66、;</b></p><p> high=l.length;</p><p> while(low<=high)</p><p><b> {</b></p><p> mid=(low+high)/2;</p><p> if(strcmp(key,l.sl[mid].
67、keys)==0)</p><p> return mid;</p><p> else if(strcmp(key,l.sl[mid].keys)<0)</p><p> high=mid-1;</p><p><b> else</b></p><p> low=mid+1;&
68、lt;/p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> void seqsearch(sllist l,keytype key[],int i)</p><p
69、><b> {</b></p><p> int j,k,m=0;</p><p> printf("*************************************************************\n");</p><p> printf("* 航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班
70、期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià) *\n");</p><p> for(j=1;j<=l.length;j++)</p><p><b> {</b></p><p><b> switch(i)</b></p><p><b> {</b><
71、/p><p> case 2:k=strcmp(key,l.sl[j].others.start);break;</p><p> case 3:k=strcmp(key,l.sl[j].others.end);break;</p><p> case 4:k=strcmp(key,l.sl[j].others.time1);break;</p>&
72、lt;p> case 5:k=strcmp(key,l.sl[j].others.time2);break;</p><p><b> }</b></p><p><b> if(k==0)</b></p><p><b> {</b></p><p><b
73、> m=1;</b></p><p> printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others.time2,l.sl
74、[j].others.model,l.sl[j].others.price);</p><p><b> }</b></p><p><b> }</b></p><p><b> if(m==0)</b></p><p> printf("* 無(wú)此航班信息,
75、可能是輸入錯(cuò)誤! *\n");</p><p> printf("*************************************************************\n");</p><p><b> }</b></p><p> void searchcon(sllist l)<
76、;/p><p><b> {</b></p><p> keytype key[keylen];</p><p> int i=1,k;</p><p> while(i>=1&&i<=5)</p><p><b> {</b></p&
77、gt;<p> printf("\n ********************\n");</p><p> printf(" * 航班信息查詢(xún)系統(tǒng) *\n");</p><p> printf(" ********************\n");</p><p> printf(&q
78、uot; * 1.航 班 號(hào) *\n");</p><p> printf(" * 2.起 點(diǎn) 站 *\n");</p><p> printf(" * 3.終 點(diǎn) 站 *\n");</p><p> printf(" * 4.起飛時(shí)間 *\n");</p><p>
79、 printf(" * 5.到達(dá)時(shí)間 *\n");</p><p> printf(" * 0.退出系統(tǒng) *\n");</p><p> printf(" ********************\n");</p><p> printf(" 請(qǐng)選擇(0-5):");</p
80、><p> scanf("%d",&i);</p><p> printf("\n");</p><p><b> switch(i)</b></p><p><b> {</b></p><p> case 1:prin
81、tf("輸入要查詢(xún)的航班號(hào)(字母要大寫(xiě)):");</p><p> scanf("%s",key);</p><p> k=binsearch(l,key);</p><p> printf("***********************************************************
82、**\n");</p><p><b> if(k==0)</b></p><p> printf("* 無(wú)此航班信息,可能是輸入錯(cuò)誤! *\n");</p><p><b> else</b></p><p><b> {</b><
83、/p><p> printf("* 航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià) *\n");</p><p> printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].o
84、thers.sche,l.sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price);</p><p><b> }</b></p><p> printf("*********************************************
85、****************\n");</p><p><b> break;</b></p><p> case 2:printf("輸入要查詢(xún)的航班起點(diǎn)站名:");</p><p> scanf("%s",key);</p><p> seqsearch(
86、l,key,i);</p><p><b> break;</b></p><p> case 3:printf("輸入要查詢(xún)的航班終點(diǎn)站名:");</p><p> scanf("%s",key);</p><p> seqsearch(l,key,i);</p&g
87、t;<p><b> break;</b></p><p> case 4:printf("輸入要查詢(xún)的航班起飛時(shí)間:");</p><p> scanf("%s",key);</p><p> seqsearch(l,key,i);</p><p><
88、b> break;</b></p><p> case 5:printf("輸入要查詢(xún)的航班到達(dá)時(shí)間:");</p><p> scanf("%s",key);</p><p> seqsearch(l,key,i);</p><p><b> break;<
89、/b></p><p> case 0:printf("\n\n\n 再 見(jiàn)\n\n\n");</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&
90、gt; void inputdata(sllist &l)</p><p><b> {</b></p><p> int i=++l.length;</p><p> char yn='y';</p><p> while(yn=='y'||yn=='Y'
91、;)</p><p><b> {</b></p><p> printf("航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià)\n");</p><p> scanf("%s%s%s%s%s%s%s%d",l.sl[i].keys,l.sl[i].others.start,l.sl[i
92、].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price);</p><p> ++i; getchar(); </p><p> radixsort(l);</p><p>
93、 arrange(l);</p><p> printf("繼續(xù)輸入嗎?y/n:");</p><p> scanf("%c",&yn);</p><p><b> }</b></p><p> l.length=i-1;</p><p>&
94、lt;b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> sllist l;</b></p><p> l.keynum=6;</p><p> l.length=0;<
95、;/p><p> inputdata(l);</p><p> searchcon(l);</p><p><b> }</b></p><p><b> 四、運(yùn)行結(jié)果:</b></p><p> 航班信息:航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票
96、價(jià)</p><p> 輸入:CA1544 合肥 北京 1.2.4.5 1055 1240 733 960</p><p> 提示:繼續(xù)輸入嗎?y/n:y</p><p> 顯示:航班號(hào) 起點(diǎn)站 終點(diǎn)站 航班期 起飛時(shí)間 到達(dá)時(shí)間 機(jī)型 票價(jià)</p><p> MU5341 上海 廣州 每日
97、1420 1615 M90 1280</p><p> 提示:繼續(xù)輸入嗎?y/n:y</p><p><b> ……</b></p><p> 提示:繼續(xù)輸入嗎?y/n:n</p><p><b> 一元多項(xiàng)式的計(jì)算</b></p><p>&l
98、t;b> 一、需求分析</b></p><p> 功能:能夠按照指數(shù)降序排列建立并輸出多項(xiàng)式,能夠完成兩個(gè)多項(xiàng)式的相加相減并輸出結(jié)果</p><p><b> 概要設(shè)計(jì)</b></p><p> 存儲(chǔ)結(jié)構(gòu):一元多項(xiàng)式的表示在計(jì)算機(jī)內(nèi)可以用鏈表來(lái)表示,為了節(jié)省存儲(chǔ)空間,只存儲(chǔ)多項(xiàng)式中系數(shù)非零的項(xiàng)。鏈表中的每一個(gè)結(jié)點(diǎn)存放多
99、項(xiàng)式的一個(gè)系數(shù)非零項(xiàng),它包含三個(gè)域,分別存放該項(xiàng)的系數(shù)、指數(shù)以及指向下一個(gè)多項(xiàng)式項(xiàng)結(jié)點(diǎn)的指針。創(chuàng)建一元多項(xiàng)式鏈表,對(duì)一元多項(xiàng)式的運(yùn)算中會(huì)出現(xiàn)的各種可能情況進(jìn)行分析,實(shí)現(xiàn)一元多項(xiàng)式的相加、相減操作。</p><p><b> 基本算法:</b></p><p><b> 1、輸入輸出</b></p><p> ?。?)功
100、能:將要進(jìn)行運(yùn)算的多項(xiàng)式輸入輸出。</p><p> ?。?)數(shù)據(jù)流入:要輸入的多項(xiàng)式的系數(shù)與指數(shù)。</p><p> ?。?)數(shù)據(jù)流出:合并同類(lèi)項(xiàng)后的多項(xiàng)式。</p><p> (4)程序流程圖:多項(xiàng)式輸入流程圖如圖1所示。</p><p> ?。?)測(cè)試要點(diǎn):輸入的多項(xiàng)式是否正確,若輸入錯(cuò)誤則重新輸入</p><p&
101、gt;<b> 2、多項(xiàng)式的加法</b></p><p> ?。?)功能:將兩多項(xiàng)式相加。</p><p> ?。?)數(shù)據(jù)流入:輸入函數(shù)。</p><p> ?。?)數(shù)據(jù)流出:多項(xiàng)式相加后的結(jié)果。</p><p> ?。?)程序流程圖:多項(xiàng)式的加法流程圖如圖2所示。</p><p> ?。?)測(cè)
102、試要點(diǎn):兩多項(xiàng)式是否為空,為空則提示重新輸入,否則,進(jìn)行運(yùn)算。</p><p><b> 圖表 2</b></p><p><b> 3、多項(xiàng)式的減法</b></p><p> (1)功能:將兩多項(xiàng)式相減。</p><p> ?。?)數(shù)據(jù)流入:調(diào)用輸入函數(shù)。</p><p&
103、gt; ?。?)數(shù)據(jù)流出:多項(xiàng)式相減后的結(jié)果。</p><p> ?。?)程序流程圖:多項(xiàng)式的減法流程圖如圖3所示。</p><p> ?。?)測(cè)試要點(diǎn):兩多項(xiàng)式是否為空,為空則提示重新輸入,否則,進(jìn)行運(yùn)算。</p><p><b> 詳細(xì)設(shè)計(jì) </b></p><p> #include<stdio.h&g
104、t;</p><p> #include<malloc.h></p><p> typedef struct Polynomial{</p><p> float coef;</p><p><b> int expn;</b></p><p> struct Polynom
105、ial *next;</p><p> }*Polyn,Polynomial; //Polyn為結(jié)點(diǎn)指針類(lèi)型</p><p> void Insert(Polyn p,Polyn h){ </p><p> if(p->coef==0) free(p); //系數(shù)為0的話釋放結(jié)點(diǎn)</p>&l
106、t;p><b> else{</b></p><p> Polyn q1,q2;</p><p> q1=h;q2=h->next;</p><p> while(q2&&p->expn<q2->expn){ //查找插入位置</p><p><b>
107、 q1=q2;</b></p><p> q2=q2->next;</p><p><b> }</b></p><p> if(q2&&p->expn==q2->expn){ //將指數(shù)相同相合并</p><p> q2->coef+=p->co
108、ef;</p><p><b> free(p);</b></p><p> if(!q2->coef){ //系數(shù)為0的話釋放結(jié)點(diǎn)</p><p> q1->next=q2->next;</p><p><b> free(q2);</b><
109、/p><p><b> }</b></p><p><b> }</b></p><p> else{ //指數(shù)為新時(shí)將結(jié)點(diǎn)插入</p><p> p->next=q2;</p><p> q1->next=
110、p;</p><p><b> }</b></p><p><b> }</b></p><p><b> }//Insert</b></p><p> Polyn CreatePolyn(Polyn head,int m){//建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元
111、多項(xiàng)式</p><p><b> int i;</b></p><p><b> Polyn p;</b></p><p> p=head=(Polyn)malloc(sizeof(struct Polynomial));</p><p> head->next=NULL;</p
112、><p> for(i=0;i<m;i++){</p><p> p=(Polyn)malloc(sizeof(struct Polynomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)</p><p> printf("qingshurudi%dxiangdexishuyuzhishu:",i+1);</p><p>
113、scanf("%f %d",&p->coef,&p->expn);</p><p> Insert(p,head); //調(diào)用Insert函數(shù)插入結(jié)點(diǎn)</p><p><b> }</b></p><p> return head;</p><p> }//Cr
114、eatePolyn</p><p> void DestroyPolyn(Polyn p){//銷(xiāo)毀多項(xiàng)式p</p><p> Polyn q1,q2;</p><p> q1=p->next;</p><p> q2=q1->next;</p><p> while(q1->next){&
115、lt;/p><p><b> free(q1);</b></p><p> q1=q2;//指針后移</p><p> q2=q2->next;</p><p><b> }</b></p><p><b> }</b></p>
116、<p> void PrintPolyn(Polyn P){ </p><p> Polyn q=P->next; </p><p> int flag=1;//項(xiàng)數(shù)計(jì)數(shù)器</p><p> if(!q) { //若多項(xiàng)式為空,輸出0</p><p> putchar('0'); </p>
117、;<p> printf("\n");</p><p><b> return;</b></p><p><b> } </b></p><p> while (q){</p><p> if(q->coef>0&&flag
118、!=1) putchar('+'); //系數(shù)大于0且不是第一項(xiàng)</p><p> if(q->coef!=1&&q->coef!=-1){//系數(shù)非1或-1的普通情況</p><p> printf("%g",q->coef); </p><p> if(q->expn==1) pu
119、tchar('X');</p><p> else if(q->expn) printf("X^%d",q->expn);</p><p><b> }</b></p><p><b> else{</b></p><p> if(q->
120、coef==1){</p><p> if(!q->expn) putchar('1'); </p><p> else if(q->expn==1) putchar('X'); </p><p> else printf("X^%d",q->expn);</p><p&
121、gt;<b> }</b></p><p> if(q->coef==-1){</p><p> if(!q->expn) printf("-1"); </p><p> else if(q->expn==1) printf("-X"); </p><p>
122、; else printf("-X^%d",q->expn);</p><p><b> }</b></p><p><b> }</b></p><p> q=q->next; </p><p><b> flag++;</b><
123、;/p><p><b> }//while</b></p><p> printf("\n");</p><p> }//PrintPolyn</p><p> int compare(Polyn a,Polyn b){</p><p><b> if(a&am
124、p;&b){</b></p><p> if(!b||a->expn>b->expn) return 1;</p><p> else if(!a||a->expn<b->expn) return -1;</p><p> else return 0;</p><p><b&
125、gt; }</b></p><p> else if(!a&&b) return -1;//a多項(xiàng)式已空,但b多項(xiàng)式非空</p><p> else return 1;//b多項(xiàng)式已空,但a多項(xiàng)式非空</p><p> }//compare</p><p> Polyn AddPolyn(Polyn pa
126、,Polyn pb){//求解并建立多項(xiàng)式a+b,返回其頭指針</p><p> Polyn qa=pa->next;</p><p> Polyn qb=pb->next;</p><p> Polyn headc,hc,qc;</p><p> hc=(Polyn)malloc(sizeof(struct Polyno
127、mial));//建立頭結(jié)點(diǎn)</p><p> hc->next=NULL;</p><p><b> headc=hc;</b></p><p> while(qa||qb){</p><p> qc=(Polyn)malloc(sizeof(struct Polynomial));</p>
128、<p> switch(compare(qa,qb)){</p><p><b> case 1:</b></p><p><b> {</b></p><p> qc->coef=qa->coef;</p><p> qc->expn=qa->expn
129、;</p><p> qa=qa->next;</p><p><b> break;</b></p><p><b> }</b></p><p><b> case 0:</b></p><p><b> { </b&
130、gt;</p><p> qc->coef=qa->coef+qb->coef;</p><p> qc->expn=qa->expn;</p><p> qa=qa->next;</p><p> qb=qb->next;</p><p><b> bre
131、ak;</b></p><p><b> }</b></p><p><b> case -1:</b></p><p><b> {</b></p><p> qc->coef=qb->coef;</p><p> q
132、c->expn=qb->expn;</p><p> qb=qb->next;</p><p><b> break;</b></p><p><b> } </b></p><p><b> }//switch</b></p><
133、p> if(qc->coef!=0){</p><p> qc->next=hc->next;</p><p> hc->next=qc;</p><p><b> hc=qc;</b></p><p><b> }</b></p><p&
134、gt; else free(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn)</p><p><b> }//while</b></p><p> return headc;</p><p> }//AddPolyn</p><p> Polyn SubtractPolyn(Polyn pa,Polyn pb){//求
135、解并建立多項(xiàng)式a+b,返回其頭指針</p><p> Polyn h=pb;</p><p> Polyn p=pb->next;</p><p><b> Polyn pd;</b></p><p> while(p){ //將pb的系數(shù)取反</p><p>
136、 p->coef*=-1;</p><p> p=p->next;</p><p><b> }</b></p><p> pd=AddPolyn(pa,h);</p><p> for(p=h->next;p;p=p->next) //恢復(fù)pb的系數(shù)</p><
137、p> p->coef*=-1;</p><p> return pd;</p><p> }//SubtractPolyn</p><p> int main(){</p><p> int m,n,flag=0;</p><p><b> float x;</b><
138、/p><p> Polyn pa=0,pb=0,pc,pd,pe,pf;//定義各式的頭指針,pa與pb在使用前付初值NULL</p><p> printf("qingshuruadexiangshu:");</p><p> scanf("%d",&m);</p><p> pa=Cre
139、atePolyn(pa,m);//建立多項(xiàng)式a</p><p> printf("qingshurubdexiangshu:");</p><p> scanf("%d",&n);</p><p> pb=CreatePolyn(pb,n);//建立多項(xiàng)式a</p><p><b&g
140、t; //輸出菜單</b></p><p> printf("**********************************************\n");</p><p> printf("caozuotishi:\n\t1.shuchuduoxiangshiaheb\n\t2.jianliduoxiangshia+b\n\t3.j
141、ianliduoxiangshia-b\n");</p><p> printf("\t4.tuichu\n**********************************************\n");</p><p> for(;;flag=0){</p><p> printf("zhixingcaozuo:
142、");</p><p> scanf("%d",&flag);</p><p> if(flag==1){</p><p> printf("duoxiangshia:");PrintPolyn(pa);</p><p> printf("duoxiangshib:&
143、quot;);PrintPolyn(pb);continue;</p><p><b> }</b></p><p> if(flag==2){</p><p> pc=AddPolyn(pa,pb);</p><p> printf("多項(xiàng)式a+b:");PrintPolyn(pc);<
144、;/p><p> DestroyPolyn(pc);continue;</p><p><b> }</b></p><p> if(flag==3){</p><p> pd=SubtractPolyn(pa,pb);</p><p> printf("duoxiangshia-
145、b:");PrintPolyn(pd);</p><p> DestroyPolyn(pd);continue;</p><p><b> }</b></p><p> if(flag==4) break;</p><p> if(flag<1||flag>4) printf("E
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 迷宮問(wèn)題——數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮問(wèn)題課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(迷宮問(wèn)題)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)迷宮問(wèn)題課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--迷宮
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--求解迷宮問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---迷宮問(wèn)題求解
- c數(shù)據(jù)結(jié)構(gòu)迷宮問(wèn)題課程設(shè)計(jì)
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)迷宮求解課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論