第一篇:C課程設計分油問題
《程序設計課程設計》報告
設計題目:分油問題
分油問題。現(xiàn)有3斤、7斤、10斤的油桶三個,前2個是空桶,10斤的油桶裝滿了油,現(xiàn)要求借助這些桶分出二個5斤的油于油桶中,問:
1、應如何倒法?
2、將油從一個桶倒入另一個桶稱為一次操作,如果限制倒油的總次數(shù)為N,程序怎么編寫?
3、能否找出所需的最少次數(shù)?
注意倒油的規(guī)則:
1、只能使用這些油桶;
2、倒油時,要么把自己倒空,要么把目標桶倒?jié)M。
一、設計任務
寫明設計題目的具體任務內(nèi)容及要求。
二、設計目的
本課程設計主要訓練學生在C/C++語言迭代遞歸方面應用能力。
三、功能描述
簡要給出程序的幾個模塊功能的文字說明及總體結(jié)構(gòu)圖。
四、總體設計
1、功能模塊設計
具體介紹主函數(shù)及各個模塊的構(gòu)成及功能
2、數(shù)據(jù)結(jié)構(gòu)設計
具體介紹本程序中關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)
3、函數(shù)功能描述
對自定義函數(shù)給出返值形式的簡介。
五、程序?qū)崿F(xiàn)
1、源碼分析
對預處理、主函數(shù)、主菜單、各模塊的程序代碼列出,適當給與行尾注釋 #include
#define Max 100
struct Total { int Array[Max];//倒油路徑
int number;//倒油次數(shù)
};
int values[Max];//狀態(tài)數(shù)組
int Species[Max][Max];int N=0;int M=0;Total Possiblity[Max];
int min(int a,int b)//比較兩者大小并返回最小值
{ if(a>b)return b;else return a;}
int ContainN(int n,int i)//判斷values數(shù)組中是否含有n { for(int j=0;j<=i;j++){ if(values[j]==n)
return 1;} return 0;}
void Strcpy(int a[],int b[],int n)//拷貝a到b { for(int i=0;i<=n;i++)b[i]=a[i];}
void f(int a,int b,int c,int d[],int M)//獲得倒油過程
{ int x;int e[Max];int n=a*100+b*10+c;if(n==55){
for(int j=0;j Species[N][j]=d[j];//拷貝 N++;} else if(ContainN(n,M))//遇到有相同狀態(tài)就返回重新選擇 return;else { 桶 values[M]=n;d[M]=n;M++;Strcpy(d,e,M);if(a<3) //a桶容量為3,b桶容量為7,c桶容量為10 { if(b>0)//若a,b桶內(nèi)油體積大于3,則將b桶內(nèi)油倒出使a桶滿 { x=min(3-a,b);//若a,b桶內(nèi)油體積小于3,則將b桶內(nèi)油全部倒出,倒進a桶 f(a+x,b-x,c,e,M);} if(c>0)//若a,c桶內(nèi)油體積大于3,則將b桶內(nèi)油倒出使a桶滿 { x=min(3-a,c);//若a,c桶內(nèi)油體積小于3,則將b桶內(nèi)油全部倒出,倒進a桶 f(a+x,b,c-x,e,M);} } if(b<7){ if(a>0)//若a,b桶內(nèi)油體積大于7,則將a桶內(nèi)油倒出使b桶滿 { x=min(7-b,a);//若a,b桶內(nèi)油體積小于7,則將a桶內(nèi)油全部倒出,倒進b桶 f(a-x,b+x,c,e,M);} if(c>0)//若b,c桶內(nèi)油體積大于7,則將c桶內(nèi)油倒出使b桶滿 { x=min(7-b,c);//若b,c桶內(nèi)油體積小于7,則將c桶內(nèi)油全部倒出,倒進b桶 f(a,b+x,c-x,e,M); } } if(c<10){ if(a>0)//若a,c桶內(nèi)油體積大于10,則將a桶內(nèi)油倒出使c桶滿 { x=min(10-c,a);//若a,c桶內(nèi)油體積小于10,則將a桶內(nèi)油全部倒出,倒進c桶 f(a-x,b,c+x,e,M);} if(b>0)//若b,c桶內(nèi)油體積大于10,則將b桶內(nèi)油倒出使c桶滿 { x=min(10-c,b);//若b,c桶內(nèi)油體積小于10,則將b桶內(nèi)油全部倒出,倒進c } } f(a,b-x,c+x,e,M); } } void DispAll()//輸出各種可能的情況 { int i;for(i=0;i { Possiblity[M].Array[j]=Species[i][j]; cout< j++;} Possiblity[M].number=j;M++;} } int Disp(int a)//符合限制條件的輸出 { int m=0;cout<<“符合條件的有:”;for(int i=0;i cout< for(int j=0;j cout< m++;} } if(!m)cout<<“倒油不能使容量分別為7,10升的油桶中的體積為5,5”< int LeastNumber()//求倒油次數(shù)最少的步驟 { int a[M];for(int i=0;i int Min=Possiblity[0].number;for(int m=1;m Min=Possiblity[m].number;} return Min;} void DispLeast()//最少倒油次數(shù)的輸出 { int m=LeastNumber();cout< for(int j=0;j cout< p[i]=0;f(0,0,10,p,0);cout<<“除第一位數(shù)字表示為容量10升桶中油的體積”< 2、運行結(jié)果及界面介紹 設計輸入數(shù)據(jù),給出輸出結(jié)果及界面反映 簡述三菱PLC的編程元件。初始化狀態(tài)寄存器哪幾個? .交通信號燈的閃爍是如何實現(xiàn)的? 交通信號燈的閃爍是如何實現(xiàn)的? 簡述順序功能圖的要素。 初始狀態(tài)應該注意什么,需完成哪些動作? 簡述PLC輸出單元的類型。 畫出并行分支與匯合。 若需將黃燈閃爍規(guī)律由亮0.5秒、暗0.5秒改為亮0.6秒、暗0.4秒,程序?qū)⑷绾胃膭樱?PLC的編程元件有哪幾種?在組態(tài)王中如何實現(xiàn)輸出? 畫出選擇分支與匯合。 簡述M8011~M8012、M8002的用途。簡述組態(tài)王與PLC通信的特點。簡述S0~S9、S10~s19的用途。 簡述計數(shù)器的類型及使用特點。 簡述PLC的一個掃描周期有哪幾個階段? 畫出選擇分支與匯合。定時器的類型有哪些? 一般如何劃分小型PLC、中型PLC、大型PLC?該課程設計中PLC所選的是什么類型? 如何在組態(tài)王中定義輸入輸出與PLC進行關(guān)聯(lián)? 計數(shù)器的類型及使用特點是什么? 說明步進順控指令、返回指令及應用特點。簡述FX1NPLC與組態(tài)王通信的數(shù)據(jù)格式。簡述區(qū)間復位指令及用途。在組態(tài)王中如何定義變量? 簡述順序簡述PLC的輸出類型及應用場合。功能圖的5大要素及應用特點。寫出顯示字符3的代碼。 簡述組態(tài)王與PLC通信的特點。 簡述PLC的一個掃描周期有哪幾個階段? 示意畫出并聯(lián)電路塊。 數(shù)碼管顯示如何實現(xiàn)? 怎樣設置PLC與組態(tài)王的通信? 定時器T0的時基是多少?積算定時器與通用定時器的區(qū)別是什么? 控制程序中如何實現(xiàn)定向上行的? 電梯控制中清除召喚登記的條件是什么? 簡述M8011~M8014的用途。 PLC的編程元件有哪幾種?在組態(tài)王中如何實現(xiàn)輸入與輸出? 控制程序中如何實現(xiàn)定向下行的? 組態(tài)王中的變量類型有哪幾種?各有何特點? 如何檢測樓層到位信號? 簡述PLC的選型依據(jù)。多個換刀信號如何實現(xiàn)互鎖? 示意繪制輸出接線圖。 組態(tài)王中如何設置輸入與輸出? 簡述PLC輸出單元的類型及特點。 解釋MOV K4 D2的含義?簡述MOV與DMOV的區(qū)別。組態(tài)王中的輸出變量如何定義? 定時器的種類有哪些?各有何特點? 功能指令的要素有哪幾個? 簡述組態(tài)王與PLC通信的數(shù)據(jù)格式。示意繪制PLC的輸入接線圖。示意畫出比較指令的梯形圖。 在組態(tài)王中怎樣將輸入、輸出與PLC進行聯(lián)系? 如何實現(xiàn)換刀過程中其他請求信號無效? 簡述三菱PLC輸入與輸出元件的編碼方式。 在組態(tài)王中設定的采樣時間為多少?該如何設置? 如何實現(xiàn)刀具按照最近方向轉(zhuǎn)動換刀? 簡述FX1N-40MR中R的含義,PLC輸出的方式有哪幾種? 解釋MOV K6 D2的含義?功能指令的要素有哪幾個? 如何實現(xiàn)換刀過程中其他請求信號無效? FX1N-40MR中定時器有多少個? 刀盤逆轉(zhuǎn)的條件是什么? 多個換刀信號如何實現(xiàn)互鎖? 簡述PLC選型依據(jù)。如何顯示字符“5”? 數(shù)碼管顯示如何實現(xiàn)? 寫出功能指令:加法、減法。 講解梯形圖。 在該系統(tǒng)中,如何實現(xiàn)多種工作方式的選擇? 簡述三菱PLC的編程元件。簡述PLC選型依據(jù)。 系統(tǒng)外部接線圖中有哪些互鎖保護?如何實現(xiàn)? 簡述本系統(tǒng)的工作原理。 簡述M8044、M8041的作用。 手動運行如何實現(xiàn),有哪些注意事項? PLC輸出的方式有哪幾種?各有何特點? 簡述M8043、M8002的作用。 在該系統(tǒng)中,單周期方式如何實現(xiàn)? 簡述PLC的組成。 簡述功能指令I(lǐng)ST的作用及使用注意事項。自動運行如何實現(xiàn),有哪些注意事項? 簡述PLC的工作方式。 初始化狀態(tài)寄存器哪幾個?簡述區(qū)間復位指令及用途。 示意繪制輸出回路的接線圖。 PLC常用哪幾種存儲器?它們各有什么特點?分別用來存儲什么信息? 定時器T0的時基是多少?積算定時器與通用定時器的區(qū)別是什么? 輸出時為何要進行互鎖? 狀態(tài)轉(zhuǎn)移圖(順序功能圖)結(jié)構(gòu)上包含哪些組成部分?轉(zhuǎn)換實現(xiàn)的兩個條件是什么? 簡述三菱PLC輸入與輸出元件的編碼方式,K和H的含義? 可采用哪幾種方式控制Y0的輸出? 簡述IST的用法? 簡述M8044、M8041的作用。單周期方式如何實現(xiàn)? PLC采用什么工作方式?其執(zhí)行用戶程序的過程可分為哪三個階段,并簡要說明三個階段的主要工作。 簡述M8043、M8002的作用。如何實現(xiàn)多種工作方式的選擇? 定時器T200的定時時間的范圍是多大?若設定值為 K50,T0的常閉觸點如何動作?如何可以實現(xiàn)更長時間的延時? 簡述順序功能圖的五個組成要素,以及實現(xiàn)轉(zhuǎn)換時應具備的兩個條件。如何在組態(tài)王中控制發(fā)送給PLC的脈沖量? 如何控制步進電機的轉(zhuǎn)速從而控制前進速度? T37定時時基為多少?畫出定時25s的梯形圖? 兩個步進電機是如何同時驅(qū)動的? 在組態(tài)王中如何控制PLC的輸入與輸出? PLC如何控制步進電機的正反轉(zhuǎn)? 示意繪制出PLC與步進驅(qū)動器的連線圖。組態(tài)王中變量的類型有哪幾種? 如何通過PLC控制步進電機的加減速運動? 繪制用S7-200發(fā)脈沖的梯形圖? 計數(shù)器有哪幾種類型?畫出梯形圖? 如何進行S7-200與組態(tài)王的連接? 簡述PLC的常用編程元件? S7-200的變量單元有哪幾種? 組態(tài)王如何與PLC進行通信? 步進驅(qū)動器的作用?示意畫出驅(qū)動器與PLC的連線圖。步進電機加減速控制曲線有哪些? 如何實現(xiàn)高速脈沖串的輸出? 西門子PLC的基本邏輯指令有哪些? 簡述定時器的類型及使用特點? 該系統(tǒng)中,用到哪些特殊寄存器? PWM的含義?PTO的用途? 簡述子程序編程的特點。 數(shù)據(jù)傳送的類型有哪些? 簡述采用步進電機繪制圓弧時的編程思路。簡述PLC的工作方式及工作過程。 步進電機的步距角怎樣計算?脈動當量如何計算? 簡述三菱PLC的編程元件。 定時器T100的定時時間的范圍是多大?若設定值為 K50,T0的常閉觸點如何動作?如何可以實現(xiàn)更長時間的延時? 為何設定反轉(zhuǎn)時間為1.5s? 簡述三菱PLC輸入與輸出元件的編碼方式。 PLC常用哪幾種存儲器?它們各有什么特點?分別用來存儲什么信息? 定時器T0的時基是多少?積算定時器與通用定時器的區(qū)別是什么? 簡述PLC輸出單元的類型。 簡述PLC的一個掃描周期有哪幾個階段? 如何顯示字符“3”? 簡述順序功能圖的要素。 簡述三菱PLC的常用編程元件。 解釋MOV K3 D1的含義?功能指令的要素有哪幾個? 示意繪制輸出回路的接線圖。簡述顯示數(shù)字的編程思路。畫出比較指令梯形圖。 簡述顯示數(shù)字的編程思路。 組態(tài)王中變量的類型有哪幾種?如何定義輸入與輸出? 簡述編程元件的類型及使用特點。 解釋MOV K2 D1的含義?功能指令的要素有哪幾個? 畫出比較指令梯形圖。 組態(tài)王的當前畫面如何定義? 怎樣定義組態(tài)王與PLC的通信協(xié)議? 該在組態(tài)王中如何設置采樣頻率?該系統(tǒng)的采樣頻率為多少? 簡述三菱PLC的編程元件及常用編程元件的編碼形式。簡述PLC的一個掃描周期有哪幾個階段? 示意繪制顯示符號“3”,簡述顯示的基本原理? 在組態(tài)王中如何將輸入輸出與PLC進行關(guān)聯(lián)? 組態(tài)王中的變量類型各有何特點? 為何設置反轉(zhuǎn)時間為1.5s? 如何設置組態(tài)王與PLC的連接? 分類號編號 華北水利水電大學 North China Institute of Water Conservancy and Hydroelectric Power 課程設計 題目舞伴問題 院系信息工程學院 專業(yè)計算機科學與技術(shù) 姓名賈寧 指導教師楊彬 第一章需求分析........................................................................................................................2 1.1問題描述......................................................................................................................2 1.2 基本要求.....................................................................................................................2 1.2.1 輸入及輸出格式..............................................................................................2 1.2.2 程序所完成的功能..........................................................................................2 第二章概要設計........................................................................................................................3 2.1 數(shù)據(jù)結(jié)構(gòu).....................................................................................................................3 2.2 程序模塊.....................................................................................................................4 2.3 模塊調(diào)用及算法.........................................................................................................5 第三章詳細設計........................................................................................................................7 3.1 操作實現(xiàn).............................................................................................................7 3.2 算法實現(xiàn).............................................................................................................8 第四章編碼調(diào)試......................................................................................................................10 4.1 調(diào)試環(huán)境...................................................................................................................10 4.2 調(diào)試方法...................................................................................................................10 4.3 調(diào)試項目及調(diào)試結(jié)果...............................................................................................10 4.3.1 登陸測試........................................................................................................10 4.3.2 加載學生信息................................................................................................11 4.3.3 學生配對調(diào)試................................................................................................12 4.3.4 顯示總配對....................................................................................................13 4.3.5 查詢配對........................................................................................................13 第五章總結(jié)..............................................................................................................................15 參考文獻..................................................................................................................................16 附錄系統(tǒng)源代碼......................................................................................................................17 第一章需求分析 1.1問題描述 一班有m個女生、n個男生(m不等于n), 舉辦一場舞會.男女生分別編號坐在舞池兩邊的椅子上,每曲開始時, 依次從男生和女生中各出一人配對跳舞, 本曲沒成功配對者坐著等待下一曲找舞伴,設計一個程序模擬舞伴配對過程。 1.2 基本要求 1.2.1 輸入及輸出格式 輸入男、女學生的姓名、性別,由程序自動為男女生編號,可以順序編號,也可以隨機編號,輸出每曲配對情況(包括男、女生的姓名、性別和編號)。原始數(shù)據(jù)和結(jié)果數(shù)據(jù)要保存到文件中。在讀入男女生信息時,可以從文件中直接讀取學生的姓名和性別信息。 輸出顯示時顯示每首歌的配對情況,包括對應配對學生的姓名、性別以及編號??梢暂敵稣麄€舞池配對過程的所有配對情況。將輸出顯示的內(nèi)容對應寫入到指定的文件中。 1.2.2 程序所完成的功能 從文件或者手動輸入班級的學生信息,包括姓名和性別基本信息,根據(jù)性別使男女生分別坐在舞池兩邊的座位上,學生的座位編號順序生成,且一旦編號確定,將不再發(fā)生變化。 每一首歌曲播放時,依次從男女生隊列中出來學生進行配對,由于男女生人數(shù)不一致,會使某個隊列中剩下若干學生配對不成功,配對不成功者等待下首歌時再進行配對。該首歌結(jié)束時,配對成功的學生再回到座位上。然后再依次進行配對,未成功者等待下首歌再進行配對。 配對成功時,會顯示本首歌的詳細配對情況,以及整個過程的配對情況,并且可以將配對情況寫入到文件。 根據(jù)男女生的姓名或者某首歌曲的名字可以查詢到對應的配對情況。 第二章概要設計 2.1 數(shù)據(jù)結(jié)構(gòu) 學生座位隊列: ADT StuQueue{ 數(shù)據(jù)對象:D={ ai|ai∈ElemSet,i=1,2..n;n≥0 } 數(shù)據(jù)關(guān)系:R={ 操作結(jié)果:向Q中循環(huán)加入信息 void EnQueue2(StuQueue&Q,FinalStustu)初始條件:循環(huán)隊列已存在,非首次進循環(huán)隊列 操作結(jié)果:向Q中添加信息 FinalStuDeQueue(StuQueue&Q)初始條件:循環(huán)隊列已存在 操作結(jié)果:使隊列頭的元素出隊列,且返回FinalStu類型值 }ADT StuQueue //學生座位隊列 音樂隊列: ADTMusicList{ 數(shù)據(jù)對象:D={ ai|ai∈ElemSet,i=1,2..n;n≥0 } 數(shù)據(jù)關(guān)系:R={ voidInsertMusic(MusicList&MList,char* name)初始條件:該鏈表已存在 操作結(jié)果:向鏈表中添加數(shù)據(jù) }ADT MusicList; 臨時隊列: ADTTempQList{ 數(shù)據(jù)對象:D={ ai|ai∈ElemSet,i=1,2..n;n≥0 } 數(shù)據(jù)關(guān)系:R={ voidEnTempQueue(TempQList&TQL,FinalStustu)初始條件:隊列TQL已存在操作結(jié)果:向TQL中添加信息 FinalStuDeTempQueue(TempQList&TQL)初始條件:隊列TQL存在 操作結(jié)果:取出隊列的對頭元素,返回FinalStu類型 }ADT TempQList; 2.2 程序模塊 本系統(tǒng)主要包括登陸模塊、學生入座、自動配對、顯示配對過程以及查詢配對信息模塊。 登陸:輸入正確的用戶名以及密碼,方可進入系統(tǒng),連續(xù)輸入錯誤三次則禁止進入系統(tǒng)。 學生入座:以不同的方式獲取學生信息后,根據(jù)學生性別依次進入兩個循環(huán)隊列,并為每個學生唯一編號。 自動配對:每首歌開始時,男女生依次從坐席中出來進行本首歌的配對,配對不成功者等待下首歌繼續(xù)配對,下首歌時,上首歌未配對成功者本首歌先進行配對。 顯示配對過程:在播放歌曲的過程中,顯示播放的歌曲信息,以及本首歌的配對信息。 查詢配對:根據(jù)男女生的姓名查出兩人的在哪一首歌進行過配對,根據(jù)歌曲名稱查詢出本首歌的配對信息。 文件操作:將配對情況及學生的座位信息寫入文件 根據(jù)系統(tǒng)模塊的劃分,本系統(tǒng)的功能模塊圖如圖2-1所示 舞池配對系統(tǒng)登陸學生入座自動配對顯示配對過程查詢配對結(jié)果 圖 2-1 功能模塊 2.3 模塊調(diào)用及算法 登陸成功后進入主界面,進入主界面后,需要先運行學生入座模塊,方能進行下邊的操作。學生入座后會得到相關(guān)的基本信息。之后調(diào)用配對模塊函數(shù),進行學生的配對。學生配對成功后,才能利用顯示配對過程進行顯示配對的情況,后續(xù)的查詢配對模塊也必須在配對成功的基礎(chǔ)上進行。模塊間的調(diào)用流程如圖2-2所示 主函數(shù)登陸函數(shù)入座模塊配對模塊顯示配對查詢結(jié)果 圖 2-2 模塊調(diào)用 在進行配對過程中用到算法,在每首歌配對時,依次從男女生隊列中出來一個學生,進入到臨時隊列,從臨時隊列中獲取配對的情況。在本首歌結(jié)束,下首歌開始之前,讓臨時隊列中的男女在分別根據(jù)性別入隊,依次循環(huán),每次調(diào)用配對函數(shù),實現(xiàn)學生的循環(huán)配對。 第三章詳細設計 3.1 操作實現(xiàn) 本系統(tǒng)包含七個文件。設計分有歡迎界面,登陸系統(tǒng),入隊函數(shù),配對函數(shù),顯示函數(shù),查詢函數(shù)等。登陸界面是整個系統(tǒng)的入口,其主要是讓合法人員進入系統(tǒng),入隊函數(shù)主要讓學生進入男女隊列,配對函數(shù)主要是根據(jù)每首歌曲把男女生進行配對,顯示函數(shù)主要是顯示男女生的配對情況,查詢函數(shù)主要是根據(jù)男女生姓名和歌曲名查找配對情況。 系統(tǒng)首先通過程序調(diào)用void main()進入歡迎界面和系統(tǒng)登陸界面,根據(jù)用戶的帳號和密碼登陸成功后進入主菜單。根據(jù)用戶的選擇可分別進入:1.學生就坐;2.每曲配對;3.顯示結(jié)果;4.查詢配對;5.退出。 選擇“1.學生就坐”項,會顯示學生信息來源,包括“1.按班級獲取(推薦)”“2.手動輸入...”兩項可供選擇。其中,1是從文件中獲取學生信息,2是用戶手動輸入學生信息。 選擇“2.每曲配對”項,會顯示播放歌曲的類型,有“1.流行”“2.復古”兩個音樂風格可供選擇,當用戶選擇其中一個風格并確定播放后,會顯示出當前播放的歌曲名字和所配對的男女生。 選擇“3.顯示結(jié)果”項,會有“1.學生座位信息”和“2.學生配對信息”兩項操作可供選擇。當選擇1,會把學生就坐后的信息顯示出來,選擇2,會把每首歌學生的配對情況顯示出來。 選擇“4.查詢配對”項,也有兩個操作可供選擇,分別是“1.按學生姓名”“按歌曲名”兩項。選擇1,會根據(jù)用戶輸入的男女生姓名查看他們的配對情況,選擇2,會根據(jù)用戶輸入的歌曲名稱顯示每首歌曲學生的配對情況。 選擇“5.退出”項,會出現(xiàn)感謝使用系統(tǒng)界面,并按任意鍵退出系統(tǒng)。本系統(tǒng)的主流程圖如圖3-1 所示 開始歡迎和登陸界面主界面1 ?NN2 ?N3 ?N4 ?N5 ?Y結(jié)束程序Y學生就坐Y每曲配對Y每曲配對顯示Y查詢配對情況 圖 3-1 主流程 3.2 算法實現(xiàn) 定義學生結(jié)構(gòu)體FinalStu,將學生的信息放到本結(jié)構(gòu)體中,定義兩個循環(huán)隊列Boys和Girls隊列,分別存儲男女生的座位信息。定義MusicList循環(huán)鏈表,用于存放音樂信息。定義TempQueue隊列,用于臨時存放從男女生隊列中出來的學生信息。創(chuàng)建一個存放每首歌配對情況的數(shù)組stuTable[],用來存放播放該首歌曲時男女生的信息。 每一首歌開始時,男女生依次用Boys和Girls隊列中出對,依次進入臨時隊列TempQueue,從TempQueue中讀取男女生的信息,放到stuTable數(shù)組中,表示該首歌的 8 配對情況。下首歌開始時,讓臨時隊列中的學生再根據(jù)性別依次進入男女循環(huán)隊列。同時將存放歌曲的MusicList循環(huán)鏈表指針后移,播放下首歌曲,再執(zhí)行上述操作,便可實現(xiàn)循環(huán)配對。 第四章編碼調(diào)試 4.1 調(diào)試環(huán)境 硬件環(huán)境:Intel 1GHZ處理器(或AMD同類處理器),512M或以上內(nèi)存容量,10G或以上硬盤容量,可連接互聯(lián)網(wǎng)的相關(guān)設備。 軟件環(huán)境(軟件、操作系統(tǒng)):Windows XP(或Windows 2003或Windows vista或Windows 7)操作系統(tǒng),Microsoft Visual Studio 2008。 4.2 調(diào)試方法 為了提高測試效率,降低測試成本,本測試方案采用黑盒法設計基本的測試方案,再用白盒法補充一些方案。在黑盒法測試方案中,采用等價劃分技術(shù),把所有可能的數(shù)據(jù)劃分成幾個等價類。 4.3 調(diào)試項目及調(diào)試結(jié)果 4.3.1 登陸測試 用戶根據(jù)用戶名及密碼登陸系統(tǒng),內(nèi)置用戶為Admin,密碼為888888。登陸成功如圖4-1所示,登陸失敗如圖4-2所示 圖 4-1 登陸成功 圖 4-2 登陸失敗 4.3.2 加載學生信息 可以從文件或者手動輸入學生信息,從文件中選擇時,可以選擇不同的文件,其運行結(jié)果如圖4-2 及圖4-3 所示 圖 4-3 選擇信息來源 圖 4-4 顯示獲取信息 4.3.3 學生配對調(diào)試 在進行配對之前,需要先將音樂信息加載到系統(tǒng)中,其加載過程如圖4-5所示 圖 4-5 加載音樂 學生就位及音樂加載成功后,開始播放音樂,并進行配對,其音樂播放情況及每首歌曲的配對情況如圖4- 6、圖4-7及圖4-8所示 圖 4-6 配對開始 圖 4-7 播放下一首 圖 4-8 循環(huán)配對 4.3.4 顯示總配對 在整個過程結(jié)束后,停止播放音樂,可以顯示整個過程的配對情況,其結(jié)果如圖4-9所示 圖 4-9 顯示配對結(jié)果 4.3.5 查詢配對 可以根據(jù)男女生的姓名查詢兩人的配對情況,當輸入兩個學生姓名時,顯示在整個過程中的配對情況,其結(jié)果如圖 4-10所示 圖4-10 姓名查詢配對 根據(jù)每一首歌曲情況查詢在本首歌曲中的配對情況,其結(jié)果如圖4-11 所示 圖 4-11 按歌名查找 第五章總結(jié) 這次的課程設計懂得了理論與實際相結(jié)合是很非常重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為,從而提高自己的實際動手能力和獨立思考的能力。在整個設計過程中,構(gòu)思是很花費時間的,在構(gòu)思總體架構(gòu)時,需要先將需求分析搞清楚,需要在找到了需要解決的問題后,再想辦法解決該問題。而不是在設計過程中邊想邊解決,需要先將所有可能的問題都考慮到,再依次解決。在整個系統(tǒng)設計完成后,如果再遇到新的問題,可以對系統(tǒng)進行適當?shù)母隆?/p> 調(diào)試時經(jīng)常會遇到這樣那樣的錯誤,有的時候是因為一些最基本的錯誤,如標點的中英錯誤,括號的匹配問題,數(shù)據(jù)的輸入錯誤等。當然,也有很多地方是因為用錯了解決方法。在設計的過程中,最能體現(xiàn)出的缺點就是基礎(chǔ)不扎實,本可以避免的錯誤卻一再出現(xiàn)。 在實現(xiàn)舞池配對問題過程中,需要使學生循環(huán)配對,此程序設計的是當一個光盤的音樂播放結(jié)束時,整個配對過程隨之結(jié)束,而沒有讓學生再次進去坐席,導致不再從新將學生入座,就無法實現(xiàn)配對。設計的是在每首歌開始之前學生進入隊列,可以改為當某個學生坐席為空時,隨即讓學生再次進入隊列,可以解決不能重復換歌曲的問題。 剛開始的時候我直接在開發(fā)環(huán)境下一邊看題一邊寫代碼,瞪了半天什么也沒寫出來,于是我便先開始在紙上畫畫寫寫,將事件的整個過程畫下來,然后考慮怎么才能運用代碼來實現(xiàn),一邊思考一邊寫一些粗略的代碼,最后從上到下執(zhí)行代碼看看是不是符合題目要求。有沒有什么漏洞。等這些完成以后,再在開發(fā)環(huán)境下將代碼完善、編譯和調(diào)試。雖然說代碼還有許多要改進的地方,有的功能還不夠完善,可畢竟是自己親自寫出來的,對于程序的條理有了一個清晰的了解,對編程也有了更加深刻的認識。 參考文獻 [1] 譚浩強.C程序設計(第三版)[M].北京:清華大學出版社,2005.[2] 嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學出版社,1997.[3] 陸麗娜.軟件工程.北京:經(jīng)濟科學出版社,2005.[4] 姚詩斌.數(shù)據(jù)庫系統(tǒng)基礎(chǔ).計算機工程與應用,1981年第8期 附錄系統(tǒng)源代碼 #include int idCount=1000;//全局變量控制學生id自增 int length;//記錄每首歌配對的數(shù)量 int index=0;//記錄最終配對表的下標 usingnamespace std;//舞池就坐后的學生信息結(jié)構(gòu)體 struct Admin { char name[15];char passWord[15];Admin *next;};Admin *admin;struct FinalStu { char name[15];char sex[3];int id;};FinalStu stu[STU_SIZE];FinalStu stuSeat[STU_SIZE];//用來存放入座后的學生信息 FinalStu stuTable[STU_SIZE][2];//用來存放沒收歌曲的配對情況 //舞池座位 struct StuQueue { FinalStu *base;int front;int rear;};StuQueue Boys;//男生隊列 StuQueue Girls;//女生隊列 //初始化學生坐席 void InitQueue(StuQueue &Q){ Q.base=(FinalStu*)malloc(MAXQSIZE*sizeof(FinalStu));if(Q.base==NULL) return;Q.front=Q.rear=0; } //學生就坐,首次入隊,需要獲取學生的id void EnQueue(StuQueue &Q,FinalStu stu){ int i=100;if((Q.rear+1)%MAXQSIZE==Q.front) return;strcpy(Q.base[Q.rear].name,stu.name);strcpy(Q.base[Q.rear].sex,stu.sex);Q.base[Q.rear].id=idCount++;Q.rear=(Q.rear+1)%MAXQSIZE;} //非首次入隊,不需獲取學生的id void EnQueue2(StuQueue &Q,FinalStu stu){ strcpy(Q.base[Q.rear].name,stu.name);strcpy(Q.base[Q.rear].sex,stu.sex);Q.base[Q.rear].id=stu.id;Q.rear=(Q.rear+1)%MAXQSIZE;} //從坐席上出來 FinalStu DeQueue(StuQueue &Q){ FinalStu stu;if(Q.rear!=Q.front){ stu=Q.base[Q.front];} Q.front=(Q.front+1)%MAXQSIZE;return stu;} //存放音樂信息 struct Music { char M_Name[15];Music *next;};//存放音樂鏈,循環(huán)鏈表 struct MusicList { Music *head; Music *tail;};MusicList ML;Music *M_p;//初始化指針 void InitMusic(MusicList & MList){ MList.head=MList.tail=(Music *)malloc(sizeof(Music));MList.head->next=NULL;} //向音樂鏈表中添加音樂 void InsertMusic(MusicList &MList,char* name){ Music *p=(Music*)malloc(sizeof(Music));MList.tail->next=p;strcpy(p->M_Name,name);MList.tail=p;MList.tail->next=MList.head;} //臨時隊列,用于存放從男女生隊列中配對成成功的學生信息 struct TempQueue { FinalStu stu;TempQueue * next;}; struct TempQList { TempQueue *front;TempQueue *rear;};TempQList TempQL;//臨時隊列,用于存放每次出來的男女生信息 void InitQList(TempQList &TQL){ TQL.front=TQL.rear=(TempQueue *)malloc(sizeof(TempQueue));TQL.front->next=NULL;} void EnTempQueue(TempQList & TQL,FinalStu stu){ TempQueue *p=(TempQueue *)malloc(sizeof(TempQueue));p->stu=stu;p->next=NULL;TQL.rear->next=p;TQL.rear=p;} FinalStu DeTempQueue(TempQList &TQL){ FinalStu stu;TempQueue *p;p=TQL.front->next;if(p==TQL.rear){ stu=p->stu; TQL.rear=TQL.front;} else { stu=p->stu; TQL.front->next=p->next;} free(p);return stu;} //==========配對信息存放=================== struct MatchList { char musicName[20];FinalStu stu[2];};MatchList matchTable[SIZE];//從鍵盤讀入學生信息 void GetInfKey(){ for(int i=0;i cout<<“輸入第”< scanf(“%s”,stu[i].name); cout<<“輸入第”< scanf(“%s”,stu[i].sex);} } //學生入座 void StudentSit(){ for(int i=0;i if(strcmp(stu[i].sex,“男”)==0) EnQueue(Boys,stu[i]); else EnQueue(Girls,stu[i]);} } //獲取就坐后的男女生性別、姓名、編號,stuSeat[] 存放就坐后的學生信息,包括學生編號 void GetStuSeat(){ int i=0; int j=0;i=Boys.front;j=Girls.front; while(i!=Boys.rear){ stuSeat[i]=Boys.base[i]; i++;} while(j!=Girls.rear){ stuSeat[i]=Girls.base[j]; j++; i++;} } //將就座的學生信息寫入文件 int InFileStuSeat(){ FILE *fp_Seat;int res=0;if((fp_Seat=fopen(“Seat.txt”,“wt”))==NULL){ cout<<“讀取學生座位信息失?。?!”; return-1;} fprintf(fp_Seat,“姓名t性別t序號n”);for(int i=0;i fprintf(fp_Seat,“%st%st%d”,stuSeat[i].name,stuSeat[i].sex,stuSeat[i].id); fprintf(fp_Seat,“n”); res++;} fclose(fp_Seat);return res;} void PrintStuSeat(){ cout<<“ttt姓名t性別t序號”< cout<<“ttt”< cout< cout<<“打開文件失?。?!”; return;} while(!feof(fp_Admin)){ Admin *p=(Admin *)malloc(sizeof(Admin)); p->next=NULL; fscanf(fp_Admin,“%s%s”,p->name,p->passWord); q->next=p; q=p;} fclose(fp_Admin);} //從文件獲取學生信息 void ReadStuFile(int res){ FILE *fp;if(res==1){ if((fp=fopen(“student1.txt”,“rt”))==NULL) { cout<<“打開文件失敗??!”< return; } } elseif(res==2){ if((fp=fopen(“student2.txt”,“rt”))==NULL) { cout<<“打開文件失敗??!”< return; } } int i=0;while(!feof(fp)) { fscanf(fp,“%s%s”,stu[i].name,stu[i].sex); i++; if(i>=STU_SIZE) break; } fclose(fp);} //加載音樂信息 int LoadMusic(int cd){ char music[5][20];//存放從文件中獲取的音樂名稱 int res=0;FILE *fp_music;if(cd==1){ if((fp_music=fopen(“music1.txt”,“rt”))==NULL) { cout<<“打開音樂文件失敗??!”< return-1; } } elseif(cd==2){ if((fp_music=fopen(“music2.txt”,“rt”))==NULL) { cout<<“打開音樂文件失?。?!”< return-1; } } for(int j=0;j<5;j++){ if(fread(music[j],20*sizeof(char),1,fp_music)==1) res++; } fclose(fp_music);InitMusic(ML);for(int i=0;i<5;i++){ InsertMusic(ML,music[i]);} return res;} int InFileMatchTable(){ FILE *fp_MTable;if((fp_MTable=fopen(“matchtable.txt”,“wt”))==NULL){ cout<<“打開文件失敗~~~~”< return-1;} fprintf(fp_MTable,“歌曲名稱t姓名t性別t序號t姓名t性別t序號n”);for(int i=0;i fprintf(fp_MTable,“%stt%st%st%dt”,matchTable[i].musicName,matchTable[i].stu[0].name,matchTable[i].stu[0].sex,matchTable[i].stu[0].id); fprintf(fp_MTable,“%st%st%dn”,matchTable[i].stu[1].name,matchTable[i].stu[1].sex,matchTable[i].stu[1].id);} fclose(fp_MTable);return 1;} void StudentSitAgain(){ FinalStu stu;while(TempQL.front!=TempQL.rear){ stu=DeTempQueue(TempQL); if(strcmp(stu.sex,“男”)==0) EnQueue2(Boys,stu); else EnQueue2(Girls,stu);} } //播放歌曲 void PlayMusic(){ cout<<“tt正在播放:t”< void NextMusic(){ M_p=M_p->next;if(M_p==ML.head){ M_p=ML.head->next;} } //學生配對 void Match(){ //FinalStu student[STU_SIZE];intstatic i=0;int j=0;length=0;while(Boys.front!=Boys.rear&&Girls.front!=Girls.rear){ EnTempQueue(TempQL,DeQueue(Boys));//從男生隊列中出來進入臨時隊列 EnTempQueue(TempQL,DeQueue(Girls));//從女生隊列中出來進入臨時隊列 length++;//記錄每首歌的配對數(shù) } //從臨時隊列中將信息賦值給表 TempQueue *tem=TempQL.front->next;while(tem){ strcpy(matchTable[index].musicName,M_p->M_Name); strcpy(matchTable[index].stu[0].name,tem->stu.name); strcpy(matchTable[index].stu[0].sex,tem->stu.sex); matchTable[index].stu[0].id=tem->stu.id; //----每曲歌的配對情況 strcpy(stuTable[j][0].name,tem->stu.name); strcpy(stuTable[j][0].sex,tem->stu.sex); stuTable[j][0].id=tem->stu.id; tem=tem->next; //------整個播放過程的配對表 strcpy(matchTable[index].stu[1].name,tem->stu.name); strcpy(matchTable[index].stu[1].sex,tem->stu.sex); matchTable[index].stu[1].id=tem->stu.id; //----每首歌配對表 strcpy(stuTable[j][1].name,tem->stu.name); strcpy(stuTable[j][1].sex,tem->stu.sex); stuTable[j][1].id=tem->stu.id; tem=tem->next; index++; j++;} } //顯示每首歌配對情況 void PrintEachMatch(){ cout< //length為每首歌的配對長度 { cout< cout< 1、學生就坐”;cout<<“t”<<“ 2、每曲配對”< 3、顯示結(jié)果”;cout<<“t”<<“ 4、查詢配對”< 5、退出”; } //配對顯示 void PrintMatchTable(){ cout<<“歌曲名稱t姓名t性別t序號t姓名t性別t序號”< cout< cout< //從文件讀取數(shù)據(jù) int res; cout<<“請選擇班級:”< cout<<“1.三年一班t2.三年二班”< cin>>res; if(res==1) { ReadStuFile(1); } elseif(res==2) { ReadStuFile(2); } break;case 2: cout<<“開始輸入....”< GetInfKey(); //鍵盤鍵入數(shù)據(jù) break;default: cout<<“輸入有誤,再見”< break;} } void MusicMenu(){ cout<<“請選擇要放入的光盤類型:”< i=LoadMusic(1);else i=LoadMusic(2);if(i){ M_p=ML.head->next;//p指向第一首歌 cout<<“歌曲光盤已就位,是否現(xiàn)在播放(Y/N)”< cin>>ch; InitQList(TempQL);//初始化臨時隊列 if(ch=='Y'||ch=='y') { system(“cls”); PlayMusic(); Match(); PrintEachMatch(); } cout<<“按n進行下一首歌曲、、n”; cout<<“按q停止播放音樂、、”< cin>>ch; while(ch=='n'||ch=='N') { system(“cls”); Next(); cout<<“按n進行下一首歌曲、、n”; cout<<“按q停止播放音樂、、”< cin>>ch; } if(ch=='q'||ch=='Q') return;} } void Welcome(){ cout<<“tttt歡迎進入進入舞池~~~~”< Admin *p=admin->next; cout<<“ttt請輸入您的用戶名:”; cin>>userName; cout<<“ttt請輸入您的密碼:”; cin>>key; while(p) { if(strcmp(p->name,userName)==0) break; p=p->next; } if(!p) { system(“cls”); cout<<“ttt輸入的用戶名不存在~~~~~”< continue; } if(p) { if(strcmp(p->passWord,key)==0) { system(“cls”); cout<<“tttt歡迎回來.”; Sleep(500); system(“cls”); cout<<“tttt歡迎回來..”; Sleep(500); system(“cls”); cout<<“tttt歡迎回來...”; Sleep(500); //system(“cls”); break; } else { system(“cls”); cout<<“ttt輸入的密碼錯誤、、、”< continue; } } } if(i>=3){ cout<<“ttt您今天的機會已經(jīng)用完,再見”; exit(0);} } void ShowMessage(){ system(“cls”);int res;cout<<“ttt選擇要操作的信息:”< cout<<“ttt座位信息如下:”< PrintStuSeat(); char ch; cout<<“是否將該信息寫入文件(Y/N):”; cin>>ch; if(ch=='Y'||ch=='y') { if(InFileMatchTable()) { cout<<“數(shù)據(jù)已寫入文件...”< } } } elseif(res==2){ PrintMatchTable(); char ch; cout<<“是否將該信息寫入文件(Y/N):”; cin>>ch; if(ch=='Y'||ch=='y') { if(InFileMatchTable()) cout<<“數(shù)據(jù)已寫入文件...”< } Sleep(3000);} } void Quit(){ system(“CLS”); printf(“nnnnnnnnttt ^o^”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下次”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下次使^”); Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下次使用”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下次使用^o^”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下次使用^o^nntttt -----”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下次使用^o^nntttt -----GoodBye!”);Sleep(200);system(“CLS”); printf(“nnnnnnnnttt ^o^歡迎下次使用^o^nntttt -----GoodBye!n”);} void CheckByName() //根據(jù)姓名查詢配對情況 { char boyName[15];char girlName[15];cout<<“請輸入男生姓名:”;cin>>boyName;cout<<“請輸入女生姓名:”;cin>>girlName;int count=0;for(int i=0;i if(strcmp(matchTable[i].stu[0].name,boyName)==0&& strcmp(matchTable[i].stu[1].name,girlName)==0) { count++; } } if(count==0){ cout<<“未找到配對情況:”;} else { cout<<“ttt查詢的學生的配對情況如下:”< cout<<“歌曲名稱t姓名t性別t編號t姓名t性別t編號”< for(int j=0;j { if(strcmp(matchTable[j].stu[0].name,boyName)==0&& strcmp(matchTable[j].stu[1].name,girlName)==0) { cout< cout< } } } } void CheckByMusic(){ char MusicName[15];cout<<“請輸入歌名:”;cin>>MusicName;int count=0;for(int i=0;i if(strcmp(matchTable[i].musicName,MusicName)==0) { count++; } } if(count==0){ cout<<“未找到該歌曲~~~~”; } else { cout<<“ttt查詢的學生的配對情況如下:”< cout<<“歌曲名稱t姓名t性別t編號t姓名t性別t編號”< for(int j=0;j { if(strcmp(matchTable[j].musicName,MusicName)==0) { cout< cout< } } } } //主界面選項 void MainChoose(){ int ins;LoadAdmin();while(1){ system(“cls”); MainMenu(); cout< cin>>ins; switch(ins) { case 1: system(“cls”); StudentChose(); InitQueue(Boys); InitQueue(Girls); StudentSit(); //學生分別入座 GetStuSeat();//獲取學生座位信息 cout<<“ttt男女生已分別就位....”< cout<<“ttt座位信息如下:”< PrintStuSeat(); char ch; cout<<“是否將該信息寫入文件(Y/N):”; cin>>ch; if(ch=='Y'||ch=='y') { if(InFileStuSeat()) cout<<“數(shù)據(jù)已寫入文件...”< } Sleep(3000); break; case 2: system(“cls”); cout<<“tttt請先放入歌曲光盤...”< MusicMenu(); break; case 3: ShowMessage(); break; case 4: system(“cls”); cout<<“ttt請選擇查詢的方式:”< cout<<“ttt1.按學生姓名t2.按歌曲名”< int i; cin>>i; switch(i) { case 1: CheckByName(); break; case 2: CheckByMusic(); break; } //CheckByMusic(); getch(); break; case 5: system(“color FC”); Quit(); exit(0); break; } } } void main(){ MainChoose();} 課程設計報告 課程設計題目:地圖著色問題 專業(yè):xxxxxxxxx 班級:xxxxxxxxx 姓名:xxxxxxxxx 一:需求分析: 1)已知中國地圖,對各省進行著色,要求相鄰省所使用的顏色不同,并保證使用的顏色總數(shù)最少; 2)將各省進行編號,然后利用無向圖個頂點之間的邊來表示各省的相鄰關(guān)系; 3)演示程序以用戶和計算機的對話方式進行; 4)最后對結(jié)果做出簡單分析。 二:概要設計 一:設計思路 把34個省看成34個頂點,從選定的第一個頂點開始著色,先試第一種顏色,如果這個顏色與這個頂點的其他鄰接頂點的顏色不重復,則這個頂點就是用這種顏色,程序開始對下一個頂點著色;如果著色重復,則使用下一種顏色重復上面的操作。著色過程就是一個遞歸的過程,直到所有的頂點都處理完后結(jié)束著色。 二:數(shù)據(jù)結(jié)構(gòu)設計 因為這個程序是對圖的操作,所以程序采用的邏輯結(jié)構(gòu)是圖狀,存儲結(jié)構(gòu)選用鄰接表,考慮用鄰接表是因為一般的地圖的某一個頂點并不會與很多的頂點相鄰接,如果用鄰接矩陣會浪費很多的存儲空間,所以我選擇的鄰接表來存儲。 其中: typedef struct ArcNode { int x; (表示與當前頂點所表示省份相鄰的省份的位置信息) struct ArcNode *next; (指向下一個弧結(jié)點)}ArcNode; (表示省份之間相鄰關(guān)系的弧結(jié)點)typedef struct { char *name;(頂點所表示的省份的名稱) int color; (省份的顏色,用數(shù)字表示不同的顏色) ArcNode *firstnext;(指向第一個?。﹠shengfen[35]; 三:詳細設計 該程序一共包含三個模版:分別為初始化模版、著色模版和輸出模版。 1.初始化模塊 聲明表示省份的頂點信息、省份之間相鄰關(guān)系的弧的信息,并為其賦值。 2.著色模塊 為各個省份著色。for(i=1;i<=34;i++){ sheng[i].color=0;} for(i=1;i<=34;i++){ j=1; p=sheng[i].firstnext; while(p!=NULL) { while(p!=NULL&&j!=sheng[p->x].color) { p=p->next; } if(p!=NULL) j++; } sheng[i].color=j;} 3.輸出模塊 輸出各個省份的顏色信息。 for(i=1;i<=34;i++){ printf(“%s:”,sheng[i].name); printf(“%dn”,sheng[i].color);} printf(“/n0表示白色,1表示藍色,2表示紅色,3表示綠色,4表示黃色”);return 0; 四:調(diào)試分析 因為我們的程序已知是中國地圖,為中國地圖染色,所以程序沒有輸入,只有輸出信息。從輸出的信息來看,我們最多使用了4種顏色。關(guān)于程序測試時存在的問題,我們程序在寫完之后,出現(xiàn)了沒有錯誤但是無法輸出信息的問題,從網(wǎng)上查找發(fā)現(xiàn)是對警告沒處理好的原因,隨后我們參考了網(wǎng)上的解決方案把問題解決了。關(guān)于程序的改進,我們的程序使用的是有向圖,但省份之間的相鄰關(guān)系用無向圖就可以表示,這是程序可以改進的地方。其次,我們的程序輸出結(jié)果描述省份顏色的是數(shù)字,也可以改進后使之輸出具體的顏色。 五:源程序清單 #include 40,*hu141,*hu142;hu1=(ArcNode *)malloc(sizeof(ArcNode));hu2=(ArcNode *)malloc(sizeof(ArcNode));hu3=(ArcNode *)malloc(sizeof(ArcNode));hu4=(ArcNode *)malloc(sizeof(ArcNode));hu5=(ArcNode *)malloc(sizeof(ArcNode));hu6=(ArcNode *)malloc(sizeof(ArcNode));hu7=(ArcNode *)malloc(sizeof(ArcNode));hu8=(ArcNode *)malloc(sizeof(ArcNode));hu9=(ArcNode *)malloc(sizeof(ArcNode));hu10=(ArcNode *)malloc(sizeof(ArcNode));hu11=(ArcNode *)malloc(sizeof(ArcNode));hu12=(ArcNode *)malloc(sizeof(ArcNode));hu13=(ArcNode *)malloc(sizeof(ArcNode));hu14=(ArcNode *)malloc(sizeof(ArcNode));hu15=(ArcNode *)malloc(sizeof(ArcNode));hu16=(ArcNode *)malloc(sizeof(ArcNode));hu17=(ArcNode *)malloc(sizeof(ArcNode));hu18=(ArcNode *)malloc(sizeof(ArcNode));hu19=(ArcNode *)malloc(sizeof(ArcNode));hu20=(ArcNode *)malloc(sizeof(ArcNode));hu21=(ArcNode *)malloc(sizeof(ArcNode));hu22=(ArcNode *)malloc(sizeof(ArcNode));hu23=(ArcNode *)malloc(sizeof(ArcNode));hu24=(ArcNode *)malloc(sizeof(ArcNode));hu25=(ArcNode *)malloc(sizeof(ArcNode));hu26=(ArcNode *)malloc(sizeof(ArcNode));hu27=(ArcNode *)malloc(sizeof(ArcNode));hu28=(ArcNode *)malloc(sizeof(ArcNode));hu29=(ArcNode *)malloc(sizeof(ArcNode));hu30=(ArcNode *)malloc(sizeof(ArcNode));hu31=(ArcNode *)malloc(sizeof(ArcNode));hu32=(ArcNode *)malloc(sizeof(ArcNode));hu33=(ArcNode *)malloc(sizeof(ArcNode));hu34=(ArcNode *)malloc(sizeof(ArcNode));hu35=(ArcNode *)malloc(sizeof(ArcNode));hu36=(ArcNode *)malloc(sizeof(ArcNode));hu37=(ArcNode *)malloc(sizeof(ArcNode));hu38=(ArcNode *)malloc(sizeof(ArcNode));hu39=(ArcNode *)malloc(sizeof(ArcNode));hu40=(ArcNode *)malloc(sizeof(ArcNode));hu41=(ArcNode *)malloc(sizeof(ArcNode));hu42=(ArcNode *)malloc(sizeof(ArcNode));hu43=(ArcNode *)malloc(sizeof(ArcNode)); hu44=(ArcNode *)malloc(sizeof(ArcNode));hu45=(ArcNode *)malloc(sizeof(ArcNode));hu46=(ArcNode *)malloc(sizeof(ArcNode));hu47=(ArcNode *)malloc(sizeof(ArcNode));hu48=(ArcNode *)malloc(sizeof(ArcNode));hu49=(ArcNode *)malloc(sizeof(ArcNode));hu50=(ArcNode *)malloc(sizeof(ArcNode));hu51=(ArcNode *)malloc(sizeof(ArcNode));hu52=(ArcNode *)malloc(sizeof(ArcNode));hu53=(ArcNode *)malloc(sizeof(ArcNode));hu54=(ArcNode *)malloc(sizeof(ArcNode));hu55=(ArcNode *)malloc(sizeof(ArcNode));hu56=(ArcNode *)malloc(sizeof(ArcNode));hu57=(ArcNode *)malloc(sizeof(ArcNode));hu58=(ArcNode *)malloc(sizeof(ArcNode));hu59=(ArcNode *)malloc(sizeof(ArcNode));hu60=(ArcNode *)malloc(sizeof(ArcNode));hu61=(ArcNode *)malloc(sizeof(ArcNode));hu62=(ArcNode *)malloc(sizeof(ArcNode));hu63=(ArcNode *)malloc(sizeof(ArcNode));hu64=(ArcNode *)malloc(sizeof(ArcNode));hu65=(ArcNode *)malloc(sizeof(ArcNode));hu66=(ArcNode *)malloc(sizeof(ArcNode));hu67=(ArcNode *)malloc(sizeof(ArcNode));hu68=(ArcNode *)malloc(sizeof(ArcNode));hu69=(ArcNode *)malloc(sizeof(ArcNode));hu70=(ArcNode *)malloc(sizeof(ArcNode));hu71=(ArcNode *)malloc(sizeof(ArcNode));hu72=(ArcNode *)malloc(sizeof(ArcNode));hu73=(ArcNode *)malloc(sizeof(ArcNode));hu74=(ArcNode *)malloc(sizeof(ArcNode));hu75=(ArcNode *)malloc(sizeof(ArcNode));hu76=(ArcNode *)malloc(sizeof(ArcNode));hu77=(ArcNode *)malloc(sizeof(ArcNode));hu78=(ArcNode *)malloc(sizeof(ArcNode));hu79=(ArcNode *)malloc(sizeof(ArcNode));hu80=(ArcNode *)malloc(sizeof(ArcNode));hu81=(ArcNode *)malloc(sizeof(ArcNode));hu82=(ArcNode *)malloc(sizeof(ArcNode));hu83=(ArcNode *)malloc(sizeof(ArcNode));hu84=(ArcNode *)malloc(sizeof(ArcNode));hu85=(ArcNode *)malloc(sizeof(ArcNode));hu86=(ArcNode *)malloc(sizeof(ArcNode));hu87=(ArcNode *)malloc(sizeof(ArcNode)); hu88=(ArcNode *)malloc(sizeof(ArcNode));hu89=(ArcNode *)malloc(sizeof(ArcNode));hu90=(ArcNode *)malloc(sizeof(ArcNode));hu91=(ArcNode *)malloc(sizeof(ArcNode));hu92=(ArcNode *)malloc(sizeof(ArcNode));hu93=(ArcNode *)malloc(sizeof(ArcNode));hu94=(ArcNode *)malloc(sizeof(ArcNode));hu95=(ArcNode *)malloc(sizeof(ArcNode));hu96=(ArcNode *)malloc(sizeof(ArcNode));hu97=(ArcNode *)malloc(sizeof(ArcNode));hu98=(ArcNode *)malloc(sizeof(ArcNode));hu99=(ArcNode *)malloc(sizeof(ArcNode));hu100=(ArcNode *)malloc(sizeof(ArcNode));hu101=(ArcNode *)malloc(sizeof(ArcNode));hu102=(ArcNode *)malloc(sizeof(ArcNode));hu103=(ArcNode *)malloc(sizeof(ArcNode));hu104=(ArcNode *)malloc(sizeof(ArcNode));hu105=(ArcNode *)malloc(sizeof(ArcNode));hu106=(ArcNode *)malloc(sizeof(ArcNode));hu107=(ArcNode *)malloc(sizeof(ArcNode));hu108=(ArcNode *)malloc(sizeof(ArcNode));hu109=(ArcNode *)malloc(sizeof(ArcNode));hu110=(ArcNode *)malloc(sizeof(ArcNode));hu111=(ArcNode *)malloc(sizeof(ArcNode));hu112=(ArcNode *)malloc(sizeof(ArcNode));hu113=(ArcNode *)malloc(sizeof(ArcNode));hu114=(ArcNode *)malloc(sizeof(ArcNode));hu115=(ArcNode *)malloc(sizeof(ArcNode));hu116=(ArcNode *)malloc(sizeof(ArcNode));hu117=(ArcNode *)malloc(sizeof(ArcNode));hu118=(ArcNode *)malloc(sizeof(ArcNode));hu119=(ArcNode *)malloc(sizeof(ArcNode));hu120=(ArcNode *)malloc(sizeof(ArcNode));hu121=(ArcNode *)malloc(sizeof(ArcNode));hu122=(ArcNode *)malloc(sizeof(ArcNode));hu123=(ArcNode *)malloc(sizeof(ArcNode));hu124=(ArcNode *)malloc(sizeof(ArcNode));hu125=(ArcNode *)malloc(sizeof(ArcNode));hu126=(ArcNode *)malloc(sizeof(ArcNode));hu127=(ArcNode *)malloc(sizeof(ArcNode));hu128=(ArcNode *)malloc(sizeof(ArcNode));hu129=(ArcNode *)malloc(sizeof(ArcNode));hu130=(ArcNode *)malloc(sizeof(ArcNode));hu131=(ArcNode *)malloc(sizeof(ArcNode)); hu132=(ArcNode *)malloc(sizeof(ArcNode));hu133=(ArcNode *)malloc(sizeof(ArcNode));hu134=(ArcNode *)malloc(sizeof(ArcNode));hu135=(ArcNode *)malloc(sizeof(ArcNode));hu136=(ArcNode *)malloc(sizeof(ArcNode));hu137=(ArcNode *)malloc(sizeof(ArcNode));hu138=(ArcNode *)malloc(sizeof(ArcNode));hu139=(ArcNode *)malloc(sizeof(ArcNode));hu140=(ArcNode *)malloc(sizeof(ArcNode));hu141=(ArcNode *)malloc(sizeof(ArcNode));hu142=(ArcNode *)malloc(sizeof(ArcNode));sheng[1].name=“heilongjiang”;hu1->x=2;hu2->x=4;sheng[1].firstnext=hu1;hu1->next=hu2;hu2->next=NULL;sheng[2].name=“jilin”;hu3->x=4;hu4->x=3;hu141->x=1;sheng[2].firstnext=hu3;hu3->next=hu4;hu4->next=hu141;hu141->next=NULL;sheng[3].name=“l(fā)iaoning”;hu5->x=4;hu6->x=10;hu142->x=2;sheng[3].firstnext=hu5;hu5->next=hu6;hu6->next=hu142;hu142->next=NULL;sheng[4].name=“neimenggu”;hu7->x=1;hu8->x=2;hu9->x=3;hu10->x=10;hu11->x=9;hu12->x=8;hu13->x=7;hu14->x=6;hu15->x=5;sheng[4].firstnext=hu7; hu7->next=hu8;hu8->next=hu9;hu9->next=hu10;hu10->next=hu11;hu11->next=hu12;hu12->next=hu13;hu13->next=hu14;hu14->next=hu15;hu15->next=NULL;sheng[5].name=“xinjiang”;hu16->x=6;hu17->x=13;hu18->x=16;sheng[5].firstnext=hu16;hu16->next=hu17;hu17->next=hu18;hu18->next=NULL;sheng[6].name=“gansu”;hu19->x=4;hu20->x=7;hu21->x=8;hu22->x=17;hu23->x=13;hu24->x=5;sheng[6].firstnext=hu19;hu19->next=hu20;hu20->next=hu21;hu21->next=hu22;hu22->next=hu23;hu23->next=hu24;hu24->next=NULL;sheng[7].name=“ningxia”;hu25->x=4;hu26->x=8;hu27->x=6;sheng[7].firstnext=hu25;hu25->next=hu26;hu26->next=hu27;hu27->next=NULL;sheng[8].name=“shanxi1”;hu28->x=4;hu29->x=9;hu30->x=14;hu31->x=19; hu32->x=18;hu33->x=17;hu34->x=6;hu35->x=7;sheng[8].firstnext=hu28;hu28->next=hu29;hu29->next=hu30;hu30->next=hu31;hu31->next=hu32;hu32->next=hu33;hu33->next=hu34;hu34->next=hu35;hu35->next=NULL;sheng[9].name=“shanxi2”;hu36->x=4;hu37->x=10;hu38->x=14;hu39->x=8;sheng[9].firstnext=hu36;hu36->next=hu37;hu37->next=hu38;hu38->next=hu39;hu39->next=NULL;sheng[10].name=“hebei”;hu40->x=4;hu41->x=3;hu42->x=11;hu43->x=12;hu44->x=15;hu45->x=14;hu46->x=9;sheng[10].firstnext=hu40;hu40->next=hu41;hu41->next=hu42;hu42->next=hu43;hu43->next=hu44;hu44->next=hu45;hu45->next=hu46;hu46->next=NULL;sheng[11].name=“beijing”;hu47->x=10;sheng[11].firstnext=hu47;hu47->next=NULL;sheng[12].name=“tianjin”; hu48->x=10;sheng[12].firstnext=hu48;hu48->next=NULL;sheng[13].name=“qinghai”;hu49->x=5;hu50->x=6;hu51->x=17;hu52->x=16;sheng[13].firstnext=hu49;hu49->next=hu50;hu50->next=hu51;hu51->next=hu52;hu52->next=NULL;sheng[14].name=“henan”;hu53->x=9;hu54->x=10;hu55->x=15;hu56->x=21;hu57->x=20;hu58->x=19;hu59->x=8;sheng[14].firstnext=hu53;hu53->next=hu54;hu54->next=hu55;hu55->next=hu56;hu56->next=hu57;hu57->next=hu58;hu58->next=hu59;hu59->next=NULL;sheng[15].name=“shandong”;hu60->x=10;hu61->x=14;hu62->x=21;sheng[15].firstnext=hu60;hu60->next=hu61;hu61->next=hu62;hu62->next=NULL;sheng[16].name=“xizang”;hu63->x=5;hu64->x=13;hu65->x=17;hu66->x=23;sheng[16].firstnext=hu63;hu63->next=hu64; hu64->next=hu65;hu65->next=hu66;hu66->next=NULL;sheng[17].name=“sichuan”;hu67->x=13;hu68->x=6;hu69->x=8;hu70->x=18;hu71->x=24;hu72->x=23;hu73->x=16;sheng[17].firstnext=hu67;hu67->next=hu68;hu68->next=hu69;hu69->next=hu70;hu70->next=hu71;hu71->next=hu72;hu72->next=hu73;hu73->next=NULL;sheng[18].name=“chongqing”;hu74->x=17;hu75->x=8;hu76->x=19;hu77->x=25;hu78->x=24;sheng[18].firstnext=hu74;hu74->next=hu75;hu75->next=hu76;hu76->next=hu77;hu77->next=hu78;hu78->next=NULL;sheng[19].name=“hubei”;hu79->x=8;hu80->x=14;hu81->x=20;hu82->x=26;hu83->x=25;hu84->x=18;sheng[19].firstnext=hu79;hu79->next=hu80;hu80->next=hu81;hu81->next=hu82;hu82->next=hu83;hu83->next=hu84; hu84->next=NULL;sheng[20].name=“anhui”;hu85->x=14;hu86->x=21;hu87->x=27;hu88->x=26;hu89->x=19;sheng[20].firstnext=hu85;hu85->next=hu86;hu86->next=hu87;hu87->next=hu88;hu88->next=hu89;hu89->next=NULL;sheng[21].name=“jiangsu”;hu90->x=15;hu91->x=14;hu92->x=20;hu93->x=27;hu94->x=22;sheng[21].firstnext=hu90;hu90->next=hu91;hu91->next=hu92;hu92->next=hu93;hu93->next=hu94;hu94->next=NULL;sheng[22].name=“shanghai”;hu95->x=21;hu96->x=27;sheng[22].firstnext=hu95;hu95->next=hu96;hu96->next=NULL;sheng[23].name=“yunnan”;hu97->x=16;hu98->x=17;hu99->x=24;hu100->x=29;sheng[23].firstnext=hu97;hu97->next=hu98;hu98->next=hu99;hu99->next=hu100;hu100->next=NULL;sheng[24].name=“guizhou”;hu101->x=17;hu102->x=24; hu103->x=29;hu104->x=23;hu105->x=18;sheng[24].firstnext=hu101;hu101->next=hu102;hu102->next=hu103;hu103->next=hu104;hu104->next=hu105;hu105->next=NULL;sheng[25].name=“hunan”;hu106->x=18;hu107->x=19;hu108->x=26;hu109->x=30;hu110->x=29;hu111->x=24;sheng[25].firstnext=hu106;hu106->next=hu107;hu107->next=hu108;hu108->next=hu109;hu109->next=hu110;hu110->next=hu111;hu111->next=NULL;sheng[26].name=“jiangxi”;hu112->x=25;hu113->x=19;hu114->x=20;hu115->x=27;hu116->x=28;hu117->x=30;sheng[26].firstnext=hu112;hu112->next=hu113;hu113->next=hu114;hu114->next=hu115;hu115->next=hu116;hu116->next=hu117;hu117->next=NULL;sheng[27].name=“zhejiang”;hu118->x=22;hu119->x=21;hu120->x=20;hu121->x=26;hu122->x=28;sheng[27].firstnext=hu118; hu118->next=hu119;hu119->next=hu120;hu120->next=hu121;hu121->next=hu122;hu122->next=NULL;sheng[28].name=“fujian”;hu123->x=27;hu124->x=26;hu125->x=30;sheng[28].firstnext=hu123;hu123->next=hu124;hu124->next=hu125;hu125->next=NULL;sheng[29].name=“guangxi”;hu126->x=23;hu127->x=24;hu128->x=25;hu129->x=30;sheng[29].firstnext=hu126;hu126->next=hu127;hu127->next=hu128;hu128->next=hu129;hu129->next=NULL;sheng[30].name=“guangdong”;hu130->x=29;hu131->x=25;hu132->x=26;hu133->x=28;hu134->x=31;hu135->x=32;hu136->x=34;sheng[30].firstnext=hu130;hu130->next=hu131;hu131->next=hu132;hu132->next=hu133;hu133->next=hu134;hu134->next=hu135;hu135->next=hu136;hu136->next=NULL;sheng[31].name=“aomen”;hu137->x=30;sheng[31].firstnext=hu137;hu137->next=NULL;sheng[32].name=“xianggang”; hu138->x=30;sheng[32].firstnext=hu138;hu138->next=NULL;sheng[33].name=“taiwan”;hu139->x=28;sheng[33].firstnext=hu139;hu139->next=NULL;sheng[34].name=“hainan”;hu140->x=30;sheng[34].firstnext=hu140;hu140->next=NULL;for(i=1;i<=34;i++){ sheng[i].color=0;} for(i=1;i<=34;i++){ j=1; p=sheng[i].firstnext; while(p!=NULL) { while(p!=NULL&&j!=sheng[p->x].color) { p=p->next; } if(p!=NULL) j++; } sheng[i].color=j;} for(i=1;i<=34;i++){ printf(“%s:”,sheng[i].name); printf(“%dn”,sheng[i].color);} printf(“/n0表示白色,1表示藍色,2表示紅色,3表示綠色,4表示黃色”);return 0;} 數(shù)據(jù)結(jié)構(gòu)課程設計 報 告 設計題目: 學生搭配問題 專 業(yè): 計算機科學與技術(shù) 學生姓名: 班級學號: 分組成員: 指導教師: 學生搭配問題課程設計報告 一、設計時間 二、設計地點 三、設計目的 1.通過這次課程設計進一步熟悉基本概念; 2.熟練掌握C語言編程,了解程序基本的流程; 3.運用所學C語言知識,掌握數(shù)據(jù)結(jié)構(gòu)方法循環(huán)隊列應用,算法思路設計; 4.培養(yǎng)查閱資料,獨立思考問題的能力。 四、設計小組成員 五、指導老師 六、設計課題 學生搭配問題 七、基本思路及關(guān)鍵問題的解決方法 基本思路:隊列(Queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。 循環(huán)隊列是在隊列的順序存儲結(jié)構(gòu)中,除了用乙組地址連續(xù)的存儲單元依次存放從隊列頭到隊列尾的元素外,尚需附設兩個指針front和rear分別指示隊列頭元素和隊列尾元素的位置。 循環(huán)隊列(兩個),將男生、女生兩組人分別存放,以實現(xiàn)循環(huán)配對輸出。循環(huán)隊列的入隊,出隊,判隊滿,判隊空。 (1)要模擬動態(tài)地顯示出現(xiàn)題目中所要求的循環(huán),我們要先建立兩個循環(huán)隊列SqQueue和SqQueue2。 (2)將男生、女生兩組人分別存入這兩個隊列。以實現(xiàn)他們的循環(huán)配對輸出,這是循環(huán)隊列固有的特性。 (3)利用循環(huán)隊列的特性,將男女生分別進行入隊列和出隊列操作,且實現(xiàn)搭配輸出。 (4)循環(huán)隊列的長度分別設為男女生的個數(shù)即可。 (5)在計算機終端輸出的結(jié)果是:根據(jù)要求輸出男生女生搭配情況 關(guān)鍵問題: 循環(huán)隊列的應用 解決方法:數(shù)據(jù)模型(邏輯結(jié)構(gòu)): 循環(huán)隊列(兩個),將男生、女生兩組人分別存放,以實現(xiàn)循環(huán)配對輸出。 存儲結(jié)構(gòu): 循環(huán)鏈表 核心算法: 循環(huán)隊列的入隊,出隊,判隊滿,判隊空。輸入數(shù)據(jù): 男生人數(shù)、女生人數(shù),歌曲數(shù)量 輸出數(shù)據(jù): 每一首歌曲播放時,男生和女生搭配情況(只輸出編號即可)當要查找的男女搭配時輸出歌曲編號,和他們搭配的總次數(shù)。通過以上分析,該程序具有可行性。 八、算法及流程圖 九、調(diào)試過程中出現(xiàn)的問題及解決方法 問題:在構(gòu)造隊列時,設隊列分配的最大空間為男女生的個數(shù),此時便無法根據(jù)Q.front=Q.rear來判別隊列空間是“空”還是“滿”,因此,在入隊操作即插入一個新元素作為新的隊尾元素時出現(xiàn)了問題,即最后一位同學無法入隊。 解決方法:將隊列分配的最大空間至少再增加一個 十、測試及運行結(jié)果 測試輸入數(shù)據(jù):男女生的個數(shù)曲子數(shù)和要查找的男女生編號 輸出結(jié)果為:每首曲子男女生搭配的情況 程序運行界面: 十一、課程設計心得體會 通過一周的學習和實踐,解決實際問題(學生搭配問題),讓我對循環(huán)隊列有了更深的了解,對數(shù)據(jù)結(jié)構(gòu)產(chǎn)生了濃厚的興趣,同時也讓我提高了解決實際問題的能力。 我們要不斷的通過上機來提高自己的學習水平,在上機的同時改正了自己對某些算法的錯誤使用,使自己在通過程序解決問題時抓住關(guān)鍵算法,有了算法設計思想和流程圖,并用C語言描繪出關(guān)鍵算法 十二、源程序 #include printf(“隊列為空”);p=Q.front->next;num=p->num;Q.front->next=p->next;q=p->next;if(Q.rear==q) Q.rear=Q.front;free(p);} void printF(LinkQueue &F,int i)//打印第i首曲子時女隊的情況 { QueuePtr p;int n=1;while(n printf(“_ ”); n++;} p=F.front->next;while(F.rear!=p){ printf(“%d ”,p->num); p=p->next;} printf(“%d n”,p->num);} void printM(LinkQueue &M,int i)//打印第i首曲子時男隊的情況 { QueuePtr p;int n=1;while(n printf(“_ ”); n++;} p=M.front->next;while(M.rear!=p){ printf(“%d ”,p->num); p=p->next;} printf(“%d n”,p->num);} void main(){ int m,n,k,i,a,b;int count=0,num;QueuePtr p,q;LinkQueue F;//女生隊 LinkQueue M;//男生隊 printf(“請輸入女生數(shù)量:”);scanf(“%d”,&m);printf(“請輸入男生數(shù)量:”);scanf(“%d”,&n);printf(“請輸曲子號:”);scanf(“%d”,&k);printf(“請輸入要查找的男生編號:”);scanf(“%d”,&a);printf(“請輸入要查找的女生編號:”);scanf(“%d”,&b);InitQ(F);InitQ(M);for(i=1;i<=m;i++){ EnQueue(F,i);} for(i=1;i<=n;i++){ EnQueue(M,i);} for(i=1;i<=k;i++){ system(“CLS”); printf(“第%d首曲子 n”,i); printF(F,i); printM(M,i); p=F.front->next; q=M.front->next; printf(“目前跳舞的是第%d號女生和第%d號男生n”,p->num,q->num); if(p->num==a&&q->num==b) { count++;printf(“第%d曲是要查找的男女生跳舞n”,i); } sleep(3000); DeQueue(F,num);EnQueue(F,num); DeQueue(M,num); EnQueue(M,num);} printf(“該對男女生共跳舞%d次n”,count);} 十三、參考文獻 [1] 數(shù)據(jù)結(jié)構(gòu)(C語言版)嚴蔚敏 吳偉明 編著,清華大學出版社 [2] C語言程序設計(第三版)譚浩強 著,清華大學出版社第二篇:課程設計答辯問題
第三篇:數(shù)據(jù)結(jié)構(gòu)課程設計 舞伴問題
第四篇:數(shù)據(jù)結(jié)構(gòu)課程設計地圖著色問題
第五篇:數(shù)據(jù)結(jié)構(gòu)課程設計學生搭配問題