数据类型转换
自动类型转换
自动类型转换也叫隐式转换
当不同类型的变量同时运算时就会发生数据类型的自动转换。
- 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()时,输出的结果为同一个数,称为伪随机数
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;
}