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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計(jì)</p><p>  設(shè)計(jì)題目: 串的基本操作 </p><p>  學(xué)生姓名: </p><p>  專(zhuān)業(yè)班級(jí): </p><p>  指導(dǎo)教師: </p>

2、;<p>  完成時(shí)間: </p><p><b>  目 錄</b></p><p>  NO.1:課程設(shè)計(jì)的目的、基本要求及其解析1</p><p>  1.課程設(shè)計(jì)的目的:1</p><p>  2.課程設(shè)計(jì)要求:1</p><p>  3.課程設(shè)

3、計(jì)題目解析:1</p><p>  NO.2:課程設(shè)計(jì)內(nèi)容2</p><p>  1.程序設(shè)計(jì)的基本思想2</p><p>  2.程序設(shè)計(jì)代碼:3</p><p>  NO3:程序設(shè)計(jì)的優(yōu)缺點(diǎn)及遇到的問(wèn)題11</p><p>  1.程序設(shè)計(jì)的優(yōu)缺點(diǎn)11</p><p>  2.在

4、程序設(shè)計(jì)的過(guò)程中遇到的問(wèn)題:11</p><p><b>  NO4總結(jié):11</b></p><p><b>  1.個(gè)人總結(jié)11</b></p><p><b>  2.參考文獻(xiàn)11</b></p><p>  NO.1:課程設(shè)計(jì)的目的、基本要求及其解析</p

5、><p>  1.課程設(shè)計(jì)的目的:</p><p> ?。赫莆沾幕敬鎯?chǔ)結(jié)構(gòu)。</p><p> ?。赫莆沾幕具\(yùn)算及其實(shí)現(xiàn)。</p><p><b>  2.課程設(shè)計(jì)要求:</b></p><p> ?。簩⑸蠙C(jī)程序全部調(diào)試通過(guò)。</p><p>  :結(jié)合程序分析運(yùn)行結(jié)果

6、。</p><p>  3.課程設(shè)計(jì)題目解析:</p><p>  顧名思義,串及其基本操作,就是要在理解串的基本概念和特征的基礎(chǔ)上,了解串的內(nèi)部表示和處理方法。這樣才能有效地實(shí)現(xiàn)串的基本操作。串,也還是字符串,是一種特殊的線(xiàn)性表。特殊之處在于表中的每一個(gè)元素都是字符,以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有聯(lián)接、求串長(zhǎng)、求子串、比較串的大小、串的插入、串的刪除、子串

7、的定位和置換。因?yàn)樗M(jìn)行的操作比較零散也比較多,所以就要用到多個(gè)函數(shù)把這個(gè)整體的課程設(shè)計(jì)劃分成多個(gè)模塊來(lái)進(jìn)行。每個(gè)函數(shù)對(duì)應(yīng)一個(gè)功能。在主函數(shù)中,用一個(gè)菜單,就可以將原來(lái)的已分模塊的函數(shù)系統(tǒng)地進(jìn)行檢驗(yàn)及操作。在程序設(shè)計(jì)的過(guò)程中,根據(jù)課程設(shè)計(jì)的目的和基本要求,注意一些容易出錯(cuò)的地方及問(wèn)題。</p><p>  NO.2:課程設(shè)計(jì)內(nèi)容</p><p>  1.程序設(shè)計(jì)的基本思想:(對(duì)于串及其基

8、本操作中,程序被分割為很多的模塊。所以以下的程序設(shè)計(jì)業(yè)分成好幾個(gè)方面來(lái)一一闡述)</p><p> ?。?)求字符串的聯(lián)接:在該函數(shù)中,strcat(str1,str2)就是將串str2緊接著放在串str1的串值的末尾,組成一個(gè)新的串str1。最后所得的新的str1即為所求的原來(lái)的兩個(gè)字符str1和str1的聯(lián)接后的結(jié)果。輸出即是。</p><p>  (2)求字符串的串長(zhǎng):在該函數(shù)中,要

9、先定義一個(gè)整形變量i,strlen(str)表示字符串str的長(zhǎng)度,它是一個(gè)整形函數(shù)。通過(guò)函數(shù)strlen(str)來(lái)算出字符串的長(zhǎng)度,然后賦值給整形變量i輸出,從而i的值即為所求的字符串的長(zhǎng)度。 </p><p> ?。?)比較兩個(gè)字符串的大小:在該函數(shù)中,strcmp(str1,str2)是一個(gè)函數(shù),它的功能是比較兩個(gè)串str1和str2的大小,通過(guò)if語(yǔ)句的判斷函數(shù)strcmp(str1,str2)的函數(shù)值

