2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單詞出現(xiàn)次數(shù)統(tǒng)計(jì)</b></p><p><b>  一 目的</b></p><p>  通過課程設(shè)計(jì),加深對(duì)《C語言程序設(shè)計(jì)》課程所學(xué)知識(shí)的理解,熟練掌握和鞏固C語言的基本知識(shí)和語法規(guī)范,包括:數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等);程序結(jié)

2、構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));庫函數(shù)應(yīng)用等,學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語言程序,從而具備利用計(jì)算機(jī)編程分析解決綜合性實(shí)際問題的初步能力。</p><p><b>  二 需求分析</b></p><p><b>  1、輸入數(shù)據(jù)</b></p><p>  輸入2個(gè)字符串?dāng)?shù)據(jù)。第一個(gè)為文字所

3、保存在的文件名,第二個(gè)為要統(tǒng)計(jì)的單詞。</p><p><b>  2、輸出數(shù)據(jù)</b></p><p>  輸出進(jìn)行查找的文章以及搜索的單詞。并輸出搜索結(jié)果:單詞在文章出現(xiàn)的次數(shù)及第一次出現(xiàn)位置。</p><p><b>  3、程序功能</b></p><p>  按照輸入的文件名打開文件并獲取

4、文章內(nèi)容,搜索統(tǒng)計(jì)單詞出現(xiàn)次數(shù)以及第一次出現(xiàn)位置并輸出結(jié)果。</p><p><b>  三 概要設(shè)計(jì)</b></p><p>  1、全局變量或類型說明</p><p><b>  2、模塊功能</b></p><p>  void printlogo()清屏并輸出logo。</p>

5、<p>  void msg(char *str) 清屏并輸出logo后輸出參數(shù)str的內(nèi)容。</p><p>  char LoadFile(char *FileName)打開文章文件FileName并讀取內(nèi)容到內(nèi)存 該函數(shù)會(huì)自動(dòng)為文章分配內(nèi)存 如果內(nèi)存已經(jīng)分配過會(huì)先釋放原來申請的內(nèi)存 成功返回1 失敗返回0</p><p>  char lowcase(char c)把c

6、轉(zhuǎn)化成小寫返回 如果c不是字母直接返回c本身。</p><p>  void GetText()讓用戶輸入文件名并讀入文章 將會(huì)一直循環(huán)直到成功打開文件或用戶輸入”\”終止程序。</p><p>  char ckeckletter(char c)檢查c是否為一個(gè)英文字母 是返回1否返回0</p><p>  char ComstrProc(char str[],i

7、nt pos,int len)比較字符串str與文章從pos開始長度為len的部分 len即str的長度。 注意str在傳入前必需先轉(zhuǎn)化成全小寫。</p><p>  void AnalysisText(char key[])在已經(jīng)讀入內(nèi)存的文章利用ComstrProc進(jìn)行統(tǒng)計(jì) 并輸出結(jié)果(個(gè)數(shù) 第一次出現(xiàn)位置 或者未找到)</p><p>  void wuhansen()程序主要模塊

8、不斷執(zhí)行并根據(jù)要求重復(fù)程序功能(1重復(fù) 2退出程序)。</p><p>  int main()僅僅是調(diào)用wuhansen后清理內(nèi)存。</p><p>  3、程序函數(shù)調(diào)用流程</p><p><b>  四 詳細(xì)設(shè)計(jì)</b></p><p><b>  源代碼如下:</b></p>

9、<p>  #include <stdio.h></p><p>  #include <conio.h></p><p>  #include <string.h></p><p>  #if defined ( _MSC_VER )</p><p>  #include <stdlib

10、.h> /*VC*/</p><p><b>  #else</b></p><p>  #include <alloc.h> /*TC & CBuilder*/</p><p><b>  #endif</b></p><p>  /*使用預(yù)編譯指令使VC和CBuilde

11、r Tc都可以正常編譯</p><p><b>  分配內(nèi)存</b></p><p>  (VC 的分配內(nèi)存函數(shù)位于 stdlib.h</p><p>  Borland公司的編譯器的該函數(shù)位于alloc.h)*/</p><p>  char *buffer;</p><p>  unsigne

