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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  一、需求分析</b></p><p>  由于被編輯的文本文件可能很大,全部讀入編輯程序的數(shù)據(jù)空間(內(nèi)存)的作法既不經(jīng)濟(jì),也不總能實(shí)現(xiàn)。而用行編輯把待編輯文件的一段放進(jìn)內(nèi)存,稱為活區(qū)。本行編輯程序是以每行不超過320個(gè)字符為前提的。每次編輯會(huì)讀入80行,活區(qū)每次只顯示20行。</p><p>  該程序要實(shí)現(xiàn)以下基本編輯命令和一些相關(guān)的命

2、令:</p><p>  行插入。格式:i<回車><行號(hào)><回車><文本><回車>。</p><p>  將<文本>插入活區(qū)第<行號(hào)>行之后。</p><p>  行刪除。格式:d<回車><行號(hào)1>,<行號(hào)2><回車>。</p&g

3、t;<p>  刪除活區(qū)中第<行號(hào)1>行到第<行號(hào)2>行。</p><p>  活區(qū)切換。格式:n<回車><頁數(shù)><回車>。</p><p>  由于每次從輸入文件讀入80行,而活區(qū)每頁顯示20行,而活區(qū)切換就是要切換到需編輯的頁面上去。</p><p>  活區(qū)顯示。格式p<回車>

4、;。</p><p>  顯示當(dāng)前要編輯的活區(qū)內(nèi)容。印出的每一行都有一個(gè)前置行號(hào)和一個(gè)空格符,行號(hào)固定為2位,增量為1。</p><p> ?。?)清屏。 格式:c<回車>。</p><p> ?。?)獲得幫助。格式:h<回車>。</p><p> ?。?)退出。 格式:e<回車>。</p