10、大小,其中函數(shù)值小于、等于和大于0時(shí),分別表示str1<str2、str1=str2、str1>str2,其對(duì)應(yīng)的輸出結(jié)果分別為-1、0、1。</p><p> ?。?).串的復(fù)制:在該函數(shù)中,首先分別輸入兩串字符串str1和str2,通過(guò)函數(shù)strcpy(str1,str2)來(lái)實(shí)現(xiàn)str2復(fù)制給str1的功能,得到復(fù)制后的字符串為新的str1,輸出即為復(fù)制后的結(jié)果。</p><p

11、> ?。?)求字符串的插入:該函數(shù)中有三個(gè)形參,兩個(gè)是字符串s和t,一個(gè)是整形形參i。即把字符串t插入到s的第i個(gè)元素之后。在函數(shù)中,定義兩個(gè)個(gè)整形變量j、k,其中&s->curlen和&t->curlen分別指原字符串和要插入字符串的長(zhǎng)度。用一個(gè)for循環(huán),"for(j=s->curlen—1;j>=i;j--)",滿(mǎn)足循環(huán)條件的要進(jìn)行的操作時(shí)把s->ch[j]賦

12、值給s->ch[j+t->curlen],就是讓s->ch中空出等于&t-.curlen的長(zhǎng)度的空間,好讓t可以插入。下面再用一個(gè)for循環(huán)''for(k=0,j=i;t->ch[k]!='\0';k++,j++)",再把t->ch[k]賦值給s->ch[j];這樣的把t插入到了s中。最后,給s->ch[s->curlen+t->cu

13、rlen]賦值一個(gè)"\0",這時(shí)的s->ch[s->curlen+t->curlen]就是一個(gè)新的字符串,然后把s->ch[s->curlen+t->curlen]再賦值給s->curlen即可得到所求的新的字符串。</p><p>  (6)串的刪除:該函數(shù)有三個(gè)形參,一個(gè)是字符串s,兩個(gè)是整形形參i和j,在函數(shù)中定義一個(gè)整形變量k,輸入原字符串和其

14、長(zhǎng)度&s->curlen,函數(shù)中用for循環(huán),"for(k=i+j-1;s->ch[k]!='\0';k++)",把s->ch[k]賦值給s->ch[k-j],既用覆蓋的方式刪除從第i個(gè)元素開(kāi)始連續(xù)j個(gè)元素,最后把''\0''賦值給s->ch[k-j],再把k-j賦值給s->curlen。s->ch就是所求的刪除從第i個(gè)

15、元素開(kāi)始連續(xù)j個(gè)元素后的新的字符串。</p><p> ?。?)子串的定位:這個(gè)函數(shù)有兩個(gè)形參,s和t,在函數(shù)內(nèi)部,還要定義兩個(gè)整形變量i=0和j=0。用while語(yǔ)句'' while((i<s->curlen)&&(j<t->curlen))'',滿(mǎn)足條件后進(jìn)行的操作是檢驗(yàn)對(duì)應(yīng)的s和t的元素是否相等,相等時(shí)就i++,j++,用i減去t的串長(zhǎng)

16、即為t作為子串在s中的定位位置。不相等時(shí),就用i減去j加上1賦值給i,j=0,往下掃描時(shí),就從t的第一個(gè)元素再接著掃描。</p><p>  (8)求字符串的置換:這個(gè)函數(shù)中有四個(gè)形參,兩個(gè)字符串s和t,兩個(gè)整形形參i和j,在函數(shù)內(nèi)部還要定義五個(gè)整形變量k=0、l、n、m、p。首先把i+j賦值給l;通過(guò)輸入輸入主字符串和要置換的字符串的長(zhǎng)度、主字符串和要置換的字符串s和t。先要判斷j和將要被置換的字符串的串長(zhǎng)關(guān)系

