




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、邏輯表達式課程設計報告中北大學課程設訃報告2016/2017學年第一學期信息與通信工程學院學院:專業(yè):電子信息科學與技術(shù)學生姓名:向偉學號:1503044245課程 設訃題LI:邏輯表達式的合理性判斷起迄日期:2016年12月12日,2016年12月30日課程設計地點:科 學樓五院106指導教師:李建民提交報告日期:2016年 月 日1設計要求一、邏輯表達式的合理性判斷任務:(自己解析后的具體任務);,編寫鍵盤輸入與文件讀取表達式的程序;,編寫可以依次進行識別判斷表達式的程序;,整理表達式錯誤類型,并且編寫分類進行錯誤原因分析的提示程序;,編寫 掃描表達式的程序;,分類編寫檢測邏輯運算符,操作
2、數(shù)以及括號是否合法的程序;,編寫刪除所 有空格操作的程序二、要求(自己程序能達到的指標),表達式既能手動輸入,乂能從文件中讀取,并且能有多個表達式;,可以輸 入任意表達式(含所有可輸入的字符及符號),程序?qū)⑦M行自動判別是否為邏輯表達式;,能自動刪除所有空格;,程序可以分析輸入的表達式的所有錯誤類型并輸出到顯示器上;,程序優(yōu)先 對括號合法性進行判斷,包含所有括號的組合情況;算法分析與程序詳解一、整體結(jié)構(gòu)整個程序分為:表達式數(shù)據(jù)的讀取,空格刪除,括號(多重)的掃描判斷與記 錄,運算符的掃描與檢測,操作數(shù)的掃描與檢測。二、各個函數(shù)的詳細說明:1. Deletespace函數(shù),傳入表達式字符數(shù)組,以及
3、字符坐標,循環(huán)檢測并刪除 空格,每次調(diào)用完該函數(shù)后繼續(xù)檢查當前坐標位置是否為空格,若仍然為空格將繼 續(xù)調(diào)用該函數(shù),直至當前位置不再是空格,將繼續(xù)循環(huán)檢測下一個坐標。2. Getmount函數(shù):為了解決scanf函數(shù)和gets函數(shù)同時使用時產(chǎn)生的bug(若使用 了前者再使用或者,或者將會自動接收前者的一個換行符,導致后者第一個數(shù)2據(jù)無法正常輸入),使用該函數(shù)將輸入的字符數(shù)字通過ASCII碼轉(zhuǎn)換成整型數(shù) 字。3. Operator函數(shù):在對表達式進行從頭至尾的掃描過程中若匹配到含邏輯運算 符的字符,則返回成功,否則返回失敗,并輸出錯誤類型的提示信息,本次判斷將 就此結(jié)束。4. Bracket函數(shù):
4、從左至右掃描過程中,發(fā)現(xiàn)括號后檢查括號是否合法,若合 法,用一個二維數(shù)組記錄檢測到的合法括號的位置信息,并且返回此信息,若不合 法,返回不合法類型,并且輸出錯誤類型的提示信息,本次判斷將就此結(jié)束。5. Repeat函數(shù):主要檢查是否含有重復的無用括號,例如“(xxx)”,具體方 法是,設置該函數(shù)返回的缺省值是有重復,在循環(huán)檢測的過程中,分別用兩個數(shù)組 記錄連續(xù)的左右括號的位置,然后用兩個for循環(huán)實現(xiàn)從左括號位置到右括號位置 的交義掃描,如果出現(xiàn)了括號,則修改缺省值為沒有重復,并且立刻跳出內(nèi)部for 循環(huán)的掃描,進行外層for循環(huán)的下一次掃描,如果某次內(nèi)部掃描完畢后都沒有出 現(xiàn)括號,則缺省值不
5、會被修改,將直接跳出外層循環(huán),并且返回有重復,輸出錯誤 類型提示,結(jié)束本次判斷。6. Scan函數(shù):掃描運算符的函數(shù),其掃描方式為根據(jù)Bracket函數(shù)和提供的位 置進行掃描,如果匹配到運算符,并且檢測到該運算符合法,將調(diào)用相關(guān)運算符檢 測函數(shù),進行運算符的檢測。7. Single函數(shù):一元運算符及操作數(shù)檢測函數(shù),根據(jù)一元運算符的特征進行判 斷該運算符到附近的運算符或者前面左括號后面右括號之間的操作數(shù)是否合法,規(guī) 定操作數(shù)為字母或字母組合為合法。若后面緊接著出現(xiàn)左括號則也認為操作數(shù)合 法。8. Double函數(shù):二元運算符及操作數(shù)檢測函數(shù),根據(jù)二元運算符的特征進行判 斷該運算符到附近的運算符或
6、者前面左括號后面右括號之間的操作數(shù)是否合法,規(guī) 定操作數(shù)為字母或字母組合為合法。若后面緊接著出現(xiàn)左括號或者詢面緊接著出現(xiàn) 右括號則也認為操作數(shù)合法。三、程序運行過程每個函數(shù)具體如何工作請參考第二部分對各個函數(shù)的詳細說明。程序從主函數(shù)開始運行,首先進入數(shù)據(jù)來源方式的選擇,用變量select表示,輸入1或2分別進入文件讀取數(shù)據(jù)和鍵盤輸入數(shù)據(jù)的程序模塊,在讀取到數(shù)據(jù) 后,進入刪除空格函數(shù)Deletespace函數(shù)刪除空格后返回新的數(shù)據(jù),緊接著調(diào)用 Operator函數(shù),檢測是否存在運算符,若沒有則返回該錯誤類型,若有則進入 Bracket函數(shù)對括號進行掃描,若有括號,括號沒有正常成對,則返回該錯誤類
7、 型,若沒有括號,將直接從表達式開始到表達式結(jié)尾進行Scan函數(shù)掃描,若有括 號,且成對,則調(diào)用Repeat函數(shù)進行多余重復括號檢查,若存在多余括號,則返 回該錯誤類型,若不存在,則返回Bracket函數(shù)生成的括號坐標位置信息,3并根據(jù)該信息進行循環(huán)Scan函數(shù)掃描,如果匹配到運算符,并且檢測到該運 算符合法,根據(jù)運算符類型的不同選擇調(diào)用Single函數(shù)(一元運算符)和Double函 數(shù)(二元運算符),進行操作數(shù)檢查,若不合法則返回相應錯誤類型,若合法,則返 回正確。刃外第五部分附有流程圖四、錯誤類型說明函數(shù)名返回值錯誤類型Operator -1表達式無運算符Repeat -2表達式存在多余重
8、復括號Bracket -3表達式括號不成對-4運算符不正確(符號前非法)Scan-5運算符不正確(符號后非法)-6 一元運算符操作數(shù)個數(shù)有誤Single-7操作數(shù)直接缺失運算符-8操作數(shù)非字母組合-9二元運算符缺失操作數(shù)Double-10操作數(shù)非字母組合4五、流程圖1、表達式數(shù)據(jù)的讀取開始鍵盤輸入selectselectcase標號2標號1 default選擇有誤鍵盤輸入表達文件讀取表重新輸入式以及個數(shù)n達式結(jié)束52. 空格刪除操作當發(fā)現(xiàn)當前表達式中有空格時,調(diào)用Deletespace (char (*string) m, inti, int j)函數(shù)開始int t=jstringit!=0&
9、stringit- nNo YesstringCiZ t=stringLiZ t+1;t+6六、運行結(jié)果利用文件讀取各種錯誤類型的表達式如下:(按每行四個表達式列出,表達式間用換行隔開)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)其程序運行部分結(jié)果如下圖|第1個表達式為:saff & asdf表達式正確!第2個表達式為:!Cfs| |fsf)& &da
10、 表達式正確!第3個表達式為;f 5 !5表達式錯誤!原因是:運算符不正確(符號后非法)J第4個表達式為;Cfll(sllldfs)表達式錯誤!原因是:運算符不正確(符號后非法)1第6個表達式為;Cfs!#fs)表達式錯誤!原因足:運算符不正確(符兮后非法)1*7個表達式為;fsdlfas表達式錯誤!原因足:一元運算符的操作數(shù)個數(shù)有誤!弟8個表達式為:fds(!fs| |da)表達式錯誤!原因是:操作數(shù)之間缺失運算符!第9個表達式為:saf3| |dad衷達式錯謀!原因是:操作數(shù)非字母組合!第:LQ個表達戎為:adaf | |sf 2+h 表達式錯誤!原因是:操作數(shù)非字母組合!請選擇輸入數(shù)據(jù)來
11、源方武愉入丄選捋縫盤讀取.輸入2選擇文 件讀取 select :2請輸入邏輯表達武個數(shù)nn=33請綸入霜要測試的邏輯表達式,并以回車鍵隔開: 文件正存讀取.文伴數(shù)據(jù)己經(jīng)讀取完畢!文件數(shù)搞-共有丄S項:舉例說明:1. 如輸入:Cdll (fs | | da)表達式,經(jīng)a Deletespace函數(shù)刪除空格后返回新 的表達式為cdll(fsllda),然后進行Operator函數(shù)檢查是否存在操作符,此處存在,則 調(diào)用Repeat函數(shù)進行多余重復括號檢查,此處不存在,則進入Bracket函數(shù)對括 號進行掃描,此處有括號,并且記錄括號位置4、11,然后調(diào)用Repeat函數(shù)進行 多余重復括號檢查,此處無
12、多余括號,然后根據(jù)坐標位置信息進行循環(huán)Scan函數(shù) 掃描,此處掃描到“丨丨”,為二元運算符,則調(diào)用Double函數(shù),進行操作數(shù)檢 查,前面為fs,后面為“da”,均為合法操作數(shù),括號內(nèi)部掃描完畢后,掃描括號 外部,從位置0,此處掃描到“丨丨”,為二元運算符,則調(diào)用Double函數(shù),進行操作數(shù)到位 置4檢查,前面為“ cd”,后面為“(”,均為合法操作數(shù),最后在位置13掃描到 結(jié)束符,則結(jié)束當前表達式掃描,并且返回正確提示,進行下一個表達式判斷。2. 如輸入saff asdf表達式,經(jīng)過Deletespace函數(shù)刪除空格后返回新的表達 式為sdff asdf,然后進行Operator函數(shù)檢查是否
13、存在操作符,此處不存在,則 返回“第1個表達式?jīng)]有邏輯運算符”的錯誤提示,并且結(jié)束當前表達式判斷,進 入下一個表達式的判斷。七、總結(jié)技術(shù)方面:1. 良好的編程習慣真的很重要,它可以幫助自己減少錯誤率,還能更好更快地 回看和理自己的程序,大大提高程序的可讀性。比如寫好注釋和較好的排版。2. 注意變量的生命周期,既能節(jié)省內(nèi)存資源,乂可以避免變量賦值不正確。3. 編寫程序前應該先整理需要考慮的所有情況,包括特殊情況,避免出現(xiàn)bugo4. 除了使用編程環(huán)境自帶的調(diào)試功能逐步或斷電調(diào)試程序外,還可以自己在程 序中適當位置通過屏幕輸出提示進行調(diào)試。3. 盡量使用最優(yōu)算法,既能提高自己的思維能力,乂能使程序
14、簡潔而高效。6. 要給每一個函數(shù)起一個好名稱,做到見名知義的程度方便對程序整體的快速 理解。7. 在編寫一個項LI或程序時應事先考慮到需要定義的函數(shù),把且有相同功能的 部分抽象到一個函數(shù)時,減少代碼冗余。如本程序中的Scan函數(shù)。88. 一個函數(shù)應該只解決一個功能或問題。心得體會方面:通過近兩周的奮斗,課程設計接近了尾聲。經(jīng)過兩周的奮戰(zhàn)我們的課程設計終于完成了。在沒有做課程設訃以前覺得課程設訃只是對C語言這門課程所學知識的 單純總結(jié),但是通過這次做課程設計發(fā)現(xiàn)自己的看法有點太片面。課程設計不僅是 對前面所學知識的一種檢驗,而且也是對自己能力的一種提高。通過這次課程設計 使我們明白了自己原來知識
15、還比較欠缺。自己要學習的東西還太多,以前老是覺得 自己什么東西都會,什么東西都懂,有點眼高手低。通過這次課程設計,我們才明 白學習是一個長期積累的過程,在以后的工作、生活中都應該不斷的學習,提高自 己的知識和綜合素質(zhì)。在這次課程設計中也使我們們的同學關(guān)系更進一步了,同學之間互相幫助,有 什么不懂的大家在一起商量,聽聽不同的看法對我們們更好的理解知識,所以在這 里非常感謝幫助我們的同學??傊?,大家都認為萬事開頭難,不知道如何入手。最后終于做完了有種如釋重 負的感覺。此外,還得出一個結(jié)論:知識必須通過應用才能實現(xiàn)其價值有些東西 以為學會了,但真正到用的時候才發(fā)現(xiàn)是兩回事,所以我們認為只有到真正會用的 時候才是真的學會了。通過這次課程設計,我們們即學會了使用VC6.0軟件和 codeblocks軟件,也掌握了一些有用的知識,這對我們們以后的學習和生活非常 的有幫助,也使得我們們對自己的總體知識水平有了一個了解。懂得了知識的重要 性。使我們學會了如何運用所學的知識收集、歸納相關(guān)資料解決具體問題的方法, 加強了我們的動手能力、分析和解決問題的能力、以及增強綜合運用知識的能力。 同時對自己應用計算機的水平有了一個更深刻的了解,我們在今后的學習和生活 中,可以有針對性的學習和改善。在此要感謝我們的指導老師李老師對我們的悉心
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陵園墓地代理合作協(xié)議范本
- 家庭護理員居間服務合同
- 【小學 三年級數(shù)學】三年級下冊數(shù)學口算試題
- 舞臺布景設計與制作合同樣本
- 2024泰安市工程職業(yè)中等專業(yè)學校工作人員招聘考試及答案
- 2024泌陽縣中等職業(yè)技術(shù)學校工作人員招聘考試及答案
- 2024湖南省郴州市第一職業(yè)中等專業(yè)學校工作人員招聘考試及答案
- 2024河北省唐縣職業(yè)技術(shù)教育中心工作人員招聘考試及答案
- 大型倉儲設施消防工程合同書
- 物業(yè)服務公司員工安全合同責任書模板
- 翻譯中的形合與意合課件
- 電動汽車無線充電技術(shù)課件
- 耳鼻咽喉頭頸外科學-5.osash及喉科學
- 99S203 消防水泵接合器安裝圖集
- 第章微生物的遺傳與變異
- GB∕T 21489-2018 散糧汽車卸車裝置
- 教育部人文社科項目申請書范本-2-副本
- 液力偶合器參數(shù)
- 高填方路基及擋土墻施工方案
- 《側(cè)面描寫》教學課件.ppt
- 不銹鋼欄桿制作與安裝工程工檢驗批質(zhì)量檢驗記錄
評論
0/150
提交評論