1.生成随机数所用到的函数
#include <stdlib.h>
srand();
(类型,如果是整型则这个括号不用写)rand()
//rand() 函数是一个无参数的函数,它用于生成伪随机整数。尽管函数不接受参数,但仍然需要使用括号来表示函数调用的语法。
//rand()生成的值是非负整数,通常情况下最小值为0,最大值为RAND_MAX=32767
//接下来是time函数
#include<time.h>
time(NULL)
//通常我们不需要获取当前时间戳,便在函数time()括号中加个NULL
//如果要获取时间戳,可以这样做
#include <stdio.h>
#include <time.h>
int main() {
time_t timestamp; // 声明一个 time_t 类型的变量来存储时间戳
time(×tamp); // 使用 time 函数获取当前时间戳并存储在 timestamp 变量中
// 打印时间戳
printf("当前时间戳:%ld\n", timestamp);
return 0;
}
//time_t time(time_t *timer);这时time()函数的原型
这里解释一下时间戳
时间戳是一个表示特定时间点的数字值,通常以秒为单位,从某个固定的起始点(通常称为"epoch",即时代)开始计算。时间戳用于在计算机系统中记录和比较时间,以便进行时间相关的操作和计算。
以下是时间戳的详细解释:
1. **起始时间点(Epoch)**:时间戳是相对于某个固定的起始时间点进行计算的。不同的计算机系统和编程语言可能使用不同的起始时间点。在Unix和类Unix系统中,通常使用的起始时间点是格林威治时间(GMT)的1970年1月1日午夜(00:00:00 UTC),这个时间点被称为Unix时间戳或Unix纪元。
2. **单位**:时间戳通常以秒为单位计算,但也可以以毫秒、微秒或纳秒等更小的时间单位进行计算,取决于需要的精度。
3. **整数值**:时间戳是一个整数值,表示自起始时间点以来经过的时间量。这个整数可以是正数(未来的时间)或负数(过去的时间)。
4. **用途**:时间戳广泛用于各种应用,包括记录事件的发生时间、进行时间相关的计算、计算时间间隔、定时任务调度等。它们也用于网络通信中的时间同步和安全证书的验证。
5. **转换**:时间戳可以转换成日期和时间的可读格式,以便人类理解。这个过程通常涉及到时区的考虑,因为时间戳是以GMT或UTC为基准的。不同的地区和国家使用不同的时区,因此需要将时间戳转换成本地时区的日期和时间。
6. **示例**:比如,Unix时间戳表示为整数 1632423597,这对应于格林威治时间的2021年9月24日下午3:53:17(UTC时间)。将其转换为本地时区可能会产生不同的日期和时间。
时间戳是一种方便的方式来处理和比较时间信息,因为它是一个简单的数字,易于存储和传递。在编程中,时间戳常常用于计算两个时间点之间的时间差,执行定时任务,记录事件的发生时间等等。
2.利用这些函数生成随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
for (int i=0;i<=100;i++)
{
int randomvalue = rand();
printf("%d ", randomvalue);
}
return 0;
}
//这是一个最简单的伪随机数生成器,要注意计算机是不可能生成绝对的随机数的。
注意: 这里的srand如果放在for循环里头,短时间内所获得的时间戳可能相同,有可能会生成一模一样的数,所以我们把它放在开头,使每次都能生成不同的随机数序列,增加随机性。
这里的for循环是为了让生成一百个随机数
我们来运行一下看看结果
3.尝试生成0到100之间的随机数和0到1之间的随机数
首先我们先尝试生成0到100之间的随机数,这很容易,只需要让随机数模上一个100即可
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
for (int i=0;i<=100;i++)
{
int randomvalue = rand()%100;
printf("%d ", randomvalue);
}
return 0;
}
我们来看看结果
下面我们生成0到1之间的随机数
试着思考我们现有的值中是不是有一个RAND_MAX,它是生成随机数的最大值,所有的值都不会大于它,那么我们只要让它做分母即可,但我们得到的值是一个小数,如果直接用‘ / ’号,得到的所有值都是0,所以我们要把它们转换成double或者float类型,这里我使用float类型,我们看看会有几个数字小于0.01
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
for (int i=0;i<=100;i++)
{
float randomvalue = (float)rand() / RAND_MAX;
if (randomvalue < 0.01)
{
printf("%f", randomvalue);
}
}
return 0;
}
运行多次后基本上是0到3个左右 。
4.编写抽奖小游戏
1.首先我们要编写游戏界面,可以自定义一个menu函数
2.其次,我们要限制奖品的概率
3.我们要规定好初始本金与花销与利润
4.利用我所讲的随机数生成方法制作抽奖系统
一下是我写的一个简单抽奖系统,大家可以自己尝试一下再看我的。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("参与游戏您就有机会获得以下奖励\n");
printf("*********一等奖1000元*********\n");
printf("*********二等奖 100元*********\n");
printf("*********三等奖 10元*********\n");
printf("*********1.play2.exit*********\n");
}
int main()
{
float firstprize = 0.001;
float secondprize = 0.009;
float thirdprize = 0.3;
srand(time(NULL));
int num = 0;
menu();
printf("请选择:");
scanf("%d", &num);
int money = 5000;
switch (num)
{
case 1:
{
int first = 0;
int second = 0;
int third = 0;
int none = 0;
int n = 0;
printf("一次十块钱请问您要玩几次");
scanf("%d",&n);
money += 10 * n;
for (int i = 0; i < n; i++)
{
float randomvalue = (float)rand() / RAND_MAX;
if (randomvalue <= firstprize)
{
first++;
money -= 1000;
}
else if (firstprize < randomvalue && randomvalue < secondprize)
{
second++;
money -= 100;
}
else if (secondprize < randomvalue && randomvalue < thirdprize)
{
third++;
money -= 10;
}
else
{
none++;
}
}
printf("一等奖%d次,二等奖%d次,三等奖%d次,未获奖%d次,", first, second, third, none);
printf("您总共获得%d元", first * 1000 + second * 100 + third * 10);
printf("期待您下次来玩\n");
break;
}
case 2:
{
printf("好的");
break;
}
default:
{
printf("无效选择");
break;
}
}
printf("利润为%d", money);
return 0;
}
至此完毕,小白编写不易,点个赞吧各位看官。
下面是修改版
#include <windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int game(int* money)
{
float firstprize = 0.001;
float secondprize = 0.009;
float thirdprize = 0.3;
int first = 0;
int second = 0;
int third = 0;
int none = 0;
int n = 0;
printf("一次十块钱请问您要玩几次");
scanf("%d", &n);
*money += 10 * n;
for (int i = 0; i < n; i++)
{
float randomvalue = (float)rand() / RAND_MAX;
if (randomvalue <= firstprize)
{
first++;
*money -= 1000;
}
else if (firstprize < randomvalue && randomvalue < secondprize)
{
second++;
*money -= 100;
}
else if (secondprize < randomvalue && randomvalue < thirdprize)
{
third++;
*money -= 10;
}
else
{
none++;
}
}
printf("一等奖%d次,二等奖%d次,三等奖%d次,未获奖%d次,", first, second, third, none);
printf("您总共获得%d元", first * 1000 + second * 100 + third * 10);
printf("期待您下次来玩\n");
return money;
}
void menu()
{
printf("参与游戏您就有机会获得以下奖励\n");
printf("*********一等奖1000元*********\n");
printf("*********二等奖 100元*********\n");
printf("*********三等奖 10元*********\n");
printf("*********1.play2.exit*********\n");
}
int main()
{
int money = 5000;
srand(time(NULL));
int num = 0;
menu();
printf("请选择");
scanf("%d", &num);
do
{
if (num == 1)
{
system("cls");
game(&money);
}
menu();
printf("请选择");
scanf("%d", &num);
if (num != 1)
{
printf("利润为%d", money);
}
} while (num == 1);
printf("利润为%d", money);
return 0;
}