17、,如果剛好相等,就讓t從第一個(gè)元素開(kāi)始,s從第第i個(gè)元素開(kāi)始,一一賦值。如果t的串長(zhǎng)比較大,則用一個(gè)for循環(huán),for''(k=s->curlen;k>=i+j-1;k++)'',s[k]賦值給s[k-j+t->scurlen],這樣剩余的空間剛好可以用來(lái)存放t的,同樣的,如果t的串長(zhǎng)比較小,同樣用以for循環(huán),''for(k=i+j-1,m=i;s[k]!='\

18、0';k++,m++)'',s[k]賦值給s[m+t->curlen-1],s剩余的空間也剛好用來(lái)存放t的。然后,把t中的元素對(duì)應(yīng)的賦值給s。最后,在s的最后一個(gè)元素后賦值一個(gè)'\0',這時(shí)的s,就是t置換后的新的字符串。</p><p> ?。?)利用串的基本主函數(shù):在主函數(shù)中,因?yàn)橐疃噍斎雰蓚€(gè)字符串,所以要先定義兩個(gè)字符串s和t。有的主函數(shù)需要用到整形的變量,最

19、多是兩個(gè),所以也要定義兩個(gè)整形變量k和m。函數(shù)中,有很多的功能不同的函數(shù),這樣就要求驗(yàn)證很多次,所以在這里我們考慮用菜單來(lái)實(shí)現(xiàn)。用一個(gè)while循環(huán),循環(huán)的條件為永真,這樣當(dāng)做完一個(gè)函數(shù)的驗(yàn)證時(shí),系統(tǒng)就會(huì)自動(dòng)讓你接著選擇。在while循環(huán)下,輸入一個(gè)數(shù)字。每個(gè)數(shù)字代表不同的功能。然后用一個(gè)switch語(yǔ)句,不同的case對(duì)應(yīng)不同的函數(shù),如:case(0)就可以代表求字符串的串長(zhǎng)。</p><p><b>

20、;  2.程序設(shè)計(jì)代碼:</b></p><p>  #include<stdio.h></p><p>  #include<string.h></p><p>  #define maxsize 64</p><p>  typedef struct</p><p><b&

21、gt;  {</b></p><p>  char ch[maxsize];</p><p>  int curlen;</p><p>  }seqstring;</p><p>  seqstring *s;</p><p>  void strcats()</p><p>&l

22、t;b>  {</b></p><p>  seqstring str1[32],str2[32];</p><p>  printf("請(qǐng)輸入倆串字符串:");</p><p>  scanf("%s%s",str1,str2);</p><p>  strcat(str1,str2

23、);</p><p>  puts(str1);</p><p><b>  }</b></p><p>  void strlens()</p><p><b>  {</b></p><p>  seqstring str[32];</p><p>

24、;<b>  int i;</b></p><p>  printf("請(qǐng)輸入一串字符串:");</p><p>  scanf("%s",str);</p><p>  i=strlen(str);</p><p>  printf("此字符串的串長(zhǎng)為:%d"

25、,i);</p><p><b>  }</b></p><p>  void strcmps()</p><p><b>  {</b></p><p>  seqstring str1[32],str2[32];</p><p>  printf("請(qǐng)輸入兩串字

26、符串:");</p><p>  scanf("%s%s",str1,str2);</p><p>  if(strcmp(str1,str2)>0)</p><p>  printf("1");</p><p>  if(strcmp(str1,str2)==0)</p>

27、<p>  printf("0");</p><p>  if(strcmp(str1,str2)<0)</p><p>  printf("-1");</p><p><b>  }</b></p><p>  void strcpys()</p>

28、<p><b>  {</b></p><p>  seqstring str1[32],str2[32];</p><p>  printf("請(qǐng)輸入兩串字符串:");</p><p>  scanf("%s%s",str1,str2);</p><p>  strc

29、py(str1,str2);</p><p>  printf("復(fù)制后的字符串為%s",str1);</p><p><b>  }</b></p><p>  void insert(seqstring *s,int i,seqstring *t)</p><p><b>  {<

30、/b></p><p><b>  int j,k;</b></p><p>  printf("請(qǐng)輸入原字符串和其長(zhǎng)度:");</p><p>  scanf("%s%d",s,&s->curlen);</p><p>  printf("請(qǐng)輸入要插

31、入的字符串的長(zhǎng)度:");</p><p>  scanf("%s%d",t,&t->curlen);</p><p>  for(j=s->curlen-1;j>=i;j--)</p><p>  s->ch[j+t->curlen]=s->ch[j];</p><p>

32、;  for(k=0,j=i;t->ch[k]!='\0';k++,j++)</p><p>  s->ch[j]=t->ch[k];</p><p>  s->ch[s->curlen+t->curlen]='\0';</p><p>  s->curlen=s->curlen+t-&

33、gt;curlen;</p><p>  printf("插入后的字符串為:");</p><p>  puts(s->ch);</p><p><b>  }</b></p><p>  void deletes(seqstring *s,int i,int j)</p><

34、;p><b>  {</b></p><p><b>  int k;</b></p><p>  printf("請(qǐng)輸入原字符串和其長(zhǎng)度:");</p><p>  scanf("%s%d",s,&s->curlen);</p><p>

35、  for(k=i+j-1;s->ch[k]!='\0';k++)</p><p>  s->ch[k-j]=s->ch[k];</p><p>  s->ch[k-j]='\0';</p><p>  s->curlen=k-j;</p><p>  printf("刪

36、除后的字符串為:");</p><p>  puts(s->ch);</p><p><b>  }</b></p><p>  int index(seqstring *s,seqstring *t)</p><p><b>  {</b></p><p>

37、  int i=0,j=0;</p><p>  printf("請(qǐng)輸入主串和子串的串長(zhǎng):");</p><p>  scanf("%d%d",&s->curlen,&t->curlen);</p><p>  printf("請(qǐng)輸入主串和子串:");</p>&l

38、t;p>  scanf("%s%s",s,t);</p><p>  while((i<s->curlen)&&(j<t->curlen))</p><p>  if(s->ch[i]==t->ch[j])</p><p><b>  {</b></p>

39、<p><b>  i++;</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p&

40、gt;<p><b>  i=i-j+1;</b></p><p><b>  j=0;</b></p><p><b>  }</b></p><p>  if(j==t->curlen)</p><p>  printf("\n匹配成功!&qu

41、ot;);</p><p><b>  else</b></p><p>  printf("\n匹配失敗!");</p><p><b>  }</b></p><p>  void replace(seqstring *s,int i,int j,seqstring *t)&

42、lt;/p><p><b>  {</b></p><p>  int k=0,l,n,m,p;</p><p><b>  l=i+j;</b></p><p>  printf("請(qǐng)輸入主字符串的長(zhǎng)度:");</p><p>  scanf("%

43、d",&s->curlen);</p><p>  printf("請(qǐng)輸入要置換的字符串的長(zhǎng)度:");</p><p>  scanf("%d",&t->curlen);</p><p>  printf("請(qǐng)輸入主字符串和要置換的字符串:");</p>

44、<p>  scanf("%s%s",s,t);</p><p>  if(j==t->curlen)</p><p><b>  {</b></p><p>  for(k=0;t->ch[k]!='\0';k++)</p><p><b>  {&l

45、t;/b></p><p>  s->ch[i-1]=t->ch[k];</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  s->curlen=s->curlen+t->curlen-j;</p>

46、<p>  s->ch[s->curlen]='\0'; </p><p>  printf("置換后的字符串為:");</p><p>  puts(s->ch);</p><p><b>  }</b></p><p><b>  e

47、lse</b></p><p>  if(j>t->curlen)</p><p><b>  { </b></p><p>  while(s->ch[l-1]!='\0')</p><p><b>  {</b></p><p&g

48、t;  m=j-t->curlen;</p><p>  s->ch[l-m-1]=s->ch[l-1];</p><p><b>  l++;</b></p><p><b>  }</b></p><p>  for(k=0;t->ch[k]!='\0';

49、k++)</p><p><b>  {</b></p><p>  s->ch[i-1]=t->ch[k];</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  s->curlen

50、=s->curlen+t->curlen-j;</p><p>  s->ch[s->curlen]='\0'; </p><p>  printf("置換后的字符串為:");</p><p>  puts(s->ch);</p><p><b>  }<

51、/b></p><p><b>  else</b></p><p>  if(j<t->curlen)</p><p><b>  {</b></p><p>  p=n=s->curlen;</p><p>  while(n>=i+j)&l

52、t;/p><p><b>  {</b></p><p>  m=t->curlen-j;</p><p>  s->ch[n+m-1]=s->ch[n-1];</p><p><b>  n--;</b></p><p><b>  }</b&

53、gt;</p><p>  for(k=0;t->ch[k]!='\0';k++)</p><p><b>  {</b></p><p>  s->ch[i-1]=t->ch[k];</p><p><b>  i++;</b></p><p&

54、gt;<b>  }</b></p><p>  s->curlen=p+t->curlen-j;</p><p>  s->ch[s->curlen]='\0'; </p><p>  printf("置換后的字符串為:");</p><p>  put

55、s(s->ch);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  int i=1,j;</p>

56、<p>  seqstring s,t;</p><p><b>  while(i)</b></p><p><b>  {</b></p><p>  printf("0:聯(lián)接\n1:求串長(zhǎng)\n2:串比較\n3:串復(fù)制\n4:插入\n5:刪除\n6:子串定位\n7:置換子串\n");<

57、;/p><p>  scanf("%d",&i);</p><p><b>  switch(i)</b></p><p><b>  {</b></p><p>  case 0:strcats();break;</p><p>  case 1:s

58、trlens();break;</p><p>  case 2:strcmps();break;</p><p>  case 3:strcpys();break;</p><p>  case 4:printf("請(qǐng)輸入插入的位置:");</p><p>  scanf("%d",&i);&

59、lt;/p><p>  insert(&s,i,&t);break;</p><p>  case 5:printf("請(qǐng)輸入刪除的位置和個(gè)數(shù):");</p><p>  scanf("%d%d",&i,&j);</p><p>  deletes(&s,i,j);b

60、reak;</p><p>  case 6:index(&s,&t);break;</p><p>  case 7:printf("請(qǐng)輸入置換的位置和個(gè)數(shù):");</p><p>  scanf("%d%d",&i,&j);</p><p>  replace(&am

61、p;s,i,j,&t);break;</p><p><b>  }</b></p><p>  printf("\n0:停止\n1:繼續(xù)\n");</p><p>  scanf("%d",&i);</p><p><b>  }</b>&l

62、t;/p><p><b>  }</b></p><p><b>  程序運(yùn)行結(jié)果:</b></p><p><b>  1串聯(lián)接 </b></p><p><b>  圖1 串聯(lián)接</b></p><p><b>  2)求

63、串長(zhǎng)</b></p><p><b>  圖2 求串長(zhǎng)</b></p><p><b>  3)串比較</b></p><p><b>  圖3 串比較</b></p><p><b>  4)串復(fù)制</b></p><p&

64、gt;<b>  圖4 串復(fù)制</b></p><p><b>  5)串插入</b></p><p><b>  圖5 串插入</b></p><p><b>  6)串刪除</b></p><p><b>  圖 6 串刪除</b>

65、;</p><p><b>  7)子串定位</b></p><p><b>  圖7 子串定位</b></p><p><b>  8)置換子串</b></p><p><b>  圖8 置換子串</b></p><p>  NO

66、3:程序設(shè)計(jì)的優(yōu)缺點(diǎn)及遇到的問(wèn)題</p><p>  1.程序設(shè)計(jì)的優(yōu)缺點(diǎn)</p><p>  利用串的基本操作,有利于數(shù)據(jù)的處理和存儲(chǔ),并且有利于節(jié)省大量的空間;但是缺點(diǎn)在于算法過(guò)程過(guò)于繁瑣,不太方便.</p><p>  2.在程序設(shè)計(jì)的過(guò)程中遇到的問(wèn)題:</p><p> ?。?)在進(jìn)行串的聯(lián)接時(shí),是把后面一串字符串接到前一字符串的后面

