數據結構實驗約瑟夫問題實驗報告_第1頁
數據結構實驗約瑟夫問題實驗報告_第2頁
數據結構實驗約瑟夫問題實驗報告_第3頁
數據結構實驗約瑟夫問題實驗報告_第4頁
數據結構實驗約瑟夫問題實驗報告_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數據結構實驗報告課程名稱數據結構實驗名稱數據結構試驗專業班級姓名學號實驗日期第11周星期日 節2012 2013學年度第 一 學期一、實驗目的1、用數組來實現約瑟夫問題二、實驗內容1、試分別用線性表的向量存儲結構和數組存儲結構來實現約瑟夫(Josephu)問題。約瑟夫問題如下:設有n個人圍坐圓桌周圍。從某個位置上的人開始從1報數,數到m的人便出列,下一個人(第m+1個)又從1報數開始,數到m的人便是第2個出列的人,依次類推,直到最 后一個人出列為止,這樣就可以得到一個人員排列的新次序。例如,n=8,m=4,從第1個人數起,得到的新次序為 48521376.三、實驗環境1、硬件配置:Pentiu

2、m (R) Dual-Core9 CUP E6500 2.93GHz , 1.96 的內存2、軟件環境:Microsoft Windows XPProfessional Service Pack 3, Microsoft Visual C+ 6.0四、需求分析1、輸入的形式和輸入值的范圍:根據題目要求與提示輸入數據的總數,間隔數和開始 計數的位置2、輸出的形式:輸出每個挑選的數據3、程序所能達到的功能: 從開始計數的位置起,每隔間隔數, 就把該位置的數字輸出, 同時此數被釋放掉, 然后從繼續此操作, 若到數據結束位置, 則重新開始進行。程序結束的 條件是所有的數據輸出,釋放掉。4、測試數據:輸

3、入一個鏈表,首先輸入數據總數,然后輸入間隔數,再輸入起始位置, 若起始位置大于數據總數, 會提示錯誤,要求重新輸入起始位置, 直至起始位置不大于總數。 然后開始輸入數據,數據以空格隔開,最后輸出結構。如:輸入數據總數8,間隔數4,起始位置1 ,輸入數據1 2 3 4 5 6 7 8輸出的鏈表為:4 8 5 2 1 3 7 6五、概要設計為了實現上述操作,應以數組結構。1、本程序包含二個模塊:(1)主程序模塊;3、流程圖輸入數據的總數num間隔數count起始位直start當 Start>num輸入總數num輸入起始位直start當 I<num按輸入順序將輸入的數字存進a數組中設定這

4、個循環是死循環I+_I=num .一一 是否I=i%numJ" _A_i!=0 一_是否I+一 .j二count. 一, 一 一是否Bk+=aiAi=0J=0_一K=num是否跳出循環當 K<num輸出數組B六、詳細設計主函數詳解#include"stdio.hvoid main()int a10,b10,i,j,k,count,num,start;printf(" 請輸入總數:");scanf("%d",&num);printf("請輸入間隔數:");scanf("%d",&am

5、p;count);printf("請輸入起始位置:");scanf("%d",&start);printf("n");while(start>num)printf("請重新輸入:n");printf("請輸入總數:");scanf("%d",&num);printf("請輸入起始位置:");scanf("%d",&start);printf("請輸入數據:n");for (i=0;i&l

6、t;num;i+)scanf("%d”,&ai);printf("n");i=start-1;/為了保持起始條件匹配k=0;for(j=1;)/為死循環i+;if (i=num)為了實現每次i的循環遍歷A數組i=i%num;if (ai!=0)只有ai不為零時,才能j+j+;if (j=count)達至U間隔數bk+=ai; 將a數組的彳I賦給b數組ai=0;j=0;/使記錄間隔的重新開始計數if (k=num)/ 當b數組有了 a數據全部數據時,結束循環 break;printf(" 標準順序為:n");for(k=0;k<nu

7、m;k+)printf(" %d",bk);printf("n");3、完整的程序:#include"stdio.h"void main()int a10,b10,i,j,k,count,num,start;printf("請輸入總數:");scanf("%d",&num);printf(" 請輸入間隔數:");scanf("%d",&count);printf("請輸入起始位置:");scanf("%d&qu

8、ot;,&start);printf("n");while(start>num)printf("請重新輸入:n");printf("請輸入總數:");scanf("%d",&num);printf("請輸入起始位置:");scanf("%d",&start);printf("請輸入數據:n");for (i=0;i<num;i+)scanf("%d”,&ai);printf("n")

9、;i=start-1;k=0;for(j=1;)i+;if (i=num)i=i%num;if (ai!=0)j+;if (j=count)bk+=ai;ai=0;j=0;if (k=num)break;printf("標準順序為:n");for(k=0;k<num;k+)printf(" %d",bk);printf("n");七、程序使用說明及測試結果1、程序使用說明(1)本程序的運行環境為 VC6.0。(2)進入演示程序后即顯示提示信息:輸入一個鏈表,首先輸入數據總數, 然后輸入間隔數,再輸入起始位置,若起始位置大 于數據

10、總數,會提示錯誤,要求重新輸入起始位置,直至起始位置不大于總數。然后開始輸 入數據,數據以空格隔開,最后輸出結構。2.數據輸入如:輸入數據總數8,間隔數4,起始位置1,輸入數據1 2 3 4 5 6 7 8輸出的鏈表為:4 8 5 2 1 3 7 63、調試中的錯誤及解決辦法。開始遇到很多問題,但是重新改善一下編程的思路,通過逐步的調試可以看到正確的結 果。數據輸入的流程如下運行界面先輸入8后,回車:XDociuent s再輸入間隔數4后回車:輸入起始位置。:Dacuen*w and 5Mtin/Adaim區teton桌面'實用二罅表表示茯 法DeL. ht輸人總市"C:D&

11、#187;cii»ents 叼口 5Mtin/'ASini品泉面'實用二'躥表表示茯 法DeL._*H:4置 ,數位二 莪隔始據 莒向起致 R人入入 二1一二* .), 鬻請胃輸入數據1 2 3 4 5 6 7 8,回車:一"C; Dacu*ents and 5近11小號人(1>1也3七工事t0工泉面實用二罅表表示津 法1Deb. . .1 2 3 4 S a 71 2 3 4 5 fc 7 師選后的結果為4 8 S 2 1 3 7Press an/ kevcont i nue篩選后的結果就如屏幕所示若中途輸入的起始位置為 9,回車,會提示如下"C: D»cii*enTs and 5Mtin/'ASini品tmtoi'泉面'實用二'罅表表示茯 法DeL總.問起啕 人入入位新t 9蜘4位置小篇髓下輸入n八、實驗小結:你在編程過程中花時多少?總共用來將近2小時多少時間在紙上設計?大約有半個小時在紙上設計多少時間上機輸入和調試?45 分鐘左右多少

溫馨提示

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

評論

0/150

提交評論