馬紅旭
【摘要】 文章討論的問題是利用c語言中的隨機整數,編寫幾個有用的程序。
【關鍵詞】 C語言 隨機整數 程序
C語言中隨機函數RAND( )的功能是產生0—32767之間的隨機整數。根據隨機函數取值范圍,我們可以變換出幾個有用的數學公式,以它們做為數學模型,就能夠編寫幾個有用的程序,本文將研究利用c語言中的隨機整數,編寫幾個有用程序的方法和過程。
一、驗證隨機函數取值范圍
有資料顯示C語言中隨機函數RAND( )的取值范圍是-90—32767之間的隨機整數,和我們上面提到的0—32767之間的隨機整數有一定差距,到底哪個正確,我們不妨親自編寫程序驗證。思路是:產生n個隨機整數, 每當這個隨機整數值小于0時,我們把計算器次數x增加一次,程序最后打印x的值。我們可以根據打印出的x值,做出相應的判斷,如果x值大于0次,說明rand( )函數有取[-0,-90]之間負整數的可能。據此我們編寫c語言程序,代碼如下:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int main()
{ long int n=0,x=0;
srand( (unsigned)time( NULL ) );
for(n=1;n<=100000;n++)
if (rand()<0)x=x+1;
printf("%d", x ); }
經多次運行,甚至n最大值取到2G驗證,x值始終為零,說明rand()函數不可能取負值,因此驗證得到結論:隨機函數RAND( )的取值范圍是0—32767之間的隨機整數。
二、利用隨機函數產生指定位數的隨機整數
利用RAND( )函數產生一位隨機整數 (0—9),公式為rand( )%10,產生兩位隨機整數 (10—99)
公式為rand( )%90+10,產生三位隨機整數 (100—999)公式為rand( )%900+100,以此類推產生n位隨機整數公式為 rand()%(int)( pow(10,n)-pow(10,n-1) )+(int)pow(10,n-1) ),據此我們可以編程序實現產生n個n位的隨機整數(這里只產生10個數)。代碼如下:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
int main()
{ long int i,n=0,x=0;
printf(“請輸入產生隨機整數的位數”);
scanf("%d",&n;);
srand( (unsigned)time( NULL ) );
for(i=1;i<=10;i++)
if (n==1)printf("%d,",rand()%10);
else printf("%d,",
rand()%(int)( pow(10,n)-pow(10,n-1) )
+(int)pow(10,n-1) ); }
三、利用隨機函數產生指定范圍的隨機整數
利用RAND( )函數產生指定[A,B]范圍的隨機整數,公式為rand( )%(B-A+1)+A。依此公式我們編寫了一個程序,功能是:出幾道加法題給小學生做,如果學生寫對答案,顯示‘ok字樣,可以進行下一道題;如果沒做對,返回,重做此題。程序代碼如下:
#include “stdio.h”
#include “stdlib.h”
#include “math.h”
#include “time.h”
int main()
{ int i,n=0;int a,b,c;
printf(“請問要做幾位數加法?”);
scanf("%d",&n;);
srand( (unsigned)time( NULL ) );
for(i=1;i<=10;i++)
{a=rand()%(int)( pow(10,n)-pow(10,n-1) ) +(int)pow(10,n-1) ;
b=rand()%(int)( pow(10,n)-pow(10,n-1) ) + (int)pow(10,n-1) ;
a1:printf("%d+%d=?",a,b);
scanf("%d",&c;);
if (a+b==c)printf("ok\n");
else goto a1;} }
當然,程序還可有很多變化,比如學生可以預先選擇做幾道題,做完每道題退不退出等,此處不贅述。
四、綜述
利用上述方法,我們研究了C語言隨機整數 rand( )幾種用法,運算結果正確問題得到解決,該方法省時省力,安全高效,對c語言的應用與推廣意義重大。
參 考 文 獻
[1] 譚浩強等編著 .C程序設計[M]. 北京:清華大學出版社,2005(2007重?。?/p>
[2] 徐金梧等編著. TURBO C使用大全 [M]. 北京:北京科海培訓中心,1989.
[3] Charles Wright等著.鄧勁生等譯 Visual c++程序員實用大全[M]. 北京:中國水利水電出版社,1989.