計(jì)算機(jī)與程序設(shè)計(jì)語言—課程設(shè)計(jì)報(bào)告_第1頁
計(jì)算機(jī)與程序設(shè)計(jì)語言—課程設(shè)計(jì)報(bào)告_第2頁
計(jì)算機(jī)與程序設(shè)計(jì)語言—課程設(shè)計(jì)報(bào)告_第3頁
計(jì)算機(jī)與程序設(shè)計(jì)語言—課程設(shè)計(jì)報(bào)告_第4頁
計(jì)算機(jī)與程序設(shè)計(jì)語言—課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、二一二二一三學(xué)年第一學(xué)期信息科學(xué)與工程學(xué)院計(jì)算機(jī)與程序設(shè)計(jì)語言課程設(shè)計(jì)報(bào)告課程名稱:計(jì)算機(jī)與程序設(shè)計(jì)語言班 級(jí): 電氣信息2012級(jí) 1206 班學(xué) 號(hào): 姓 名: 指導(dǎo)教師: 二0一二年十二月目錄:1. 題目大意2. 需求分析3. 總體設(shè)計(jì)4. 程序流程圖5. 詳細(xì)設(shè)計(jì)(程序源代碼)6. 程序運(yùn)行結(jié)果7. 課程感悟8. 參考資料一:文件數(shù)據(jù)的處理1.兩個(gè)文件:data1.txt和data2.txt,兩個(gè)文件中都有很多數(shù)字,用空格隔開。如:45 78 85 45 63 21 47 86運(yùn)行程序,計(jì)算這兩個(gè)文件中數(shù)字的交集,并且排好序,存放在jiao.txt中;計(jì)算這兩個(gè)文件中數(shù)字的并集,并且排

2、好序,存放在bing.txt中。2.需求分析 在電腦硬盤內(nèi),有兩個(gè)數(shù)據(jù)文件date1.txt和date2.txt,要把這兩個(gè)文件中的數(shù)據(jù)讀出來,并設(shè)計(jì)程序求出兩組數(shù)據(jù)的交集和并集。求出交集和并集后,用冒泡法進(jìn)行排序,最后要把兩組排序后的數(shù)字分別存儲(chǔ)到文件jiao.txt和bing,txt中。3.總體設(shè)計(jì) 首先,可以采用文件打開的辦法將兩個(gè)文件中的數(shù)據(jù)讀出來,并把它們分別放到整型數(shù)組date1和date2中。如果讀入失敗,也可以選用手動(dòng)從鍵盤輸入,并利用格式化輸入的方法把這兩組數(shù)據(jù)寫到硬盤的文件中。然后,利用兩個(gè)for循環(huán)控制數(shù)組的個(gè)數(shù),如果date1和date2中的元素相同,則放到另一個(gè)數(shù)組中

3、,以此類推,求出兩組數(shù)據(jù)的交集和并集,分別放到兩個(gè)數(shù)組jiao和bing中。第三,采用冒泡法對(duì)兩個(gè)數(shù)組jiao和bing中的元素進(jìn)行從小到大的排序。最后,利用格式化輸出函數(shù)fprintf()把這兩個(gè)數(shù)組中的元素寫到硬盤的jiao.txt文件和bing.txt文件中。至此,該問題已經(jīng)得到解決。4.程序框圖采用文件打開的方式把兩個(gè)文件中的數(shù)據(jù)讀出來,分別放到兩個(gè)整型數(shù)組date1 和date2中。如果不能讀入,則采用手動(dòng)輸入的方式。 對(duì)兩個(gè)數(shù)組中的數(shù)據(jù)進(jìn)行比較,分別把交集和并集放到j(luò)iao和bing中采用冒泡法對(duì)交集和并集排序格式化輸出到文件中,并分別放到j(luò)iao.txt和bing.txt5.詳細(xì)

4、設(shè)計(jì) 附 源代碼與程序分析 #include /編譯預(yù)處理 #include int main() file *fp1,*fp2,*fp3,*fp4;/定義四個(gè)指針變量 int date115,date215,jiao15,bing30;/四個(gè)數(shù)組 int i,j,k=0,l=0; fp1=fopen(e:date1.txt,r); fp2=fopen(e:date2.txt,r); if(fp1 = fopen(e:date1.txt,r)=null)|(fp2 = fopen(e:date2.txt,r)=null) printf(該文件還沒有被建立,不能打開,請(qǐng)手動(dòng)輸入:n);/ 判斷該

