數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯系統(tǒng)Word版_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯系統(tǒng)Word版_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯系統(tǒng)Word版_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯系統(tǒng)Word版_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯系統(tǒng)Word版_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、傳播優(yōu)秀Word版文檔 ,希望對(duì)您有幫助,可雙擊去除!課 程 設(shè) 計(jì) 任 務(wù) 書專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí)姓 名設(shè) 計(jì) 起 止 日 期設(shè)計(jì)題目:文章編輯系統(tǒng)設(shè)計(jì)任務(wù)(主要技術(shù)參數(shù)):本課程設(shè)計(jì)要求結(jié)合數(shù)據(jù)結(jié)構(gòu)所學(xué)的基礎(chǔ)知識(shí)利用C語言進(jìn)行程序設(shè)計(jì),本程序要求實(shí)現(xiàn)以下功能:輸入一頁文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。硬件環(huán)境:處理器:英特爾 第三代酷睿 i3-3110M 2.40GHz 雙核 內(nèi)存:4GB(三星 DDR3 1333MHz) 主硬盤:希捷 ST500LM012 HN-M500MBB (500GB/5400轉(zhuǎn)/分) 顯示器:三星 SEC3649(14 英寸)軟件環(huán)境:操作系統(tǒng)

2、:Windows 8 64位(DirectX 11)開發(fā)環(huán)境: VC+6.0指導(dǎo)教師評(píng)語:成績(jī): 簽字:年 月 日文章編輯系統(tǒng)一、課程設(shè)計(jì)前言1.程序設(shè)計(jì)的目的 本課程設(shè)計(jì)是為了配合數(shù)據(jù)結(jié)構(gòu)課程的開設(shè),通過設(shè)計(jì)一個(gè)完整的程序,使學(xué)生掌握數(shù)據(jù)結(jié)構(gòu)的應(yīng)用、算法的編寫、類C語言的算法轉(zhuǎn)換成C程序并用TC上機(jī)調(diào)試的基本方法。課程設(shè)計(jì)是實(shí)踐性教學(xué)中的一個(gè)重要環(huán)節(jié),它以某一課程為基礎(chǔ),可以涉及和課程相關(guān)的各個(gè)方面,是一門獨(dú)立于課程之外的特殊課程。課程設(shè)計(jì)是讓同學(xué)們對(duì)所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識(shí)。數(shù)據(jù)結(jié)構(gòu)是一門重要的專業(yè)基礎(chǔ)課,是計(jì)算機(jī)理論和應(yīng)用的核心基礎(chǔ)課程。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),要

3、求學(xué)生在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面,加深對(duì)課程基本內(nèi)容的理解。同時(shí),在程序設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。文章編輯系統(tǒng)是一種簡(jiǎn)便快捷的對(duì)于輸入的文章進(jìn)行操作的方法,它可以統(tǒng)計(jì)文章的數(shù)字、空格和字母的個(gè)數(shù)等,以及查找和刪除特定字符串。二、程設(shè)計(jì)方案論證2.1設(shè)計(jì)思路根據(jù)課題文章編輯的詳細(xì)要求,可將程序的運(yùn)行分為三個(gè)模塊,即文章統(tǒng)計(jì)模塊、文章查找模塊、文章刪除模塊。如圖1所示。構(gòu)造多個(gè)線性表,將輸入的文章的每一行字符,都分別靜態(tài)存儲(chǔ)在相應(yīng)的線性表中。每個(gè)線性表的存儲(chǔ)容量不超過80個(gè)字符。文章輸入結(jié)束后,程序輸出

4、指令菜單,列出程序可以合法執(zhí)行的操作指令,并選擇輸入合法的指令,以執(zhí)行相應(yīng)的指令操作。文章編輯系統(tǒng)統(tǒng)計(jì)字符刪除字符統(tǒng)計(jì)文字查找字符圖1功能模塊圖依照課題要求,程序設(shè)計(jì)了6大功能,分別為統(tǒng)計(jì)文章中總字符數(shù)、統(tǒng)計(jì)文章中空格個(gè)數(shù)、統(tǒng)計(jì)文章中數(shù)字個(gè)數(shù)、統(tǒng)計(jì)文章中英文字母?jìng)€(gè)數(shù)、刪除文章中指定字符串、統(tǒng)計(jì)文章中指定字符串出現(xiàn)次數(shù),并且為每一項(xiàng)功能提供相信的執(zhí)行指令。程序的執(zhí)行流程如圖2所示。首先按要求輸入文章,然后按照指令菜單選擇要執(zhí)行的指令,程序判斷指令,并且執(zhí)行相應(yīng)的指令操作,輸出指令執(zhí)行結(jié)果后,重新返回指令菜單,再次等待指令輸入。指令書輸入和指令執(zhí)行為無限循環(huán),在用戶退出程序前,程序不會(huì)自動(dòng)結(jié)束圖2

