if-else if- if 语句:
简单举个例子:
#include<iostream>
using namespace std;
int main(void){
char ch;
int a_grade,b_grade,c_grade;
a_grade=b_grade=c_grade=0;
cin.get(ch);
if (ch == 'A')
a_grade++;
else if (ch=='B')
b_grade++;
else
c_grade++;
cout<<a_grade<<' '<<b_grade<<' '<<c_grade;
return 0;
}
注意 if-else 这样的结构中,else匹配的时他所在的语句块中的最近的一个else.
逻辑预算符:
not(非)、and(与)、or(或)
优先级就按照上述所写从左到右依次降低
C++规定not and or是顺序点,先修改左边值,在对右边值进行判定
not(非):
符号!
格式: ! project
true | false | |
---|---|---|
not (!) | flase | true |
and(与):
符号&&
格式: projectA && projectB
true | false | |
---|---|---|
true | true | false |
false | flase | false |
or(或):
符号||
格式: projectA || projectB
true | false | |
---|---|---|
true | true | true |
false | true | false |
不难发现一下规律:
对于and,只有全真才是真
对于or,只有全假才是假
“断点”运算
对于顺序点||来说,只要前一个表达式为true,那么就不会再进行后一个表达式的计算
格式 projectA || projectB
projectA or projectB | ||
---|---|---|
projectA = true | projectA = false | |
projectB = true | true | true |
projectB = false | true | false |
例子:
int i=5,j=1;
++i>5 or ++j>2
因为 ++i=6>5为true,
所以不在计算后一个表达式的正误
返回值i=6,j=1
同理,对于顺序点&&来说,只要前一个表达式为fasle,那么就不会再进行后一个表达式的计算,这里就不再详细说明了。
有了循环结构和选择结构,就可以编写一个小程序
猜数字:
首先我们先不用随机数,我们自定义给一个数值
#include<iostream>
const int ans=25;
using namespace std;
int main(void){
int guess;
cout<<"Enter a int number,if you want to leave,press 0"<<endl;
cin>>guess;
while (true){
if (guess==0)
break;
else if (guess<ans) cout<<"Too low"<<endl;
else if (guess==ans) cout<<"You are right"<<endl;
else if (guess>ans) cout<<"Too high"<<endl;
cout<<"Enter another int number,if you want to leave,press 0"<<endl;
cin>>guess;
}
return 0;
}
但是如果我们事先知道了答案,这个游戏就变得毫无意义了,所以我们要采用让电脑随机产生一个数字让我们猜,这时候我们就要用到一个工具——随机数
随机数(random)
用法:rand() 随机获得[0,max_type)之间的数据
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a (结果值含a不含b)。
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a (结果值含a和b)。
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1 (结果值不含a含b)。
所以上述程序就变成如下所示:
#include<iostream>
#include<cstdlib>
using namespace std;
int main(void){
int ans;
ans=rand();
//cout<<ans;
int guess;
cout<<"Enter an int number"<<endl;
cin>>guess;
while (true){
if (guess<ans) cout<<"Too low"<<endl;
else if (guess==ans) cout<<"You are right"<<endl;
else if (guess>ans) cout<<"Too high"<<endl;
cout<<"Enter another int number"<<endl;
cin>>guess;
}
return 0;
}
但你会发现,每次产生的数据都是相同的,这是为什么呢?
首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生
“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发
展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪
随机数。 伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的
伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定
的规律,有时不遵守任何规律;伪随机数有一部分遵守一定的规律;另一部分不
遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正是点到了事物的
特性,即随机性,但是每种树的叶子都有近似的形状,这正是事物的共性,即规
律性。从这个角度讲,你大概就会接受这样的事实了:计算机只能产生伪随机数
而不能产生绝对随机的随机数。
这时候就要用到随机种子了:
用srand定义随机种子;
注意:rand()和srand()要一起使用,其中srand()用来初始化随机数种子,rand()用来产生随机数。
因为默认情况下随机数种子为1,
而相同的随机数种子产生的随机数是一样的,失去了随机性的意义,
所以为使每次得到的随机数不一样,用
函数srand()初始化随机数种子。srand()的参数,
一般用用time函数值(即当前时间),
(也可以使用rand(number) number是随机种子的序号
该序号的随机种子中会存储产生的固定的随机数)
因为两次调用rand()函数的时间通常是不同的,这样就可以保证随机性了。
这里是以时间为种子数:
srand(time(NULL));
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(void){
int ans;
srand(time(NULL));
ans=rand();
cout<<ans;
int guess;
cout<<"Enter a int number,if you want to leave,press 0"<<endl;
cin>>guess;
while (true){
if (guess==0)
break;
else if (guess<ans) cout<<"Too low"<<endl;
else if (guess==ans) cout<<"You are right"<<endl;
else if (guess>ans) cout<<"Too high"<<endl;
cout<<"Enter another int number,if you want to leave,press 0"<<endl;
cin>>guess;
}
return 0;
}