67、,在用戶(hù)輸入時(shí),應(yīng)注意字符串輸入的順序。</p><p> ?。?)在比較兩個(gè)串大小時(shí),比較的開(kāi)始,比較的兩個(gè)串元素都不能為空。</p><p>  (3)在進(jìn)行置換時(shí),重點(diǎn)要考慮用來(lái)置換的串與它所要置換的一串字符的長(zhǎng)度的關(guān)系。</p><p>  (4)在子串的定位時(shí),掃描的串中的某一個(gè)元素與子串中的第一個(gè)元素相同,接著往下掃描,若都相同時(shí),才可以說(shuō)明串中出現(xiàn)的子

68、串中的第一個(gè)元素的位置是子串位置。但如果后面的元素有不同的,則子串中的掃描必須回到第一個(gè)元素的位置開(kāi)始重新掃描。</p><p><b>  NO4總結(jié)</b></p><p><b>  1.個(gè)人總結(jié)</b></p><p>  通過(guò)串及其基本操作的課程設(shè)計(jì),讓我更深層次地了解了串的基本概念、特征,</p>

69、<p>  掌握了串的基本存儲(chǔ)結(jié)構(gòu)、基本運(yùn)算及其實(shí)現(xiàn),培養(yǎng)了課程設(shè)計(jì)的能力及思想</p><p><b>  構(gòu)思。</b></p><p><b>  2.參考文獻(xiàn):</b></p><p>  [1]唐策善等編著.數(shù)據(jù)結(jié)構(gòu)-----用c語(yǔ)言描述.高等教育出版社</p><p>  [

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論