c語言課程設計-數(shù)組游戲_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  前言</b></p><p>  計算機對社會發(fā)展所具有的廣泛而深遠的影響。人類文化的內(nèi)涵是隨著社會發(fā)展而進化的。在現(xiàn)代信息社會中,計算機已不僅僅是一種工具,而且是一種文化。信息技術對人類社會進行的全方位滲透,已經(jīng)形成一種新的文化形態(tài)——信息時代的計算機文化。計算機知識成為當代知識分子結構中不可缺少的重要部分。</p><p>  設計是

2、一門重要的計算機基礎課程,通過學習,學生不僅要掌握高級程序設計語言的知識,更重要的是在實踐中逐步掌握程序設計的思想和方法,培養(yǎng)問題求解和語言的應用能力。此次上機實習,不但要使同學們的程序設計能力上一臺階,同時要提高與程序設計和軟件開發(fā)有關的各種綜合能力。</p><p>  通過這次對C語言的進一步學習,為我們?nèi)蘸髮W習單片機安打下了基礎。在機電一體化日趨明顯的當下,掌握一門計算機語言是多么的重要,這必將為我們機電

3、學院學生日后的發(fā)展產(chǎn)生深遠的影響。</p><p>  由于課時和上機時間的倉促,所以我對很多內(nèi)容還來不及消化,對上機演練十分陌生,還有一些知識遺忘,因而這次程序設計的實習實際上是對我的一次集中的強化練習。雖然其時間短,任務重,但我們的確達到了此次課程設計的目的。</p><p>  本次實習得到樊**老師的指導和幫助,至此表示感謝 !</p><p><b&

4、gt;  目 錄</b></p><p>  第一部分 題目要求1</p><p>  第二部分 程序設計思路2</p><p><b>  1.需求分析2</b></p><p>  2.程序總體設計2</p><p>  3.程序詳細設計2</p>

5、<p>  第三部分 程序代碼6</p><p>  第四部分 設計數(shù)據(jù)和運行結果10</p><p>  4.1 運用舉例的數(shù)據(jù)進行驗證10</p><p>  4.2 自行設計數(shù)據(jù)進行驗證11</p><p>  第五部分 所遇問題及解決方案13</p><p>  5.1 數(shù)字的輸入

6、問題13</p><p>  5.2 switch和break的用法13</p><p>  5.3數(shù)組排序問題14</p><p>  5.4 標記數(shù)組的使用14</p><p>  5.5 最后結果的輸出14</p><p>  第六部分 總結與感受15</p><p>  第

7、一部分 題目要求</p><p><b>  數(shù)組游戲</b></p><p><b>  【要求】</b></p><p>  設有n個正整數(shù)(n≤20),將它們連成一排,組成一個最大的多位數(shù)。程序輸入:n個正整數(shù)。程序輸出:n個數(shù)連接成的多位數(shù)。</p><p><b>  【提示】

8、</b></p><p><b>  以下是設計思路:</b></p><p>  可以將問題這樣變化一下:</p><p>  比如輸入的是123、2、33、1006、12這樣幾個數(shù)字。</p><p>  先找出最大的數(shù)字的位數(shù)為4位,再將所有的數(shù)字變成4位數(shù):</p><p> 

9、 2000 3300 1006 1200</p><p><b>  然后進行排序:</b></p><p>  2000 1230 1200 1006</p><p>  這樣將后面加上的0去掉的序列不就是最大數(shù)字嗎?于是最大數(shù)字就是:</p><p>  332123121006。</p>

10、<p>  第二部分 程序設計思路</p><p><b>  需求分析</b></p><p>  根據(jù)題目要求,輸入若干個數(shù)字(中間用空格隔開),輸入的數(shù)字個數(shù)不大于20。然后,讓這些數(shù)隨機連在一起,把組合中的最大數(shù)輸出。</p><p><b>  程序總體設計</b></p><p&

11、gt;  輸入一組數(shù),輸出所需要的數(shù)。</p><p><b>  大致流程圖:</b></p><p><b>  程序詳細設計</b></p><p><b>  主函數(shù)</b></p><p>  主要負責輸入和輸出一定的數(shù)據(jù)。</p><p>&

