邏輯表達(dá)式課程設(shè)計(jì)報(bào)告_第1頁(yè)
邏輯表達(dá)式課程設(shè)計(jì)報(bào)告_第2頁(yè)
邏輯表達(dá)式課程設(shè)計(jì)報(bào)告_第3頁(yè)
邏輯表達(dá)式課程設(shè)計(jì)報(bào)告_第4頁(yè)
邏輯表達(dá)式課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、邏輯表達(dá)式課程設(shè)計(jì)報(bào)告中北大學(xué)課程設(shè)訃報(bào)告2016/2017學(xué)年第一學(xué)期信息與通信工程學(xué)院學(xué)院:專(zhuān)業(yè):電子信息科學(xué)與技術(shù)學(xué)生姓名:向偉學(xué)號(hào):1503044245課程 設(shè)訃題LI:邏輯表達(dá)式的合理性判斷起迄日期:2016年12月12日,2016年12月30日課程設(shè)計(jì)地點(diǎn):科 學(xué)樓五院106指導(dǎo)教師:李建民提交報(bào)告日期:2016年 月 日1設(shè)計(jì)要求一、邏輯表達(dá)式的合理性判斷任務(wù):(自己解析后的具體任務(wù));,編寫(xiě)鍵盤(pán)輸入與文件讀取表達(dá)式的程序;,編寫(xiě)可以依次進(jìn)行識(shí)別判斷表達(dá)式的程序;,整理表達(dá)式錯(cuò)誤類(lèi)型,并且編寫(xiě)分類(lèi)進(jìn)行錯(cuò)誤原因分析的提示程序;,編寫(xiě) 掃描表達(dá)式的程序;,分類(lèi)編寫(xiě)檢測(cè)邏輯運(yùn)算符,操作

2、數(shù)以及括號(hào)是否合法的程序;,編寫(xiě)刪除所 有空格操作的程序二、要求(自己程序能達(dá)到的指標(biāo)),表達(dá)式既能手動(dòng)輸入,乂能從文件中讀取,并且能有多個(gè)表達(dá)式;,可以輸 入任意表達(dá)式(含所有可輸入的字符及符號(hào)),程序?qū)⑦M(jìn)行自動(dòng)判別是否為邏輯表達(dá)式;,能自動(dòng)刪除所有空格;,程序可以分析輸入的表達(dá)式的所有錯(cuò)誤類(lèi)型并輸出到顯示器上;,程序優(yōu)先 對(duì)括號(hào)合法性進(jìn)行判斷,包含所有括號(hào)的組合情況;算法分析與程序詳解一、整體結(jié)構(gòu)整個(gè)程序分為:表達(dá)式數(shù)據(jù)的讀取,空格刪除,括號(hào)(多重)的掃描判斷與記 錄,運(yùn)算符的掃描與檢測(cè),操作數(shù)的掃描與檢測(cè)。二、各個(gè)函數(shù)的詳細(xì)說(shuō)明:1. Deletespace函數(shù),傳入表達(dá)式字符數(shù)組,以及

3、字符坐標(biāo),循環(huán)檢測(cè)并刪除 空格,每次調(diào)用完該函數(shù)后繼續(xù)檢查當(dāng)前坐標(biāo)位置是否為空格,若仍然為空格將繼 續(xù)調(diào)用該函數(shù),直至當(dāng)前位置不再是空格,將繼續(xù)循環(huán)檢測(cè)下一個(gè)坐標(biāo)。2. Getmount函數(shù):為了解決scanf函數(shù)和gets函數(shù)同時(shí)使用時(shí)產(chǎn)生的bug(若使用 了前者再使用或者,或者將會(huì)自動(dòng)接收前者的一個(gè)換行符,導(dǎo)致后者第一個(gè)數(shù)2據(jù)無(wú)法正常輸入),使用該函數(shù)將輸入的字符數(shù)字通過(guò)ASCII碼轉(zhuǎn)換成整型數(shù) 字。3. Operator函數(shù):在對(duì)表達(dá)式進(jìn)行從頭至尾的掃描過(guò)程中若匹配到含邏輯運(yùn)算 符的字符,則返回成功,否則返回失敗,并輸出錯(cuò)誤類(lèi)型的提示信息,本次判斷將 就此結(jié)束。4. Bracket函數(shù):