12、d int buffersize=0;</p><p>  int fileopen=0,quit=0;</p><p>  /* fileopen 為1時(shí) 說明內(nèi)存已經(jīng)申請 如果要重新分配請先Free*/</p><p>  /* quit 為1的話程序可以退出*/</p><p>  void printlogo()</p>

13、<p><b>  {</b></p><p>  #if defined ( _MSC_VER )</p><p>  system("CLS");</p><p>  /*VC沒有清屏函數(shù)所以使用DOS命令來完成*/</p><p><b>  #else</b>

14、</p><p><b>  clrscr();</b></p><p><b>  #endif</b></p><p><b>  /*清屏*/</b></p><p>  printf("+------------------------------------

15、------+\n");</p><p>  printf("| Word Counter |\n");</p><p>  printf("| By WuHansen 08065008 |\n");</p><p>  

16、printf("| QQ:21764538 Www.WuHansen.Com |\n");</p><p>  printf("+------------------------------------------+\n");</p><p><b>  }</b></p><p>

17、;  void msg(char *str)</p><p><b>  {</b></p><p>  printlogo();</p><p>  printf(str);</p><p><b>  }</b></p><p>  char LoadFile(char

18、*FileName)</p><p>  /*分配內(nèi)存并把數(shù)據(jù)文件載入到內(nèi)存中*/</p><p><b>  {</b></p><p>  FILE *hFile;</p><p>  if(strlen(FileName)<=0) return 0;</p><p>  buffers

19、ize=0;</p><p>  hFile=fopen(FileName,"r");</p><p>  if(hFile==NULL)</p><p><b>  {</b></p><p><b>  return 0;</b></p><p>&l

20、t;b>  }</b></p><p><b>  else</b></p><p><b>  { </b></p><p>  fseek(hFile, 0, SEEK_END);</p><p>  /*把文件指針移動(dòng)到結(jié)尾處</p><p>  配合

21、ftell可以知道文件的大小*/</p><p>  buffersize=ftell(hFile);</p><p>  if(buffersize==0) return 0;</p><p>  fseek(hFile, 0, SEEK_SET);</p><p>  /*將指針移回開頭讀取數(shù)據(jù)*/</p><p>

22、;  if (fileopen)</p><p>  { /*如果內(nèi)存已經(jīng)分配 先釋放原來申請的內(nèi)存*/</p><p>  fileopen=0;</p><p>  free(--buffer);</p><p>  /*分配內(nèi)存后buffer++所以先--buffer */</p><p><b>  

23、}</b></p><p>  buffer=(char*)malloc(buffersize+2);</p><p>  buffer[0]=0;/*讓內(nèi)存區(qū)以NULL開頭*/</p><p>  buffer++;/*把內(nèi)存起始指針移動(dòng)到NULL后面*/</p><p>  buffer[buffersize]=0;/* 讓內(nèi)

24、存區(qū)以NULL結(jié)尾*/</p><p><b>  /*</b></p><p>  為文章數(shù)據(jù)和2 個(gè)NULL分配內(nèi)存 結(jié)構(gòu)如下</p><p>  NULL-Contect-NULL</p><p>  這樣在AnalysisText里面可以直接判斷單詞前后的字符而不用擔(dān)心內(nèi)存錯(cuò)誤</p><p&

25、gt;<b>  */</b></p><p>  fread(buffer,1,buffersize,hFile);</p><p>  fileopen=1;</p><p>  fclose(hFile);</p><p>  printf("Load Done!");</p>&

26、lt;p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  char lowcase(char c)</p><p><b>  {</b></p>

27、<p>  if((c>='A')&&(c<='Z'))return (c+32);</p><p><b>  return c;</b></p><p><b>  }</b></p><p>  void GetText()</p>

28、<p>  /*一直循環(huán)直到成功打開用戶輸入的文件.</p><p>  或者用戶輸入“\”退出程序*/</p><p><b>  {</b></p><p>  char str[255];</p><p>  msg("Input text file name(or \"\\\&q

29、uot; to Exit):");</p><p><b>  for(;;)</b></p><p><b>  {</b></p><p>  gets(str);</p><p>  if(str[0]=='\\')</p><p>  { /

30、*用戶輸入“\”退出程序*/</p><p><b>  quit=1;</b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(LoadFile(str)) break;</p><p&

31、gt;  printlogo();</p><p>  printf("Cannot open file \"%s\",please try again.\n",str);</p><p>  printf("Input text file name(or \"\\\" to Exit):");</p&g

32、t;<p><b>  }</b></p><p><b>  }</b></p><p>  char ckeckletter(char c)</p><p><b>  {</b></p><p>  if(((c>='A')&&

33、amp;(c<='Z'))||((c>='a')&&(c<='z')))return 1;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  char ComstrProc(c

34、har str[],int pos,int len)</p><p>  /*比較字符串str和buffer從pos開始len長度 len即str長度*/</p><p>  /*先trlwr(str)轉(zhuǎn)化成小寫 這樣就不用每次都轉(zhuǎn)化提高效率</p><p><b>  */</b></p><p><b> 

35、 {</b></p><p><b>  int i;</b></p><p>  for(i=0;i<len;i++)</p><p><b>  {</b></p><p>  if(str[i]!=lowcase(buffer[i+pos])) return 0;</p

36、><p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  void AnalysisText(char key[])</p><p>  /*搜索關(guān)鍵字 輸入統(tǒng)計(jì)結(jié)果

37、*/</p><p><b>  {</b></p><p>  int i,len=0,tmp=0,count=0,firstpos=0;</p><p>  len=strlen(key);</p><p>  if(len<=0)</p><p><b>  {</b&

38、gt;</p><p>  printf("Please input a word\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  tmp=buffersize-len;</p><p&

39、gt;  printf("Text:\n");</p><p>  printf(buffer);</p><p>  printf("\n");</p><p>  printf("\"");</p><p>  printf(key);</p><p

40、>  printf("\" ");</p><p>  key=strlwr(key);/*把key內(nèi)字符串轉(zhuǎn)化成小寫*/</p><p>  if(tmp>=0)</p><p><b>  {</b></p><p>  for(i=0;i<tmp;i++)</p

41、><p><b>  { </b></p><p>  if((ComstrProc(key,i,len))&&(!ckeckletter(buffer[i+len]))&&(!ckeckletter(buffer[i-1])))</p><p>  /*除了2個(gè)字符串一樣</p><p> 

42、 還要比較改單詞的前后一個(gè)字符是否不為英文字母</p><p>  buffer申請內(nèi)存時(shí)設(shè)置了緩沖 這里可以直接判斷不用擔(dān)心內(nèi)存錯(cuò)誤*/</p><p><b>  {</b></p><p>  if(count==0)firstpos=i+1;</p><p><b>  count++;</b&g

43、t;</p><p><b>  /*記錄數(shù)據(jù)*/</b></p><p><b>  i+=len;</b></p><p>  /*跳過這個(gè)單詞直接搜索后面*/</p><p><b>  }</b></p><p><b>  else&

44、lt;/b></p><p><b>  {</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(count>0)</p><p><b>  {</b>&l

45、t;/p><p>  printf("has been found\n");</p><p>  printf("First found:%d total:%d\n",firstpos,count);</p><p><b>  }</b></p><p><b>  els

46、e</b></p><p>  printf("cannot be found...\n");</p><p><b>  /*沒找到*/</b></p><p><b>  }</b></p><p><b>  else</b></p&

47、gt;<p><b>  {</b></p><p>  printf("cannot be found...\n");</p><p>  /* 關(guān)鍵字長度比文章大</p><p>  這樣就不用比較了肯定找不到哈*/</p><p><b>  }</b><

48、;/p><p><b>  }</b></p><p>  void wuhansen()</p><p><b>  /*實(shí)際上的主函數(shù)</b></p><p>  不斷重復(fù)整個(gè)過程直到用戶輸入2退出程序</p><p><b>  */</b></

49、p><p><b>  {</b></p><p>  char key[255];</p><p><b>  char br;</b></p><p><b>  for(;;)</b></p><p><b>  {</b><

50、;/p><p>  msg("Welcome\n");</p><p>  GetText();</p><p>  if(quit) return;</p><p>  msg("Input Keyword:");</p><p>  gets(key);</p>&

51、lt;p>  AnalysisText(key);</p><p>  printf("\n");</p><p>  for(br=1;br;)</p><p><b>  {</b></p><p>  printf("Choose:\n");</p>&l

52、t;p>  printf("\"1\" try again.\n");</p><p>  printf("\"2\" exit.\n");</p><p>  switch (getchar())</p><p><b>  {</b></p>

53、<p><b>  case '1':</b></p><p><b>  br=0;</b></p><p>  /*switch中不能用break 跳出"for" 所以設(shè)置一個(gè)變量*/</p><p>  getchar();</p><p>  

54、/*清除用戶輸入時(shí)候產(chǎn)生的"\n" */</p><p><b>  break;</b></p><p><b>  case '2':</b></p><p><b>  return;</b></p><p><b>  de

55、fault:</b></p><p>  printf("Wrong Key ")</p><p><b>  ;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>&

56、lt;b>  }</b></p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  wuhansen();</p><p>  if (fileopen) free(--bu

57、ffer);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  五 調(diào)試分析</b></p><p><b>  1、測試數(shù)據(jù)</b></p><p>&l

58、t;b>  文章:</b></p><p>  Recently,there has been a discussion regarding the issue of knowledge in the newspaper.As can be seen from the picture,knowledge is symbolized a clenched fist as power,the fis

59、t sends out a message for "obedience",threatening to crack with power any hard nut.The more demanding and challenging a task is,the more powerful the fist seems to grow.Similarly,knowledge,the strongest power f

60、or human beings,feeds up the field of science and technology.The more advanced and developed a field is,the more pr</p><p><b>  關(guān)鍵詞:</b></p><p><b>  The</b></p>&l

61、t;p><b>  2、輸出結(jié)果</b></p><p>  First found:48 total:11</p><p>  3、存在過的問題以及分析解決</p><p>  1)判斷單詞時(shí)候只判斷了結(jié)尾沒判斷開頭。增加了(!ckeckletter(buffer[i-1]))并調(diào)整了內(nèi)存的分配格式(保護(hù)內(nèi)存)加以解決。</p&g

62、t;<p>  2)關(guān)鍵字包含大寫沒轉(zhuǎn)化的錯(cuò)誤。使用key=strlwr(key);進(jìn)行正確轉(zhuǎn)化。</p><p>  3)代碼無法在VC下正常編譯(只能在Borland的編譯器下編譯)。加了預(yù)編譯條件,針對(duì)VC頭文件及函數(shù)進(jìn)行修改,支持了幾種常見編譯器。(詳見代碼中的注釋)</p><p><b>  六 測試結(jié)果</b></p>&l

63、t;p>  測試結(jié)果如下圖所示:</p><p><b>  七 用戶使用說明</b></p><p>  運(yùn)行程序后會(huì)提示輸入數(shù)據(jù)文件名,直到輸入正確路徑打開文件為止(默認(rèn)數(shù)據(jù)文件為DAT 請放在程序目錄下輸入DAT即可打開),否則會(huì)一直重復(fù)這個(gè)過程,可以輸入“\”來直接終止程序。讀取數(shù)據(jù)文件成功后會(huì)提示輸入要搜索的單詞,輸入后會(huì)進(jìn)行查找并返回搜索結(jié)果。&l

64、t;/p><p>  完成后程序會(huì)提示輸入1.重試一次 2.退出程序 可以按照需要選擇。</p><p><b>  八 課程設(shè)計(jì)總結(jié)</b></p><p>  這次課程設(shè)計(jì)中,調(diào)試測試數(shù)據(jù)的時(shí)候考慮還是不夠全面,以至于測試完并沒有發(fā)現(xiàn)全部問題。</p><p>  對(duì)函數(shù)不夠熟悉,有些系統(tǒng)已有函數(shù)沒有發(fā)現(xiàn),自己寫了一遍

溫馨提示

  • 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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論