提供兩支有關一維陣列副程式,供方便練習用:陣列填亂數、顯示陣列內容

●arrayrand:
point:陣列填滿隨機正整數 arrayrand( [陣列], [陣列長度], [允許重複值], [上限], [下限] )

usage:
1.加入include包含
  #include <stdio.h>
  #include <time.h>
  #include <stdlib.h>

2.在開頭include之後插入 
    int arrayrand( int *, int, int, int, int ) ;

3.並在main函數之後(不可以插在main函數中)插入程式主體:
    int arrayrand ( int *array, int length, int echo, int upper, int lower )
    {
         int i = 0, j = 0 ;
    
         if ( ( echo != 0 ) && ( echo != 1 ) )
         {
             printf( "Error: arrayrand function.\nEcho Error.\nThe variable \"echo\" value must 0 or 1...\n" ) ;
             return 1 ;
         }
         if ( length <= 0 )
         {
             printf( "Error: arrayrand function.\nLength Error.\nPlease check your configure or variable...\n" ) ;
             return 1 ;
         }
         if( lower > upper  )
         {
             printf( "Error: arrayrand function.\nUpper and lower variable Error.\nPlease check your configure or variable...\n" ) ;
             return 1 ;
         }
         if( ( length > ( upper - lower + 1 ) ) && ( echo == 0 ) )
         {
             printf( "Error: arrayrand function.\nConfigure Error.\nDoes not allow echo,But define domain not enough.\nPlease check your configure or variable...\n" ) ;
             return 1 ;
         }
    
         srand( time( NULL ) ) ;
         if( echo == 1 )
         {
             for ( i = 0 ; i < length ; i++ )
             {
              array[ i ] = ( rand() % ( upper - lower + 1 ) ) + lower ;
             }
         }
         else
         {
             for ( i = 0 ; i < length ; i++ )
             {
                 array[ i ] = ( rand() % ( upper - lower + 1 ) ) + lower ;
                 for ( j = i - 1 ; j >= 0  ; j-- )
                 {
                     while ( ( array[ i ] == array[ j ] ) )
                     {
                           array[ i ] = ( rand() % ( upper - lower + 1 ) ) + lower ;
                           j = i - 1 ;
                     }
                 }
             }
         }      
    }
4.在其他函數中就可以使用 arrayrand() 例如: arrayrand ( u, 20, 0, 20, 1 ) ;
  就會將陣列 u 中填入 20 個不重複出現的亂數,亂數範圍是1-20,在本例中經過自行排序後會出現:
  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20

5.參數說明:
  參數依序是[陣列], [陣列長度], [允許重複值], [上限], [下限]如下說明之
  [陣列]:需填入陣列名稱,以便傳入一個您已經宣告的陣列供函數操作。
  [陣列長度]:需要填入陣列的長度,例如: 您宣告了一個陣列   int array [ 30 ] ; 這裡就要填入30。
  [允許重複值]:這裡設定您是否允許在隨機陣列中出現相同的"值"。
  1:表示true 允許
  0:表示false 不允許
  [上限]:表示隨機變數會出現的最大值,如果輸入100則最大會出現100
  [下限]:表示隨機變數會出現的最小值,如果輸入0則最小會出現0

6.其他處議事項與錯誤訊息說明:
  (1)函數會自動進行簡單的參數檢查,以防止矛盾的設定,錯誤訊息如下說明。
      <1>
         Error: arrayrand function.
         Echo Error.
         The variable "echo" value must 0 or 1...

      參數[允許重複值]是控制是否允許隨機數出現相同的"值",其設定只能是 0 或 1 二擇一。 1:表示true 允許, 0:表示false 不允許

      <2>
         Error: arrayrand function.
         Length Error.
         Please check your configure or variable...

      陣列長度出現負數,您可能手誤了。

      <3>
         Error: arrayrand function.
         Upper and lower variable Error.
         Please check your configure or variable...
      您[上限][下限]的位置放反了。

      <4>
         Error: arrayrand function.
         Configure Error.
         Does not allow echo,But define domain not enough.
         Please check your configure or variable...
      您的[上限][下限]和[允許重複值]的設定有衝突,例如您要填滿一個長度20的陣列,不允許重複值,但是根據您定義的[上限][下限]定義域只有少於20個可用值。
      請您變更[允許重複值]來排除此問題,或是重新設定[上限][下限]
  (2)這一隻程式是輔助練習用的,如果您要參加正式的考試,寫 arrayrand ( u, 20, 0, 20, 1 ) ; 這種東西是沒有分數的,本人概不負責。



●arrayshow:
point:輸出陣列至螢幕上  arrayshow( [陣列], [陣列長度|輸出長度] )
usage:
1.加入include包含
  #include <stdio.h>

2.在開頭include之後插入 
    void arrayshow( int *, int ) ;

3.並在main函數之後(不可以插在main函數中)插入程式主體:
    void arrayshow ( int *array, int length )
    {
         int i = 0 ; 
         for( i = 0 ; i < length ; i++ )
         {
              printf ( "%d  ", array[ i ] ) ;
         }
         printf ( "\n" ) ;
    }

4.在其他函數中就可以使用 arrayshow() 例如: arrayshow( u,20 ) ;
  就會將陣列 u 中的20個元素輸出。( 如果不只20個就會輸出前20個 )
  19  23  38  29  52  4  45  7  33  48  47  11  5  13  6  35  42  36  8  31

5.參數說明:
  [陣列]:需填入欲輸出的陣列名稱。
  [陣列長度|輸出長度]:填入陣列長度輸出整個陣列"或是"欲輸出的元素數目,例如:arrayshow( u,20 )函數就會輸出陣列前20個元素。

6.其他處議事項與錯誤訊息說明:
  (1)這一隻程式是輔助練習用的,如果您要參加正式的考試,寫 arrayshow( u,20 ) ; 這種東西是沒有分數的,本人概不負責。

fey 發表在 痞客邦 PIXNET 留言(0) 人氣()