随着人工智能、大数据等新一轮科技革命和产业变革的深入推进,计算机科学基础教育的人才选拔与培养逐渐受到重视。
01学习计划目标
对于零基础且初中及以下阶段(参加普及组)的信息学爱好者,如果数学基础还比较扎实,可以尝试这样安排学习计划:
第一阶段:
掌握C++基础语法,包括:输入输出、条件分支、循环等内容;第二阶段:
掌握C++进阶语法,包括:数组、字符串、函数、递归、结构体、排序等内容;第三阶段:
初赛前,学习计算机基础知识,简单数据结构与算法、简单组合数学等,考前真题训练。目标:争取在普及组复赛中做出1道题。
进入本文的主题:C++中,如何产生随机数?
02如何产生随机数?
分三步骤,第1、2步为固定语法格式;第3步根据题目具体要求编写表达式。
需要引入两个头文件:cstdlib、ctime;在程序开头处编写固定格式(产生随机种子):srand(time(NULL));这样能够保证程序每次运行时,随机数都不同。在需要产生随机数的地方调用rand()函数,构造表达式即可。
信息学奥赛课课通(C++)京东好评率99%无理由退换京东配送官方店旗舰店¥63.6购买03案例一:产生一个0-10之间的随机数
rand()函数会产生一个随机数,但并没有确定范围。如何获取一个给定范围的随机数呢?
在这段代码中,只需要让rand()函数取10的余数,即可得到一个小于10之内的整数。注意:头文件、产生随机种子代码的编写。
04案例二:猜数字游戏
产生一个1-50之间的随机整数,只有5次猜测机会。解析:
1、在这个问题中,需要产生1-50之间的随机数。可以考虑rand()函数去取50的余数,但得到的只是0-49之间的数;如何得到想要的范围?
注意观察:只需要在前面代码的基础上加个1即可,即:rand()%50+1。
拓展,如果要产生25-50之间的随机数,应该怎么改写上述代码呢?
请思考通用解决思路(文末给出答案)。
2、题目要求只有5次的猜测机会,需要考虑使用循环。C++中提供了while、do-while及for循环,可根据熟练度及喜好自行选用。建议选用for循环,因为这是具有明确次数的循环,使用比较方便简洁。
参考代码如下:
上述代码中,在for循环中进行条件判断,动态获取用户的猜测值guess变量,然后与随机数num进行比较,根据比较结果提示相应的操作。
如果五次之内猜测正确,则“恭喜用户”并顺利结束程序;如果超过五次也没有猜测出来,则提示“已经没有机会了”。
05案例三:猜拳游戏
这个经典的案例在之前的教学文章、视频里都有讲过,分别用到了C、Java、Python等编程语言实现。本文就以C++的语法来实现其过程。
首先,我们必须有一个基本的思路。因为是和电脑出拳,所以可以这样实现:
显示界面(略)用户出拳(动态赋值)电脑出拳(产生随机数)判断胜负
显示界面这块由学习者按照个人喜好,自行设计游戏界面,此处略写。然后,看用户出拳部分,采用C++中的switch条件结构可以实现,代码如下:
前面已经讲了随机数的产生方式,按照固定模式编写代码即可。产生一个1-3之间的随机数rand()%3+1,然后将数字转换成文字输出,同样可以借用前面的switch结构,代码如下:
最后一步,就是根据用户出拳的数字和电脑产生的随机数进行比较,判断胜负。这一步的代码就留个读者自行完成了。(可参考作者其他教学资料)
06总结
本文主要讲解了在C++中如何产生随机数。
1、如果只给出最大值,则:rand()%最大值;如:产生10以内的随机数,rand()%10即可。
2、如果给出最小、最大值,则:rand()%(最大值-最小值)+最小值;如:产生10-30之间的随机数,表达式就该这样写:rand()%(30-10)+10。
今天的内容你都掌握了吗?欢迎