




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 長沙理工大學 數據結構課程設計報告 學 院 專 業(yè) 班 級 學 號 學生姓名 指導教師 課程成績 完成日期 課程設計成績評定學 院 專 業(yè) 班 級 學 號 學生姓名 指導教師 完成日期 指導教師對學生在課程設計中的評價評分項目優(yōu)良中及格不及格課程設計中的創(chuàng)造性成果學生掌握課程內容的程度課程設計完成情況課程設計動手能力文字表達學習態(tài)度規(guī)范要求課程設計論文的質量指導教師對課程設計的評定意見綜合成績 指導教師簽字 年 月 日課程設計任務書計算機與通信工程學院 軟件工程專業(yè) 課程名稱數據結構課程設計時間學生姓名指導老師題 目文章編輯主要內容:采用單鏈表數據結構靜態(tài)存儲文章,以C語言實現相關程序,實現
2、對輸入的文章進行統(tǒng)計文章中總字符數、統(tǒng)計文章中空格個數、統(tǒng)計文章中數字個數、統(tǒng)計文章中英文字母數、刪除文章中指定字符串、統(tǒng)計文章中指定字符串出現次數的文章編輯功能操作。要求:(1)通過實際項目的分析、設計、編碼、測試等工作,掌握用C語言來開發(fā)和維護軟件。(2)按要求編寫課程設計報告書,能正確編寫分析、設計、編碼、測試等技術文檔和用戶使用手冊。應當提交的文件:(1)文章編輯數據結構課程設計論文。(2)代碼清單。 文章編輯 學生姓名:陳旖指導老師:陳倩詒摘 要 本課程設計主要解決了基本的文章編輯問題。對于一頁按要求輸入到程序執(zhí)行窗口的文章,靜態(tài)存儲結構使用線性表中,分別完成統(tǒng)計文章總字符數、文章中
3、空格個數、文章中英文字母數、統(tǒng)計文章中英文字母數的操作和文章中某一字符串的出現的次數,并輸出該次數;除以上的統(tǒng)計操作,還實現刪除文章中指定字符串,并且將刪除字符串后面的字符前移,再保存為編輯后的文章。關鍵字 靜態(tài)存儲;線性表;編輯;字符串 目 錄1.引言1 1.1課程設計意義 11.2課程設計目的11.3課題要求12.設計思路與方案22.1函數流程22.2功能函數43.詳細實現53.1數據結構設計53.2功能函數設計53.3函數分析64.運行環(huán)境與結果 124.1運行環(huán)境124.2運行結果125.結束語 166.參考文獻 177.附錄 18代碼清單181引 言1.1課程設計意義在實踐教學中,課
4、程設計是一個重要環(huán)節(jié),它以某一課程為基礎,可以涉及和課程相關的各個方面,是一門獨立于課程之外的特殊課程。課程設計是讓同學們對所學的課程更全面的學習和應用,理解和掌握課程的相關知識。數據結構1是一門重要的專業(yè)基礎課,是計算機理論和應用的核心基礎課程。數據結構課程設計,要求學生在數據結構的邏輯特性和物理表示、數據結構的選擇和應用、算法的設計2及其實現等方面,加深對課程基本內容的理解3。同時,在程序設計方法以及上機操作等基本技能和科學作風方面受到比較系統(tǒng)和嚴格的訓練。1.2課程設計目的1提高對數據邏輯結構4的特點以及存儲表示方式的認識,培養(yǎng)在具體應用中選擇合適的數據結構和存儲結構的能力。2熟悉軟件開
5、發(fā)的基本過程,初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設計、程序編碼5、測試等階段基本任務和技能方法。3培養(yǎng)自己的算法設計和算法分析能力,提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力。4訓練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應具備的工作方法、作風和相互合作的精神。5綜合運用鏈表6的查找、插入和刪除,理論結合實際,將其運用到文章編輯這一實驗中。使這些知識得到進一步鞏固、加深和拓展。利用模塊的思想,模塊之間用指針連接,減少了不必要的麻煩。鞏固加深指針的用途,理解模塊的優(yōu)點。加深對鏈表的理解,全面認識鏈表操作的字符串的模式匹配操作。1.3課題要求課題名稱:文章編輯具
6、體要求:(1)靜態(tài)存儲一頁文章,每行最多不超過80個字符,共N行;(2)分別統(tǒng)計出其中英文字母數和空格數及整篇文章總字數; (3)統(tǒng)計某一字符串在文章中出現的次數,并輸出該次數; (4)刪除某一子串,并將后面的字符前移; (5)存儲結構使用線性表3,分別用幾個子函數實現相應的功能。 2 設計思路與方案2.1函數流程根據課題文章編輯的詳細要求,可將程序的運行分為三個模塊,即文章輸入和文章輸出模塊、指令輸入和指令判斷模塊、執(zhí)行指令操作模塊。構造多個線性表,將輸入的文章的每一行字符,都分別靜態(tài)存儲4在相應的線性表中。每個線性表的存儲容量不超過80個字符。 文章輸入結束后
7、,程序輸出指令菜單,列出程序可以合法執(zhí)行的操作指令,并選擇輸入合法的指令,以執(zhí)行相應的指令操作。 依照課題要求,程序設計了6大功能,分別為統(tǒng)計文章中總字符數、統(tǒng)計文章中空格個數、統(tǒng)計文章中數字個數、統(tǒng)計文章中英文字母個數、刪除文章中指定字符串、統(tǒng)計文章中指定字符串出現次數,并且為每一項功能提供相信的執(zhí)行指令。程序的執(zhí)行流程如圖2.1所示。首先按要求輸入文章,然后按照指令菜單選擇要執(zhí)行的指令,程序判斷指令,并且執(zhí)行相應的指令操作,輸出指令執(zhí)行結果后,重新返回指令菜單,再次等待指令輸入。指令書輸入和指令執(zhí)行為無限循環(huán),在用戶退出程序前,程序不會自動結束。 圖2.1 函數執(zhí)行流程圖2.2功能函數 為
8、實現6個執(zhí)行指令操作,分別設計相應的功能函數,并運用C語言數據結構構造相關代碼。功能函數名以功能說明如表2.2所示。表2-1 功能函數列表函數功能void CountAll()統(tǒng)計文章中總字符數void CountSpace()統(tǒng)計文章中空格個數void CountNumber()統(tǒng)計文章中數字個數void ConuntLetter()統(tǒng)計文章中英文字母數void Delstring()刪除文章中指定字符串void Findstring()統(tǒng)計文章中指定字符串出現次數3 詳細實現3.1數據結構設計(1)定義結構體:typedef struct line char *data; struct l
9、ine *next;LINE; LINE為單鏈表存儲結構。3.2功能函數設計(1)統(tǒng)計文章總字數:void CountAll(LINE * &head)將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中總字數; 用printf語句輸出文章中總字數,調用子函數menu()。(2)統(tǒng)計文章中的空格數:void CountSpace(LINE * &head) 將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中空格數; 用printf語句輸出文章中空格數,調用子函數menu()。(3) 統(tǒng)計文章中數字
10、個數:void CountNumber(LINE* &head) 將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中數字個數; 用printf語句輸出文章中數字個數,調用子函數menu()。 (4) 統(tǒng)計文章中英文字母數:void CountLetter(LINE * &head) 將p付給表頭指針; 初始化count為0; 用do-while語句遍歷鏈表,同時統(tǒng)計字符串中英文字母數 用printf語句輸出文章中英文字母數,調用子函數menu()。(5)查找字符串的函數:void FindString(LINE * &head)
11、將p付給表頭指針;初始化count為0;初始化len1,用來保存當前行的總字符數;定義整型變量len2表示待統(tǒng)計字符串的長度;用printf語句提醒用戶輸入要統(tǒng)計的字符串;用do-while語句遍歷鏈表,同時用for循環(huán)和if語句找出指定字符串在文章中出現的次數;用printf語句輸出指定字符串在文章中出現的總次數,調用子函數menu()。(6)刪除字符串的函數:void DelString(LINE * &head) 先創(chuàng)建一個delstringword,其中包含兩個字符串char *s和char *str,用*s表示輸入的字符串,*str表示要刪除的字符。這個函數的功能是找到字符串
12、s在字符串中出現的位置并刪除該字符串。 定義字符串的刪除函數DelString(),用do-while語句遍歷鏈表,語句中再套用if語句,并調用delstringword()進行刪除。 3.3函數分析(1)void CountAll(LINE * &head)本函數的作用是統(tǒng)計整篇文章的所有字符數,包括空格。返回統(tǒng)計結果之后會調用menu方法打印指令菜單。void CountAll(LINE * &head) LINE *p=head; int count=0; do count+=strlen(p->data); while(p=p->next)!=NULL);
13、printf("文章總字數: %d n",count); printf("*n"); printf("n"); menu();(2)void CountSpace(LINE * &head)本函數的作用是統(tǒng)計字符串鏈表中的空格個數,在統(tǒng)計完空格個數后,調用menu方法打印指令菜單。void CountSpace(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p->data); for(int i=0;i<Len;i+) if(p->
14、;datai=32)count+; while(p=p->next)!=NULL); printf("文章中空格個數: %d n", count); printf("*n"); printf("n"); menu();(3)void CountNumber(LINE * &head) 本函數的作用是統(tǒng)計字符串鏈表中的數字個數,在統(tǒng)計完數字個數后,調用menu方法打印指令菜單。void CountNumber(LINE * &head) LINE *p=head; int count=0; do int Len=s
15、trlen(p->data); for(int i=0;i<Len;i+) if(p->datai>=48 && p->datai<=57)count+; while(p=p->next)!=NULL); printf("文章中數字個數: %d n",count); printf("*n");printf("n"); menu();(4)void CountLetter(LINE * &head)本函數的作用是統(tǒng)計整個字符串鏈表中英文字母的個數。遍歷完成之后會調用men
16、u方法打印指令菜單。void CountLetter(LINE * &head) LINE *p=head; int count=0;do int Len=strlen(p->data); /計算當前data里的數據元素個數 for(int i=0;i<Len;i+)if(p->datai>='a'&&p->datai<='z')|(p->datai>='A'&&p->datai<='Z') count+; /計算字母數 while
17、(p=p->next)!=NULL); /遍歷鏈表 printf("文章中英文字母個數: %d n", count); /返回文章里 printf("*n");printf("n"); menu();(5)void FindString(LINE * &head)用戶調用這個方法查找相應字符串的出現在文章中的次數。統(tǒng)計后調用menu()方法打印指令菜單。void FindString(LINE * &head) LINE *p=head; int count=0;int len1=0; int len2; int
18、 i,j,k; char str120; printf("n"); printf("請輸入要統(tǒng)計的字符串:"); scanf("%s",str1); len2=strlen(str1); do len1=strlen(p->data); for(i=0;i<len1;i+) if(p->datai=str10) k=0; for(j=0;j<len2;j+) if(p->datai+j=str1j) k+; if(k=len2) count+;i=i+k-1; while(p=p->next)!=N
19、ULL); /遍歷鏈表 printf("該字符串在文中出現的次數: %d n",count); printf("*n");printf("n"); menu();(6)void DelString(LINE * &head)刪除字符串的函數,通過這個函數,刪除出現在字符串鏈表里的所有的輸入的字符片段。最后調用menu方法打印指令菜單。void DelString(LINE * &head) LINE *p=head;char str20; printf("請輸入要刪除的字符串: "); scanf(
20、"%s",str); do if(strstr(p->data,str)!=NULL)delstringword(p->data,str);while(p=p->next)!=NULL);printf("刪除指定字符串后的文章為: n");OutPut(head);printf("*n");printf("n");menu();4 運行環(huán)境與結果4.1運行環(huán)境本程序的運行環(huán)境為以Windows 7系統(tǒng)PC上的Visual C+ 6.0。4.2運行結果如圖4.1,所示,輸入一段包含漢字、英文大小寫字
21、母、阿拉伯數字、空格、特殊字符的文章,每行都不超過80個字符,以“Ctrl+E(E)”為結束符。圖4.1 文章輸入如圖4.2所示,輸入指令“2”,執(zhí)行“統(tǒng)計文章中總字符數”指令,執(zhí)行結果為“399”。圖4.2 統(tǒng)計文章中總字符數如圖4.3所示,輸入指令“3”,執(zhí)行“統(tǒng)計文章中空格個數”指令,執(zhí)行結果為“57”。圖4.3 統(tǒng)計文章中空格個數如圖4.4所示,輸入指令“3”,執(zhí)行“統(tǒng)計文章中數字個數”指令,執(zhí)行結果為“6”。圖4.4 統(tǒng)計文章中數字個數如圖4.5所示,輸入指令“4”,執(zhí)行“統(tǒng)計文章中英文字母數”指令,包括英文大寫字母和英文小寫字母,執(zhí)行結果為“399”。圖4.5 統(tǒng)計文章中英文字母數
22、如圖4.6所示,輸入指令“5”,執(zhí)行“刪除文章中指定字符串”指令,輸入要刪除的字符串“n”,執(zhí)行結果如下。 圖4.6 刪除文章中指定字符串如圖4.7所示,輸入指令“6”,執(zhí)行“統(tǒng)計文章中指定字符串出現次數”指令,輸入要統(tǒng)計的字符串為“printf”,執(zhí)行結果為“8”。圖4.7 統(tǒng)計文章中指定字符串出現次數如圖4.8所示,輸入指令“7”,輸出“指令輸入錯誤”。圖4.8 指令輸入錯誤本程序的文章為用戶輸入的文章,只能做即時輸入的統(tǒng)計、編輯,而不能對已有的磁盤文件中的文章進行統(tǒng)計、編輯,如果引入文件流類,就可以打開磁盤文件,對其進行統(tǒng)計、編輯并保存,這是有待改進的。5結束語此次課程設計使我對數據結構
23、方面的知識有了更加深入的了解,也使我認識到自己在學習編程方面還有很多的不足。今后我要多讀一些編程方面的書籍,不能只拘泥于課本上的知識,并注重理論與實踐的結合,多上機練習編寫程序,提高自己的實際動手能力和獨立思考的能力,不斷充實自己,更好的掌握編程思想。同時,此次課程設計也使我對編程產生了興趣,特別是在通過查書籍資料以及網上資源的情況下能夠使程序運行成功,得到了一種成就感,相對于以前的一組人完成一個程序,此次一個人獨立完成成就感更大一些。參考文獻1 嚴蔚敏,吳偉民數據結構(C語言版)北京:清華大學出版社,20022 許卓群數據結構與算法北京:高等教育出版社,20043 金遠平數據結構(C語言版)
24、 北京:清華大學出版社,20054 殷人昆數據結構(C語言版) 北京:清華大學出版社,20015 G.PerryC+程序設計教程. 北京:清華大學出版社,1994 6 嚴蔚敏,吳偉民數據結構習題集(C語言版)北京:清華大學出版社,2004附錄代碼清單:#include <string.h>#include <stdio.h> typedef struct line char *data; struct line *next;LINE; /創(chuàng)建鏈表,向里面輸入文本數據void OutPut(LINE * &head) /向屏幕輸出文字 LINE *p=head;/
25、printf(":n");do printf("%sn",p->data); while(p=p->next)!=NULL); /遍歷鏈表printf("n");void menu()printf("*編輯指令*n");printf("1:統(tǒng)計文章中總字符數 n");printf("2:統(tǒng)計文章中空格個數 n");printf("3:統(tǒng)計文章中數字個數 n");printf("4:統(tǒng)計文章中英文字母數 n");printf(
26、"5:刪除文章中指定字符串 n");printf("6:統(tǒng)計文章中指定字符串出現次數n");printf("*n");void Create(LINE * &head)printf ("請輸入文章,每行最多80個字符,以Ctrl+E(E)為結束符n");LINE *p=new LINE; /首先為鏈表建立一個附加表頭結點 head=p; /將付給表頭指針char tmp100;while(1)gets(tmp); /輸入字符串if(strlen(tmp)>80)printf("每行最多輸入8
27、0個字符!");break;if(tmp0=5)break; /如果發(fā)現輸入E,則退出輸入 p=p->next=new LINE;p->data=new charstrlen(tmp)+1; /為結點分配空間 strcpy(p->data,tmp);if(tmpstrlen(tmp)-1=5) /除去最后一個控制符E p->datastrlen(tmp)-1='0'break;p->next=NULL; /最后一個指針為空head=head->next;printf("n");menu();void CountL
28、etter(LINE * &head) /統(tǒng)計英文字母數LINE *p=head; int count=0;do int Len=strlen(p->data); /計算當前data里的數據元素個數for(int i=0;i<Len;i+)if(p->datai>='a'&&p->datai<='z')|(p->datai>='A'&&p->datai<='Z') count+; /計算字母數while(p=p->next)!
29、=NULL); /遍歷鏈表printf("文章中英文字母個數: %d n", count);/返回文章里printf("*n");printf("n");menu();void CountNumber(LINE * &head) LINE *p=head;int count=0;do int Len=strlen(p->data);for(int i=0;i<Len;i+)if(p->datai>=48 && p->datai<=57)count+; while(p=p-&g
30、t;next)!=NULL); printf("文章中數字個數: %d n",count);printf("*n");printf("n");menu();void CountSpace(LINE * &head) LINE *p=head; int count=0;do int Len=strlen(p->data);for(int i=0;i<Len;i+)if(p->datai=32)count+; while(p=p->next)!=NULL); printf("文章中空格個數: %d
31、 n", count);printf("*n");printf("n");menu();void CountAll(LINE * &head) LINE *p=head; int count=0; do count+=strlen(p->data); while(p=p->next)!=NULL); printf("文章總字數: %d n",count);printf("*n");printf("n");menu();void FindString(LINE * &
32、amp;head) LINE *p=head;int count=0;int len1=0; int len2; int i,j,k;char str120; printf("n");printf("請輸入要統(tǒng)計的字符串:");scanf("%s",str1);len2=strlen(str1);do len1=strlen(p->data); for(i=0;i<len1;i+) if(p->datai=str10)k=0;for(j=0;j<len2;j+)if(p->datai+j=str1j) k+;if(k=len2)count+;i=i+k-1;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 采茶機企業(yè)制定與實施新質生產力戰(zhàn)略研究報告
- 驅動微電機行業(yè)跨境出海戰(zhàn)略研究報告
- 農耕設備租賃合同標準文本
- 2025吉林建筑安全員知識題庫及答案
- 公司分錢合同樣本
- 出渣合同樣本
- 住宅屋轉讓合同樣本
- 個人花盆出售合同標準文本
- 農村木房建造合同標準文本
- 基于平衡計分卡的XY汽車公司銷售人員績效考核體系優(yōu)化研究
- 初一下冊生物期中考試復習提綱
- 站務一號線low培訓
- APQP培訓-經典案例(完整版)
- 礦漿比重與礦漿濃度對照換算表 (1)
- 植物生理學第一章水分代謝
- 防汛應急值班表(共2頁)
- 最全的L13J1建筑工程做法(共170頁)
- GB_T 40081-2021 電梯自動救援操作裝置(高清-現行)
- 鋼筋混凝土檢查井技術交底
- GH2-B組合型電氣火災監(jiān)控探測器安裝使用說明書
- 單位公章使用登記表
評論
0/150
提交評論