发布网友 发布时间:2024-12-11 21:18
共1个回答
热心网友 时间:2024-12-11 23:40
本章讨论一个非常简单的游戏程序:根据4个随机数字计算24点。
游戏介绍:相信大部分读者在中小学期间都玩过“计算24点”的游戏:拿一套扑克牌,舍弃大小王不用,在剩余的52张牌中,每次随机地取出4张牌,对这4张牌的牌面数字(J、Q和K分别视为11、12和13)进行加减乘除,要求最后求得的结果等于24。
程序设计题目:每次随机地产生4个大小介于[1,13]的整数,然后让用户输入数学表达式,要求最后求得的结果等于24。
程序设计需要解决两方面的问题:在程序中如何生成随机整数?如何让用户输入数学表达式,并最终求得结果?
1、随机数相关函数:计算机程序通常实现的是确定性的计算,但在某些应用中,如游戏程序、模拟实际过程或在程序调试中使用随机性数据作为试验数据,需要使用随机数。C/C++标准库提供了生成随机数的相关函数,包括srand和rand。srand用于设置随机数种子,rand用于生成随机数。
2、随机数种子函数srand:函数类型特征说明为void,没有返回值,使用参数seed重新设置种子值。默认的初始种子值是1,用户可以使用如下语句指定另一个种子值(例如,10):srand(10)。多次运行程序时,若每次都使用同一个固定的种子数,生成的随机数序列会一模一样。为使每次运行程序时生成的随机数序列不同,常用技巧是使用标准库中的time函数取得从威林威治时间1970年1月1日零时整开始计时所经过的时间秒数,以此作为种子值。程序中通常这样写:srand(time(0))。
3、随机数生成函数rand:这是一个无参函数,每次调用将得到一个新随机整数,其值在0和系统定义的符号常量RAND_MAX之间。为了生成介于[min, max]的随机整数(满足max - min ≤ RAND_MAX),可以使用k = rand() % (max + 1 - min) + min的语句;若希望生成介于[dmin, dmax]的随机小数(满足max - dmin ≤ RAND_MAX),则使用x = double(rand()) / RAND_MAX * (dmax - dmin) + dmin的语句。
在“计算24点”游戏程序中,需要生成4个大小介于[1,13]的随机整数。假设在程序中定义整型变量a、b、c和d,利用rand函数可以实现如下操作:a = rand() % 13 + 1; b = rand() % 13 + 1; c = rand() % 13 + 1; d = rand() % 13 + 1; 为了方便用户处理,需要打印输出所生成的4个随机整数。