4、從左至右掃描過(guò)程中,發(fā)現(xiàn)括號(hào)后檢查括號(hào)是否合法,若合 法,用一個(gè)二維數(shù)組記錄檢測(cè)到的合法括號(hào)的位置信息,并且返回此信息,若不合 法,返回不合法類(lèi)型,并且輸出錯(cuò)誤類(lèi)型的提示信息,本次判斷將就此結(jié)束。5. Repeat函數(shù):主要檢查是否含有重復(fù)的無(wú)用括號(hào),例如“(xxx)”,具體方 法是,設(shè)置該函數(shù)返回的缺省值是有重復(fù),在循環(huán)檢測(cè)的過(guò)程中,分別用兩個(gè)數(shù)組 記錄連續(xù)的左右括號(hào)的位置,然后用兩個(gè)for循環(huán)實(shí)現(xiàn)從左括號(hào)位置到右括號(hào)位置 的交義掃描,如果出現(xiàn)了括號(hào),則修改缺省值為沒(méi)有重復(fù),并且立刻跳出內(nèi)部for 循環(huán)的掃描,進(jìn)行外層for循環(huán)的下一次掃描,如果某次內(nèi)部掃描完畢后都沒(méi)有出 現(xiàn)括號(hào),則缺省值不

5、會(huì)被修改,將直接跳出外層循環(huán),并且返回有重復(fù),輸出錯(cuò)誤 類(lèi)型提示,結(jié)束本次判斷。6. Scan函數(shù):掃描運(yùn)算符的函數(shù),其掃描方式為根據(jù)Bracket函數(shù)和提供的位 置進(jìn)行掃描,如果匹配到運(yùn)算符,并且檢測(cè)到該運(yùn)算符合法,將調(diào)用相關(guān)運(yùn)算符檢 測(cè)函數(shù),進(jìn)行運(yùn)算符的檢測(cè)。7. Single函數(shù):一元運(yùn)算符及操作數(shù)檢測(cè)函數(shù),根據(jù)一元運(yùn)算符的特征進(jìn)行判 斷該運(yùn)算符到附近的運(yùn)算符或者前面左括號(hào)后面右括號(hào)之間的操作數(shù)是否合法,規(guī) 定操作數(shù)為字母或字母組合為合法。若后面緊接著出現(xiàn)左括號(hào)則也認(rèn)為操作數(shù)合 法。8. Double函數(shù):二元運(yùn)算符及操作數(shù)檢測(cè)函數(shù),根據(jù)二元運(yùn)算符的特征進(jìn)行判 斷該運(yùn)算符到附近的運(yùn)算符或

6、者前面左括號(hào)后面右括號(hào)之間的操作數(shù)是否合法,規(guī) 定操作數(shù)為字母或字母組合為合法。若后面緊接著出現(xiàn)左括號(hào)或者詢面緊接著出現(xiàn) 右括號(hào)則也認(rèn)為操作數(shù)合法。三、程序運(yùn)行過(guò)程每個(gè)函數(shù)具體如何工作請(qǐng)參考第二部分對(duì)各個(gè)函數(shù)的詳細(xì)說(shuō)明。程序從主函數(shù)開(kāi)始運(yùn)行,首先進(jìn)入數(shù)據(jù)來(lái)源方式的選擇,用變量select表示,輸入1或2分別進(jìn)入文件讀取數(shù)據(jù)和鍵盤(pán)輸入數(shù)據(jù)的程序模塊,在讀取到數(shù)據(jù) 后,進(jìn)入刪除空格函數(shù)Deletespace函數(shù)刪除空格后返回新的數(shù)據(jù),緊接著調(diào)用 Operator函數(shù),檢測(cè)是否存在運(yùn)算符,若沒(méi)有則返回該錯(cuò)誤類(lèi)型,若有則進(jìn)入 Bracket函數(shù)對(duì)括號(hào)進(jìn)行掃描,若有括號(hào),括號(hào)沒(méi)有正常成對(duì),則返回該錯(cuò)誤類(lèi)

