版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 中北大學(xué)課程設(shè)計報告 2016/2017 學(xué)年第 一 學(xué)期學(xué) 院: 信息與通信工程學(xué)院 專 業(yè): 電子信息科學(xué)與技術(shù) 學(xué) 生 姓 名: 向 偉 學(xué) 號: 課程設(shè)計題目: 邏輯表達式的合理性判斷 起 迄 日 期: 2016年 12 月 12 日2016 年12 月 30 日 課程設(shè)計地點: 科學(xué)樓五院106 指 導(dǎo) 教 師: 李建民 提交報告日期: 2016 年 月 日設(shè)計要求一、邏輯表達式的合理性判斷 任務(wù):(自己解析后的具體任務(wù));u 編寫鍵盤輸入與文件讀取表達式的程序;u 編寫可以依次進行識別判斷表達式的程序;u 整理表達式錯誤類型,并且編寫分類進行錯誤原因分析
2、的提示程序;u 編寫掃描表達式的程序;u 分類編寫檢測邏輯運算符,操作數(shù)以及括號是否合法的程序;u 編寫刪除所有空格操作的程序二、要求(自己程序能達到的指標)u 表達式既能手動輸入,又能從文件中讀取,并且能有多個表達式;u 可以輸入任意表達式(含所有可輸入的字符及符號),程序?qū)⑦M行自動 判別是否為邏輯表達式;u 能自動刪除所有空格;u 程序可以分析輸入的表達式的所有錯誤類型并輸出到顯示器上;u 程序優(yōu)先對括號合法性進行判斷,包含所有括號的組合情況;算法分析與程序詳解1、 整體結(jié)構(gòu)整個程序分為:表達式數(shù)據(jù)的讀取,空格刪除,括號(多重)的掃描判斷與記錄,運算符的掃描與檢測,操作數(shù)的掃描與檢測。二、
3、各個函數(shù)的詳細說明:1. Deletespace函數(shù),傳入表達式字符數(shù)組,以及字符坐標,循環(huán)檢測并刪除空格,每次調(diào)用完該函數(shù)后繼續(xù)檢查當前坐標位置是否為空格,若仍然為空格將繼續(xù)調(diào)用該函數(shù),直至當前位置不再是空格,將繼續(xù)循環(huán)檢測下一個坐標。2. Getmount函數(shù):為了解決scanf函數(shù)和gets函數(shù)同時使用時產(chǎn)生的bug(若使用了前者再使用或者,或者將會自動接收前者的一個換行符,導(dǎo)致后者第一個數(shù)據(jù)無法正常輸入),使用該函數(shù)將輸入的字符數(shù)字通過ASCII碼轉(zhuǎn)換成整型數(shù)字。3. Operator函數(shù):在對表達式進行從頭至尾的掃描過程中若匹配到含邏輯運算符的字符,則返回成功,否則返回失敗,并輸出錯
4、誤類型的提示信息,本次判斷將就此結(jié)束。4. Bracket函數(shù):從左至右掃描過程中,發(fā)現(xiàn)括號后檢查括號是否合法,若合法,用一個二維數(shù)組記錄檢測到的合法括號的位置信息,并且返回此信息,若不合法,返回不合法類型,并且輸出錯誤類型的提示信息,本次判斷將就此結(jié)束。5. Repeat函數(shù):主要檢查是否含有重復(fù)的無用括號,例如“(xxx)”,具體方法是,設(shè)置該函數(shù)返回的缺省值是有重復(fù),在循環(huán)檢測的過程中,分別用兩個數(shù)組記錄連續(xù)的左右括號的位置,然后用兩個for循環(huán)實現(xiàn)從左括號位置到右括號位置的交叉掃描,如果出現(xiàn)了括號,則修改缺省值為沒有重復(fù),并且立刻跳出內(nèi)部for循環(huán)的掃描,進行外層for循環(huán)的下一次掃描
5、,如果某次內(nèi)部掃描完畢后都沒有出現(xiàn)括號,則缺省值不會被修改,將直接跳出外層循環(huán),并且返回有重復(fù),輸出錯誤類型提示,結(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ù)合法。3、 程序運行過程每個函數(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ù)進行多余重復(fù)括號檢查,若存在多余括號,則返回該錯誤類型,若不存在,則返回Bracket函數(shù)生成的括號坐標位置信息,并根據(jù)該信息進行循環(huán)Scan函數(shù)掃描,如果匹配到運算符,并且檢測到該運算符合法,根據(jù)運算符類型的不同選擇調(diào)用Single函數(shù)(一元運算符)和Double函數(shù)(二元運算符),進行操作數(shù)檢查,若不合法則返回相應(yīng)錯誤類型,若合法,則返回正確。另外第五部分附有流程圖4、 錯誤類型說明函數(shù)名返回值錯誤類型Operator-1表達式無運算符Repeat-2表達
8、式存在多余重復(fù)括號Bracket-3表達式括號不成對Scan-4運算符不正確(符號前非法)-5運算符不正確(符號后非法)Single-6一元運算符操作數(shù)個數(shù)有誤!-7操作數(shù)直接缺失運算符-8操作數(shù)非字母組合Double-9二元運算符缺失操作數(shù)-10操作數(shù)非字母組合5、 流程圖1、表達式數(shù)據(jù)的讀取開 始鍵盤輸入select selectcasedefault標號2標號1選擇有誤!重新輸入文件讀取表達式鍵盤輸入表達式以及個數(shù)n結(jié) 束2. 空格刪除操作 當發(fā)現(xiàn)當前表達式中有空格時,調(diào)用Deletespace(char (*string)m,int i,int j)函數(shù)開 始int t=jstring
9、it!='0'&&stringit!='n'NoYesstringit=stringit+1; t+結(jié) 束6、 運行結(jié)果利用文件讀取各種錯誤類型的表達式如下:(按每行四個表達式列出,表達式間用換行隔開)saff && asdf !(fs|fsf)& &da fs!#fs(f|(s|dfs) f|(s|%fsf) (fs!#fs)fsd!fas fds(!fs|da)saf3|dadadaf|sf2+h adaf|sf2+h!d(asd)|sa sdaf|fa|(dad|d)其程序運行部分結(jié)果如下圖舉例說明:1. 如
10、輸入: cd| (fs|da)表達式,經(jīng)過Deletespace函數(shù)刪除空格后返回新的表達式為cd|(fs|da),然后進行Operator函數(shù)檢查是否存在操作符,此處存在,則調(diào)用Repeat函數(shù)進行多余重復(fù)括號檢查,此處不存在,則進入Bracket函數(shù)對括號進行掃描,此處有括號,并且記錄括號位置4、11,然后調(diào)用Repeat函數(shù)進行多余重復(fù)括號檢查,此處無多余括號,然后根據(jù)坐標位置信息進行循環(huán)Scan函數(shù)掃描,此處掃描到“|”,為二元運算符,則調(diào)用Double函數(shù),進行操作數(shù)檢查,前面為fs,后面為“da”,均為合法操作數(shù),括號內(nèi)部掃描完畢后,掃描括號外部,從位置0到位置4,此處掃描到“|”
11、,為二元運算符,則調(diào)用Double函數(shù),進行操作數(shù)檢查,前面為“cd”,后面為“(”,均為合法操作數(shù),最后在位置13掃描到結(jié)束符,則結(jié)束當前表達式掃描,并且返回正確提示,進行下一個表達式判斷。2. 如輸入saff asdf表達式,經(jīng)過Deletespace函數(shù)刪除空格后返回新的表達式為saff asdf,然后進行Operator函數(shù)檢查是否存在操作符,此處不存在,則返回“第1個表達式?jīng)]有邏輯運算符”的錯誤提示,并且結(jié)束當前表達式判斷,進入下一個表達式的判斷。7、 總結(jié)技術(shù)方面:1.良好的編程習(xí)慣真的很重要,它可以幫助自己減少錯誤率,還能更好更快地回看和理自己的程序,大大提高程序的可讀性。比如寫
12、好注釋和較好的排版。2.注意變量的生命周期,既能節(jié)省內(nèi)存資源,又可以避免變量賦值不正確。3.編寫程序前應(yīng)該先整理需要考慮的所有情況,包括特殊情況,避免出現(xiàn)bug。4.除了使用編程環(huán)境自帶的調(diào)試功能逐步或斷電調(diào)試程序外,還可以自己在程序中適當位置通過屏幕輸出提示進行調(diào)試。5.盡量使用最優(yōu)算法,既能提高自己的思維能力,又能使程序簡潔而高效。6.要給每一個函數(shù)起一個好名稱,做到見名知義的程度方便對程序整體的快速理解。7.在編寫一個項目或程序時應(yīng)事先考慮到需要定義的函數(shù),把且有相同功能的部分抽象到一個函數(shù)時,減少代碼冗余。如本程序中的Scan函數(shù)。8.一個函數(shù)應(yīng)該只解決一個功能或問題。心得體會方面:通
13、過近兩周的奮斗,課程設(shè)計接近了尾聲。經(jīng)過兩周的奮戰(zhàn)我們的課程設(shè)計終于完成了。在沒有做課程設(shè)計以前覺得課程設(shè)計只是對C語言這門課程所學(xué)知識的單純總結(jié),但是通過這次做課程設(shè)計發(fā)現(xiàn)自己的看法有點太片面。課程設(shè)計不僅是對前面所學(xué)知識的一種檢驗,而且也是對自己能力的一種提高。通過這次課程設(shè)計使我們明白了自己原來知識還比較欠缺。自己要學(xué)習(xí)的東西還太多,以前老是覺得自己什么東西都會,什么東西都懂,有點眼高手低。通過這次課程設(shè)計,我們才明白學(xué)習(xí)是一個長期積累的過程,在以后的工作、生活中都應(yīng)該不斷的學(xué)習(xí),提高自己的知識和綜合素質(zhì)。 在這次課程設(shè)計中也使我們們的同學(xué)關(guān)系更進一步了,同學(xué)之間互相幫助,有什
14、么不懂的大家在一起商量,聽聽不同的看法對我們們更好的理解知識,所以在這里非常感謝幫助我們的同學(xué)。 總之,大家都認為萬事開頭難,不知道如何入手。最后終于做完了有種如釋重負的感覺。此外,還得出一個結(jié)論:知識必須通過應(yīng)用才能實現(xiàn)其價值!有些東西以為學(xué)會了,但真正到用的時候才發(fā)現(xiàn)是兩回事,所以我們認為只有到真正會用的時候才是真的學(xué)會了。通過這次課程設(shè)計,我們們即學(xué)會了使用VC6.0軟件和codeblocks軟件,也掌握了一些有用的知識,這對我們們以后的學(xué)習(xí)和生活非常的有幫助,也使得我們們對自己的總體知識水平有了一個了解。懂得了知識的重要性。使我們學(xué)會了如何運用所學(xué)的知識收集、歸納相關(guān)資料解決具體問題的方法,加強了我們的動手能力、分析和解決問題的能力、以及增強綜合運用知識的能力。同時對自己應(yīng)用計算機的水平有了一個更深刻的了解,我們在今后的學(xué)習(xí)和生活中,可以有針對性的學(xué)習(xí)和改善。 在此要感謝我們的指導(dǎo)老師李老師對我們的悉心的指導(dǎo),感謝老師給我們的幫助。在設(shè)計過程中
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度太陽能光伏發(fā)電站項目進度控制與協(xié)調(diào)合同
- 二零二五版美容美發(fā)行業(yè)員工試用期勞動合同4篇
- 二零二五年度新型公私合作轉(zhuǎn)賬借款合同模板3篇
- 二零二五年度國有企業(yè)原材料采購合同補充協(xié)議范文3篇
- 二零二五年度影視MV拍攝制作與藝人肖像權(quán)合同
- 二零二五年度民政局離婚協(xié)議書修訂版解讀3篇
- 課題申報參考:民俗視域下江漢平原地區(qū)民歌音樂形態(tài)研究
- 二零二五年度農(nóng)業(yè)節(jié)水灌溉技術(shù)服務(wù)合同4篇
- 黑龍江省雙鴨山市高三上學(xué)期開學(xué)考試語文試題(含答案)
- 二零二五年度社區(qū)食堂運營管理合同4篇
- 再生障礙性貧血課件
- 產(chǎn)后抑郁癥的護理查房
- 2024年江蘇護理職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 電能質(zhì)量與安全課件
- 醫(yī)藥營銷團隊建設(shè)與管理
- 工程項目設(shè)計工作管理方案及設(shè)計優(yōu)化措施
- 圍場滿族蒙古族自治縣金匯螢石開采有限公司三義號螢石礦礦山地質(zhì)環(huán)境保護與土地復(fù)墾方案
- 小升初幼升小擇校畢業(yè)升學(xué)兒童簡歷
- 資金支付審批單
- 第一單元(金融知識進課堂)課件
- 介入導(dǎo)管室護士述職報告(5篇)
評論
0/150
提交評論