5、程序的執(zhí)行流程圖2.2函數(shù)功能分析1.定義結(jié)構(gòu)體 struct line,文本行采用順序存儲(chǔ),行與行之間采用鏈?zhǔn)酱鎯?chǔ) typedef struct line char *data; struct line *next;LINE; 存儲(chǔ)結(jié)構(gòu):采用單鏈表結(jié)構(gòu)存儲(chǔ)文章,沒幾個(gè)點(diǎn)存儲(chǔ)一行,每行最長(zhǎng)不超過80個(gè)字符。LINE為單鏈表為單鏈表存儲(chǔ)結(jié)構(gòu),以節(jié)點(diǎn)的序列表示的線性表叫做單鏈表,單鏈表是鏈?zhǔn)酱嫒〉慕Y(jié)構(gòu),是用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以節(jié)點(diǎn)來表示的,每個(gè)節(jié)點(diǎn)的構(gòu)成:元素就是存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元,指針就是連接每個(gè)節(jié)點(diǎn)的地址數(shù)據(jù)。2.主要函數(shù):(1)統(tǒng)計(jì)文章總字?jǐn)?shù):voi

6、d CountAll(LINE * &head)本函數(shù)的作用就是統(tǒng)計(jì)文章所有的字符數(shù),包括空格。將p付給表頭指針;初始化count為0;用do-while語句遍歷鏈表,同時(shí)統(tǒng)計(jì)字符串中總字?jǐn)?shù); 用printf語句輸出文章中總字?jǐn)?shù)。 (2)統(tǒng)計(jì)文章中的空格數(shù):void CountSpace(LINE * &head) 本函數(shù)的作用就是統(tǒng)計(jì)字符串鏈表中的空格數(shù)。將p付給表頭指針;初始化count為0;用do-while語句遍歷鏈表,同時(shí)統(tǒng)計(jì)字符串中空格數(shù); 用printf語句輸出文章中空格數(shù)。(3) 統(tǒng)計(jì)文章中數(shù)字個(gè)數(shù):void CountNumber(LINE * &head) 本函數(shù)的作用就是

7、統(tǒng)計(jì)字符串鏈表中的數(shù)字個(gè)數(shù)將p付給表頭指針;初始化count為0;用do-while語句遍歷鏈表,同時(shí)統(tǒng)計(jì)字符串中數(shù)字個(gè)數(shù); 用printf語句輸出文章中數(shù)字個(gè)數(shù)。流程如圖3(4) 統(tǒng)計(jì)文章中英文字母數(shù):void CountLetter(LINE * &head) 本函數(shù)的作用就是統(tǒng)計(jì)字符串鏈表中的英文字母?jìng)€(gè)數(shù)。將p付給表頭指針;初始化count為0;用do-while語句遍歷鏈表,同時(shí)統(tǒng)計(jì)字符串中英文字母數(shù);用printf語句輸出文章中英文字母數(shù)。(5)查找字符串的函數(shù):void FindString(LINE * &head)本函數(shù)的作用就是查找在鏈表中出現(xiàn)的特定的字符串。將p付給表頭指針

8、;初始化count為0;初始化len1,用來保存當(dāng)前行的總字符數(shù);定義整型變量len2表示待統(tǒng)計(jì)字符串的長(zhǎng)度;用printf語句提醒用戶輸入要統(tǒng)計(jì)的字符串;用do-while語句遍歷鏈表,同時(shí)用for循環(huán)和if語句找出指定字符串在文章中出現(xiàn)的次數(shù);用printf語句輸出指定字符串在文章中出現(xiàn)的總次數(shù)。流程如圖4(6)刪除字符串的函數(shù):void DelString(LINE * &head)本函數(shù)的作用就是將在鏈表中出現(xiàn)的特定的字符串進(jìn)行刪除。先創(chuàng)建一個(gè)delstringword,其中包含兩個(gè)字符串char *s和char *str,用*s表示輸入的字符串,*str表示要?jiǎng)h除的字符。這個(gè)函數(shù)的功

9、能是找到字符串s在字符串中出現(xiàn)的位置并刪除該字符串。定義字符串的刪除函數(shù)DelString(),用do-while語句遍歷鏈表,語句中再套用if語句,并調(diào)用delstringword()進(jìn)行刪除開始*p=head,count=0int len=str len(p-data)i=0idatai=48 &p-datainext!p=NULL結(jié)束NYNYN圖3統(tǒng)計(jì)數(shù)字函數(shù)流程圖 開始count=0;h=0;len1=0; len2=strlen(str);p-datai=str0i+k=0;j=00000;p-datai+j=strjk+;j+;k=len2count+;i=i+k-1;結(jié)束YNYN

