模拟算法是用随机函数来模拟自然界中发生的不可预测的情况,C语言中是用srand()和rand()函数来生成随机数。
先来介绍一下随机数的生成:
1.产生不定范围的随机数
函数原型:int rand()
产生一个介于0~RAD_MAX间的整数,其具体值与系统有关系。Linux下为2147483647。我们可以在include文件夹中的stdlib.h中可以看到(Linux在usr目录下,Windows在安装目录下)
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int i; 6 for(i=0; i<10; i++) //随机产生10个数。 7 { 8 printf("%d\n", rand()); 9 } 10 return 0; 11 }
2.产生指定范围的随机数(产生0到某个数的随机数)
Radom(x)(rand()%x) [0,x)
#include<stdio.h> #include<stdlib.h> #define Random(x) (rand() % x) //通过取余取得指定范围的随机数 int main() { int i; int dis; //产生[0, dis)之间的随机数,注意不包括dis for(i=0; i<10; i++) { printf("%d\n", Random(dis)); } return 0; }
3.生成指定范围的随机数
要求:指定范围(m,n),随机数包括m,n;
方法:将范围(m,n)改变到(0,x)最后再转移回去。
1)m=n。此时并不算严格意义上的随机数,返回m;
2)m>n。令pos=n,距离差dis=m-n+1
返回rand()%dis+pos;
3)n>m。令pos=n,距离差dis=n-m+1
返回rand()%dis+pos;
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 int Random(int m, int n) 5 { 6 int pos, dis; 7 if(m == n) 8 { 9 return m; 10 } 11 else if(m > n) 12 { 13 pos = n; 14 dis = m - n + 1; 15 return rand() % dis + pos; 16 } 17 else 18 { 19 pos = m; 20 dis = n - m + 1; 21 return rand() % dis + pos; 22 } 23 } 24 int main() 25 { 26 int i, m, n; 27 srand((int)time(NULL)); 28 m = -3; 29 n = -7; 30 for(i=0; i<10; i++) 31 { 32 printf("%d\n", Random(m, n)); 33 } 34 return 0; 35 }
下面给出掷骰子游戏和猜数游戏的代码:
掷骰子游戏:
#include<stdio.h> #include<time.h> int main() { int m,i,n=0,s=0; srand(time(NULL)); printf("请输入要掷骰子的次数:"); scanf("%d",&m); for(i=1;i<=m;i++) { n=rand()%6+1;//生成骰子的六位随机面 printf("第%d次骰子的点数为:%d\n",i,n); s=s+n; } printf("你一共郑了%d次骰子!\n",m); printf("骰子的总点数为:%d",s); return 0; }
猜数游戏:
1 //生成100以内的随机数 2 #include<stdio.h>//包含生成随机数的函数 3 #include<time.h> 4 int main() 5 { 6 int m,n,i=0;//i在此要先赋初值0 7 srand(time(NULL)); 8 n=rand()%100+1;//rand生成的随机数可达65000多,这里除以100 9 do{ 10 printf("请输入所猜数字:"); 11 scanf("%d",&m); 12 i++; 13 if(m>n) 14 printf("你猜的数太大了!\n"); 15 else if(m<n) 16 printf("你猜的数太小了!\n"); 17 }while(m!=n); 18 printf("你一共猜了%d次,",i); 19 if(i<=5) 20 printf("你很聪明!"); 21 else 22 printf("你还要多努力!"); 23 return 0; 24 }
时间: 2024-10-10 17:39:35