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