c語(yǔ)言課程設(shè)計(jì)報(bào)告書_第1頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告書_第2頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告書_第3頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告書_第4頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告書_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

14/14C語(yǔ)言課程設(shè)計(jì)報(bào)告題目:院系:組別:成員:指導(dǎo)老師:2013年月日目錄一、 課程設(shè)計(jì)題目 3二、 課程設(shè)計(jì)要求 3三、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)描述 31、問(wèn)題描述……………..……32、設(shè)計(jì)思想……………..……33、涉及數(shù)據(jù)結(jié)構(gòu)知識(shí)……………..…….34、各變量的定義和作用…………..……35、功能模塊詳細(xì)設(shè)計(jì)3四、 程序設(shè)計(jì)內(nèi)容 51、求各字母出現(xiàn)的頻率………..……….52、查找替換正文中的字符串……………….………8.五、 遇到問(wèn)題及解決方法 ..11六、 課程設(shè)計(jì)心得及體會(huì) 11附錄一源程序………………….17附錄二正文內(nèi)容………………19附錄三參考文獻(xiàn)……………….………….….20課程設(shè)計(jì)題目《C語(yǔ)言課程設(shè)計(jì)》任務(wù)書(1)、正文統(tǒng)計(jì)。統(tǒng)計(jì)一段正文,求各字母出現(xiàn)的頻度(忽略大小寫)(2)、查找并替換正文中的字符串。課程設(shè)計(jì)要求對(duì)一段正文中各字母出現(xiàn)頻率進(jìn)行統(tǒng)計(jì),并輸出。查找替換正文中的字符串。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)描述問(wèn)題描述需要設(shè)計(jì)一個(gè)程序能夠?qū)崿F(xiàn)在一段英文正文中對(duì)各個(gè)字母進(jìn)行分析,并能夠?qū)ο嗤淖帜高M(jìn)行個(gè)數(shù)的累計(jì),最終分別統(tǒng)計(jì)出26個(gè)字母的個(gè)數(shù);還需要設(shè)計(jì)程序能夠?qū)τ⑽囊宰址男问竭M(jìn)行查找并替換。設(shè)計(jì)思想先建立一個(gè)正文文件,然后從文件中讀取字符保存在字符變量中,然后進(jìn)行依次分析(此時(shí)需要設(shè)計(jì)循環(huán)結(jié)構(gòu)),判斷。打開(kāi)已有的正文文件,然后從鍵盤輸入需要查找的字符串和替換的字符串,讓需查找的字符串與正文各個(gè)字符串比對(duì),遇到相同的替換為新的字符串,然后把該字符串再寫入到新建文件中。涉及數(shù)據(jù)結(jié)構(gòu)知識(shí)主要用到一維數(shù)組,指針變量,數(shù)據(jù)的輸入輸出,對(duì)文件的輸入輸出等。各變量的定義和作用變量類型變量名稱作用FILE*fp*fp2文件型指針變量charch暫時(shí)存放每個(gè)字母intIkn循環(huán)結(jié)構(gòu),計(jì)數(shù)等CharString,string2,string3存放字符串inta[26]存放一維數(shù)組元素功能模塊詳細(xì)設(shè)計(jì)用到輸入輸出函數(shù),因此用到stdio.h文件。用到動(dòng)態(tài)存儲(chǔ)分配函數(shù),因此用到stdlib.h文件。用到字符串的比較函數(shù),因此用到string.h文件。程序分為兩部分:一、是利用for循環(huán)結(jié)構(gòu)進(jìn)行字母頻度統(tǒng)計(jì);[分析]這是一個(gè)分類統(tǒng)計(jì)問(wèn)題,用一個(gè)大小為26的一維數(shù)組存放26個(gè)字母出現(xiàn)的次數(shù)。大寫字母A~Z的出現(xiàn)次數(shù)分別存放在數(shù)組a[0]到a[25]中,小寫字母a~z的出現(xiàn)次數(shù)分別存放在a[0]到a[25]中。為了保證大寫字母的個(gè)數(shù)依次存放在數(shù)組a中,需要將數(shù)組元素的ASCII碼減去65;同理,為了保證小寫字母的個(gè)數(shù)依次存放在數(shù)組a中,需要將那個(gè)數(shù)組元素的ASCII碼減去97(提示:大寫字母A的ASCII碼為65,小寫字母a的ASCII碼為97)。letter=s[i];//取出一個(gè)字符if(letter>='A'&&letter<='Z')//如果是大寫字母{index=letter-65;//將統(tǒng)計(jì)的A~Z轉(zhuǎn)換成數(shù)字0~25 a[index]=a[index]+1;//統(tǒng)計(jì)各個(gè)字母出現(xiàn)的次數(shù)}if(letter>='a'&&letter<='z'){ index=letter-97;//將字母a~z轉(zhuǎn)換成數(shù)字0~25 a[index]=a[index]+1;//統(tǒng)計(jì)每個(gè)字母出現(xiàn)的次數(shù)。 }二、是利用字符串函數(shù)進(jìn)行比較和替換。 while(!feof(fp))//循環(huán)直到文件內(nèi)容結(jié)束 { fscanf(fp,"%s",string3);//用格式化的方式讀寫文件將fp包含的正文以字符串的格式輸入到string3中。 if(strcmp(string,string3)==0)//strcmp字符串較函數(shù),拿string中的字符串與string3中的比較。 { fprintf(fp2,"%s",string2);//兩個(gè)字符串完全相等,就將string2中的字符串輸入fp2中。 n++; continue; } fprintf(fp2,"%s",string3);//兩個(gè)字符串不同,就將string3中的字符串輸入fp2中。 }運(yùn)用C語(yǔ)言if語(yǔ)句,while循環(huán),for循環(huán)C語(yǔ)言常用文件處理函數(shù):fopen()打開(kāi)文件;fclose()關(guān)閉文件;fputc();寫一個(gè)字符到文件中;fgetc()從文件中讀取一個(gè)字符。feof()到達(dá)文件尾時(shí)返回真值等f(wàn))函數(shù)的調(diào)用關(guān)系程序設(shè)計(jì)內(nèi)容求各字母出現(xiàn)的頻度程序語(yǔ)言如下:#include<stdlib.h>//動(dòng)態(tài)存儲(chǔ)分配函數(shù)的頭文件#include<stdio.h>//輸入輸出函數(shù)的頭文件voidmain(){ FILE*fp;//定義了一個(gè)指向文件型數(shù)據(jù)的指針變量 charch;//定義一個(gè)字符變量 inta[26]={0};//定義一個(gè)含有26個(gè)元素的一維數(shù)組 inti,k=0;//定義二個(gè)變量,并對(duì)k賦初值為0 fp=fopen("D:\\english.txt","r");//打開(kāi)文件!其中第一個(gè)引號(hào)內(nèi)為文件的存在路徑,第二個(gè)引號(hào)內(nèi)表示為以只讀的方式打開(kāi)文件 //判斷是否能正常打開(kāi)文件,不能打開(kāi)文件就輸出“打開(kāi)文件失敗” if(fp==NULL) { printf("打開(kāi)文件失敗!"); exit(0); } printf("原文為:\n"); while(!feof(fp))//如果未遇到輸入文件的結(jié)束字符 { ch=fgetc(fp); printf("%c",ch);//將文件的每個(gè)字符通過(guò)無(wú)數(shù)次的循環(huán)賦值給ch,并輸出if(ch>='A'&&ch<='Z')//如果是大寫字母 { i=ch-65;//將統(tǒng)計(jì)的A~Z轉(zhuǎn)換成數(shù)字0~25 a[i]=a[i]+1;//統(tǒng)計(jì)各個(gè)字母出現(xiàn)的次數(shù) k++; } if(ch>='a'&&ch<='z') { i=ch-97;//將字母a~z轉(zhuǎn)換成數(shù)字0~25. a[i]=a[i]+1;//統(tǒng)計(jì)每個(gè)字母出現(xiàn)的次數(shù)。 k++; } } printf("\n"); printf("一共有%d個(gè)字母。\n",k); printf("字母\t出現(xiàn)次數(shù)\n"); for(i=0;i<26;i++)//輸出統(tǒng)計(jì)結(jié)果 printf("%c(%c)\t%d\n",65+i,97+i,a[i]); printf("\n");查找替換正文中的字符串。程序語(yǔ)言如下:#include<stdlib.h>//動(dòng)態(tài)存儲(chǔ)分配函數(shù)的頭文件#include<stdio.h>//輸入輸出函數(shù)的頭文件#include<string.h>//字符函數(shù)和字符串函數(shù)的頭文件voidmain() {FILE*fp,*fp2;//定義了一個(gè)指向文件型數(shù)據(jù)的指針變量charstring[20],string2[20],string3[20];//定義了三個(gè)一維字符數(shù)組,作為交換字符串時(shí)的臨時(shí)字符數(shù)組intn=0printf("輸入要查找的字符串:"); gets(string);//將從鍵盤輸入的字符串存入string printf("輸入替換后的字符串:"); gets(string2);//將從鍵盤輸入的字符串存入string2 fp=fopen("D:\\english.txt","r");//以只讀形式打開(kāi)文件english.txt fp2=fopen("D:\\b.txt","w");//以只寫的方式打開(kāi)文件b.txt while(!feof(fp))//循環(huán)直到文件內(nèi)容結(jié)束 { fscanf(fp,"%s",string3);//用格式化的方式讀寫文件,將fg包含的正文以字符串的格式輸入到string3中。 if(strcmp(string,string3)==0)//strcmp字符串比較函數(shù),拿string中的字符串與string3中的比較。 { fprintf(fp2,"%s",string2);//兩個(gè)字符串完全相等,就將string2中的字符串輸入fp2中。 n++; continue; } fprintf(fp2,"%s",string3);//兩個(gè)字符串不同,就將string3中的字符串輸入fp2中。} printf("共找到%d處替換!\n",n); printf("替換后的文件已經(jīng)寫入“D:\\b.txt”中了!\n"); fclose(fp); fclose(fp2);//關(guān)閉文件遇到問(wèn)題及解決方法問(wèn)題:從資料得到a[50],我們覺(jué)得應(yīng)該是26,(定義的為字母的個(gè)數(shù),有26個(gè)字母),但是在改為a[11]~a[26]都能正常輸出。解決方法:最初使用了一個(gè)main函數(shù),經(jīng)過(guò)老師的調(diào)試,屬于編譯器的問(wèn)題,a[1]本身就有32個(gè)元素。在使用了調(diào)用函數(shù)后沒(méi)有出現(xiàn)這樣的問(wèn)題。且做了改進(jìn),不用for循環(huán)對(duì)a[26]賦值,而是直接采用inta[26]={0}的方式進(jìn)行賦值,使步驟更簡(jiǎn)便。問(wèn)題:在剛開(kāi)始時(shí)一直打開(kāi)文件錯(cuò)誤,而我們的文件路徑是對(duì)的,后來(lái)改為無(wú)中文字符才能夠正常打開(kāi)文件。問(wèn)題是是否在打開(kāi)文件時(shí)不能有中文文件名。解決方法:尋問(wèn)過(guò)老師后知道是編譯器的問(wèn)題。應(yīng)該能夠含有中文文件名。最終我們將其放在英文目錄下進(jìn)行運(yùn)行。課程設(shè)計(jì)心得及體會(huì)附錄一:源程序#include<stdlib.h>//動(dòng)態(tài)存儲(chǔ)分配函數(shù)的頭文件#include<stdio.h>//輸入輸出函數(shù)的頭文件#include<string.h>//字符函數(shù)和字符串函數(shù)的頭文件voidmain()//定義主函數(shù){ voidprint();//聲明print函數(shù) voidreplace(charstring[20],charstring2[20]);//聲明replace函數(shù) charstring[20],string2[20];//定義了兩個(gè)個(gè)一維字符數(shù)組,作為交換字符串時(shí)的臨時(shí)字符數(shù)組print();//調(diào)用print函數(shù)printf("\n"); printf("輸入要查找的字符串:"); gets(string);//將從鍵盤輸入的字符串存入string printf("輸入替換后的字符串:"); gets(string2);//將從鍵盤輸入的字符串存入string2 replace(string,string2);//調(diào)用replace函數(shù)}voidprint()//定義print函數(shù){ FILE*fp;//定義了一個(gè)指向文件型數(shù)據(jù)的指針變量charch;//定義一個(gè)字符變量 inta[26]={0};//定義一個(gè)含有26個(gè)元素的一維數(shù)組 inti,k=0;//定義二個(gè)變量,并對(duì)k賦初值為0 fp=fopen("D:\\english.txt","r");//打開(kāi)文件!其中第一個(gè)引號(hào)內(nèi)為文件的存在路徑,第二個(gè)引號(hào)內(nèi)表示為以只讀的方式打開(kāi)文件 //判斷是否能正常打開(kāi)文件,不能打開(kāi)文件就輸出“打開(kāi)文件失敗” if(fp==NULL) { printf("打開(kāi)文件失??!"); exit(); } printf("原文為:\n"); while(!feof(fp))//如果未遇到輸入文件的結(jié)束字符 { ch=fgetc(fp); printf("%c",ch);//將文件的每個(gè)字符通過(guò)無(wú)數(shù)次的循環(huán)賦值給ch,并輸出 if(ch>='A'&&ch<='Z')//如果是大寫字母 { i=ch-65;//將統(tǒng)計(jì)的A~Z轉(zhuǎn)換成數(shù)字0~25 a[i]=a[i]+1;//統(tǒng)計(jì)各個(gè)字母出現(xiàn)的次數(shù) k++; } if(ch>='a'&&ch<='z') { i=ch-97;//將字母a~z轉(zhuǎn)換成數(shù)字0~25. a[i]=a[i]+1;//統(tǒng)計(jì)每個(gè)字母出現(xiàn)的次數(shù)。 k++; } } printf("\n\n一共有%d個(gè)字母。\n",k); printf("\n字母\t出現(xiàn)次數(shù)\n"); for(i=0;i<26;i++)//輸出統(tǒng)計(jì)結(jié)果 printf("%c(%c)\t%d\n",65+i,97+i,a[i]); fclose(fp);} voidreplace(charstring[20],charstring2[20])//定義replace函數(shù){ FILE*fp,*fp2;//定義了兩個(gè)指向文件型數(shù)據(jù)的指針變量 intn=0; charstring3[20]; fp=fopen("D:\\english.txt","r");//以只讀形式打開(kāi)文件english.txt fp2=fopen("D:\\b.txt","w");//以只寫的方式打開(kāi)文件b.txt while(!feof(fp))//循環(huán)直到文件內(nèi)容結(jié)束 { fscanf(fp,"%s",string3);//用格式化的方式讀寫文件,將fp包含的正文以字符串的格式輸入到string3中。 if(strcmp(string,string3)==0)//strcmp字符串比較函數(shù),拿string中的字符串與string3中的比較。 { fprintf(fp2,"%s",string2);//兩個(gè)字符串完全相等,就將string2中的字符串輸入fp2中。 n++; continue; } fprintf(fp2,"%s",string3);//兩個(gè)字符串不同,就將string3中的字符串輸入fp2中 } printf("\n共找到%d處替換!\n\n",n); printf("替

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論