5、><p><b>  二、概要設(shè)計(jì)</b></p><p><b>  程序結(jié)構(gòu)流程圖:</b></p><p>  存儲(chǔ)結(jié)構(gòu)的定義如下:</p><p>  typedef struct text</p><p><b>  {</b></p>

6、<p>  char string[80];//存儲(chǔ)每一行的元素</p><p>  struct text *next;//指向后一個(gè)節(jié)點(diǎn)的指針</p><p>  int flat;//確定此行是否被刪除的標(biāo)志</p><p>  }text,*textp;</p><p><b>  功能函數(shù):</b>

7、;</p><p>  Status Createlist(textp &head);</p><p>  功能:建立一個(gè)80個(gè)節(jié)點(diǎn)的鏈表,是整個(gè)活區(qū)的大小</p><p>  int del(textp head);</p><p>  功能:刪除顯示的活區(qū)的任意一行。</p><p>  int displ

8、ay(textp &head);</p><p>  功能:按照每頁20行的規(guī)格顯示活區(qū)的內(nèi)容。</p><p>  void freemem(textp &head);</p><p>  功能:銷毀鏈表,釋放內(nèi)存。</p><p>  int insert(textp &head);</p><

9、p>  功能:在顯示的活區(qū)插入一行內(nèi)容。</p><p>  Status SaveFile(textp head,FILE *out);</p><p>  功能:將活區(qū)的內(nèi)容保存到輸出文件。</p><p>  Status LoadFile(textp head,FILE *fp);</p><p>  功能:從輸入文件讀取內(nèi)容到

10、活區(qū)。</p><p>  void HELP();</p><p>  功能:提供命令的格式。</p><p><b>  主函數(shù):</b></p><p>  void main()</p><p><b>  {</b></p><p><

11、b>  初始化;</b></p><p><b>  輸入命令;</b></p><p><b>  Switch(c)</b></p><p><b>  {</b></p><p>  case ‘e’: 退出并保存編輯的內(nèi)容</p><

12、;p>  case ‘p’: 顯示活區(qū)</p><p>  case ‘n’: 活區(qū)切換</p><p>  case ‘d’: 刪除一行</p><p>  case ‘i’: 插入一行</p><p>  case ‘c’: 清屏</p><p>  case ‘h’: 獲得幫助</p>

13、<p><b>  }</b></p><p><b>  }</b></p><p><b>  三、詳細(xì)設(shè)計(jì)</b></p><p>  #include<string.h></p><p>  #include<stdio.h><

14、;/p><p>  #include<stdlib.h></p><p>  #include<io.h></p><p>  #include<process.h></p><p>  #define TRUE 1</p><p>  #define FALSE 0</p>

15、<p>  #define OK 1</p><p>  #define ERROR 0</p><p>  #define INFEASIBLE -1</p><p>  #define OVERFLOW -2</p><p>  typedef int Status;</p><p>  typede

16、f struct text</p><p><b>  {</b></p><p>  char string[80];//存儲(chǔ)每一行的元素</p><p>  struct text *next;//指向后一個(gè)節(jié)點(diǎn)的指針</p><p>  int flat;//確定此行是否被刪除的標(biāo)志</p><

17、p>  }text,*textp;</p><p><b>  //函數(shù)聲明</b></p><p>  Status Createlist(textp &head);</p><p>  int del(textp head);</p><p>  int display(textp &head)

18、;</p><p>  void freemem(textp &head);</p><p>  int insert(textp &head);</p><p>  Status SaveFile(textp head,FILE *out);</p><p>  Status LoadFile(textp head,FILE

19、 *fp);</p><p>  void HELP();</p><p>  void main()//主函數(shù),用來接受命令</p><p>  //編輯函數(shù),用來接受處理編輯命令</p><p>  {textp head,q,p,p1;</p><p>  int page=0;</p><p

20、>  FILE *fp,*out;</p><p>  char c,inname[30],outname[30];</p><p>  printf("################################歡迎使用行編輯程序#############################\n");</p><p><b> 

21、 HELP();</b></p><p>  printf("按任意鍵開始。。。。。");</p><p>  c=getchar();</p><p>  /*打開輸入、輸出文件*/</p><p>  printf("Enter the infile name:"); </p

22、><p>  scanf("%s",inname);</p><p>  printf("Enter the outfile name:");</p><p>  scanf("%s",outname);</p><p>  if((fp=fopen(inname,"r&quo

23、t;))==NULL)</p><p>  { printf("can't open the file! \n");</p><p><b>  exit(0);}</b></p><p>  if((out=fopen(outname,"w"))==NULL)</p><p&

24、gt;  { printf("can't open the file!\n");</p><p>  exit(0);} </p><p>  Createlist(head); /*創(chuàng)建一個(gè)80個(gè)結(jié)點(diǎn)的鏈表*/</p><p><b>  p=head;</b></p><p>  

25、LoadFile( head,fp); </p><p><b>  do</b></p><p><b>  {</b></p><p>  printf("input order:");</p><p>  fflush(stdin);</p><p&

26、gt;  c=getchar();</p><p><b>  switch(c)</b></p><p><b>  { </b></p><p>  case 'e':SaveFile(head,out); /* 退出并保存編輯的內(nèi)容*/</p><p>  fclos

27、e(fp);</p><p>  fclose(out); </p><p><b>  break;</b></p><p>  case 'p': q=p;</p><p>  display(p);</p><p><b>  page++;</b>

28、</p><p>  if(page>4)page=1;</p><p>  printf("**********************page%d************************\n",page); if(page==4){p=head;page=0;}</p><p><b>  break; &l

29、t;/b></p><p>  case 'n': /*活區(qū)切換 */ </p><p>  SaveFile(head,out);</p><p>  LoadFile(head,fp);</p><p><b>  page=1;</b></p

30、><p><b>  q=p=head;</b></p><p>  display(p);</p><p>  printf("**********************page%d************************\n",page);</p><p><b>  break

31、;</b></p><p>  case 'd':p=q; /*顯示活區(qū)*/</p><p><b>  del(p);</b></p><p>  display(p);</p><p>  printf("********************

32、**page%d************************\n",page);</p><p><b>  break;</b></p><p>  case 'i': /*插入行*/</p><p><b>  p=q;</b></p>

33、<p>  insert(p);</p><p>  if(head->flat==1)</p><p>  fputs(head->string,out);</p><p>  p=q=q->next;</p><p><b>  p1=head;</b></p><p

34、>  head=head->next;</p><p><b>  free(p1);</b></p><p>  display(p);</p><p>  printf("**********************page%d************************\n",page);</p&

35、gt;<p><b>  break;</b></p><p><b>  case 'c':</b></p><p>  system("cls");</p><p><b>  break;</b></p><p><

36、b>  case 'h':</b></p><p><b>  HELP();</b></p><p><b>  break;</b></p><p>  default:printf("\n\n\n!!!input error!!!"); /*命令格式非法提示*/

37、</p><p><b>  }</b></p><p>  }while(c!='e');</p><p>  freemem(head);}</p><p>  Status Createlist(textp &head)//建立一個(gè)80個(gè)節(jié)點(diǎn)的鏈表,是整個(gè)活區(qū)的大小</p>&

38、lt;p><b>  {int n=0;</b></p><p>  textp p1,p2;</p><p>  p1=p2=(textp)malloc(sizeof(text));</p><p>  head=NULL;</p><p>  while(n<80)</p><p>

39、;<b>  {</b></p><p><b>  n=n+1;</b></p><p>  if(n==1){ head=p1;head->flat=0;}</p><p><b>  else </b></p><p><b>  {</b>&

40、lt;/p><p>  p2->next=p1;</p><p>  p1->flat=0;</p><p><b>  }</b></p><p><b>  p2=p1;</b></p><p>  p1=(text *)malloc(sizeof(text));

41、 </p><p><b>  }</b></p><p>  p2->next=NULL;</p><p>  return OK;}</p><p>  int del(textp head)//刪除d命令對(duì)應(yīng)的函數(shù),用來刪max-min中的行,用結(jié)構(gòu)體中的flat表示是否被刪除</p>&l

42、t;p><b>  {</b></p><p>  text *p1,*p2;</p><p>  int min,max,i;</p><p>  scanf("%d %d",&min,&max);</p><p>  if(head==NULL)</p><

43、;p><b>  {</b></p><p>  printf("\nlist null!\n");</p><p>  return OK;</p><p><b>  }</b></p><p>  p1=p2=head;</p><p>  f

44、or(i=0;i<min-1;i++)/*找到要?jiǎng)h除的第一行*/</p><p>  p1=p1->next;</p><p>  for(i=0;i<max;i++)/*找到要?jiǎng)h除的最后一行*/</p><p>  p2=p2->next;</p><p>  for(;p1!=p2;p1=p1->next)/

45、*刪除中間的節(jié)點(diǎn),將flat賦值0*/</p><p>  {p1->flat=0;}</p><p>  return OK;</p><p><b>  }</b></p><p>  int display(textp &head)//顯示P命令對(duì)應(yīng)的函數(shù),用來顯示活區(qū)的內(nèi)容</p>&

46、lt;p><b>  {</b></p><p><b>  int i;</b></p><p><b>  textp p;</b></p><p>  for(i=1,p=head;i<=20&&p;p=p->next)</p><p>

47、  if(p->flat==1)</p><p>  {printf("%2d",i); /*輸出每一行的行號(hào)*/</p><p><b>  i++;</b></p><p>  printf(" %s",p->string);</p><p><b>

48、  }</b></p><p><b>  head=p;</b></p><p>  return 0;}</p><p>  void freemem(textp &head)//釋放鏈表所占的內(nèi)存</p><p><b>  {</b></p><p&g

49、t;<b>  text *p;</b></p><p>  for(p=head;head!=NULL;)</p><p><b>  {</b></p><p>  head=p->next;</p><p><b>  free(p);</b></p>

50、<p><b>  p=head;</b></p><p><b>  }}</b></p><p>  int insert(textp &head)//插入i命令對(duì)應(yīng)的函數(shù)</p><p><b>  {</b></p><p>  int hang,i

