马红旭
【摘要】 文章讨论的问题是利用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重印)
[2] 徐金梧等编著. TURBO C使用大全 [M]. 北京:北京科海培训中心,1989.
[3] Charles Wright等著.邓劲生等译 Visual c++程序员实用大全[M]. 北京:中国水利水电出版社,1989.