12、lt;b>  main( )</b></p><p><b>  {</b></p><p><b>  輸入數(shù)字,</b></p><p><b>  進行一定的處理,</b></p><p><b>  輸出數(shù)字,</b></

13、p><p><b>  }</b></p><p><b>  流程圖</b></p><p>  排序函數(shù)(選擇法)void sort(int x[],int n)</p><p>  將數(shù)字按從大到小的順序排列(如果兩個數(shù)字相等,交換位置)</p><p>  void so

14、rt(int x[],int n) /*用選擇法將正整數(shù)按從大到小排列*/</p><p><b>  {</b></p><p>  int i,j,k,t;</p><p>  for(i=0;i<n-1;i++)</p><p><b>  {</b></p>

15、<p><b>  k=i;</b></p><p>  for(j=i+1;j<n;j++)</p><p>  if(x[j]>=x[k])k=j;</p><p><b>  if(k!=i)</b></p><p><b>  {</b></

16、p><p><b>  t=x[i];</b></p><p>  x[i]=x[k];</p><p><b>  x[k]=t;</b></p><p><b>  }</b></p><p><b>  }</b></p&g

17、t;<p>  求位數(shù)函數(shù)int num(int y)</p><p>  求每個數(shù)個的位數(shù),以便補位。</p><p>  int num(int y) /*求最大數(shù)字的位數(shù)*/</p><p><b>  {</b></p><p><b>  int i=0;&

18、lt;/b></p><p><b>  while(y)</b></p><p><b>  {</b></p><p><b>  y=y/10;</b></p><p><b>  i++;</b></p><p>&l

19、t;b>  }</b></p><p><b>  return i;</b></p><p><b>  }</b></p><p>  變位函數(shù)void modificate(int z[],int n);</p><p>  把排序后的數(shù)字變成最高位數(shù)。</p>

20、<p><b>  流程圖:</b></p><p>  3.5 還原函數(shù)void revert(int r[],int n);</p><p>  把進行過補位的數(shù)字還原到原來的樣子</p><p>  void revert(int r[],int n) /*把變位后的數(shù)字還原成原數(shù)字*/</p>

21、<p><b>  {</b></p><p><b>  int j,h;</b></p><p>  for(j=0;j<n;j++)</p><p><b>  {</b></p><p><b>  h=b[j];</b><

22、;/p><p><b>  while(h)</b></p><p><b>  {</b></p><p>  r[j]=r[j]/10;</p><p><b>  h--;</b></p><p><b>  }</b></

23、p><p><b>  }</b></p><p><b>  }</b></p><p><b>  流程圖:</b></p><p>  第三部分 程序代碼</p><p>  #include<stdio.h></p>&l

24、t;p>  static int b[20]; /*作為標記,記錄數(shù)字的變位個數(shù)*/</p><p><b>  main()</b></p><p><b>  {</b></p><p>  void sort(int x[],int n); /*用選擇法將正整數(shù)按從大到小排列*/

25、</p><p>  int num(int y); /*求數(shù)字的位數(shù)*/</p><p>  void modificate(int z[],int n); /*變位函數(shù),在數(shù)字后面加“0”*/</p><p>  void sorts(int x[],int y[],int n); /*把數(shù)組和標記數(shù)組同時排序*/&l

26、t;/p><p>  void revert(int r[],int n); /*還原函數(shù)*/</p><p>  int a[20];</p><p><b>  char c;</b></p><p>  char str[200];</p><p>  int *p,i,e,d,f

27、=0,n=0;</p><p>  printf("Please input a few numbers(The amount is less than or equal to 20):\n"); /*輸入若干個數(shù)字(n<=20)*/</p><p>  gets(str);</p><p>  for(e=0;(c=str[e])!=

28、'\0';e++)</p><p><b>  {</b></p><p><b>  switch(c)</b></p><p><b>  {</b></p><p>  case'1': d=1;break;</p>&l

29、t;p>  case'2': d=2;break;</p><p>  case'3': d=3;break;</p><p>  case'4': d=4;break;</p><p>  case'5': d=5;break;</p><p>  case'6&

30、#39;: d=6;break;</p><p>  case'7': d=7;break; </p><p>  case'8': d=8;break;</p><p>  case'9': d=9;break;</p><p>  case'0': d=0;break;&

31、lt;/p><p>  case' ': n++,f=0,d=0;break;</p><p>  default:printf("Error!!!\nAttention:What you input must be number!\n");</p><p><b>  }</b></p><

32、p><b>  f=f*10+d;</b></p><p>  a[n]=f;</p><p><b>  }</b></p><p>  n=n+1; /*輸入數(shù)字的個數(shù)*/</p><p><b>  p=a;</b></

33、p><p>  sort(p,n); </p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  b[i]=num(a[0])-num(a[i]);</p><p><b>  }</b

34、></p><p>  modificate(a,n);</p><p>  sorts(p,b,n); /*對變位后的所有數(shù)字進行排序*/</p><p>  printf("\nSort these modificated numbers:\n");</p><p>  for(i=0

35、;i<n;i++)</p><p><b>  {</b></p><p>  printf("%d ",a[i]); </p><p><b>  }</b></p><p>  printf("\n");</p&

36、gt;<p>  revert(p,n);</p><p>  printf("\nThe new number is: "); /*按要求輸出輸入的數(shù)*/</p><p>  for(p=a,i=0;i<n;i++)</p><p><b>  {</b></p&g

37、t;<p>  printf("%d",*p); </p><p><b>  p++;</b></p><p><b>  }</b></p><p>  printf("\n\n");</p><p><

38、b>  }</b></p><p>  void sort(int x[],int n) /*用選擇法將正整數(shù)按從大到小排列*/</p><p><b>  {</b></p><p>  int i,j,k,t;</p><p>  for(i=0;i<n-1;i++)</p&

39、gt;<p><b>  {</b></p><p><b>  k=i;</b></p><p>  for(j=i+1;j<n;j++)</p><p>  if(x[j]>=x[k])k=j;</p><p><b>  if(k!=i)</b>

40、</p><p><b>  {</b></p><p><b>  t=x[i];</b></p><p>  x[i]=x[k];</p><p><b>  x[k]=t;</b></p><p><b>  }</b><

41、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  int num(int y) /*求最大數(shù)字的位數(shù)*/</p><p><b>  {</b></p><p><b>

42、;  int i=0;</b></p><p><b>  while(y)</b></p><p><b>  {</b></p><p><b>  y=y/10;</b></p><p><b>  i++;</b></p>

43、<p><b>  }</b></p><p><b>  return i;</b></p><p><b>  }</b></p><p>  void modificate(int z[],int n) /*通過在數(shù)字后面加一定數(shù)目的“0”后,將所有的數(shù)字變?yōu)樽罡呶?/<

44、;/p><p><b>  {</b></p><p>  int i,k,maxnum;</p><p>  maxnum=num(z[0]);</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p

45、>  k=maxnum-num(z[i]);</p><p><b>  while(k)</b></p><p><b>  {</b></p><p>  z[i]=z[i]*10;</p><p><b>  k--;</b></p><p>

46、;<b>  }</b></p><p>  } </p><p><b>  }</b></p><p>  void sorts(int x[],int y[],int n) /*正整數(shù)按從大到小排列*/</p><p><b>  {

47、</b></p><p>  int i,j,k,t,w;</p><p>  for(i=0;i<n-1;i++)</p><p><b>  {</b></p><p><b>  k=i;</b></p><p>  for(j=i+1;j<n;

48、j++)</p><p>  if(x[j]>=x[k])k=j;</p><p><b>  if(k!=i)</b></p><p><b>  {</b></p><p><b>  t=x[i];</b></p><p>  x[i]=x[

49、k];</p><p><b>  x[k]=t;</b></p><p><b>  w=b[i];</b></p><p>  b[i]=b[k];</p><p><b>  b[k]=w;</b></p><p><b>  }<

50、/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void revert(int r[],int n) /*把變位后的數(shù)字還原成原數(shù)字*/</p><p><b>  {</b></p&g

51、t;<p><b>  int j,h;</b></p><p>  for(j=0;j<n;j++)</p><p><b>  {</b></p><p><b>  h=b[j];</b></p><p><b>  while(h)<

52、/b></p><p><b>  {</b></p><p>  r[j]=r[j]/10;</p><p><b>  h--;</b></p><p><b>  }</b></p><p><b>  }</b><

53、;/p><p><b>  }</b></p><p>  第四部分 設計數(shù)據(jù)和運行結果</p><p>  4.1 運用舉例的數(shù)據(jù)進行驗證</p><p><b>  需要輸入一組數(shù)字</b></p><p><b>  進行輸入</b></p&g

54、t;<p><b>  運行結果</b></p><p>  4.2 自行設計數(shù)據(jù)進行驗證</p><p><b>  輸入一組數(shù)字</b></p><p><b>  進行輸入</b></p><p><b>  運行結果</b></

55、p><p>  第五部分 所遇問題及解決方案</p><p>  5.1 數(shù)字的輸入問題</p><p>  當定義的數(shù)組(int)為a[20]時,如果輸入的數(shù)字個數(shù)小于20個,那么剩下的元素將會被賦予初值“0”。如果這樣的話,在數(shù)組的最后輸出時,就會在所輸入的數(shù)字所組成的最大數(shù)字的后面多加一定數(shù)量的“0”,這樣就得不到預期的效果。</p><p&

56、gt;  比如:12 34 367 4563 235,在輸出它們組成的最大的數(shù)字中,正確結果為45633673423512,但是輸出的結果卻是45633673423512000000000000000。這是因為輸入數(shù)字的個數(shù)為5,那么數(shù)組的其余15個元素會被賦“0”值,自然會在輸出結果后面加上15個“0”。</p><p>  進過思考后,決定以字符(char)的形式輸入,再將字符轉換為數(shù)字。這樣做的好處

57、是:(1)可以很快的計算出所輸入數(shù)字的個數(shù)n;(2)通過以上計算,就可以確定所需數(shù)組的長度a[n];(3)這樣還避免了不必要的計算時間和存儲空間。</p><p>  5.2 switch和break的用法</p><p>  在把字符轉換為數(shù)字時,發(fā)現(xiàn)“0~9”的ASCⅡ代碼值與其本身不相等(char1的值不等于int1),所以選用了switch機構來實現(xiàn)。這是break的使用就必須注意

58、一下,可以說break使用錯誤會使結果完全不同。</p><p><b>  正確的使用方法為:</b></p><p><b>  switch(c)</b></p><p><b>  {</b></p><p>  case'1': d=1;break;&

59、lt;/p><p>  case'2': d=2;break;</p><p>  case'3': d=3;break;</p><p>  case'4': d=4;break;</p><p>  case'5': d=5;break;</p><p>

60、  case'6': d=6;break;</p><p>  case'7': d=7;break; </p><p>  case'8': d=8;break;</p><p>  case'9': d=9;break;</p><p>  case'0'

61、: d=0;break;</p><p>  case' ': n++,f=0,d=0;break;</p><p>  default:printf("Error!!!\nAttention:What you input must be number!\n");</p><p><b>  }</b><

62、;/p><p>  如果將以上語句該為:</p><p><b>  switch(c)</b></p><p><b>  {</b></p><p>  case'1': d=1;</p><p>  case'2': d=2;</p&g

63、t;<p>  case'3': d=3;</p><p>  case'4': d=4;</p><p>  case'5': d=5;</p><p>  case'6': d=6;</p><p>  case'7': d=7; </p

64、><p>  case'8': d=8;</p><p>  case'9': d=9;</p><p>  case'0': d=0;</p><p>  case' ': n++,f=0,d=0;break;</p><p>  default:print

65、f("Error!!!\nAttention:What you input must be number!\n");</p><p><b>  }</b></p><p>  那么,數(shù)組a[n]的值都將是1234567890,。</p><p>  所以,break的準確使用是很重要的。</p><p&

66、gt;<b>  5.3數(shù)組排序問題</b></p><p>  在這次程序設計中,特別要注意的是在補位后相等的那些數(shù)字,如12 120,34 3400,4500 45等。變位后再排序時,如果處理不當。就會出現(xiàn)12012,340034,450045的不正確的結果。</p><p><b>  我是這樣處理的:</b></p>

67、<p>  第一步:在確定數(shù)組元素的之后,將其按從大到小排序,得到新的數(shù)組a[n],這樣就把小的數(shù)字放在數(shù)字后面。</p><p>  第二步:將變?yōu)楹蟮臄?shù)組按從大到小排序,相等的數(shù)字交換位置,在還原為原來的數(shù)字。類似12 120,34 3400,4500 45等,會變?yōu)?2 120,34 3400,45 4500。這樣就保證了結果的正確性。</p><p>  5.

68、4 標記數(shù)組的使用</p><p>  在還原數(shù)字的時候,因為不知道那些數(shù)字進行了變位,所以致使程序無法運行。這就需要用一些東西來記錄所變位的數(shù)字,記錄其變位的個數(shù)。我選用了標記數(shù)組b[n],其下標隨數(shù)組a[n]的改變而改變,這就將解決了還原階段遇到的問題。</p><p>  5.5 最后結果的輸出</p><p>  題目要求的是最后的結果必須是一個數(shù)字,所以,

69、我覺得只要結果看上去是一個數(shù)就行了,不必將數(shù)組在變位一個數(shù)。于是,我把最后的數(shù)組的輸出格式中,取消了它們各自之間的間隔,最后的結果就看上去是一個數(shù)字了。</p><p><b>  具體操作:</b></p><p>  printf("%d ",*p) 該為printf("%d",*p),這樣就完成了正確結果的輸出。<

70、;/p><p>  以上遇到的問題是我切實遇到的,它們的解決進一步提升了我的C語言知識。可以說,在解決問題的過程中,我學到了很多自己平時不注意的地方。</p><p>  第六部分 總結與感受</p><p>  上機實驗是學習程序設計語言必不可少的實踐環(huán)節(jié),特別是C語言靈活、簡潔,更需要通過編程的實踐來真正掌握它。</p><p>  剛開始

71、基本上都是在看書,把基本知識再熟悉一遍。接著,只是在照著書上寫一些程序模塊,感覺異常艱難。但是還是有很大的收獲,學到了一些東西。</p><p>  而看了兩天書之后,我感覺自己收獲挺大的,從一開始的迷茫,不知道從何下手到把程序中的幾個模塊編寫出來,心里挺開心的。但是,寫了一部分程序后,我們由不得不再次陷入困境。在整個程序的編寫過程中。最難的就是補位和還原這兩個模塊,這也是我要解決的重點問題。</p>

72、<p>  開始編寫補位和還原時,很頭疼,去向其他人尋求幫助,在別人的幫助和提示下,我編完了修改程序,但編譯時老出錯,修改后的內(nèi)容將文本內(nèi)的信息全部覆蓋了。困難之時,我通過上網(wǎng)查資料,了解所需語句的具體功能,完成了補位和還原。這樣的話,整個程序基本上全部完成了,就剩下完善工作了。</p><p>  程序中遇到的困難及解決的思路:</p><p>  1. 數(shù)字的讀取。使用數(shù)

73、組時不能按要求排序,只能把數(shù)字當作字符串來讀取,這樣增加了程序的運行效率。 </p><p>  2. 標記函數(shù)的使用,必須知道那些數(shù)字發(fā)生了變位,記錄其補位的個數(shù)。</p><p>  3. 所需的數(shù)字在輸出時,它不是一個數(shù)字,而還是一個數(shù)組,只是改變了它們的輸出格式,讓他們外表看上去像一個數(shù)。</p><p>  4.我深刻了解了switch和break的用法,

74、以及函數(shù)的調(diào)用方式。</p><p>  通過這次實習,我收獲很多,感觸也頗多,實訓編程的同時暴露出了許多我自身存在的問題,同時也對自身有了很大的提高。首先,對我以前做題做事非常馬虎的毛病有了很大的改進,通過在這幾 天編程的過程中的鍛煉,我現(xiàn)在做題比以前仔細多了,會小心翼翼地去看每一個地方,會仔細地檢查程序的每一個字母、標點。其次,在幾天編程的過程當中彌補了我許多知識上的缺陷,弄清楚了我不懂的地方和似是而非的地方

75、,使我及時補上了欠缺。再次,通過幾天綜合實訓編程使我的知識形成了一個完整的框架結構,而不再是零散的知識個體,使我在使用時更加的方便。第四,在幾天的實習結束后,我對做完的習題檢查比再是一切的走馬觀花,而是仔細核對、認真檢查。第五,通過幾天的實習改變了我做題時心煩氣燥的習慣,現(xiàn)在做題可以平和靜氣的完成。第六,通過天的實習我的自制能力更強了,基本完全可以控制自己,避免外界的干擾,安心地完成自己的工作。總之,通過天的實習對我自身有了很大的提高。

溫馨提示

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

評論

0/150

提交評論