程序設(shè)計與算法語言課程設(shè)計_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  ( 程序設(shè)計與算法語言 )課程設(shè)計</p><p>  實驗時間: 2011學(xué)年第二學(xué)期 </p><p>  專業(yè)年級: 2011級統(tǒng)計 2 班 </p><p><b>  實驗題目:</b></p><p><b>  1、數(shù)學(xué)問題</

2、b></p><p>  2、統(tǒng)計字符出現(xiàn)的頻率</p><p><b>  3、單詞計數(shù)</b></p><p><b>  目 錄</b></p><p><b>  題目1(a)1</b></p><p><b>  需求分

3、析1</b></p><p><b>  概要設(shè)計2</b></p><p><b>  詳細(xì)設(shè)計3</b></p><p><b>  測試結(jié)果6</b></p><p><b>  題目1(b)7</b></p>&

4、lt;p><b>  需求分析7</b></p><p><b>  概要設(shè)計9</b></p><p><b>  詳細(xì)設(shè)計9</b></p><p><b>  測試結(jié)果13</b></p><p><b>  題目314&l

5、t;/b></p><p><b>  需求分析14</b></p><p><b>  概要設(shè)計16</b></p><p><b>  詳細(xì)設(shè)計17</b></p><p><b>  測試結(jié)果19</b></p><

6、p><b>  課程設(shè)計總結(jié)20</b></p><p><b>  參考文獻(xiàn)1</b></p><p>  附錄:(帶注釋的源程序)2</p><p><b>  題目1(a)</b></p><p><b>  需求分析</b></p

7、><p>  1.輸入3個大于0的整數(shù);</p><p><b>  2.輸出2個整數(shù);</b></p><p>  3.程序功能為輸入3個大于零的整數(shù)并求出它們的最大公約數(shù)和最小公倍數(shù),然后輸出。</p><p><b>  高層數(shù)據(jù)流圖:</b></p><p><b&

8、gt;  低層數(shù)據(jù)流圖:</b></p><p><b>  概要設(shè)計</b></p><p><b>  細(xì)化的程序結(jié)構(gòu)圖:</b></p><p><b>  詳細(xì)設(shè)計</b></p><p>  1.程序共分為4個模塊,分別為:輸入模塊,求最大公約數(shù)模塊,求最

9、小公倍數(shù)模塊和輸出模塊。</p><p><b>  2.算法方面</b></p><p><b>  求最大公約數(shù):</b></p><p>  設(shè)置整型變量j,divisor和min</p><p>  If輸入的某個數(shù)小于于另外2個數(shù)</p><p><b>

10、  設(shè)置這個數(shù)給min</b></p><p>  if某個從1開始一直到min的整數(shù)可以同時整除輸入的3個數(shù)</p><p>  設(shè)置這個數(shù)給divisor</p><p><b>  返回divisor</b></p><p>  總體思路為先找出3個數(shù)中的最小數(shù),以此作為最大公約數(shù)的上限,然后從1開始依

11、次遞增1,從1到最小數(shù)中找出最大的能同時被這3個數(shù)整除的數(shù),所求即為最大公約數(shù)。</p><p><b>  求最小公倍數(shù):</b></p><p>  設(shè)置整型變量i,multipler和max</p><p>  If輸入的某個數(shù)大于另外2個數(shù)</p><p><b>  設(shè)置這個數(shù)給max</b&g

12、t;</p><p>  if某個從max開始一直到正無窮的整數(shù)可以同時被輸入的3個數(shù)整除</p><p>  設(shè)置這個數(shù)給divisor</p><p><b>  返回divisor</b></p><p>  總體思路為先找出3個數(shù)中的最大數(shù),然后以此為基數(shù)依次遞增1,找到的第一個能同時整除這3個數(shù)的整數(shù)就是最小公

13、倍數(shù)。</p><p><b>  流程圖:</b></p><p><b>  測試結(jié)果</b></p><p><b>  輸入正確時的結(jié)果:</b></p><p><b>  輸入錯誤時的結(jié)果:</b></p><p>  

14、輸入錯誤時程序可以通知用戶再次輸入任何正確的數(shù)值。</p><p><b>  題目1(b)</b></p><p><b>  需求分析</b></p><p>  輸入5個整型數(shù)字作為數(shù)列,輸入1個整型數(shù)字插入于已輸入的數(shù)列;</p><p><b>  輸出6個整型數(shù)字;</b