5、文件能否打開,如果不能 ,則手動(dòng)輸入,且輸入的必須是15個(gè)數(shù)字,不然會(huì)是很奇怪的結(jié)果 printf(請(qǐng)輸入第一個(gè)文件的數(shù)據(jù):n); for(i = 0;i 15;i+) /因?yàn)樵撐募]有建立,所以無法打開 scanf(%d,&date1i); /需手動(dòng)輸入再建立 printf(請(qǐng)輸入第二個(gè)文件的數(shù)據(jù):n); for(i = 0;i 15;i+) scanf(%d,&date2i); fclose(fp1); fclose(fp2); fp1=fopen(e:date1.txt,w); fp2=fopen(e:date2.txt,w); for(i=0;i15;i+) fprintf(fp1,%

6、4d,date1i);/ 手動(dòng)輸入后,格式化輸出到文件 fprintf(fp2,%4d,date2i); fclose(fp1);/養(yǎng)成好習(xí)慣,及時(shí)關(guān)閉打開的文件,節(jié)約內(nèi)存 fclose(fp2); else for(i = 0; i 15; i+) fscanf(fp1,%d,&date1i);/如果讀取成功,直接把數(shù)據(jù)讀到數(shù)組中 fscanf(fp2,%d,&date2i); for(i = 0; i 15; i+) for(j = 0; j 15 ;j+) if(date1i = date2j)/比較相同的數(shù),放到j(luò)iao 中,這種求交集的方法,可能會(huì)是同一個(gè)數(shù)字出現(xiàn)兩次 jiaok =

7、 date1i;k+;break; if(j = 15) bingl = date1i;l+;/把date1與date2中的不同數(shù)字賦給并集 for(i = 0; i 15; i+) bingl = date2i;l+;/把date2copy給并集 for(i = 1; i k ; i+) /冒泡法對(duì)交集排序,k為jiao數(shù)組的元素個(gè)數(shù) for(j = 0; j jiao j+1) int temp; /定義一個(gè)中間變量 temp = jiaoj; jiaoj = jiaoj+1; jiaoj+1 = temp; for(i = 1; i l ; i+)/冒泡法對(duì)并集排序,l為bing數(shù)組的元

8、素個(gè)數(shù) for(j = 0; j bing j+1) int temp; /定義一個(gè)中間變量 temp = bingj; bingj = bingj+1; bingj+1 = temp; fp3 = fopen(e:jiao.txt,w);/以“寫”的方式打開文件 fp4 = fopen(e:bing.txt,w); printf(交集 :n); for(i = 0; i k ; i+) printf(%5d,jiaoi); /將交集在屏幕上打印 fprintf(fp3,%5d,jiaoi);/將交集格式化輸出到j(luò)iao.txt文件上 printf(n); printf(并集:n); for(

9、i = 0; i l ; i+) printf(%5d,bingi); / 將并集打印到屏幕上 fprintf(fp4,%5d,bingi); /將并集格式化輸出到bing.txt文件上 if(i%10=0) printf(n);/美化屏幕 fclose(fp3);fclose(fp4); /關(guān)閉文件 printf(n); printf(恭喜你,該程序已經(jīng)成功運(yùn)行,請(qǐng)到硬盤查看!n); 6.程序的運(yùn)行結(jié)果第一種情況:e盤中提前沒有新建文件date1.txt和date2.txt輸入數(shù)據(jù)后顯示情況如下點(diǎn)擊回車后運(yùn)行結(jié)果如下:如上所示,該程序已經(jīng)運(yùn)行結(jié)束,現(xiàn)在可以在e盤中發(fā)現(xiàn)多了四個(gè)txt文本文件夾

10、:date1.txt date2.txt jiao.txt bing.txt.第二種情況:e盤中已經(jīng)提前建好文本文件,則運(yùn)行時(shí)結(jié)果如下二:統(tǒng)計(jì)字符出現(xiàn)的頻率1. 文件conf.txt中保存了很多字母,如:akdsjfkasdfjaksfjdaksdfjaskldjfaieakjdkfkadsjfiwejfkasdjf運(yùn)行程序,計(jì)算這個(gè)文件中各個(gè)字母出現(xiàn)的頻率,頻率=出現(xiàn)的次數(shù)/總字母數(shù)。將頻率存儲(chǔ)在文件rate.txt中。格式為:a:3.2%k:3.8%2.需求分析 在這個(gè)問題中,一樣用到了文件處理方面的知識(shí),我們要把文件conf.txt中的很多個(gè)字母讀出來,并計(jì)算各個(gè)字母出現(xiàn)的頻率,先把它們

11、各自出現(xiàn)的頻率打印在屏幕上,然后用格式化輸出的方法輸出到e盤的rate.txt文本文件中。注意:區(qū)分大小寫!3.總體設(shè)計(jì) 第一步,要建立一個(gè)字符數(shù)組char string1000,存放conf.txt文件中的字符,這個(gè)數(shù)組最好設(shè)大一點(diǎn),因?yàn)椴淮_定有多少個(gè)字符(暫且設(shè)為1000)。第二步,使用兩對(duì)數(shù)組char str126和float a26,char str2和float b分別存放大小寫各個(gè)字符和各個(gè)字符出現(xiàn)的次數(shù)。第三步,在計(jì)算各個(gè)字符出現(xiàn)次數(shù)的同時(shí)統(tǒng)計(jì)字符的總字?jǐn)?shù)(注意:寫入時(shí),字符的個(gè)數(shù)不能超過定義的個(gè)數(shù)1000)。第四步,計(jì)算頻率,注意數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換。最后一步,輸出:有兩次輸出,