7、 型,若沒(méi)有括號(hào),將直接從表達(dá)式開(kāi)始到表達(dá)式結(jié)尾進(jìn)行Scan函數(shù)掃描,若有括 號(hào),且成對(duì),則調(diào)用Repeat函數(shù)進(jìn)行多余重復(fù)括號(hào)檢查,若存在多余括號(hào),則返 回該錯(cuò)誤類(lèi)型,若不存在,則返回Bracket函數(shù)生成的括號(hào)坐標(biāo)位置信息,3并根據(jù)該信息進(jìn)行循環(huán)Scan函數(shù)掃描,如果匹配到運(yùn)算符,并且檢測(cè)到該運(yùn) 算符合法,根據(jù)運(yùn)算符類(lèi)型的不同選擇調(diào)用Single函數(shù)(一元運(yùn)算符)和Double函 數(shù)(二元運(yùn)算符),進(jìn)行操作數(shù)檢查,若不合法則返回相應(yīng)錯(cuò)誤類(lèi)型,若合法,則返 回正確。刃外第五部分附有流程圖四、錯(cuò)誤類(lèi)型說(shuō)明函數(shù)名返回值錯(cuò)誤類(lèi)型Operator -1表達(dá)式無(wú)運(yùn)算符Repeat -2表達(dá)式存在多余重

8、復(fù)括號(hào)Bracket -3表達(dá)式括號(hào)不成對(duì)-4運(yùn)算符不正確(符號(hào)前非法)Scan-5運(yùn)算符不正確(符號(hào)后非法)-6 一元運(yùn)算符操作數(shù)個(gè)數(shù)有誤Single-7操作數(shù)直接缺失運(yùn)算符-8操作數(shù)非字母組合-9二元運(yùn)算符缺失操作數(shù)Double-10操作數(shù)非字母組合4五、流程圖1、表達(dá)式數(shù)據(jù)的讀取開(kāi)始鍵盤(pán)輸入selectselectcase標(biāo)號(hào)2標(biāo)號(hào)1 default選擇有誤鍵盤(pán)輸入表達(dá)文件讀取表重新輸入式以及個(gè)數(shù)n達(dá)式結(jié)束52. 空格刪除操作當(dāng)發(fā)現(xiàn)當(dāng)前表達(dá)式中有空格時(shí),調(diào)用Deletespace (char (*string) m, inti, int j)函數(shù)開(kāi)始int t=jstringit!=0&

9、stringit- nNo YesstringCiZ t=stringLiZ t+1;t+6六、運(yùn)行結(jié)果利用文件讀取各種錯(cuò)誤類(lèi)型的表達(dá)式如下:(按每行四個(gè)表達(dá)式列出,表達(dá)式間用換行隔開(kāi))saff & asdf !(fsI fsf)& &da fs!#fs(f|(s|dfs) f|(s|%fsf) (fs!#fs)fsd!fas fds(!fs, da) saf3 dadadaf j sf2+h adaf sf2+h !d(asd)i sa sdaf fa I(dad d)其程序運(yùn)行部分結(jié)果如下圖|第1個(gè)表達(dá)式為:saff & asdf表達(dá)式正確!第2個(gè)表達(dá)式為:!Cfs| |fsf)& &da

