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

下載本文檔

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

文檔簡介

1、傳播優秀word版文檔 ,希望對您有幫助,可雙擊去除!課程設計報告課程設計題目:猴子選大王學生姓名:吳兆專 業:軟件工程班 級:1321813學 號:201320181306 指導教師:吳建東 2015年 1 月 9 日 東華理工大學目錄一:需求分析1. 問題描述2. 基本要求3. 需求分析二:概念設計三:詳細設計四:調試分析和測試結果五:總結六:源代碼一:需求分析1. 問題描述 一堆猴子都有編號,編號是1,2,3 .m ,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。2. 基本要求 輸入數據

2、:輸入m,n m,n 為整數,n<m。 輸出形式:中文提示按照m個猴子,數n 個數的方法,輸出為大王的猴子是幾號 ,建立一個函數來實現此功能。 3.需求分析 1.輸入數據m,n。 2.計算出最終猴子大王的序號。 3.模擬出整個過程 4.找到合適的數據結構處理這個問題。 5.找到正確的方法解決這個問題。二:概念設計這個問題屬于約瑟夫環問題,根據問題描述得知,該問題中m個猴子圍坐在一群形成首尾相接的環,因此可用循環鏈表解決。從第n個猴子開始出列相當于從鏈表中刪除一個節點。該程序主要有三個模塊組成,建立循環鏈表,報數利用循環鏈表實現猴子的出列,最終剩下的猴子即猴王。具體步驟如下:第一步 首先創

3、建循環鏈表。第二步 向鏈表中填入猴子的編號。第三步 找第一個開始報數的猴子。第四步 數到n讓這個猴子出列。 第五步 接著開始報數,重復第四步,直到剩下最后一個猴子,就是大王。程序流程圖如下:開始進行1-m的報數刪除第n只猴子否剩下的猴子數是否為1是輸出猴子大王的序號結束三:詳細設計1. 程序中使用的存儲結構struct lint num;struct l *next; ;int n;int i=0;2. 程序中使用的循環結構struct l *lisdelete(struct l *head,int m)/報數為m的退出.struct l *p,*q;int j=0;p=head;i=i+1;

4、if(p->next=head) return(p);while(j<m-2)p=p->next;j=j+1;q=p->next;p->next=q->next;head=p->next;printf("%d 第%d個猴子離開.n",i,q->num);free(q);lisdelete(head,m);3. 主函數void main()struct l *head;struct l *p;int m,n;printf("*n");printf("猴子選大王:n");printf(&qu

5、ot; 一堆猴子都有編號,編號1,2,3.m,這群猴子(m個)按照1-mn");printf("的順序圍坐一圈,從第1開始數,每數到第n(n<m)個,該猴子就要n");printf("離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該n");printf("猴子為大王n");printf("*n");printf(" 輸入n(所有猴子的總數):");scanf("%d",&n);printf(" 輸入m(離開的猴子所報的數):"

6、;);scanf("%d",&m);printf("*n");if (m>n|m<=0|n<=0)error();elseif(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");四

7、:調試分析和測試結果得到了預期的結果五:總結 本次課程設計,參考了相關教科書和參考書對二分法查找與各種排序方法的描述,對相關功能所需結構體和函數有了初步構思之后,經過代碼的輸入、語法改錯,調試執行等過程,完成了一個簡單的功能系統。通過一周時間,從初步思路形成到基本功能完成,對數據結構設計實踐與應用部分基本了解了。從本次課程設計我覺得我應該把所學基礎知識與具體問題實踐結合,基本知識要扎實,對待問題要各方面分析。數據結構與算法設計是一種鍛煉人清晰思路的科目,我們應該通過多次實踐讓自己的知識得到鞏固。六:源代碼#include <stdio.h>#include <malloc.h

8、>#define null 0#define len sizeof(struct l)struct lint num;struct l *next; ;int n;int i=0;struct l *creat(int n)/建立動態循環鏈表.printf("將猴子順序編號為:n");struct l *head;struct l *p1,*p2;n=0;p1=p2=(struct l *)malloc(len);p1->num=1;printf("%d ",p1->num);head=null;while(p1->num<

9、=n)n=n+1;if(n=1) head=p1;else p2->next=p1;p2=p1;p1=(struct l *)malloc(len);p1->num=n+1;if(p1->num<=n)printf("%d ",p1->num);p2->next=head;/尾指針指向頭指針.printf("n");printf("*n");printf("n");return(head);struct l *lisdelete(struct l *head,int m)/報數為

10、m的退出.struct l *p,*q;int j=0;p=head;i=i+1;if(p->next=head) return(p);while(j<m-2)p=p->next;j=j+1;q=p->next;p->next=q->next;head=p->next;printf("%d 第%d個猴子離開.n",i,q->num);free(q);lisdelete(head,m);error()printf("m>n或者m<=0或者n<=0! error!n");void main()

11、struct l *head;struct l *p;int m,n;printf("*n");printf("猴子選大王:n");printf(" 一堆猴子都有編號,編號1,2,3.m,這群猴子(m個)按照1-mn");printf("的順序圍坐一圈,從第1開始數,每數到第n(n<m)個,該猴子就要n");printf("離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該n");printf("猴子為大王n");printf("*n");printf(" 輸入n(所有猴子的總數):");scanf("%d",&n);printf(" 輸入m(離開的猴子所報的數):");scanf("%d",&m);printf("*n");if (m>n|m<=0|n<=0)error();elseif(m=1)printf(&

溫馨提示

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

評論

0/150

提交評論