猴子選大王課程設計報告_第1頁
猴子選大王課程設計報告_第2頁
猴子選大王課程設計報告_第3頁
猴子選大王課程設計報告_第4頁
猴子選大王課程設計報告_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

-.z.課程設計報告課程設計題目:猴子選大王學生:吳兆專業(yè):軟件工程班級:1321813學號:6指導教師:吳建東2015年1月9日東華理工大學目錄一:需求分析問題描述根本要求需求分析二:概念設計三:詳細設計四:調(diào)試分析和測試結果五:總結六:源代碼一:需求分析問題描述一堆猴子都有編號,編號是1,2,3...m,這群猴子〔m個〕按照1-m的順序圍坐一圈,從第1開場數(shù),每數(shù)到第N個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。根本要求輸入數(shù)據(jù):輸入m,nm,n為整數(shù),n<m。輸出形式:中文提示按照m個猴子,數(shù)n個數(shù)的方法,輸出為大王的猴子是幾號,建立一個函數(shù)來實現(xiàn)此功能。3.需求分析1.輸入數(shù)據(jù)m,n。2.計算出最終猴子大王的序號。3.模擬出整個過程4.找到適宜的數(shù)據(jù)構造處理這個問題。5.找到正確的方法解決這個問題。二:概念設計這個問題屬于約瑟夫環(huán)問題,根據(jù)問題描述得知,該問題中m個猴子圍坐在一群形成首尾相接的環(huán),因此可用循環(huán)鏈表解決。從第n個猴子開場出列相當于從鏈表中刪除一個節(jié)點。該程序主要有三個模塊組成,建立循環(huán)鏈表,報數(shù)利用循環(huán)鏈表實現(xiàn)猴子的出列,最終剩下的猴子即猴王。具體步驟如下:第一步首先創(chuàng)立循環(huán)鏈表。第二步向鏈表中填入猴子的編號。第三步找第一個開場報數(shù)的猴子。第四步數(shù)到n讓這個猴子出列。第五步接著開場報數(shù),重復第四步,直到剩下最后一個猴子,就是大王。程序流程圖如下:開場開場進展1-m的報數(shù)進展1-m的報數(shù)刪除第n只猴子刪除第n只猴子否剩下的猴子數(shù)是否為1剩下的猴子數(shù)是否為1是輸出猴子大王的序號輸出猴子大王的序號完畢完畢三:詳細設計程序中使用的存儲構造structL{ intnum; structL*ne*t;};intn;inti=0;程序中使用的循環(huán)構造structL*LisDelete(structL*head,intm)//報數(shù)為m的退出.{ structL*p,*q; intj=0; p=head; i=i+1; if(p->ne*t==head)return(p); while(j<m-2) { p=p->ne*t; j=j+1; } q=p->ne*t;p->ne*t=q->ne*t; head=p->ne*t; printf("%d第%d個猴子離開.\n",i,q->num); free(q); LisDelete(head,m);}主函數(shù)voidmain(){ structL*head; structL*p; intm,N; printf("*********************************************************\n"); printf("猴子選大王:\n"); printf("一堆猴子都有編號,編號1,2,3...m,這群猴子(m個)按照1-m\n"); printf("的順序圍坐一圈,從第1開場數(shù),每數(shù)到第n(n<m)個,該猴子就要\n"); printf("離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該\n"); printf("猴子為大王\n"); printf("*********************************************************\n"); printf("輸入n(所有猴子的總數(shù)):"); scanf("%d",&N); printf("輸入m(離開的猴子所報的數(shù)):"); scanf("%d",&m); printf("***********************************\n"); if(m>N||m<=0||N<=0) { ERROR(); } else { if(m==1) { printf("結果:第%d個猴子為大王.\n",N); } else {head=creat(N); printf("過程:\n"); p=LisDelete(head,m);printf("***********************************\n"); printf("結果:第%d個猴子為大王.\n",p->num); printf("***********************************\n"); } }}四:調(diào)試分析和測試結果得到了預期的結果五:總結本次課程設計,參考了相關教科書和參考書對二分法查找與各種排序方法的描述,對相關功能所需構造體和函數(shù)有了初步構思之后,經(jīng)過代碼的輸入、語法改錯,調(diào)試執(zhí)行等過程,完成了一個簡單的功能系統(tǒng)。通過一周時間,從初步思路形成到根本功能完成,對數(shù)據(jù)構造設計實踐與應用局部根本了解了。從本次課程設計我覺得我應該把所學根底知識與具體問題實踐結合,根本知識要扎實,對待問題要各方面分析。數(shù)據(jù)構造與算法設計是一種鍛煉人清晰思路的科目,我們應該通過屢次實踐讓自己的知識得到穩(wěn)固。六:源代碼*include<stdio.h>*include<malloc.h>*defineNULL0*defineLENsizeof(structL)structL{ intnum; structL*ne*t;};intn;inti=0;structL*creat(intN)//建立動態(tài)循環(huán)鏈表.{ printf("將猴子順序編號為:\n"); structL*head; structL*p1,*p2; n=0; p1=p2=(structL*)malloc(LEN); p1->num=1; printf("%d",p1->num); head=NULL; while(p1->num<=N) { n=n+1; if(n==1)head=p1; elsep2->ne*t=p1; p2=p1; p1=(structL*)malloc(LEN); p1->num=n+1; if(p1->num<=N) printf("%d",p1->num); } p2->ne*t=head;//尾指針指向頭指針. printf("\n"); printf("***********************************\n"); printf("\n"); return(head);}structL*LisDelete(structL*head,intm)//報數(shù)為m的退出.{ structL*p,*q; intj=0; p=head; i=i+1; if(p->ne*t==head)return(p); while(j<m-2) { p=p->ne*t; j=j+1; } q=p->ne*t;p->ne*t=q->ne*t; head=p->ne*t; printf("%d第%d個猴子離開.\n",i,q->num); free(q); LisDelete(head,m);}ERROR(){ printf("m>N或者m<=0或者N<=0!!!ERROR!\n");}voidmain(){ structL*head; structL*p; intm,N; printf("*********************************************************\n"); printf("猴子選大王:\n"); printf("一堆猴子都有編號,編號1,2,3...m,這群猴子(m個)按照1-m\n"); printf("的順序圍坐一圈,從第1開場數(shù),每數(shù)到第n(n<m)個,該猴子就要\n"); printf("離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該\n"); printf("猴子為大王\n"); printf("*********************************************************\n"); printf("輸入n(所有猴子的總數(shù)):"); scanf("%d",&N); printf("輸入m(離開的猴子所報的數(shù)):"); scanf("%d",&m); printf("***********************************\n"); if(m>N||m<=0||N<=0) { ERROR(); } else { if(m==1) { printf("結果:第%d個猴子為大王.\n",N); } else { h

溫馨提示

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

評論

0/150

提交評論