C语言中rand %函数怎么用

一、基础知识点

  1. rand() 函数
    头文件:#include <stdlib.h>
    作用:生成一个 0 ~ RAND_MAX 的随机整数(RAND_MAX 至少是32767)
  2. % 取余运算符
    rand() % n:把随机数限制在 0 ~ n-1 之间
  3. srand() 设置随机种子
    头文件:#include <time.h>
    不加 srand(time(NULL)),每次运行程序随机数序列完全一样。

二、完整示例1:0~9随机数(rand % 10)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>  // time()函数头文件

int main()
{
    // 设置随机种子,只需要调用一次
    srand((unsigned int)time(NULL));

    // rand() % 10 → 范围:0、1、2 ... 9
    int num = rand() % 10;
    printf("0~9随机数:%d\n", num);

    // 循环输出10个0~9随机数
    printf("批量0~9随机数:");
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", rand() % 10);
    }
    return 0;
}

三、常用区间公式(rand + % 组合)

rand() % n 基础范围 [0, n-1],通过偏移得到任意区间:

  1. [0, a]rand() % (a + 1)
    例:0~5 → rand() % 6
  2. [1, a]rand() % a + 1
    例:1~10 → rand() % 10 + 1
  3. [min, max] 通用公式
    int num = rand() % (max - min + 1) + min;
    
    例:3~7 → rand() % (7 - 3 + 1) + 3rand() % 5 + 3

四、示例2:生成 1~100 随机数

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    srand((unsigned int)time(NULL));

    // 1~100
    int a = rand() % 100 + 1;
    printf("1~100随机数:%d\n", a);

    // 20 ~ 50
    int b = rand() % (50 - 20 + 1) + 20;
    printf("20~50随机数:%d\n", b);
    return 0;
}

五、关键注意事项

  1. srand 只能写一次
    不要把 srand 放进循环里,否则短时间内生成相同随机数。
  2. rand() 只能生成整数
    无法直接生成小数,小数需要额外换算:
    // 0.0 ~ 1.0 随机小数
    double f = (double)rand() / RAND_MAX;
    
  3. rand()%n 轻微分布不均
    RAND_MAX 不一定能被 n 整除,对普通练习无影响,高精度场景建议改用其他随机库。

六、完整综合案例:猜数字游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    srand((unsigned int)time(NULL));
    // 生成1~100答案
    int ans = rand() % 100 + 1;
    int guess;

    printf("猜数字游戏!数字范围1~100\n");
    while (1)
    {
        printf("请输入猜测数字:");
        scanf("%d", &guess);
        if (guess > ans)
            printf("太大了!\n");
        else if (guess < ans)
            printf("太小了!\n");
        else
        {
            printf("恭喜猜对!答案是:%d\n", ans);
            break;
        }
    }
    return 0;
}
posted @ 2026-07-21 14:36  dayday333  阅读(3)  评论(0)    收藏  举报