12、一次是在屏幕上,且每兩個(gè)換行一次。另一次輸出是在硬盤文件上,采用格式化輸出的方法將結(jié)果寫到硬盤上。 4.程序流程圖要建立一個(gè)字符數(shù)組char string1000,存放conf.txt文件中的字符使用兩對(duì)數(shù)組char str126和float a26,char str2和float b分別存放大小寫各個(gè)字符和各個(gè)字符出現(xiàn)的次數(shù) 在計(jì)算各個(gè)字符出現(xiàn)次數(shù)的同時(shí)統(tǒng)計(jì)字符的總字?jǐn)?shù)(注意:寫入時(shí),字符的個(gè)數(shù)不能超過定義的個(gè)數(shù)1000)輸出:有兩次輸出,一次是在屏幕上,且每兩個(gè)換行一次。另一次輸出是在硬盤文件上,采用格式化輸出的方法將結(jié)果寫到硬盤上。5.詳細(xì)設(shè)計(jì) 附:程序代碼和程序注釋 #include

13、#include int main() int i,j = 0,k; float a26 = 0,b26=0;/ 字符與數(shù)字是相通的 ,分別計(jì)數(shù)大小寫的個(gè)數(shù)。 float num = 0;/計(jì)數(shù)(總字母數(shù)) char str126, str226;/26個(gè)英文字母 char string1000;/存放 conf.txt中的字符 char ch; file *fp1,*fp2; for(i = 0;i 26; i+)/26個(gè)字母 str1i = a +i; str2i = a +i; if(fp1 = fopen(e:conf.txt,r)=null)/溫馨提示 printf(cant ope

14、n conf.txt any key exit!); getchar(); exit(0); while(!feof(fp1) fscanf(fp1,%c,&stringj+); /把文件中的字符讀到數(shù)組string中 fclose(fp1); for(i = 0;(ch = stringi)!=0;i+) for(k = 0; k 26; k+) if(ch = str1k) /判斷該字符是哪個(gè),并 ak+;break; / 把相應(yīng)的整型數(shù)組計(jì)數(shù) for(k=0;k26;k+) if(ch=str2k) bk+;break; num +;/字符總數(shù) fp2 = fopen(e:rate.tx

15、t,w); printf(統(tǒng)計(jì)結(jié)果如下:n); for(i = 0; i 26&ai!=0; i+) /打印每個(gè)字符出現(xiàn)的頻率,沒出現(xiàn)的不顯示,且每行顯示兩個(gè) printf(%ct%f%t,str1i,100*ai/num);/計(jì)算頻率 fprintf(fp2, %ct%f%n,str1i,100*ai/num);/格式化輸出 if(i%2!=0) /每行輸出兩個(gè) printf(n); printf(n); for(i=0;i26&bi!=0;i+) printf(%ct%f%t,str2i,100*bi/num); fprintf(fp2, %ct%f%n,str2i,100*bi/num)

16、; if(i%2!=0) /每行輸出兩個(gè) printf(n); fclose(fp2);/關(guān)閉文件 printf(恭喜你!本程序你已經(jīng)成功運(yùn)行!請(qǐng)到e盤查看!n); printf(n);6.程序的運(yùn)行結(jié)果首先,在運(yùn)行程序之前,我們需要在e盤中新建一個(gè)文本文檔conf.txt.并向里面輸入不超過1000的字符,保存。示例如下:輸入字符:大小寫都有! 運(yùn)行結(jié)果:見下頁所示:還可以改成以%號(hào)形式輸出可以看到,輸出屏幕上大小寫字符的頻率都有。此時(shí),打開e盤,會(huì)發(fā)現(xiàn)多了一個(gè)rate.txt文檔,里面輸入的有各個(gè)字符出現(xiàn)的頻率:至此為止,該問題已經(jīng)得到全部解決。三:課程設(shè)計(jì)感悟本次課程設(shè)計(jì)到現(xiàn)在為止,已經(jīng)告一段落了。雖然這個(gè)課程設(shè)計(jì)把我搞的頭昏腦漲,但是我想它對(duì)我的c語言的提高還是有很大幫助的。看著自己的勞動(dòng)成果,心里還是有一種愉快的感覺的,畢竟這將近10天的辛苦沒有白費(fèi)。通過這次課程設(shè)計(jì),我對(duì)數(shù)組又有了更加深刻的認(rèn)識(shí)。當(dāng)時(shí),為了完成對(duì)字符出現(xiàn)的頻率進(jìn)行統(tǒng)計(jì)時(shí),我把書上關(guān)于數(shù)組的知識(shí)又從前到后看了一遍。雖然說不能完全掌握吧,至少比剛開始要好了許多。當(dāng)看著c-free軟件報(bào)的錯(cuò)誤越來越少時(shí),心中不禁有了一種自豪感,至少我通過自己的努力進(jìn)一步的了解了c語言。還有一點(diǎn)就是通過這次課程設(shè)計(jì),我明白了查詢資料的重要性:知識(shí)是不會(huì)自己跑到你的腦袋中

溫馨提示

  • 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)論