10、 表達(dá)式正確!第3個(gè)表達(dá)式為;f 5 !5表達(dá)式錯(cuò)誤!原因是:運(yùn)算符不正確(符號(hào)后非法)J第4個(gè)表達(dá)式為;Cfll(sllldfs)表達(dá)式錯(cuò)誤!原因是:運(yùn)算符不正確(符號(hào)后非法)1第6個(gè)表達(dá)式為;Cfs!#fs)表達(dá)式錯(cuò)誤!原因足:運(yùn)算符不正確(符兮后非法)1*7個(gè)表達(dá)式為;fsdlfas表達(dá)式錯(cuò)誤!原因足:一元運(yùn)算符的操作數(shù)個(gè)數(shù)有誤!弟8個(gè)表達(dá)式為:fds(!fs| |da)表達(dá)式錯(cuò)誤!原因是:操作數(shù)之間缺失運(yùn)算符!第9個(gè)表達(dá)式為:saf3| |dad衷達(dá)式錯(cuò)謀!原因是:操作數(shù)非字母組合!第:LQ個(gè)表達(dá)戎為:adaf | |sf 2+h 表達(dá)式錯(cuò)誤!原因是:操作數(shù)非字母組合!請(qǐng)選擇輸入數(shù)據(jù)來(lái)

11、源方武愉入丄選捋縫盤(pán)讀取.輸入2選擇文 件讀取 select :2請(qǐng)輸入邏輯表達(dá)武個(gè)數(shù)nn=33請(qǐng)綸入霜要測(cè)試的邏輯表達(dá)式,并以回車(chē)鍵隔開(kāi): 文件正存讀取.文伴數(shù)據(jù)己經(jīng)讀取完畢!文件數(shù)搞-共有丄S項(xiàng):舉例說(shuō)明:1. 如輸入:Cdll (fs | | da)表達(dá)式,經(jīng)a Deletespace函數(shù)刪除空格后返回新 的表達(dá)式為cdll(fsllda),然后進(jìn)行Operator函數(shù)檢查是否存在操作符,此處存在,則 調(diào)用Repeat函數(shù)進(jìn)行多余重復(fù)括號(hào)檢查,此處不存在,則進(jìn)入Bracket函數(shù)對(duì)括 號(hào)進(jìn)行掃描,此處有括號(hào),并且記錄括號(hào)位置4、11,然后調(diào)用Repeat函數(shù)進(jìn)行 多余重復(fù)括號(hào)檢查,此處無(wú)

12、多余括號(hào),然后根據(jù)坐標(biāo)位置信息進(jìn)行循環(huán)Scan函數(shù) 掃描,此處掃描到“丨丨”,為二元運(yùn)算符,則調(diào)用Double函數(shù),進(jìn)行操作數(shù)檢 查,前面為fs,后面為“da”,均為合法操作數(shù),括號(hào)內(nèi)部掃描完畢后,掃描括號(hào) 外部,從位置0,此處掃描到“丨丨”,為二元運(yùn)算符,則調(diào)用Double函數(shù),進(jìn)行操作數(shù)到位 置4檢查,前面為“ cd”,后面為“(”,均為合法操作數(shù),最后在位置13掃描到 結(jié)束符,則結(jié)束當(dāng)前表達(dá)式掃描,并且返回正確提示,進(jìn)行下一個(gè)表達(dá)式判斷。2. 如輸入saff asdf表達(dá)式,經(jīng)過(guò)Deletespace函數(shù)刪除空格后返回新的表達(dá) 式為sdff asdf,然后進(jìn)行Operator函數(shù)檢查是否

13、存在操作符,此處不存在,則 返回“第1個(gè)表達(dá)式?jīng)]有邏輯運(yùn)算符”的錯(cuò)誤提示,并且結(jié)束當(dāng)前表達(dá)式判斷,進(jìn) 入下一個(gè)表達(dá)式的判斷。七、總結(jié)技術(shù)方面:1. 良好的編程習(xí)慣真的很重要,它可以幫助自己減少錯(cuò)誤率,還能更好更快地 回看和理自己的程序,大大提高程序的可讀性。比如寫(xiě)好注釋和較好的排版。2. 注意變量的生命周期,既能節(jié)省內(nèi)存資源,乂可以避免變量賦值不正確。3. 編寫(xiě)程序前應(yīng)該先整理需要考慮的所有情況,包括特殊情況,避免出現(xiàn)bugo4. 除了使用編程環(huán)境自帶的調(diào)試功能逐步或斷電調(diào)試程序外,還可以自己在程 序中適當(dāng)位置通過(guò)屏幕輸出提示進(jìn)行調(diào)試。3. 盡量使用最優(yōu)算法,既能提高自己的思維能力,乂能使程序

