版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 二○一二~二○一三學(xué)年第一學(xué)期</p><p><b> 信息科學(xué)與工程學(xué)院</b></p><p> 計(jì)算機(jī)與程序設(shè)計(jì)語言</p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 課程名稱:計(jì)算機(jī)與程序設(shè)計(jì)語言</p><p> 班
2、 級: 電氣信息2012級 1206 班</p><p> 學(xué) 號: </p><p> 姓 名: </p><p> 指導(dǎo)教師: </p><
3、;p><b> 二0一二年十二月</b></p><p><b> 目錄:</b></p><p><b> 題目大意</b></p><p><b> 需求分析</b></p><p><b> 總體設(shè)計(jì)</b>&l
4、t;/p><p><b> 程序流程圖</b></p><p> 詳細(xì)設(shè)計(jì)(程序源代碼)</p><p><b> 程序運(yùn)行結(jié)果</b></p><p><b> 課程感悟</b></p><p><b> 參考資料</b>&
5、lt;/p><p><b> 一:文件數(shù)據(jù)的處理</b></p><p> 1.兩個(gè)文件:data1.txt和data2.txt,兩個(gè)文件中都有很多數(shù)字,用空格隔開。如:</p><p> 45 78 85 45 63 21 47 86</p><p> 運(yùn)行程序,計(jì)算這兩個(gè)文件中數(shù)字的交集,并且排好序,存放在jia
6、o.txt中;計(jì)算這兩個(gè)文件中數(shù)字的并集,并且排好序,存放在bing.txt中。</p><p><b> 2.需求分析</b></p><p> 在電腦硬盤內(nèi),有兩個(gè)數(shù)據(jù)文件date1.txt和date2.txt,要把這兩個(gè)文件中的數(shù)據(jù)讀出來,并設(shè)計(jì)程序求出兩組數(shù)據(jù)的交集和并集。求出交集和并集后,用冒泡法進(jìn)行排序,最后要把兩組排序后的數(shù)字分別存儲(chǔ)到文件jiao.
7、txt和bing,txt中。</p><p><b> 3.總體設(shè)計(jì)</b></p><p> 首先,可以采用文件打開的辦法將兩個(gè)文件中的數(shù)據(jù)讀出來,并把它們分別放到整型數(shù)組date1[]和date2[]中。如果讀入失敗,也可以選用手動(dòng)從鍵盤輸入,并利用格式化輸入的方法把這兩組數(shù)據(jù)寫到硬盤的文件中。</p><p> 然后,利用兩個(gè)for
8、循環(huán)控制數(shù)組的個(gè)數(shù),如果date1[]和date2[]中的元素相同,則放到另一個(gè)數(shù)組中,以此類推,求出兩組數(shù)據(jù)的交集和并集,分別放到兩個(gè)數(shù)組jiao[]和bing[]中。</p><p> 第三,采用冒泡法對兩個(gè)數(shù)組jiao[]和bing[]中的元素進(jìn)行從小到大的排序。</p><p> 最后,利用格式化輸出函數(shù)fprintf()把這兩個(gè)數(shù)組中的元素寫到硬盤的jiao.txt文件和bi
9、ng.txt文件中。</p><p> 至此,該問題已經(jīng)得到解決。</p><p><b> 4.程序框圖</b></p><p><b> 5.詳細(xì)設(shè)計(jì)</b></p><p> 附 源代碼與程序分析</p><p> #include <stdio.h&
10、gt; //編譯預(yù)處理 </p><p> #include <stdlib.h></p><p> int main()</p><p><b> {</b></p><p> FILE *fp1,*fp2,*fp3,*fp4;//定義四個(gè)指針變量 </p><p>
11、int date1[15],date2[15],jiao[15],bing[30];//四個(gè)數(shù)組 </p><p> int i,j,k=0,l=0;</p><p> fp1=fopen("e:\\date1.txt","r");</p><p> fp2=fopen("e:\\date2.txt"
12、,"r");</p><p> if(((fp1 = fopen("e:\\date1.txt","r"))==NULL)||((fp2 = fopen("e:\\date2.txt","r"))==NULL))</p><p><b> {</b></p&g
13、t;<p> printf("該文件還沒有被建立,不能打開,請手動(dòng)輸入:\n");// 判斷該文件能否打開,如果不能 ,則手動(dòng)輸入,且輸入的必須是15個(gè)數(shù)字,不然會(huì)是很奇怪的結(jié)果</p><p> printf("請輸入第一個(gè)文件的數(shù)據(jù):\n"); </p><p> for(i = 0;i < 15;i++)
14、 //因?yàn)樵撐募]有建立,所以無法打開 </p><p> scanf("%d",&date1[i]); //需手動(dòng)輸入再建立 </p><p> printf("請輸入第二個(gè)文件的數(shù)據(jù):\n");</p><p> for(i = 0;i < 15;i++)<
15、/p><p> scanf("%d",&date2[i]);</p><p> fclose(fp1);</p><p> fclose(fp2);</p><p> fp1=fopen("e:\\date1.txt","w");</p><p>
16、 fp2=fopen("e:\\date2.txt","w");</p><p> for(i=0;i<15;i++)</p><p><b> {</b></p><p> fprintf(fp1,"%4d",date1[i]);// 手動(dòng)輸入后,格式化輸出到文件 &l
17、t;/p><p> fprintf(fp2,"%4d",date2[i]);</p><p><b> }</b></p><p> fclose(fp1);//養(yǎng)成好習(xí)慣,及時(shí)關(guān)閉打開的文件,節(jié)約內(nèi)存 </p><p> fclose(fp2);</p><p><
18、b> }</b></p><p><b> else</b></p><p><b> { </b></p><p> for(i = 0; i < 15; i++)</p><p><b> {</b></p><p&g
19、t; fscanf(fp1,"%d",&date1[i]);//如果讀取成功,直接把數(shù)據(jù)讀到數(shù)組中 </p><p> fscanf(fp2,"%d",&date2[i]);</p><p><b> }</b></p><p><b> }</b></
20、p><p> for(i = 0; i < 15; i++)</p><p><b> {</b></p><p> for(j = 0; j < 15 ;j++)</p><p> { if(date1[i] == date2[j])//比較相同的數(shù),放到j(luò)iao[] 中,這種求交集的方法,可能會(huì)是同一
21、個(gè)數(shù)字出現(xiàn)兩次 </p><p> { jiao[k] = date1[i];k++;break;}</p><p> if(j == 15)</p><p> {bing[l] = date1[i];l++;}//把date1[]與date2[]中的不同數(shù)字賦給并集</p><p><b> }</b><
22、/p><p><b> }</b></p><p> for(i = 0; i < 15; i++)</p><p><b> {</b></p><p> bing[l] = date2[i];l++;//把date2[]copy給并集</p><p><b
23、> }</b></p><p> for(i = 1; i < k ; i++) //冒泡法對交集排序,k為jiao[]數(shù)組的元素個(gè)數(shù) </p><p> for(j = 0; j < k - i;j++)</p><p> if(jiao[j] > jiao [j+1])</p><p><
24、b> {</b></p><p> int temp; //定義一個(gè)中間變量 </p><p> temp = jiao[j]; </p><p> jiao[j] = jiao[j+1];</p><p> jiao[j+1] = temp;</p><p>&l
25、t;b> }</b></p><p> for(i = 1; i < l ; i++)//冒泡法對并集排序,'l'為bing[]數(shù)組的元素個(gè)數(shù) </p><p> for(j = 0; j < l - i;j++)</p><p> if(bing[j] > bing [j+1])</p>&
26、lt;p><b> {</b></p><p> int temp; //定義一個(gè)中間變量 </p><p> temp = bing[j]; </p><p> bing[j] = bing[j+1];</p><p> bing[j+1] = temp;</p>
27、<p><b> }</b></p><p> fp3 = fopen("e:\\jiao.txt","w");//以“寫”的方式打開文件 </p><p> fp4 = fopen("e:\\bing.txt","w");</p><p> pr
28、intf("交集 :\n");</p><p> for(i = 0; i < k ; i++)</p><p><b> {</b></p><p> printf("%5d",jiao[i]); //將交集在屏幕上打印 </p><p> fprintf
29、(fp3,"%5d",jiao[i]);//將交集格式化輸出到j(luò)iao.txt文件上 </p><p><b> }</b></p><p> printf("\n");</p><p> printf("并集:\n");</p><p> for(i
30、= 0; i < l ; i++)</p><p><b> {</b></p><p> printf("%5d",bing[i]); // 將并集打印到屏幕上 </p><p> fprintf(fp4,"%5d",bing[i]); //將并集格式化輸出到bing.txt文件上
31、 </p><p> if(i%10==0)</p><p> printf("\n");//美化屏幕 </p><p><b> }</b></p><p> fclose(fp3);fclose(fp4); //關(guān)閉文件</p><p> printf(&q
32、uot;\n"); </p><p> printf("恭喜你,該程序已經(jīng)成功運(yùn)行,請到硬盤查看??!\n");</p><p><b> } </b></p><p><b> 6.程序的運(yùn)行結(jié)果</b></p><p> 第一種情況:E盤中提前沒有新建文件da
33、te1.txt和date2.txt</p><p> 輸入數(shù)據(jù)后顯示情況如下</p><p> 點(diǎn)擊回車后運(yùn)行結(jié)果如下:</p><p> 如上所示,該程序已經(jīng)運(yùn)行結(jié)束,現(xiàn)在可以在E盤中發(fā)現(xiàn)多了四個(gè)txt文本文件夾:date1.txt date2.txt jiao.txt bing.txt.</p><p> 第二種情況:E盤中
34、已經(jīng)提前建好文本文件,則運(yùn)行時(shí)結(jié)果如下</p><p> 二:統(tǒng)計(jì)字符出現(xiàn)的頻率</p><p> 1. 文件conf.txt中保存了很多字母,如:</p><p> akdsjfkasdfjaksfjdaksdfjaskldjfaieakjdkfkadsjfiwejfkasdjf</p><p> 運(yùn)行程序,計(jì)算這個(gè)文件中各個(gè)字母出
35、現(xiàn)的頻率,頻率=出現(xiàn)的次數(shù)/總字母數(shù)。將頻率存儲(chǔ)在文件rate.txt中。格式為:</p><p><b> a:3.2%</b></p><p><b> k:3.8%</b></p><p><b> ……</b></p><p><b> 2.需求分析&
36、lt;/b></p><p> 在這個(gè)問題中,一樣用到了文件處理方面的知識(shí),我們要把文件conf.txt中的很多個(gè)字母讀出來,并計(jì)算各個(gè)字母出現(xiàn)的頻率,先把它們各自出現(xiàn)的頻率打印在屏幕上,然后用格式化輸出的方法輸出到E盤的rate.txt文本文件中。注意:區(qū)分大小寫??!</p><p><b> 3.總體設(shè)計(jì)</b></p><p>
37、 第一步,要建立一個(gè)字符數(shù)組char string[1000],存放conf.txt文件中的字符,這個(gè)數(shù)組最好設(shè)大一點(diǎn),因?yàn)椴淮_定有多少個(gè)字符(暫且設(shè)為1000)。</p><p> 第二步,使用兩對數(shù)組char str1[26]和float a[26],char str2[]和float b[]分別存放大小寫各個(gè)字符和各個(gè)字符出現(xiàn)的次數(shù)。</p><p> 第三步,在計(jì)算各個(gè)字符出
38、現(xiàn)次數(shù)的同時(shí)統(tǒng)計(jì)字符的總字?jǐn)?shù)(注意:寫入時(shí),字符的個(gè)數(shù)不能超過定義的個(gè)數(shù)1000)。</p><p> 第四步,計(jì)算頻率,注意數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換。</p><p> 最后一步,輸出:有兩次輸出,一次是在屏幕上,且每兩個(gè)換行一次。另一次輸出是在硬盤文件上,采用格式化輸出的方法將結(jié)果寫到硬盤上。</p><p><b> 4.程序流程圖</b>
39、;</p><p><b> 5.詳細(xì)設(shè)計(jì)</b></p><p> 附:程序代碼和程序注釋</p><p> #include <stdio.h></p><p> #include <stdlib.h></p><p> int main()</p>
40、;<p><b> {</b></p><p> int i,j = 0,k;</p><p> float a[26] = {0},b[26]={0};// 字符與數(shù)字是相通的 ,分別計(jì)數(shù)大小寫的個(gè)數(shù)。 </p><p> float num = 0;//計(jì)數(shù)(總字母數(shù)) </p><p> c
41、har str1[26], str2[26];//26個(gè)英文字母</p><p> char string[1000];//存放 conf.txt中的字符 </p><p><b> char ch;</b></p><p> FILE *fp1,*fp2;</p><p> for(i = 0;i < 2
42、6; i++)//26個(gè)字母 </p><p> {str1[i] = 'a' +i;</p><p> str2[i] = 'A' +i;</p><p><b> }</b></p><p> if((fp1 = fopen("e:\\conf.txt",&
43、quot;r"))==NULL)//溫馨提示 </p><p><b> {</b></p><p> printf("Can't open conf.txt any key exit!");</p><p> getchar();</p><p><b> ex
44、it(0); </b></p><p><b> }</b></p><p> while(!feof(fp1))</p><p> fscanf(fp1,"%c",&string[j++]); //把文件中的字符讀到數(shù)組string[]中 </p><p> fclose
45、(fp1);</p><p> for(i = 0;(ch = string[i])!='\0';i++)</p><p><b> {</b></p><p> for(k = 0; k < 26; k++)</p><p> if(ch == str1[k]) //判斷該字符是哪個(gè)
46、,并 </p><p> { a[k]++;break; } // 把相應(yīng)的整型數(shù)組計(jì)數(shù) </p><p> for(k=0;k<26;k++)</p><p> if(ch==str2[k])</p><p> {b[k]++;break;}</p><p> num ++;//字符總數(shù) </
47、p><p><b> }</b></p><p> fp2 = fopen("e:\\rate.txt","w");</p><p> printf("統(tǒng)計(jì)結(jié)果如下:\n");</p><p> for(i = 0; i < 26&&a
48、[i]!=0; i++)</p><p> { //打印每個(gè)字符出現(xiàn)的頻率,沒出現(xiàn)的不顯示,且每行顯示兩個(gè) </p><p> printf("%c\t%f%%\t",str1[i],100*a[i]/num);//計(jì)算頻率 </p><p> fprintf(fp2, "%c\t%f%%\n",str1[i],100*
49、a[i]/num);//格式化輸出</p><p> if(i%2!=0) //每行輸出兩個(gè) </p><p> printf("\n");</p><p><b> } </b></p><p> printf("\n");</p><p>
50、 for(i=0;i<26&&b[i]!=0;i++)</p><p><b> {</b></p><p> printf("%c\t%f%%\t",str2[i],100*b[i]/num); </p><p> fprintf(fp2, "%c\t%f%%\n",str
51、2[i],100*b[i]/num);</p><p> if(i%2!=0) //每行輸出兩個(gè) </p><p> printf("\n");</p><p><b> }</b></p><p> fclose(fp2);//關(guān)閉文件 </p><p> p
52、rintf("恭喜你!本程序你已經(jīng)成功運(yùn)行!請到E盤查看!\n");</p><p> printf("\n");</p><p><b> }</b></p><p><b> 6.程序的運(yùn)行結(jié)果</b></p><p> 首先,在運(yùn)行程序之前,我們
53、需要在E盤中新建一個(gè)文本文檔conf.txt.并向里面輸入不超過1000的字符,保存。</p><p><b> 示例如下:</b></p><p> 輸入字符:大小寫都有!</p><p><b> 運(yùn)行結(jié)果:</b></p><p><b> 見下頁所示:</b>&
54、lt;/p><p> 還可以改成以%號形式輸出</p><p> 可以看到,輸出屏幕上大小寫字符的頻率都有。此時(shí),打開E盤,會(huì)發(fā)現(xiàn)多了一個(gè)rate.txt文檔,里面輸入的有各個(gè)字符出現(xiàn)的頻率:</p><p> 至此為止,該問題已經(jīng)得到全部解決。</p><p><b> 三:課程設(shè)計(jì)感悟</b></p>
55、<p> 本次課程設(shè)計(jì)到現(xiàn)在為止,已經(jīng)告一段落了。雖然這個(gè)課程設(shè)計(jì)把我搞的頭昏腦漲,但是我想它對我的C語言的提高還是有很大幫助的??粗约旱膭趧?dòng)成果,心里還是有一種愉快的感覺的,畢竟這將近10天的辛苦沒有白費(fèi)。</p><p> 通過這次課程設(shè)計(jì),我對數(shù)組又有了更加深刻的認(rèn)識(shí)。當(dāng)時(shí),為了完成對字符出現(xiàn)的頻率進(jìn)行統(tǒng)計(jì)時(shí),我把書上關(guān)于數(shù)組的知識(shí)又從前到后看了一遍。雖然說不能完全掌握吧,至少比剛開始要
56、好了許多。當(dāng)看著C-Free軟件報(bào)的錯(cuò)誤越來越少時(shí),心中不禁有了一種自豪感,至少我通過自己的努力進(jìn)一步的了解了C語言。還有一點(diǎn)就是通過這次課程設(shè)計(jì),我明白了查詢資料的重要性:知識(shí)是不會(huì)自己跑到你的腦袋中的,只有通過自己的雙手去翻閱,去查詢,才能感到學(xué)習(xí)的快樂,才能領(lǐng)會(huì)學(xué)習(xí)的樂趣。</p><p> 最后,我想說:這次課程設(shè)計(jì)讓我明白了天外有天的道理,本來以為自己懂的差不多了,可是在完成任務(wù)的時(shí)候差距就顯現(xiàn)了出來
57、:但自己還在抓耳撓腮百思不得其解時(shí),別人已經(jīng)輕松搞定。所以,只有腳踏實(shí)地才能得到真正的知識(shí)。</p><p> 當(dāng)然,我的設(shè)計(jì)肯定有不足之處,希望老師加以指點(diǎn)。謝謝!</p><p><b> 四:參考資料</b></p><p> 《C語言程序設(shè)計(jì)》(第二版) 李麗娟,馬淑萍;</p><p> 《C程序設(shè)計(jì)》
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計(jì)-文件加密解密
- c語言課程設(shè)計(jì)-文件加密解密
- c語言課程設(shè)計(jì)--圖像處理
- c語言課程設(shè)計(jì)報(bào)告--文件存取練習(xí)
- c語言程序課程設(shè)計(jì)--文件存取練習(xí)
- c語言課程設(shè)計(jì)--數(shù)據(jù)集合處理
- 【課程設(shè)計(jì)】c語言課程設(shè)計(jì)
- c語言課程設(shè)計(jì)報(bào)告--符串處理
- c語言課程設(shè)計(jì)-學(xué)生成績統(tǒng)計(jì)管理
- c++語言課程設(shè)計(jì) ----學(xué)生成績統(tǒng)計(jì)
- c語言課程設(shè)計(jì)學(xué)生成績統(tǒng)計(jì)設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)課程設(shè)計(jì)-成績統(tǒng)計(jì)系統(tǒng)+進(jìn)制轉(zhuǎn)換系統(tǒng)
- c語言課程設(shè)計(jì)
- c語言課程設(shè)計(jì)
- c語言課程設(shè)計(jì)
- c語言課程設(shè)計(jì)-文件加密解密(含源代碼)
- c語言課程設(shè)計(jì)報(bào)告-- 學(xué)生成績統(tǒng)計(jì)系統(tǒng)
- c語言課程設(shè)計(jì)--運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)
- c語言課程設(shè)計(jì)--c語言投票程序
- c語言課程設(shè)計(jì)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)
評論
0/150
提交評論