




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目 錄課程設(shè)計任務(wù)書 -1=課程設(shè)計任務(wù)書學(xué)生姓名: 趙旭林 專業(yè)班級: 計算機(jī)科學(xué)與技術(shù)0801 指導(dǎo)教師: 楊克 工作單位: 計算機(jī)科學(xué)系 題 目: 計算24點 初始條件:有2、3、4、5、6、7、8、9、10、J、Q、K、A共13張牌,編一程序,判斷對任意給定的4張牌,能否在進(jìn)行加、減、乘、除運算后,其運算結(jié)果等于24。其中J按11計算,Q按12計算,K按13計算,A按1計算。(1)能接受用戶輸入的4張牌點,并進(jìn)行24點判斷,并輸出判定結(jié)果。(2)若能得到結(jié)果24,要求輸出至少一個可得到該結(jié)果的計算表達(dá)式。 例如,對給定的2,7,J,Q,按下述方法計算可得到結(jié)果24: (J-7)*(Q/
2、2) 或 Q*(J-2-7) (3)若不能得到24點,亦應(yīng)輸出提示。要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)課程設(shè)計報告按學(xué)校規(guī)定格式用A4紙打?。〞鴮懀?,并應(yīng)包含如下內(nèi)容: 1. 問題描述簡述題目要解決的問題是什么。2. 設(shè)計存儲結(jié)構(gòu)設(shè)計、主要算法設(shè)計(用類C/C+語言或用框圖描述)、測試用例設(shè)計;3. 調(diào)試報告調(diào)試過程中遇到的問題是如何解決的;對設(shè)計和編碼的討論和分析。4. 經(jīng)驗和體會(包括對算法改進(jìn)的設(shè)想)5. 附源程序清單和運行結(jié)果。源程序要加注釋。如果題目規(guī)定了測試數(shù)據(jù),則運行結(jié)果要包含這些測試數(shù)據(jù)和運行輸出。說明:1. 設(shè)計報告、程序不得相
3、互抄襲和拷貝;若有雷同,則所有雷同者成績均為0分。2. 凡拷貝往屆任務(wù)書或課程設(shè)計充數(shù)者,成績一律無效,以0分記。時間安排:1、第18周完成。2、7月2日8:30時到實驗中心檢查程序、交課程設(shè)計報告、源程序(U盤)。指導(dǎo)教師簽名: 2010年 月 日系主任(或責(zé)任教師)簽名: 2010年 月 日數(shù)據(jù)結(jié)構(gòu)課程設(shè)計正文 -計算24點1. 問題描述在A、2、3、4、5、6、7、8、9、10、J、Q、K中任意選擇4個數(shù),通過這4個數(shù)進(jìn)行任意+ 、- 、*、 /的運算(這四個數(shù)可以任意排列),而且可以添加需要的“()”來進(jìn)行先后運算。看是否能夠得到一個計算式,使得其結(jié)果為24。如果有,則輸出所有的計算式
4、,如果沒有,則輸出相應(yīng)的提示。例如,對給定的2,7,J,Q,按下述方法計算可得到結(jié)果24,并且輸出下列的表達(dá)式: (J-7)*(Q/2)=24 Q*(J-2-7)=24 由于輸入有A、J、Q、K字符型數(shù)據(jù),所以把輸入數(shù)據(jù)存放在char字符型數(shù)組中,并且在程序內(nèi)部定義一個數(shù)組,把輸入的字符型數(shù)據(jù)一一轉(zhuǎn)換為相對應(yīng)的int整型,其中A代表為1,J代表為11,Q代表為12,K代表為13。約束條件:輸入的4個數(shù)不能為重復(fù),如果重復(fù),則輸出錯誤提示,并要求重新輸入。而且輸入的數(shù)不能在所要求的數(shù)之外,如果輸入了不在輸入范圍內(nèi)的數(shù),則也應(yīng)該輸出相應(yīng)錯誤提示,并要求重新輸入。2.實驗設(shè)計2.1 算法設(shè)計:采用窮
5、舉法,把所有可能的情況一一計算,如果計算式得到24,則把相應(yīng)的計算式輸出;假設(shè)選擇A B C D四張牌,#代表操作符,則有以下五種情況: 1.(A#B)#C)#D 2.(A#B)#(C#D) 3.(A#(B#C)#D 4.A#(B#C)#D) 5.A#(B#(C#D)把這些計算式都變成兩兩計算的情況,因此可以把一個計算式分成三個由兩個運算數(shù)組合而成的計算式。其中的“#”可以是+、-、*、/ 中的任何一種運算,并且可以重復(fù)。A、B、C、D不能重復(fù)。由于按照以上的方法,ABCD的順序固定,從而導(dǎo)致有一些情況不能被計算在內(nèi),所以需要列舉出ABCD所有可能的排序狀況,再將A B C D所有的排列組合一
6、一按照上面的五個計算式計算。這樣就能把所有有可能的情況都包含進(jìn)去,不會漏掉某個有可能得到24點的算法。對四個數(shù)沒進(jìn)行完一次排序,則對新的排序序列進(jìn)行24點計算式比較,如果有計算式,則輸出所有的計算式,如果沒有,則輸出提示?,F(xiàn)在程序外定義一些全局變量:cal r,w,t;/三個操作符類char data10;/輸入的數(shù)據(jù)int _data10;/把牌轉(zhuǎn)化為數(shù)字之后存放的數(shù)組bool find=false;/如果find為false,則代表沒有24點計算式,如果為true,則代表有主函數(shù)偽碼設(shè)計為:int main()tranput();/輸入數(shù)據(jù);tran();/轉(zhuǎn)換數(shù)據(jù);trandata();
7、/處理數(shù)據(jù);if(find=false)/如果沒有能得到24點的計算式,輸出提示;return 0;定義4個函數(shù),分別完成相對應(yīng)的功能。void tranput();/作用是讓用戶輸入選擇的牌;void tran();/把字符型的輸入轉(zhuǎn)換為對應(yīng)的數(shù)字,A代表1,J代表11,Q代表12,K代表13;void look();/對于4張牌的一個組合尋找能得出點的表達(dá)式;void trandata();/列出所選擇4張牌的所有可能排列情況,再對每種情況進(jìn)行l(wèi)ook()操作;2.2 偽碼設(shè)計 存儲結(jié)構(gòu)設(shè)計,定義一個cal類,目的是重載操作符。重載函數(shù)返回經(jīng)過重載后操作符運算的結(jié)果。cal類偽碼:clas
8、s cal /操作符類,重載操作符public:char s; /s為操作符cal()double operator()(double a,double b) /重載操作符switch(s)判斷s,對不同的s返回不同的結(jié)果;;tranput()函數(shù)偽碼:void tranput()for(int i=0;i<4;i+)輸入datai;定義一個判斷型數(shù)組judge;do把輸入的數(shù)與判斷型數(shù)組進(jìn)行一一比較,如果不屬于數(shù)組里面的,則輸出輸入錯誤提示;while();for(int j=i-1;j>=0;j-)將正確的當(dāng)前輸入與之前輸入相比較,如果相同代表重復(fù)輸入,輸出錯誤提示;look(
9、)函數(shù)偽碼:void look()定義數(shù)組char,存放+、-、*、/四種運算符for(int i=0;i<4;i+)/不同組合的操作符 選擇一種運算符;for(int i=0;i<4;i+)選擇一種運算符;for(int i=0;i<4;i+)選擇一種運算符;一一對五種表達(dá)式進(jìn)行判斷,如果行,則把find值為true;trandata()偽碼:void trandata() char temp10; for(int i=0;i<4;i+) 四重循環(huán),對ABCD進(jìn)行排列組合,并對每一種排列進(jìn)行l(wèi)ook()操作; 2.3 算法分析: 由于有4個輸入,且在計算的時候這4個數(shù)
10、不能重復(fù)出現(xiàn),所有共有4!=4*3*2*1=24種排 列的情況。而對于操作符而言,共有+、-、*、/四種操作符,而在一個計算式里面操作符顯然可以重復(fù) 出重復(fù)出現(xiàn)。對操作符進(jìn)行全排列,4*4*4*一共有256種排列狀況??傮w分析,在輸入一組數(shù)據(jù)后 后,如果要得出由這組數(shù)據(jù)形成的24點表達(dá)式,則要進(jìn)行256*24=6144次比較后才能得出所有的計算式。2.4 測試用例設(shè)計 1.K K 7 7; /錯誤例子,用來檢測程序健壯性; 2.10 5 6 7; 3.A 6 9 K; 4.Q 7 9 K; 5.R 14 5 K; /錯誤例子,用來檢測程序健壯性;3.程序調(diào)試1.剛開始調(diào)試時,輸入數(shù)據(jù)7,9,J
11、,K出現(xiàn)計算式:(K/(7/J)+9=24,表達(dá)式錯誤,經(jīng)過檢查,發(fā)現(xiàn)在if(t(w(data0,r(data1,_data2),_data3)=24)24點判斷式中把_data0,data1寫成了data0,data1,改正后結(jié)果顯示:沒有相應(yīng)的表達(dá)式。2.剛開始直接定義一個整型數(shù)組(int data),結(jié)果由于輸入有可能是A J Q K字符型,所以不能通過整型數(shù)組來記錄所有的輸入。因此把int data改為char data,因為char型占一個字符,此時能夠正確記錄19和A、J、Q、K,但不能記錄10,每次輸入10的時候總是判斷為非法輸入。嘗試把char data換為string dat
12、a,結(jié)果出現(xiàn): c:usersadministratordocumentsvisual studio 2008projects24點24點24點.cpp(7) : error C2679: 二進(jìn)制“>>”: 沒有找到接受“std:string”類型的右操作 數(shù)的運算符(或沒有可接受的轉(zhuǎn)換) c:programfilesmicrosoftvisualstudio9.0vcincludeistream(1144): “std:basic_istream<_Elem,_Traits>&std:operator >><std:char_traits&l
13、t;char>>(std:basic_istream<_Elem,_Traits> &,signed char *)” with _Elem=char, _Traits=std:char_traits<char> 不知道怎么調(diào)試,所以只能在輸入的時候提示用戶用#來代表10的輸入;例如:輸入5,7,#,K(5,7,10,K) 得到下列的結(jié)果:(5-K)*(7-#)=24 (7-#)*(5-K)=24 (#-7)*(K-5)=24(K-5)*(#-7)=243.因為運算符有交換率,不同的表達(dá)式有可能表達(dá)相同的意思。所以在程序的輸出中有很大一部分結(jié)果是重復(fù)
14、的。例如,輸入3,7,9,K,結(jié)果為:(7*9)-(K*3)=24 (7*9)-(3*K)=24(9*7)-(K*3)=24(9*7)-(3*K)=24 這四個表達(dá)式代表相同的意思,可以用其中任意一個計算式代表其他,但目前為止還沒有想出來好的辦法來進(jìn)行重復(fù)計算式的判斷。4.實驗結(jié)果與分析1.K K 7 7 結(jié)果為:結(jié)果分析:輸入第一個K,符合要求,輸入第二個K,與第一個重復(fù),輸出錯誤提示,后面同理。程序繼續(xù)等待輸入正確數(shù)字。 2.10 5 6 7(#,5,6,7); 結(jié)果為: 結(jié)果分析:為正確輸入,沒有相應(yīng)的24點計算式。3.A 6 9 K;結(jié)果為: 結(jié)果分析:有相當(dāng)多的計算式,不過其中有很多
15、重復(fù)。4.Q 7 9 K;結(jié)果為: 結(jié)果分析:和第二組數(shù)據(jù)一樣,沒有相應(yīng)的24點計算式。5.R 14 5 K 結(jié)果為:結(jié)果分析:由于R和14不在輸入范圍里面,所以導(dǎo)致錯誤提示。程序繼續(xù)等待輸入正確數(shù)字。5.經(jīng)驗和體會 這次的的課程設(shè)計使我收獲了很多平時上課和做練習(xí)不能得到的經(jīng)驗,并且讓我對編程有了更加深入的了解,激發(fā)了我對編程的興趣。1.程序設(shè)計要求程序員要有很清晰的思路和很好的耐心。在拿到題目后,首先應(yīng)該對題目進(jìn)行仔細(xì)的分析,清楚的明白題目的要求、約束條件等等。然后再進(jìn)行算法的設(shè)計。2在進(jìn)行算法的設(shè)計時,往往會有很多不同的思路來解決相同的一個問題。此時要對比這些思路,看看哪一個更適用于目前的算法,哪一個更簡潔,更容易理解,綜合所有的分析來選擇一個相對來說更好的算法來進(jìn)行編程。這樣不僅能夠節(jié)省大量的編程、調(diào)試時間,而且更容易理解,更能提升自己對編程的興趣。3.在編程時候應(yīng)該很仔細(xì),很小心,對于一般的語法錯誤應(yīng)該盡量避免。同時對于一些模棱兩可的想法應(yīng)該盡快查閱書本
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 5以內(nèi)形成課件
- 醫(yī)院飲食分類與管理體系
- 減壓活動實施方案
- 醫(yī)院全面預(yù)算管理編制培訓(xùn)
- 醫(yī)院織物消毒技術(shù)規(guī)范
- 醫(yī)學(xué)基礎(chǔ)知識核心框架
- 植物細(xì)胞吸水和失水生物實驗說課稿
- 中國醫(yī)院三級十等分級管理體系
- T細(xì)胞數(shù)量檢測技術(shù)及應(yīng)用
- 醫(yī)學(xué)專業(yè)畢業(yè)生應(yīng)聘自述
- 2025醫(yī)院醫(yī)療器械不良事件監(jiān)測與報告制度
- 企業(yè)廉潔管理辦法
- 2025年列車長(官方)-高級工歷年參考試題庫答案解析(5卷套題【單項選擇題100題】)
- 動脈置管并發(fā)癥
- 藥品醫(yī)療器械試題及答案
- 2025年甘肅社會化工會工作者招聘考試(公共基礎(chǔ)知識)模擬試題及答案
- 2025年甘肅省高考?xì)v史試卷真題(含答案解析)
- 涂裝(電泳)廢水操作說明書
- 2025年黑龍江省高考地理試卷(含答案)
- 項目完工協(xié)議書
- 門安裝合同協(xié)議書
評論
0/150
提交評論