51、;</p><p>  textp p,p1;</p><p>  scanf("%d",&hang);</p><p>  p=(textp)malloc(sizeof(text));//為插入行分配空間</p><p>  p->flat=1;</p><p>  fflush(s

52、tdin);</p><p>  fgets(p->string,80,stdin); /*輸入插入行的內(nèi)容*/</p><p><b>  p1=head;</b></p><p>  if(hang==1)</p><p>  { if(!head->flat) /*頭結(jié)點(diǎn)已被刪除

53、*/</p><p>  for(;p1&&!p1->flat;p1=p1->next); /*找到第一個(gè)flat=1的點(diǎn)*/</p><p>  p->next=p1->next;</p><p>  p1->next=p;}</p><p><b>  else{</b>

54、;</p><p>  for(i=1,p1=head;i<hang;p1=p1->next)//找到要插入行的后一行</p><p>  if(p1->flat==1)i++;</p><p>  p->next=p1->next;//從此行向下將插入行插入到鏈表中</p><p>  p1->next=

55、p;}</p><p>  return OK;}</p><p>  Status LoadFile(textp head,FILE *fp) /*從文件讀內(nèi)容到活區(qū)*/</p><p><b>  {textp p;</b></p><p>  for(p=head;p&&(!feof(fp));p=

56、p->next)</p><p>  { if(!fgets(p->string,80,fp))break;</p><p>  p->flat=1;}</p><p>  return 0;}</p><p>  Status SaveFile(textp head,FILE *out) /*存儲(chǔ)活區(qū)的函數(shù)*/<