10、NY 圖4統(tǒng)計(jì)str在文章中的出現(xiàn)次數(shù)三、課程設(shè)計(jì)運(yùn)行結(jié)果與分析3.1課程設(shè)計(jì)運(yùn)行結(jié)果本實(shí)驗(yàn)所要實(shí)現(xiàn)的功能:輸入一頁文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。靜態(tài)存儲(chǔ)一頁文章,每行最多不超過80個(gè)字符,共N行;要求:(1)分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);(2)統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(3)刪除某一子串,并將后面的字符前移。存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出全部字母數(shù)、數(shù)字個(gè)數(shù)、 空格個(gè)數(shù)和文章總字?jǐn)?shù)輸出

11、刪除某一字符串后的文章;用鏈表存放數(shù)據(jù)非常靈活,只要內(nèi)存足夠大,對(duì)鏈表可以做任意擴(kuò)充和修改。主要的手段為鏈表的遍歷。定義一個(gè)頭指針head,每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域存放數(shù)據(jù)本身,指針域存放下一個(gè)結(jié)點(diǎn)地址,所以,我們只要知道head,就可以遍歷整個(gè)鏈表,找到我們所需要的字符(串),進(jìn)行相應(yīng)的操作。 下面是源程序的初始界面,如圖5所示: 圖5初始界面在運(yùn)行的界面上輸入文章,運(yùn)行后會(huì)出現(xiàn)如圖6所示的運(yùn)行界面。 圖6 運(yùn)行界面 在運(yùn)行界面上輸入1:統(tǒng)計(jì)字符數(shù),如圖7所示: 圖7 統(tǒng)計(jì)字符界面 在運(yùn)行的界面輸入2:刪除字符,運(yùn)行結(jié)果如圖8所示: 圖8 刪除字符在運(yùn)行的界面輸入3:退出程序,運(yùn)行結(jié)果如圖9所示:

12、圖9輸入退出程序指令圖10退出程序3.2調(diào)試過程與分析(1) 主流程進(jìn)入死循環(huán)。.解決方案:每個(gè)循環(huán)都加break,每跳出一個(gè)模塊,opt重新賦值為0。(2)輸入多個(gè)變量,需要空格間隔時(shí),程序只讀空格前的變量解決方案:輸.入函數(shù)用get( )函數(shù),形式為:get(tmp),即可解決著個(gè)問題。(3)不識(shí)別自定義函數(shù)。解決方案:函數(shù)定義前要函數(shù)聲明,若不聲明,則調(diào)用函數(shù)必須在函數(shù)定義之后,否則不識(shí)別。(4)程序結(jié)束之后,鏈表仍占空間。解決方案:在建立鏈表是所申請(qǐng)的內(nèi)存空間在程序結(jié)束之前用free_link(LINE *&head)函數(shù)釋放,即刪除鏈表中的全部結(jié)點(diǎn),且將鏈表頭指針置為空。四、課程設(shè)計(jì)

13、體會(huì)這個(gè)學(xué)期是我第一次接觸數(shù)據(jù)結(jié)構(gòu),在完成設(shè)計(jì)的過程中,我遇到了一系列的問題,能明顯感覺到自己在很多方面的不足,但另一方面,問題是要分析解決的,找出問題以便為完善學(xué)習(xí)計(jì)劃,改變學(xué)習(xí)內(nèi)容與方法提供實(shí)踐依據(jù)。所以在整個(gè)過程中,我不斷加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解與一些程序?qū)憰鴷r(shí)要注意的事項(xiàng),體會(huì)了數(shù)據(jù)結(jié)構(gòu)這門課程在解決現(xiàn)實(shí)生活問題上的可行性,也更進(jìn)一步地激發(fā)了我的學(xué)習(xí)熱情。 問題越多,明白的也就會(huì)越來越多,做一次課程設(shè)計(jì)就像從頭到尾做了一次系統(tǒng)的復(fù)習(xí),從基礎(chǔ)到難點(diǎn),從輪廓到每個(gè)知識(shí)點(diǎn),數(shù)據(jù)結(jié)構(gòu)的研究?jī)?nèi)容在我的腦海里就再也不像以前那么模糊了。設(shè)計(jì)程序來解決現(xiàn)在存在的問題,把理論知識(shí)付諸于實(shí)踐,對(duì)于我們這些計(jì)

