版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 題目 文件存取練習(xí)</p><p><b> 一、設(shè)計(jì)任務(wù)與目標(biāo)</b></p><p> 設(shè)計(jì)任務(wù)及類似已有的問題和功能:對(duì)文件中的數(shù)據(jù)讀取及存放的熟悉,應(yīng)用于各行各業(yè),如銀行對(duì)用戶的資金數(shù)據(jù)存放與讀取的業(yè)務(wù)就應(yīng)用到該功能。</p><p> 目
2、標(biāo):我進(jìn)行本設(shè)計(jì)需達(dá)到的目標(biāo)是能熟練的運(yùn)用C語言對(duì)各種數(shù)據(jù)進(jìn)行存貯和讀取使用,數(shù)據(jù)的對(duì)比,隨機(jī)數(shù)的生成和運(yùn)用,數(shù)據(jù)的排序</p><p><b> 方案設(shè)計(jì)與論證</b></p><p> 使用函數(shù)rand()隨機(jī)生成1000個(gè)數(shù),利用fopen語句中”w”指令將其寫入指定文件,而下一個(gè)函數(shù)input則利用fopen語句中”r”指令,利用指針指向指定文件,讀入到a
3、數(shù)組,用while語句統(tǒng)計(jì)數(shù)組a中0-9的個(gè)數(shù),并存入b[0]-b[9]數(shù)組中,判斷素?cái)?shù)如果n不能被所有小于等于它的平方根的整數(shù)整除,則n為素?cái)?shù),(論證:假如某個(gè)數(shù)n不是素?cái)?shù),則一定可以分解成x*y形式。由此可得,n不是素?cái)?shù),則一定可以被某個(gè)小于n的數(shù)整除。而對(duì)于n來說,最小公因數(shù)最大只能為n的平方根,因?yàn)榧偃绱嬖谝粋€(gè)大于n平方根的公因數(shù)x,則一定存在另一個(gè)公因數(shù)y=n/x,y<x。從而得上述定理),而最大素?cái)?shù)的開方+1后必定比j
4、=2的循環(huán)變量小,從而得出最大素?cái)?shù),接著利用冒泡排序法,建立一個(gè)“擂臺(tái)”,用“擂臺(tái)”上的數(shù)的前一個(gè)數(shù)與之比較,小的那個(gè)數(shù)放到最后,從而使數(shù)據(jù)按降序排列,利用絕對(duì)值,使相鄰兩數(shù)不斷循環(huán)相減,得出最大差值和最小差值,根據(jù)ASCII值且用fgetc函數(shù)讀入指定文件的字符,并使其輸出。</p><p> 程序框圖或流程圖,程序清單與調(diào)用關(guān)系</p><p><b> 四、全部源程序清
5、單</b></p><p> #include<stdio.h></p><p> #include<math.h></p><p> #include<stdlib.h></p><p> #include<time.h></p><p><b
6、> //(1)</b></p><p> int Rand1000(int d[],int n)// 隨機(jī)生成n個(gè)隨機(jī)數(shù)序列,n=999</p><p><b> { </b></p><p><b> int i,j; </b></p><p><b> FI
7、LE *fp;</b></p><p> srand((unsigned)time(NULL)); //以時(shí)間作種子</p><p> for(i=0;i<n;i++) </p><p> { d[i]=rand();</p><p> for(j=0;j<i;j++) </p>
8、;<p> /*if(d[j]==d[i]) </p><p> { j=0; d[i]=rand(); } *///去掉重復(fù)數(shù)據(jù) </p><p> printf("%d ",d[i]); </p><p><b> }</b></p><p>
9、; printf("\n__________生成完畢__________\n");</p><p> fp=fopen("file1.dat","w");//打開文本,將數(shù)據(jù)寫入到文本“file1.dat</p><p> for(i=0;i<n;i++)</p><p><b>
10、{</b></p><p> fprintf(fp,"%d ",d[i]);</p><p><b> }</b></p><p> fclose(fp);//關(guān)閉文本 </p><p><b> }</b></p><p>
11、 //(2)讀數(shù)據(jù)文件</p><p> int input(char filename[30],int a[])</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> int i,k=0;</p><p>
12、printf("\n__________讀取上述數(shù)據(jù)且放入數(shù)組a中__________\n");</p><p> if((fp=fopen(filename,"r"))==NULL)</p><p><b> {</b></p><p> printf("Read File Error&
13、quot;); return 0;</p><p><b> }</b></p><p> while(!feof(fp))</p><p><b> {</b></p><p> fscanf(fp,"%d",&a[k]); k=k+1; </p
14、><p><b> }</b></p><p> printf("\n 讀取數(shù)據(jù)結(jié)束總計(jì)=%d\n",k); </p><p> return k-1;</p><p><b> }//參數(shù)</b></p><p><b> //(3)&l
15、t;/b></p><p> digitcount(int a[],int n,int b[10]) //統(tǒng)計(jì)數(shù)字個(gè)數(shù)</p><p><b> {</b></p><p><b> int i,k;</b></p><p> printf("\n__________開始統(tǒng)計(jì)
16、每位數(shù)字出現(xiàn)的次數(shù),0-9__________\n");</p><p> for(i=0;i<10;i++) b[i]=0;</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p><b> k=a[i];</b>&
17、lt;/p><p> while(k!=0)</p><p><b> {</b></p><p> b[k%10]++;</p><p><b> k=k/10;</b></p><p><b> }</b></p><p&g
18、t;<b> }</b></p><p> for(i=0;i<10;i++) </p><p> printf("%d ",b[i]);</p><p> printf("\n__________結(jié)束統(tǒng)計(jì)每位數(shù)字出現(xiàn)的次數(shù)__________\n") ;</p>
19、<p><b> }</b></p><p><b> //(4)</b></p><p> int maxprime(int *p,int n)//確定最大的素?cái)?shù)</p><p><b> {</b></p><p> int i,k,j;</p&g
20、t;<p> for(i=0;i<n;i++)</p><p><b> {</b></p><p><b> k=p[i];</b></p><p> for(j=2;j<=sqrt(k)+1;j++)//讓整數(shù)n被從2到n的平方根之間的數(shù)一一整除 </p>&
21、lt;p> if(k%j==0) break;//若n能被其中某一個(gè)數(shù)整除,則不是素?cái)?shù),跳出循環(huán)返回0</p><p> if(j>sqrt(k)+1) return i; //p[i]是最大素?cái)?shù)</p><p><b> }</b></p><p> return 0; //不包含素?cái)?shù)</p><
22、p><b> }</b></p><p> sort(int d[],int total)//為數(shù)據(jù)排序</p><p><b> {</b></p><p> int i,k,temp;</p><p> printf("\n__________開始排序_________
23、_\n"); </p><p> for(i=1;i<total;i++)</p><p><b> {</b></p><p> for(k=i-1,temp=d[i];k>=0;k--)</p><p><b> {</b></p><p&g
24、t; if(d[k]<temp) d[k+1]=d[k];</p><p><b> else </b></p><p><b> { </b></p><p> d[k+1]=temp; break;</p><p><b> }</b></p>
25、<p><b> }</b></p><p> if(k<0) d[0]=temp;</p><p><b> }</b></p><p> for(i=0;i<total;i++) printf("%d ",d[i]);</p><p>
26、 printf("\n__________排序完畢__________\n"); </p><p><b> }</b></p><p> //兩數(shù)之差最大、最小</p><p> maxandmin(int *p,int n)//maxandmin=最大和最小</p><p>&l
27、t;b> {</b></p><p> int max=p[0]-p[1],min=p[0]-p[1],dif;//dif=difference</p><p><b> int i,k;</b></p><p> for(i=0;i<n-1;i++)</p><p><b>
28、 {</b></p><p> dif=fabs(p[i]-p[i+1]);</p><p> if(dif>max) max=dif;</p><p> if(dif<min) min=dif;</p><p><b> }</b></p><p> for
29、(i=0;i<n-1;i++)</p><p><b> {</b></p><p> if(max==fabs(p[i]-p[i+1])) </p><p> printf("Max dif: d[%d]-d[%d]=%d\n",i,i+1,(int)fabs(p[i]-p[i+1]));</p>
30、<p> if(min==fabs(p[i]-p[i+1]))</p><p> printf("Min dif: d[%d]-d[%d]=%d\n",i,i+1,(int)fabs(p[i]-p[i+1]));</p><p><b> }</b></p><p><b> }</b&g
31、t;</p><p> /*字符數(shù)據(jù)轉(zhuǎn)換*/ </p><p> void Myinput(char *fn,int *p) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> char a[10];<
32、;/p><p> int k,temp,i=0;</p><p> fp=fopen(fn,"r");</p><p> printf("\n__________開始轉(zhuǎn)換字符__________\n");</p><p> while(!feof(fp))</p><p>&
33、lt;b> {</b></p><p><b> k=0;</b></p><p> temp=fgetc(fp);</p><p> //ASCII[32:空格 13:回車 10:換行]</p><p> while( temp==32 ||temp==13 || temp==10)
34、 temp=fgetc(fp);</p><p> while(temp!=32 && !feof(fp)) //32是空格的ASCII</p><p><b> {</b></p><p> a[k]=temp; k++; temp=fgetc(fp);</p><p><b>
35、}</b></p><p> a[k]='\0';</p><p> p[i]=atoi(a);</p><p><b> i++;</b></p><p><b> }</b></p><p> printf("\n總數(shù)目為:
36、 %d\n",i);</p><p> fclose(fp);</p><p> for(k=0;k<i-1;k++)</p><p> printf("%d ",p[k]);</p><p> printf("\n__________轉(zhuǎn)換完畢__________\n");&l
37、t;/p><p><b> }</b></p><p> int main()</p><p><b> {</b></p><p> int data[10000],n=999,total_records,b[10],max_prime;</p><p> char
38、filename[]={"file1.dat"};</p><p> Rand1000(data,n); </p><p> total_records=input(filename,data);</p><p> digitcount(data,total_records,b);//統(tǒng)計(jì)每位數(shù)字出現(xiàn)的次數(shù),0至9</p>&
39、lt;p> sort(data,total_records);</p><p> max_prime=maxprime(data,total_records);</p><p> if(max_prime!=0)</p><p> printf("\n 最大素?cái)?shù)=data[%d]:%d\n\n",max_prime,data[max
40、_prime]);</p><p> else printf("\n__________指定數(shù)據(jù)中不包含素?cái)?shù)__________\n\n");</p><p> printf("相鄰兩數(shù)之差最大和之差最小的兩個(gè)數(shù)\n");</p><p> maxandmin(data,total_records);//因
41、為隨機(jī)數(shù)是以時(shí)間作種子,最小的差值只能為1</p><p> Myinput(filename,data);</p><p> system("pause");</p><p><b> }</b></p><p> 程序運(yùn)行結(jié)果測試與分析</p><p><b&
42、gt; 結(jié)論與心得</b></p><p> 學(xué)會(huì)了如何使用fopen。</p><p> 在怎么使用fopen語句時(shí),因?yàn)闆]有學(xué)過fopen、fgetc、fclose的語句,所以需要慢慢自學(xué)重新看會(huì)第四版的C語言教學(xué)。</p><p> 對(duì)指針和數(shù)組的應(yīng)用還是不太熟練,經(jīng)常將指針變量弄錯(cuò),對(duì)于將數(shù)據(jù)放入數(shù)組的操作還是不太熟練。</p>
43、;<p> 調(diào)試過程中出現(xiàn)一些邏輯和語法錯(cuò)誤,但是語法錯(cuò)誤容易糾正,而邏輯錯(cuò)誤則比較難糾正。有時(shí)會(huì)漏掉“,”,“;”,“}”等符號(hào)。</p><p><b> 參考資料</b></p><p> 譚浩強(qiáng),C程序設(shè)計(jì)(第三版),第13章;</p><p> 譚浩強(qiáng),C程序設(shè)計(jì)(第四版),第10章;</p>&l
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言程序課程設(shè)計(jì)--文件存取練習(xí)
- c語言課程設(shè)計(jì)報(bào)告(銀行存取款管理設(shè)計(jì))
- c語言課程設(shè)計(jì)報(bào)告(算術(shù)練習(xí))
- c語言課程設(shè)計(jì)--銀行存取款業(yè)務(wù)
- c語言課程設(shè)計(jì)---模擬銀行存取款業(yè)務(wù)
- c語言課程設(shè)計(jì)銀行存取款業(yè)務(wù)8
- c語言課程設(shè)計(jì)-文件加密解密
- c語言課程設(shè)計(jì)-文件加密解密
- c語言課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告
- c語言語言課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告模版
- c語言課程設(shè)計(jì)實(shí)踐報(bào)告
- c語言年歷課程設(shè)計(jì)報(bào)告
- C語言課程設(shè)計(jì)報(bào)告.doc
- c語言課程設(shè)計(jì)報(bào)告---游戲設(shè)計(jì)
- c語言課程設(shè)計(jì)-文件處理和統(tǒng)計(jì)頻率
- 【課程設(shè)計(jì)】c語言課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論