数据类型强转+随机数实现

数据类型转换

自动类型转换

自动类型转换也叫隐式转换

当不同类型的变量同时运算时就会发生数据类型的自动转换。

  • char 和 int 两个类型的变量相加时,就会把 char 先转换成 int 再进行加法运算
  • 如果是 int 和 double 类型进行运算时,就会把 int 转换成 double再进行运算
  • 条件判断中,非布尔型自动转换为布尔类型。
强制转换

强制转换也叫显式转换

  • (typeName) value (C语言的写法)

  • typeName (value) (c++的写法)

随机数

rand&srand

C++中没有自带的random函数,要实现随机数的生成就需要使用 rand()和srand()。

需要头文件 <cstdlib>

rand函数

rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h中。

例:产生0-100之间的一个数字,不包括100

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
cout << rand()%100;
return 0;
}

试验N次后,其结果依旧是41,可以注意到,在直接使用rand()时,输出的结果为同一个数,称为伪随机数

image-20221220162130101

srand函数

srand()

srand()可用来设置rand()产生随机数时的随机数种子。通过设置不同的种子,我们可以获取不同的随机数序列。

可以利用srand((int)(time(NULL))的方法,利用系统时钟,产生不同的随机数种子。不过要调用time(),需要加入头文件< ctime >。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand((int)time(0)); // 产生随机种子 把0换成NULL也行,注释掉srand试试看
for (int i = 0; i < 10; i++)
{
cout << rand()%100<< " ";
}
return 0;
}

用宏来替换rand函数
#include <iostream>
#include <cstdlib>
#include <ctime>
#define random(x) rand()%(x) //宏定义
using namespace std;
int main()
{
srand((int)time(0)); // 产生随机种子 把0换成NULL也行
for (int i = 0; i < 10; i++)
{
cout << random(100) << " ";
}
return 0;
}
其他的随机数的范围通式

产生一定范围随机数的通用表示公式

要取得[0,n) 就是rand()%n 表示 从0到n-1的数

要取得[a,b)的随机整数,使用**(rand() % (b-a))+ a;**

要取得[a,b]的随机整数,使用**(rand() % (b-a+1))+ a;**

要取得(a,b]的随机整数,使用**(rand() % (b-a))+ a + 1;**

通用公式:**a + rand() % n;**其中的a是起始值,n是整数的范围。

要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。

要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

猜数字游戏

简单版

在1-100之间取个数字,然后输入数字进行猜测,直到猜对了为止。


#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;


int main() {

	//随机一个1-100之间整数
	srand((unsigned)time(NULL));
	int guess = rand() % 100 + 1;

	//玩家输入数字
	int num = 0;


	//不能确定多少次能猜对,用无限循环
	while (true)
	{
		cout << "请输入数字(1-100):" << endl;
		cin >> num;
		if (num == guess)
		{
			cout << "恭喜你,猜对了" << endl;
			break;
		}
		else if (num > guess) {
			cout << "猜大了" << endl;
		}
		else {
			cout << "猜小了" << endl;
		}

	}
	

	return 0;
}


升级版

在1-100之间取个数字,然后输入数字进行猜测;

进入游戏有难度等级限制:容易(10次机会),中等(5次机会), 困难(2次机会) 如果猜大了,提示猜大了; 如果猜小了,提示猜小了; 如果猜对 了,退出游戏。 如果机会用完,提示失败,退出游戏。


#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;


int main() {

	//随机一个1-100之间整数
	srand((unsigned)time(NULL));
	int guess = rand() % 100 + 1;

	//玩家输入数字
	int num = 0;


	//等级选择
	int level = 0;
	char c = 0;
	cout << "等级选择:(容易a;中等b;困难c)" << endl;
	cin >> c;
	if (c == 'a') {
		level = 10;
	}
	else if (c == 'b') {
		level = 5;
	}
	else if (c == 'c') {
		level = 2;
	}


	//不能确定多少次能猜对,用无限循环
	//while (true)
	int i = 1;
	for(; i<=level; i++)
	{
		cout << "请输入数字(1-100):" << endl;
		cin >> num;
		if (num == guess)
		{
			cout << "恭喜你,猜对了" << endl;
			break;
		}
		else if (num > guess) {
			cout << "猜大了" << endl;
		}
		else {
			cout << "猜小了" << endl;
		}

	}

	if (i > level) {
		cout << "失败了,你才的数字是" << guess << endl;
	}
	

	return 0;
}

终极版

在升级版猜数字游戏2的基础上,增加让玩家选择继续玩游戏还在 退出游戏。

注意要加while


#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;


int main() {

	//随机一个1-100之间整数
	srand((unsigned)time(NULL));
	int guess = 0; 

	//玩家输入数字
	int num = 0;

	while (1) {
		guess = rand() % 100 + 1;
		//等级选择

		int level = 0;
		char c = 0;
		cout << "等级选择:(容易a;中等b;困难c)" << endl;
		cin >> c;
		if (c == 'a') {
			level = 10;
		}
		else if (c == 'b') {
			level = 5;
		}
		else if (c == 'c') {
			level = 2;
		}


		//不能确定多少次能猜对,用无限循环
		//while (true)
		int i = 1;
		for (; i <= level; i++)
		{
			cout << "请输入数字(1-100):" << endl;
			cin >> num;
			if (num == guess)
			{
				cout << "恭喜你,猜对了" << endl;
				break;
			}
			else if (num > guess) {
				cout << "猜大了" << endl;
			}
			else {
				cout << "猜小了" << endl;
			}

		}

		if (i > level) {
			cout << "失败了,你才的数字是" << guess << endl;
		}

		cout << "你是否需要再玩一次,(Y/N)" << endl;
		cin >> c;
		if (c == 'N') {
			break;
		}
	}

	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tian Meng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值