15、></p><p>  程序功能為把第一次輸入的由5個整型數(shù)字組成的數(shù)列由小到大排列,并把第二次輸入的整數(shù)插入到數(shù)列中,結(jié)果仍由小到大排列,并被打印于屏幕上。</p><p>  高層數(shù)據(jù)流圖: </p><p>  低層細(xì)化的數(shù)據(jù)流圖:</p><p><b>  概要設(shè)計&

16、lt;/b></p><p><b>  細(xì)化的程序結(jié)構(gòu)圖:</b></p><p><b>  詳細(xì)設(shè)計</b></p><p>  1. 程序共分為4個模塊,分別為:輸入模塊,排列輸入5個整數(shù)模塊,排列后面插入的整數(shù)模塊和輸出模塊。</p><p><b>  2. 算法方面&l

17、t;/b></p><p>  設(shè)計交換計數(shù)器count為0</p><p>  定義5個數(shù)的一維數(shù)組</p><p>  輸入5個數(shù)字于一維數(shù)組</p><p>  For這個列表中從第一個元素到最后一個元素的每個元素</p><p>  設(shè)置最下數(shù)值等于當(dāng)前元素</p><p>  保

18、存當(dāng)前元素的索引值</p><p>  For在這個列表中從當(dāng)前索引值加1的元素到最后一個元素</p><p>  If元素【內(nèi)循環(huán)索引值】<最小數(shù)值</p><p>  設(shè)置之歌最小數(shù)值=元素【內(nèi)層循環(huán)索引值】</p><p><b>  EndIf</b></p><p><b&g

19、t;  EndFor</b></p><p>  交換當(dāng)前數(shù)值與心得最小數(shù)值</p><p>  交換計數(shù)器count加1</p><p><b>  EndFor</b></p><p>  返回交換計數(shù)器count的值</p><p><b>  定義新的一維數(shù)組<

20、/b></p><p>  把前面數(shù)組的5個數(shù)賦給新定義一維數(shù)組的前五個數(shù)</p><p>  把再次輸入的數(shù)賦給新定義一維數(shù)組的第六個數(shù)</p><p>  For這個列表中從第一個元素到最后一個元素的每個元素</p><p>  設(shè)置最下數(shù)值等于當(dāng)前元素</p><p>  保存當(dāng)前元素的索引值</p&

21、gt;<p>  For在這個列表中從當(dāng)前索引值加1的元素到最后一個元素</p><p>  If元素【內(nèi)循環(huán)索引值】<最小數(shù)值</p><p>  設(shè)置之歌最小數(shù)值=元素【內(nèi)層循環(huán)索引值】</p><p><b>  EndIf</b></p><p><b>  EndFor</b

22、></p><p>  交換當(dāng)前數(shù)值與新的最小數(shù)值</p><p><b>  流程圖:</b></p><p><b>  總流程圖:</b></p><p><b>  測試結(jié)果</b></p><p>  輸入測試文本時的結(jié)果:</p&

23、gt;<p><b>  題目3</b></p><p><b>  需求分析</b></p><p>  1.輸入為打開的一個文件,用戶無需在程序中輸入,但可自行修改文件內(nèi)容;</p><p>  2.輸出1個整型數(shù)值;</p><p>  3.程序功能為打開根目錄中的一個文件,并計

24、算文件中單詞的數(shù)量,然后返回一個整數(shù)。</p><p><b>  高層數(shù)據(jù)流圖:</b></p><p><b>  低層數(shù)據(jù)流圖:</b></p><p><b>  概要設(shè)計</b></p><p><b>  細(xì)化的程序結(jié)構(gòu)圖:</b></p

25、><p><b>  詳細(xì)設(shè)計</b></p><p>  1. 程序共分為2個模塊,分別為:計算單詞數(shù)量模塊和輸出模塊。</p><p><b>  2. 算法方面</b></p><p>  用fopen打開文件并把內(nèi)容賦給一維數(shù)組message</p><p>  設(shè)置一個