14、簡(jiǎn)潔而高效。6. 要給每一個(gè)函數(shù)起一個(gè)好名稱,做到見(jiàn)名知義的程度方便對(duì)程序整體的快速 理解。7. 在編寫(xiě)一個(gè)項(xiàng)LI或程序時(shí)應(yīng)事先考慮到需要定義的函數(shù),把且有相同功能的 部分抽象到一個(gè)函數(shù)時(shí),減少代碼冗余。如本程序中的Scan函數(shù)。88. 一個(gè)函數(shù)應(yīng)該只解決一個(gè)功能或問(wèn)題。心得體會(huì)方面:通過(guò)近兩周的奮斗,課程設(shè)計(jì)接近了尾聲。經(jīng)過(guò)兩周的奮戰(zhàn)我們的課程設(shè)計(jì)終于完成了。在沒(méi)有做課程設(shè)訃以前覺(jué)得課程設(shè)訃只是對(duì)C語(yǔ)言這門(mén)課程所學(xué)知識(shí)的 單純總結(jié),但是通過(guò)這次做課程設(shè)計(jì)發(fā)現(xiàn)自己的看法有點(diǎn)太片面。課程設(shè)計(jì)不僅是 對(duì)前面所學(xué)知識(shí)的一種檢驗(yàn),而且也是對(duì)自己能力的一種提高。通過(guò)這次課程設(shè)計(jì) 使我們明白了自己原來(lái)知識(shí)

15、還比較欠缺。自己要學(xué)習(xí)的東西還太多,以前老是覺(jué)得 自己什么東西都會(huì),什么東西都懂,有點(diǎn)眼高手低。通過(guò)這次課程設(shè)計(jì),我們才明 白學(xué)習(xí)是一個(gè)長(zhǎng)期積累的過(guò)程,在以后的工作、生活中都應(yīng)該不斷的學(xué)習(xí),提高自 己的知識(shí)和綜合素質(zhì)。在這次課程設(shè)計(jì)中也使我們們的同學(xué)關(guān)系更進(jìn)一步了,同學(xué)之間互相幫助,有 什么不懂的大家在一起商量,聽(tīng)聽(tīng)不同的看法對(duì)我們們更好的理解知識(shí),所以在這 里非常感謝幫助我們的同學(xué)??傊蠹叶颊J(rèn)為萬(wàn)事開(kāi)頭難,不知道如何入手。最后終于做完了有種如釋重 負(fù)的感覺(jué)。此外,還得出一個(gè)結(jié)論:知識(shí)必須通過(guò)應(yīng)用才能實(shí)現(xiàn)其價(jià)值有些東西 以為學(xué)會(huì)了,但真正到用的時(shí)候才發(fā)現(xiàn)是兩回事,所以我們認(rèn)為只有到真正會(huì)用的 時(shí)候才是真的學(xué)會(huì)了。通過(guò)這次課程設(shè)計(jì),我們們即學(xué)會(huì)了使用VC6.0軟件和 codeblocks軟件,也掌握了一些有用的知識(shí),這對(duì)我們們以后的學(xué)習(xí)和生活非常 的有幫助,也使得我們們對(duì)自己的總體知識(shí)水平有了一個(gè)了解。懂得了知識(shí)的重要 性。使我們學(xué)會(huì)了如何運(yùn)用所學(xué)的知識(shí)收集、歸納相關(guān)資料解決具體問(wèn)題的方法, 加強(qiáng)了我們的動(dòng)手能力、分析和解決問(wèn)題的能力、以及增強(qiáng)綜合運(yùn)用知識(shí)的能力。 同時(shí)對(duì)自己應(yīng)用計(jì)算機(jī)的水平有了一個(gè)更深刻的了解,我們?cè)诮窈蟮膶W(xué)習(xí)和生活 中,可以有針對(duì)性的學(xué)習(xí)和改善。在此要感謝我們的指導(dǎo)老師李老師對(duì)我們的悉心

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論