C语言中生成随机数(任意范围随机数,并抽取其中某些数)
创作时间:
作者:
@小白创作中心
C语言中生成随机数(任意范围随机数,并抽取其中某些数)
引用
CSDN
1.
https://m.blog.csdn.net/m0_63207201/article/details/136960672
一、理解思路
- 产生所需范围内的随机数
- 取其中n个随机数,去除重复随机数
- 排序输出
二、代码演示
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int comp_int(const void* e1, const void* e2) {
return *(char*)e1 - *(char*)e2;
}
int main() {
srand((unsigned)time(NULL));
int rangStart = 0; // 随机数的开始范围
int rangEnd = 0; // 随机数的结束范围
scanf("%d-%d", &rangStart, &rangEnd);
int amount = 0; // 取随机数的个数
scanf("%d", &amount);
int i = 0;
int randArr[100] = { 0 };
for (i = 0; i < amount; i++) {
int j = 0;
do {
randArr[i] = rand() % (rangEnd - rangStart + 1) + rangStart;
// 去除重复
for (j = 0; j < i; j++) {
if (randArr[i] == randArr[j])
break;
}
} while (i != j);
}
// 排序
qsort(randArr, amount, sizeof(randArr[0]), comp_int);
// 打印
for (i = 0; i < amount; i++) {
printf("%d ", randArr[i]);
}
return 0;
}
运行结果:
三、rand和srand
rand
:随机数发生器,所需头文件stdlib.h
srand
:初始化随机数发生器,所需头文件stdlib.h
。参数需要引用头文件time.h
rand()
和srand()
要一起使用,其中srand()
用来初始化随机数种子,rand()
用来产生随机数。
默认情况下随机数种子为1,相同的随机数种子产生的随机数是一样的,这就是伪随机数。所以为使每次得到的随机数不一样,用函数srand()
初始化随机数种子。srand()
的参数,用time
函数值(表示当前的时间),因为每次调用rand()
函数的时间是不同的,这样就可以保证随机性了。
代码示例:
- 任何一个数A取余(模)另外一个数B(都不为0),即 A % B,区间的范围是: 0到 B-1。
- 生成 0-10 之间的随机数,
rand % (10+1)
,区间范围是0-10。 - 如果需要产生1-10之间的随机数,即
rand %10
,得到的区间范围是0-9,所以rand%10 + 1
得到 1- 10范围。 - 如果是生成 3-10,我们可以先得到0-7的范围,再+3。因为0-7的范围可以直接求得
rand %(10-3+1)
, 3-10范围即为rand%8 + 3
四、去除重复随机数
在生成随机数的过程中,肯定会出现重复的数字,这个时候我们需要对随机数去重,所以我们可以定义一个数组,把生成的随机数一个个存起来,然后去除重复。
如果数组的1 2 3 4 5,后面再得到一个随机数3,把前面所有的随机数逐次比较。
当i下标变成5的时候,j从0 开始遍历数组,范围是1-5中对比,
如果出现相同的数字直接跳出内部for循环,再次回到do{重新生成随机数},
也就是说i的下标还是5,跳出去之后, i肯定不会等于j,所以while中的判断条件是 i != j,
再次重新生成随机数,如果随机数不是3,是8,内部循环j不断++,直到变成最后判断结束,再+1次,j==i,跳出do while 循环,此时i就会自增了。
五、排序
排序可以使用冒泡排序,这里使用的是排序函数qsort
,qsort
所需要的头文件是stdlib.h
qsort
函数所需参数,这里引用他人文章:qsort函数的使用
最后再打印就得到了所需要的结果。通常情况下,建议使用qsort
来完成排序。
热门推荐
Excel中输入数字后面变成0怎么办?四种实用解决方案
解密:关羽被尊为“财神”的背后力量来自何处?
自媒体的评估调整,如何对自媒体进行有效评估与调整?
2025年新高考之下:如何帮孩子做好未来规划
肾寒多尿,肝寒多痛,心寒多斑!五脏有寒,5个中成药,温阳散寒
黄柏泡水喝的方法是什么
中石油与中石化油能混加吗?这几点你必须知道
金属铟的用途:揭示CIGS电池的核心,透明导电薄膜的秘密
苏州拙政园景点介绍讲解,拙政园里面有哪些景点
天津至新疆自驾游攻略:完整路线与游记分享,最少耗时天数解析
小额欠款起诉流程与注意事项
胃左边肋骨下隐隐作痛怎么缓解
抽水马桶坑距的多种类型及其优缺点
肠息肉主要症状和日常注意事项有哪些
二手房买卖中的赎楼流程是怎样的?
汉朝权臣和外戚的结合导致外戚干政严重
废立两帝,毒杀皇后,西汉顶级权臣霍光家族陨落记
橡胶木和胡桃木哪个好
晚上吃夜宵对身体好不好?晚上吃夜宵的好处和坏处
吃凉东西后肚子疼怎么办?四种实用解决方案
澳大利亚旅游局官方推荐 | 悉尼-墨尔本8日沿海之旅
GRE备考指南:高效方法与策略
GRE考试详解:含义与考试频率
高中毕业留学申请条件及流程
探究喝茶水对降血压的影响:全面解析与相关建议
电影超出拟定上映时间多久,投资方可解除合同收回投资款?
如何识别和评估市场中的赢家策略?这些策略在投资中有哪些应用?
做一次磁共振能检查几个部位
亚冠布里兰VS柔佛比分预测 柔佛尽显黑马成色
郁金香的生长与繁殖(郁金香的品种、栽培技巧、繁殖方式、栽培注意事项、地理分布)