14、算機(jī)專業(yè)的本科生來說,實(shí)際能力的培養(yǎng)至關(guān)重要,而這種實(shí)際能力的培養(yǎng)單靠課堂教學(xué)是遠(yuǎn)遠(yuǎn)不夠的,必須從課堂走向?qū)嵺`,這也是我們學(xué)習(xí)的目的。做完設(shè)計(jì),我已深刻體會(huì)到了學(xué)習(xí)這門課程的重要性與必要性了,同時(shí),它留給我很多思考:學(xué)習(xí)是思考一個(gè)的過程,我們應(yīng)該主動(dòng)去想學(xué)習(xí)一門知識(shí)后怎么去運(yùn)用,而不是一味地被動(dòng)地接受。數(shù)據(jù)結(jié)構(gòu)及其算法在解決現(xiàn)實(shí)生活中的常見問題和書寫軟件設(shè)計(jì)方面上都有著重要的意義,我們應(yīng)該好好掌握它的相關(guān)知識(shí),在以后的學(xué)習(xí)過程中,更多的去學(xué)會(huì)如何運(yùn)用知識(shí)。五、參考文獻(xiàn)1 譚浩強(qiáng).C語言程序設(shè)計(jì)M.北京:清華大學(xué)出版社,2007.05:1-2002 吳躍. 數(shù)據(jù)結(jié)構(gòu)與算法M .北京:機(jī)械工業(yè)出版

15、社, 2010.2:15-1203 田淑清. C程序設(shè)計(jì)M. 北京:清華大學(xué)出版社, 2008.5:90-2004 蔡子經(jīng),施伯樂. 數(shù)據(jù)結(jié)構(gòu)教程M. 上海:復(fù)旦大學(xué)出版社,20065李春褒.數(shù)據(jù)結(jié)構(gòu)教程(第二版)M.北京:清華大學(xué)出版社,2007附錄:源程序#include #include #include typedef struct line char *data; struct line *next;LINE; void Create(LINE * &head)LINE *p;printf (請(qǐng)輸入一頁文章,以#為結(jié)尾(每行最多輸入80字符!):n);p=(struct line*)

16、malloc(sizeof(struct line); head=p; char tmp200; for(;1;) gets(tmp); if(strlen(tmp)80) printf(每行最多輸入80字符); break; if(tmp0=35)break; p=p-next=(struct line*)malloc(sizeof(struct line); p-data=(char*)malloc(strlen(tmp); strcpy(p-data,tmp); if(tmpstrlen(tmp)-1=35) p-datastrlen(tmp)-1=0;break; p-next=NUL

17、L; head=head-next;int CountLetter(LINE * &head) /統(tǒng)計(jì)英文字母?jìng)€(gè)數(shù) LINE *p=head; int count=0;do int Len=strlen(p-data); for(int i=0;idatai=a&p-dataidatai=A&p-datainext)!=NULL); return count; int CountNumber(LINE * &head) /統(tǒng)計(jì)數(shù)字個(gè)數(shù) LINE *p=head; int count=0; do int Len=strlen(p-data); for(int i=0;idatai=48 & p-

18、datainext)!=NULL); return count;int CountSpace(LINE * &head) /統(tǒng)計(jì)空格個(gè)數(shù) LINE *p=head; int count=0; do int Len=strlen(p-data); for(int i=0;idatai=32)count+; while(p=p-next)!=NULL); return count;/*統(tǒng)計(jì)文章的總字?jǐn)?shù)*/int CountAll(LINE * &head) LINE *p=head; int count=0; do count+=strlen(p-data); while(p=p-next)!=N

19、ULL); return count;int FindString(LINE * &head,char *str) /查找特定字符串 LINE *p=head; int count=0; int h=0; int len1=0; int len2=strlen(str); int i,j,k; do len1=strlen(p-data); for(i=0;idatai=str0)k=0; for(j=0;jdatai+j=strj) k+;if(k=len2)count+;i=i+k-1; while(p=p-next)!=NULL); return count;void delstring

20、word(char *s,char *str) /刪除特定字符串 char *p=strstr(s,str);char tmp80; int len=strlen(s); int i=len-strlen(p); int j=i+strlen(str); int count=0; for(int m=0;mi;m+)tmpcount+=sm; for(int n=j;ndata,str)!=NULL)delstringword(p-data,str);while(p=p-next)!=NULL); void OutPut(LINE * &head) /退出程序 LINE *p=head; do printf(%sn,p-data); while(p=p-next)!=NULL); void main() int i=0; int operate;LINE * head;Create(head); printf(姓名:高楓 學(xué)號(hào):F1459104n); printf(輸入的文章為:n); OutPut(head); printf(n); printf(全部字母數(shù):%d

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論