26、名為inaword的整數(shù)變量給符號常量NO</p><p><b>  設(shè)置單詞計數(shù)器為0</b></p><p>  If當(dāng)前字符時一個空格,逗號,或?qū)嵭膱A點</p><p>  設(shè)置inaword給NO</p><p>  Else if(inaword == NO)</p><p>  設(shè)定

27、 inaword 給符號常量YES</p><p><b>  給單詞計數(shù)器加1</b></p><p><b>  End if</b></p><p><b>  Endfor</b></p><p><b>  返回計數(shù)器的數(shù)值</b></p&

28、gt;<p>  這個算法的關(guān)鍵在于if/else的條件式。如果當(dāng)前字符是一個空字符或逗號,則inword被設(shè)置為NO,不管他在前面的字符值是什么。只有在當(dāng)前字符不是空格或逗號是才檢查else中的條件式。然后,它檢查我們是否不在一個單詞中。這樣,在當(dāng)前字符不是一個空字符或逗號和我們不在一個單詞中時,這個else的條件式將為真,這就意味著我們進(jìn)行必須從一個空字符或逗號到非空字符的轉(zhuǎn)換。因為只是確定我們在一個單詞中的標(biāo)準(zhǔn),這個

29、單詞計數(shù)被增加,inaword變量被設(shè)置為YES。</p><p>  流程圖: </p><p><b>  測試結(jié)果</b></p><p>  輸入測試文本時的結(jié)果:</p><p><b>  課程設(shè)計總結(jié)</b></p><p>  通過程序的編寫,讓我

30、懂得了程序的設(shè)計與編寫,懂得了怎么樣去實現(xiàn)一個程序,怎么樣將外部文件數(shù)據(jù)讀入到內(nèi)存中,并存儲到數(shù)組中,明白了算法的外部引用很方便于程序的編寫,進(jìn)一步熟悉了C語言的運行環(huán)境與編寫,有利與以后的程序?qū)W習(xí),同時也非常感謝再此過程中老師的悉心指導(dǎo)。</p><p><b>  參考文獻(xiàn)</b></p><p><b>  標(biāo)準(zhǔn)C語言基礎(chǔ)教程</b><

31、;/p><p><b> ?。ǖ谒陌妫?lt;/b></p><p>  A First Book of ANSI C</p><p>  Fourth Edition</p><p>  【美】 Gary J. Bronson 著</p><p>  單先余 陳芳 張蓉 等譯</p>

32、<p><b>  單興 審校</b></p><p><b>  電子工業(yè)出版社</b></p><p>  附錄:(帶注釋的源程序)</p><p><b>  題目1a</b></p><p>  /*求3個數(shù)的最大公約數(shù)和最小公倍數(shù)*/</p>

33、<p>  #include<stdio.h></p><p>  int main()</p><p><b>  {</b></p><p>  int a,b,c,d,e;</p><p>  int divisor(int,int,int); /*聲明函數(shù)原型*/</p>&

