![c語言課程設(shè)計(jì)-約瑟夫問題_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/28889b5f-e285-4a6b-b415-33c7a2ae578d/28889b5f-e285-4a6b-b415-33c7a2ae578d1.gif)
![c語言課程設(shè)計(jì)-約瑟夫問題_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/28889b5f-e285-4a6b-b415-33c7a2ae578d/28889b5f-e285-4a6b-b415-33c7a2ae578d2.gif)
![c語言課程設(shè)計(jì)-約瑟夫問題_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/28889b5f-e285-4a6b-b415-33c7a2ae578d/28889b5f-e285-4a6b-b415-33c7a2ae578d3.gif)
![c語言課程設(shè)計(jì)-約瑟夫問題_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/28889b5f-e285-4a6b-b415-33c7a2ae578d/28889b5f-e285-4a6b-b415-33c7a2ae578d4.gif)
![c語言課程設(shè)計(jì)-約瑟夫問題_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/9/28889b5f-e285-4a6b-b415-33c7a2ae578d/28889b5f-e285-4a6b-b415-33c7a2ae578d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、約瑟夫問題一目的通過課程設(shè)計(jì),加深對(duì)C語言程序設(shè)計(jì)課程所學(xué)知識(shí)的理解,熟練掌握和鞏 固c語言的基本知識(shí)和語法規(guī)范,包扌舌:數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù) 組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等);程序 結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));庫函數(shù)應(yīng)用(時(shí)間函數(shù)、繪圖函數(shù)以及 文件的讀寫操作函數(shù)等):復(fù)雜任務(wù)功能分解方法(自頂向下逐步求精、模塊化設(shè)計(jì)、 信息隱藏等)。學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語言程序,從而具備利用計(jì)算 機(jī)編程分析解決綜合性實(shí)際問題的初步能力。二需求分析1、約瑟夫問題的算法設(shè)計(jì)使用鏈表構(gòu)成一個(gè)環(huán)形鏈。結(jié)構(gòu)中有三個(gè)成員,其
2、一為指向下一個(gè)人的指針,以 構(gòu)成壞形的鏈;其二為該人是否被仍卞海的標(biāo)記,為0表示還在船上。其三為數(shù)字(130)從第一個(gè)人開始對(duì)尚未仍下海的人進(jìn)行計(jì)數(shù),每數(shù)到9時(shí),將結(jié)構(gòu)中的標(biāo)記改 為1,表示該人已被仍下海了。這樣循環(huán)計(jì)數(shù)直到15個(gè)人被扔下海時(shí)為止。數(shù)據(jù)可以 由用戶輸入。2、功能要求與簡要說明使用菜單操作,提示用戶相應(yīng)的操作;有一定的輔助功能,例:注冊(cè),密碼驗(yàn) 證,在屏幕上查看保存到文件中的結(jié)果。用戶輸入的數(shù)據(jù)及結(jié)果保存到outfile.txt文件中(或自建文件)。三概要設(shè)計(jì)1、可滿足輸入與輸出的形式與限制本程序現(xiàn)只支持英文,只是字符輸入、輸出及整數(shù),本程序可以要求第一次使用 該程序的用戶在開始
3、游戲前必須進(jìn)行簡單的輸入信息(姓名字符形式)及由用戶自己設(shè) 定的密碼,該信息將保存到名為imnia.dat (屬于密文)文件中,卞次該用戶進(jìn)入游戲 時(shí),將可直接輸入信息(姓名及對(duì)應(yīng)密碼)可進(jìn)入游戲(約瑟夫問題),游戲中用戶輸入的有效信息及對(duì)應(yīng)的結(jié)果將保存到名為outfile.txt的文件中,用戶可查詢游戲結(jié)呆, 可在操作界面查看從outfile.txt文件中輸出到屏幕的結(jié)果。運(yùn)行時(shí),機(jī)器會(huì)給用戶提示,并輸出到屏幕上來提示用戶操作,若用戶輸入格式 不正確,程序會(huì)做出判斷,使用戶重新輸入,在密碼注冊(cè)與驗(yàn)證部分(要求用戶輸入字 符在010之內(nèi)),用戶輸錯(cuò)就會(huì)退出:在游戲部分,用戶自測(cè)時(shí)(數(shù)字限制在1
4、00個(gè) 數(shù)之內(nèi)),若超出范圍,將會(huì)提示用戶重新輸入。其他地方的輸入相似,都有此類功 能。方便用戶。2、所達(dá)到的功能及測(cè)試計(jì)劃所實(shí)現(xiàn)的功能有用戶初次進(jìn)入要求注冊(cè);進(jìn)入游戲前要密碼信息(對(duì)使用有了限 制):約瑟夫問題游戲由用戶自己設(shè)定船上人總數(shù)(例:30最優(yōu)為偶數(shù),若為奇數(shù)則 扔下船的人數(shù)為(n-1) /2, 11為總?cè)藬?shù)),及所數(shù)的號(hào)碼(例:9),用戶可直接在操 作界面來檢查以前游戲的結(jié)果(用戶未刪除的情況);outfUe.txt為追加式寫入,用戶在 操作界面可刪除文件中的內(nèi)容,方便使用。1.游戲的輔助功能:用戶注冊(cè)后可通過輸入 密碼進(jìn)入游戲,用戶也可不注冊(cè)進(jìn)入游戲,但略有不同的是注冊(cè)的用戶游戲
5、中,游戲結(jié) 果保存到文件中時(shí)會(huì)加上用戶的注冊(cè)名,方便了用戶的結(jié)果查看,但為了滿足使用的方 便也可直接進(jìn)入游戲。還有在操作界面查看結(jié)呆和刪除結(jié)果的作用。2.約瑟夫游戲中的 功能:用戶可在操作界面自己創(chuàng)建文件;進(jìn)入游戲用戶可按自己的意愿,確定人數(shù)和號(hào) 碼;用戶還可自測(cè)(輸入下海人的號(hào)碼),程序判斷并打分或者直接運(yùn)行出結(jié)果;根據(jù) 用戶自己的要求來結(jié)束或繼續(xù)。3.退出游戲:用戶可在菜單處直接來退出游戲,或者在 子操作結(jié)束后,不回到菜單,直接退出。最后關(guān)于程序的測(cè)試,可以多次測(cè)試,并且根 據(jù)實(shí)際情況和用戶使用的方便角度來測(cè)試,在運(yùn)行正常并能一定程度的容錯(cuò),在進(jìn)一步 優(yōu)化。3、所用數(shù)據(jù)類型的定義及含義此程
6、序運(yùn)用了整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)體。下面是全局(舉例): struct maniiit num;mt state;struct man *next;;/*結(jié)構(gòu)體數(shù)據(jù),用來連接鏈表*/stmct personchai naine20; char niuna5;FILE *fpfile;嚴(yán)結(jié)構(gòu)體數(shù)據(jù),用來信息注冊(cè)*/嚴(yán)指向文件的指針勺chai-tempname20tempimma5=n; /*數(shù)組,用來進(jìn)入游戲保存用戶輸入數(shù)據(jù)的*/ 下面是局部的(舉例):mt1=0;/*整型,用來接受用戶數(shù)據(jù)和函數(shù)中使用*/char c=0,cl,c2;/*字符型字符變量*/charUser100;/
7、*字符型數(shù)組,用于保存輸入的下海人號(hào)碼*/4、各模塊的劃分下面是總體流程(簡化圖):5、各程序模塊功能1. 注冊(cè)信息密碼模塊:用于輸入用戶自己的名稱(字符型),保存到(mima.dat)中。2. 輸入密碼,進(jìn)入游戲模塊:輸入密碼,程序判斷,若在文件(mima.dat屬于密文,在輸入 到文件中的信息經(jīng)過了程序加密)有記錄即可進(jìn)入游戲(3.中介紹游戲模塊)。3.約瑟夫游 戲模塊:用戶先確定寫入的文件;輸入人數(shù)及號(hào)碼;若進(jìn)行自測(cè),用戶自行輸入卜海人的號(hào) 碼,程序會(huì)判斷對(duì)錯(cuò)。若不自測(cè)就直接程序算出結(jié)果。4.在屏幕上顯示結(jié)果模塊:先確定文 件;再把此文件中的結(jié)果輸出到屏幕上。5.刪除文件(默認(rèn)文件out
8、file.txt)中的全部內(nèi)容。6、各函數(shù)之間的調(diào)用關(guān)系主函數(shù)中是菜單的打印(mypnntO函數(shù))和switch各模塊套用與調(diào)用關(guān)系如 F: main()函數(shù)中調(diào) 用 mypnnt();myyuesefu();zhuceQ; nunia();myread();mydelete();int myopen();numaQ;*1調(diào)用 myyuesefuQ;o mvyuesefuQ;中調(diào)用 mt myopenQ; mt lmk(stmct nian *head,int n);。myread()沖調(diào)用intmyopenQ;函數(shù)。Main()函數(shù)把這些函數(shù)聯(lián)系到 一起,各函數(shù)有自己的局部變量,總的有全局變
9、量,在多個(gè)函數(shù)調(diào)用時(shí)則聯(lián)系到一起, 構(gòu)成完整的程序。!1!詳細(xì)設(shè)計(jì)1、流程圖2.主要程序的源代碼(部分)及注釋1、約瑟夫問題代碼:(是本程序的主要代碼,部分代碼)void mvyuesefu()iiit mm1=0;FILE *fpl;char c=0,cl,c2 , User100;struct nian *h,*p.*s;/*用于定義結(jié)構(gòu)體類型的指針*/doclisciQ;/*清除屏幕*/h=creat();/*用于返回一個(gè)結(jié)構(gòu)體型的指針賦給11*/pnntfOpen outfile.txt (1)OR zi jiaii wen jlaii:(2):nchoose:n); c=getche
10、Q;if(c=T)/*自動(dòng)打開默認(rèn)的outfile.txt文件,在D盤下,可改*/fp 1 =fopen(HD:outfile.txtH/,air);嚴(yán)用于打開文件“a”為追加(直接在上次結(jié)果后寫入)7為寫入每次打開上次結(jié)果將清空,路徑雙 (注意)*/elsefpl=myopen();嚴(yán)用于用戶自己建立文件,默認(rèn)保存到D盤下*7/*函數(shù)打開文件返回指向文件的指針*/fpriiitf(fp 1sR 亡 suit is:tempname);priiitf(n,diPlease Input the number of people:sc3nf(”cT;&n);17*003 Please Input
11、the numbe rof people :ii%dn,ii) ;/*寫入文件函數(shù)格式(控制寫入)*/if(luik(h.n)!=l)/*link(h,n)構(gòu)造鏈表 */piiiitf(HKong jian not enough !iiH);/*空間不足的話返回值不為 1*/s=h;p=(struct man*)nialloc(sizeof(sti-uct man);p-next=s;/*額外再分配出一個(gè),即n+1個(gè),但這一個(gè)不使用*/printHmput a number.when dao zlie ge shu shi xia haisc3nf(”d;&m);/input a number
12、,when dao zlie ge shu slii xia hai :n%d,m);printf(MUser sure check useiself (User zi ji su m shu ju pan duaii ):nplease choose (Y /N ): S);c2=getchQ;if(c2y|c2=rY,)printf(H 11GAME BEGIN !User mput the answer byself Game:iiH);fpriiitf(fp 1 /*iiUser input the answer byself Game:iiM);pnntf(MPlease mput
13、tlie nuinber (zi ce shu ju de ge shu ):1T); scanfC%d”,&k);wliile(k= 100|k=0)pnntffWRONG! OVER the (0-100),mput agam:iiH);scanfC%d”,&k);fpiiiitf(fpl Please input the number (zi ce shu ju de ge shu ):%dprintfTlease mput xia hai ien numbei:iiH);fpiiiitf(fpl Please input xia hai ren number/1);foi(i=0;ik
14、;i+)scanfC%d”,&Usei:i);fpiiiitf(fp 1 J%df;Usi);1=0;for(j=0j(ii/2)J+)/* 解釋在下面 */*解釋在下面*/piiiitf(,ttRight answer:nxia iniaii shi xia hai de ren (ing gai an pai huai ren): 1T); fprmtf(fpl/iixia niian shi xia hai de ren (mg gai ail pai huai ren ): 1T);foi(j=0J(ii/2)J+)嚴(yán)雙層for循環(huán),外層用來循環(huán)(n/2)次,即仍下(ii/2)個(gè)人,*
15、/fbr(i=0;inext; if(p-state=l)i-;/*當(dāng)是p-state=l時(shí)為已經(jīng)扔下的人*/*這時(shí)就執(zhí)行1-;則跳過該人*/*當(dāng)數(shù)到m例:9為一次循壞,且一次指向下一個(gè)結(jié)點(diǎn)*/*每數(shù)到m例:9時(shí),輸出所對(duì)數(shù)據(jù),則為卞海的人,*/fbr(i=O;inext;if(p state=l)i-;fbi(i=O;inum) /*用戶輸入值與答案的比較*/1+;嚴(yán)用于記憶相同的個(gè)數(shù),即答對(duì)個(gè)數(shù)p-state=l;piintfpnYoiiT light is:t%2.1fl,(l/(double)k)*100);fprmtftfpl/XiiYour is:t%2. lfnH J,(l/(d
16、ouble)k)* 100);answer number ist%d tyour scorelight answer number ist%d tyour scorefprmtf(fp 1 /dVtpnum);/*p-state=l;llt句為已丟下海的人標(biāo)記為L下次if(pstate=l)時(shí),i- */p-state=l;getchQ;/*則就是不再包含已經(jīng)丟下海的人可fputs(-irfpl); prmtf(niiwaiit to contmue Game:(y/n):n); cl=getch();fclose(fpl);wlule(cl=y|cl=,Y,); 卜面是上述函數(shù)的引用函數(shù):
17、stmct man *creat()嚴(yán)用于關(guān)閉文件,只有關(guān)閉文件后才會(huì)對(duì)數(shù)據(jù)保存*/*判斷是不是繼續(xù)游戲(循環(huán))*/嚴(yán)用于返回頭指針(結(jié)構(gòu)體指針)*/stiuct man *head;head=(struct nian*)nialloc(sizeof(struct man); /*分配空間*/嚴(yán)初始化勺嚴(yán)返回此結(jié)構(gòu)體指針值可head-next=NULL; head-num=l; head-state=O; return (head);mt luik(stiuct man *head.iiit n)嚴(yán)用于連接鏈表的函數(shù)結(jié)點(diǎn)(n個(gè))的函數(shù),返回值為整型,head為全局變量引struct nian
18、*p,*s;iiit i;p=head;fbr(i=l;inext=s;p=s;/*依次首尾相連*/p-num=i+l;/* 賦值,依次加 1*/p-state=O;/*分別記為0 ,變?yōu)?時(shí)即下海*/p-next=liead;return 1;/*若成功返回1則分配空間成功*/2、密碼文件的密文操作(以及讀取時(shí)解碼程序)foi(i=0;istiieii(temp.niuna);i+)/*用于在儲(chǔ)存信息時(shí)加密,使信息變?yōu)槊芪?/J=0;ifj =strlen(temp. name)J=0;temp, niima i=temp.iniina 1 + j+;for(i=0 ;is
19、ulen(temp. mima) ;i+)/*提取用戶的信息后進(jìn)行解碼*/J=0;ifj=strlen()尸o;temp. numai=temp. numa 1 - j+;這是防止打開文件就能查看到用戶的密碼信息,進(jìn)行了加密,使文件內(nèi)容成為密 文,這個(gè)加密安全性并不高,但現(xiàn)在能力有限還不能做的更好,但有一定的加密作用。五調(diào)試分析1、程序問題解決及優(yōu)化設(shè)計(jì)該問題的方法是對(duì)一系列值進(jìn)行賦值,再把扔下的人做記號(hào),用到 了結(jié)構(gòu)體,另一做記號(hào),此題開始想用數(shù)組,但數(shù)組分配特定的空間,浪費(fèi)內(nèi)存空間, 從而使用鏈表,根據(jù)用戶需要來分配空間,這樣既節(jié)省了空間,而且也增大了程
20、序的可 行性。對(duì)于用戶輸入的值一開始沒有進(jìn)行容錯(cuò)設(shè)置,由于程序的限制,輸入的數(shù)值或字 符在長度上有限制,沒有進(jìn)行容錯(cuò),就時(shí)程序運(yùn)行錯(cuò)誤,或是結(jié)果出錯(cuò)(正常運(yùn)行), 誤導(dǎo)用戶。在編寫的過程中還是出現(xiàn)編寫的低級(jí)錯(cuò)誤,這是由于對(duì)知識(shí)的不牢固,和操作的 不熟練導(dǎo)致的錯(cuò)誤,在來連接編譯時(shí)發(fā)現(xiàn)。對(duì)于鏈表的使用不熟練,這次只是把鏈表代替了數(shù)組,但算法沒有改變,用鏈表 還可以通過刪除結(jié)點(diǎn)的操作,再將刪除的結(jié)點(diǎn)連接到一起,組成兩個(gè)鏈表,就是分別是 下海的和在船上的人教徒。則可以添加更多的功能使游戲更有趣,但現(xiàn)在對(duì)鏈表結(jié)點(diǎn)的 刪除與連接不熟練,暫時(shí)還未使用。我會(huì)把鏈表進(jìn)一步熟悉,從而熟練使用。經(jīng)過解決錯(cuò)誤和對(duì)程序
21、的一定程度的優(yōu)化,在提示下正確操作,程序可正確運(yùn) 行。六測(cè)試結(jié)果1測(cè)試結(jié)果結(jié)果運(yùn)行正確:(截屏如下)例子:1、總?cè)?0,數(shù)到9,自測(cè)4個(gè)數(shù)據(jù)9 19 26 5保存到outfile.txto運(yùn)行正確。Open outf ile. txt (DOR zi j ian wen j ian: (2):choose: 1圖 |Please Input the number of people:30inpu t a number, wlien (lao zhe ge shu shi xia hai :9User sure check uscrself ( User zi ji su ru shu ju p
22、an duan ): please choose (Y /N ):GAME BEGIN ?User input the answer byself Game: Please input the number (zi co shu ju de go shu ): 4Please input xia hoi ren number:9 19 26 5your score is:100 0Vour right answer number is2、總?cè)?0,數(shù)到9,直接計(jì)算出正確結(jié)果,保存到自建文件zp.txt中。運(yùn) 行結(jié)果正確。Open outfile.txt (1)OR zi jian wen ji
23、an:(2):choose:2Please in put the file of nane (e.x: outfilel.txt):zp.txtPlease Input the number of people:30input a number,when dao zhe ge shu shi xia hai :9bUser sure check user self ( User zi ji su ru shu ju pan duan ): please choose (V /N ):文件(可編輯(P梧式(O)童看(V)箱助(H)Result is:LPlease Input the numbe
24、r of people:30.input a number, when dao zhe ge shu shi 9User input the answer byself Game: Please input the number (zi ce shu juPlease input xia hai ren number:9Your right answer number is 4haa14 6 )2 huseS91edyour score is5100. 0七用戶使用說明1、運(yùn)行環(huán)境及用戶操作說明1、源代碼可在TC等編譯器下連接編譯運(yùn)行,約瑟夫.exe運(yùn)行環(huán)境要求低。 下面是菜單頁面:Right answer:xianian shi xia hai de ren 1ing gai an pai huai ren ):18276162671930122&822523wantto continue Game:(y/n):3、保存到文件中的內(nèi)容,也無誤。OUTF
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)時(shí)代的網(wǎng)絡(luò)安全技術(shù)及管理策略
- 3 桂花雨(說課稿)-2024-2025學(xué)年統(tǒng)編版語文五年級(jí)上冊(cè)
- 2023九年級(jí)數(shù)學(xué)上冊(cè) 第2章 一元二次方程2.2 一元二次方程的解法2.2.1 配方法第3課時(shí) 用配方法解二次項(xiàng)系數(shù)不為1的一元二次方程說課稿 (新版)湘教版
- Unit 6 Food Lesson 1(說課稿)-2024-2025學(xué)年人教精通版(2024)英語三年級(jí)上冊(cè)001
- 2025房地產(chǎn)委托合同書范本
- 2023九年級(jí)數(shù)學(xué)上冊(cè) 第二十四章 圓24.2 點(diǎn)和圓、直線和圓的位置關(guān)系24.2.2 直線和圓的位置關(guān)系第3課時(shí) 切線長定理說課稿(新版)新人教版001
- 2《我愛我們的祖國》說課稿-2024-2025學(xué)年統(tǒng)編版語文一年級(jí)上冊(cè)
- Unit1 Making friends Part C Make a mind map of making friends(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊(cè)
- 2《我是什么》(說課稿)2024-2025學(xué)年二年級(jí)上冊(cè)語文統(tǒng)編版
- 2025關(guān)于招標(biāo)合同的報(bào)告
- 構(gòu)建綠色低碳的城市生態(tài)系統(tǒng)
- 春節(jié)習(xí)俗中的傳統(tǒng)節(jié)日服飾與裝扮
- 兒童編程課件
- (完整word版)英語四級(jí)單詞大全
- 武裝押運(yùn)操作規(guī)程完整
- 混合動(dòng)力汽車構(gòu)造與檢修(高職新能源汽車專業(yè))PPT完整全套教學(xué)課件
- 小學(xué)體育《運(yùn)動(dòng)前后的飲食衛(wèi)生》課件
- 薪酬專員崗位月度KPI績效考核表
- 技能大賽題庫(空分)
- 污水處理廠設(shè)備的操作規(guī)程(完整版)
- GB/T 28419-2012風(fēng)沙源區(qū)草原沙化遙感監(jiān)測(cè)技術(shù)導(dǎo)則
評(píng)論
0/150
提交評(píng)論