57、/p><p>  { textp p;</p><p>  for(p=head;p;p=p->next)</p><p>  if(p->flat==1)</p><p>  {fputs(p->string,out); /*輸出活區(qū)的內(nèi)容到指定的文件*/</p><p>  p->f

58、lat=0;</p><p><b>  }</b></p><p>  return OK;</p><p><b>  }</b></p><p>  void HELP()//幫助函數(shù),顯示一些命令的格式</p><p><b>  {</b>&l

59、t;/p><p>  printf("\n\t **********************************************************\n");</p><p>  printf("\t ** 行插入格式: i<行號(hào)><回車><文本><回車> **\n");</p>

60、;<p>  printf("\t ** 行刪除格式: d<回車><行號(hào)1>[<空格><行號(hào)2>]<回車> **\n");</p><p>  printf("\t ** 活區(qū)切換格式: n<回車> **\n");</p><p>  printf(&qu

61、ot;\t ** 活區(qū)顯示格式: p<回車> **\n");</p><p>  printf("\t ** 清屏格式: c<回車> **\n");</p><p>  printf("\t ** 幫助格式: h<回車> **\n");</p>&l

62、t;p>  printf("\t **********************************************************\n");</p><p><b>  }</b></p><p><b>  四、調(diào)試分析</b></p><p><b>  測(cè)試數(shù)據(jù)

63、:</b></p><p>  任意的TXT文件,只要每行不超過80個(gè)字符。</p><p>  調(diào)試遇到的問題與解決方法:</p><p>  在調(diào)試的過程中為了使刪除行操作不把開辟出來的內(nèi)存空間結(jié)構(gòu)破壞,我設(shè)置了一個(gè)標(biāo)志位Flat,當(dāng)某一行被刪除時(shí),只要將這個(gè)標(biāo)志置0即可,而不用將這個(gè)結(jié)點(diǎn)刪除,下一次載入新的活區(qū),只要將它重新置1,載入的內(nèi)容便可有效

64、。同時(shí)由于我對(duì)某些函數(shù)庫的使用不是很熟悉,從而令到程序出現(xiàn)各種意想不到的結(jié)果。后來與同學(xué)一起討論才找出其中的錯(cuò)誤。</p><p><b>  經(jīng)驗(yàn)與體會(huì):</b></p><p>  在本次實(shí)驗(yàn)的行編輯程序中,我認(rèn)真分析了行編輯的各種功能模塊,從而確定單鏈表的數(shù)據(jù)結(jié)構(gòu)。單鏈表的每個(gè)結(jié)點(diǎn)開辟一個(gè)數(shù)組存儲(chǔ)行的內(nèi)容。該結(jié)構(gòu)能夠輕易地插入行和刪除行。 通過本次實(shí)驗(yàn),我對(duì)編程

65、有了更進(jìn)一步的了解,自己的編輯能力也得到了一定的提高,鞏固了課本的知識(shí),加強(qiáng)了我敏銳的洞察能力。</p><p><b>  五、 用戶使用說明</b></p><p> ?。?)進(jìn)入程序的界面,出現(xiàn)命令的幫助信息,按任意鍵開始程序編輯。</p><p>  (2)輸入INPUT文件與OUTPUT文件的名字打開相應(yīng)的文件 。</p>

66、<p>  (3)輸入P命令顯示活區(qū)的內(nèi)容。</p><p>  (4)其它的命令操作如下:</p><p>  行插入格式: i<行號(hào)><回車><文本><回車> </p><p>  行刪除格式: d<回車><行號(hào)1>[<空格><行號(hào)2>]<回車&g

67、t; </p><p>  活區(qū)切換格式: n<回車> </p><p>  清屏格式: c<回車> </p><p>  幫助格式: h<回車> </p><p> ?。?)最后輸入e命令退出程序。 </p><p><b>  六、測(cè)試

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論