34、lt;p>  int multiple(int,int,int);/*聲明函數(shù)原型*/</p><p>  printf("Please enter 3 numbers:\n");</p><p>  scanf("%d%d%d",&a,&b,&c);</p><p>  if (a<=0|

35、|b<=0||c<=0)</p><p><b>  {</b></p><p>  printf("Negative numbers and zero are not alowed,please enter again.\n");</p><p>  printf("Please enter 3 nu

36、mbers:\n");</p><p>  scanf("%d%d%d",&a,&b,&c);</p><p><b>  getch();</b></p><p><b>  }</b></p><p>  d = divisor (a,b,c

37、);</p><p>  e = multiple (a,b,c);</p><p>  printf("The greatest common divisor of %d,%d and %d is %d\n",a,b,c,d);</p><p>  printf("The least common X of %d,%d and %d

38、is %d\n",a,b,c,e); </p><p><b>  getch();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int divisor (int a,int b,int

39、c)</p><p><b>  {</b></p><p>  int j,s,min;</p><p>  if (a<=b&&a<=c)</p><p><b>  min=a;</b></p><p>  if (b<=a&&

40、amp;b<=c)</p><p><b>  min=b;</b></p><p>  if (c<=a&&c<=a)</p><p><b>  min=c;</b></p><p>  /*找出3個數(shù)中的最小數(shù)*/ </p><p> 

41、 for(j=1;j<=min;j++)/*控制范圍在1到最小數(shù)之間*/ </p><p><b>  {</b></p><p>  if(a%j==0&&b%j==0&&c%j==0)</p><p>  s=j;/*滿足整除輸入的三個數(shù)*/ </p><p><b>

42、  }</b></p><p><b>  return s;</b></p><p><b>  }</b></p><p>  Int multiple(int a,int b,int c)</p><p><b>  {</b></p><

43、p>  int i,k ,max;</p><p>  if (a>=b&&a>=c)</p><p><b>  max=a;</b></p><p>  else if(b>=a&&b>=c)</p><p><b>  max=b;</b

44、></p><p>  else if(c>=a&&c>=b)</p><p><b>  max=c;</b></p><p>  /*找出3個數(shù)中的最大數(shù)*/ </p><p>  for (i=max; ;i++)/*以最大的數(shù)為基數(shù)*/ </p><p>

45、<b>  {</b></p><p>  if (i%a==0&&i%b==0&&i%c==0)/*滿足被輸入的3個數(shù)整除 */ </p><p><b>  {</b></p><p><b>  k = i;</b></p><p><

46、;b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return k; </p><p><b>  }</b></p><p><b>  題目

47、1b</b></p><p>  /*把一個整數(shù)插入到由小到大排列的數(shù)列中,插入后保持升序排列*/</p><p>  #include<stdio.h></p><p>  #define NUMEL 10</p><p>  int selectionSort(int[],int);</p><

48、p>  int main()</p><p><b>  {</b></p><p>  int nums[NUMEL] = {22,5,67,98,45,32,101,99,73,10};</p><p>  int i,moves;</p><p>  moves = selectionSort(nums,NU

49、MEL);</p><p>  printf("The sorted list, in ascending order, is:\n");</p><p>  for (i =0;i< NUMEL; i++)</p><p>  printf("%d ",nums[i]);</p><p>  p

50、rintf("\n%d moves were made to sort this list\n",moves);</p><p><b>  getch();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p>

51、<p>  int selectionSort (int num[],int numel)</p><p><b>  {</b></p><p>  int i,j,min,minidx,temp,moves = 0;</p><p>  for ( i=0;i<(numel-1);i++)</p><

52、p><b>  {</b></p><p>  min = num[i];</p><p>  minidx = i;</p><p>  for(j = i+1; j<numel;j++)</p><p><b>  {</b></p><p>  if (nu

53、m[j]<min)</p><p><b>  {</b></p><p>  min = num[j];</p><p>  minidx = j;</p><p><b>  }</b></p><p><b>  }</b></p>

54、;<p>  if (min<num[i])</p><p><b>  {</b></p><p>  temp = num[i];</p><p>  num[i] = min;</p><p>  num[minidx] = temp;</p><p><b>

55、  moves++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  return (moves);</p><p><b>  }</b></p><p><b>  題

56、目3</b></p><p>  /*計算文件中單詞的數(shù)量*/ </p><p>  #include<stdio.h></p><p>  #define MAXNUM 1000</p><p>  int countword (char []);</p><p>  int main ()&

57、lt;/p><p><b>  {</b></p><p>  FILE *inFile;</p><p>  int numchar;</p><p>  inFile=fopen("test.txt","r");</p><p>  char message

58、[MAXNUM];</p><p>  fgets(message,1000,inFile);/*把文件內(nèi)容賦給定義的一維數(shù)組*/ </p><p>  numchar = countword(message);</p><p>  printf("The number of words in the file is %d\n",numchar)

59、;</p><p><b>  return 0;</b></p><p><b>  } </b></p><p>  int countword (char list[])</p><p>  #define YES 1</p><p>  #define NO 0<

60、;/p><p><b>  {</b></p><p>  int i,inaword,count=0;</p><p>  inaword = NO;</p><p>  for(i=0;list[i]!='\0';i++)</p><p><b>  {</b>

61、;</p><p>  if (list[i]==' '||list[i]==','||list[i]=='-'||list[i]=='.')</p><p>  inaword = NO; </p><p>  else if (inaword == NO)</p><p>&

62、lt;b>  {</b></p><p>  inaword = YES;</p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  ret

溫馨提示

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

評論

0/150

提交評論