引子
热点新闻!昨日晚一户人家保险箱被盗,小偷从窗户逃出。据被害人称,自己家里装的是最简单的木门,用手一推就能够打开。
额,也许我们需要安装密码锁来防盗了。
实验室邀请你参加新版密码门的开发工作!我们出发吧!
目录
引子
1.出发前的一堂课
1.1 逻辑也能做运算?——逻辑运算符
2.输入面板的开发
2.1 只有0和1的运算
2.2 9个变量太麻烦?初步认识数组
3.逻辑判断部分的开发
3.1 逻辑与或非
尾声
1.出发前的一堂课
我们还是在出发前先来了解一下逻辑运算符吧,不然就编写不了密码门的程序了
1.1 逻辑也能做运算?——逻辑运算符
在程序中,我们有时需要处理两个甚至更多表达式联立的判断情况,比如判断这句话是否成立:
一加一等于二 并且 二加二等于四
这句话是成立的。因为一加一确实等于二并且二加二确实等于四。
一加一等于二 或者 一加一等于三
这也是成立的,因为一加一等于二。
你如何表示上面两个表达式呢?
(1 + 1 == 2)&&(2 + 2 == 4)
(1 + 1 == 2)||(1 + 1 == 3)
想不到吧,上述代码段中,除了“==”之外,“&&”和“||”两个符号也是运算符。它们就是逻辑运算符,负责控制程序运行的逻辑,“&&”是逻辑与运算符,“||”是逻辑或运算符。除此之外的逻辑运算符还有“!”,它是逻辑非运算符。
名称 | 逻辑与 | 逻辑或 | 逻辑非 |
语法 | (表达式1)&&(表达式2) | (表达式1)||(表达式2) | !(表达式) |
作用 | 当两个表达式同时成立,则整个表达式才能成立。反之,只要有一个表达式不成立,则整个表达式就不成立 | 当两个表达式有一个成立,则整个表达式就能成立。反之,只要没有表达式成立,则整个表达式就不成立 | 若括号里表达式的结果为真时,整个表达式结果为假。反之,括号里表达式的结果为假,则整个表达式的结果为真 |
2.输入面板的开发
好了,到达实验室!科学家们正在为九个数字的输入面板发愁呢!
科学家甲:这个输入面板,应该怎么编程呢?
科学家乙:也许我们可以试一试用一个变量,没输入值就是0,输入了就是1。
好主意,我们快来试一试!
2.1 只有0和1的运算
开发前我们需要了解布尔型变量是什么。如果你不知道,你可以去看看:
我们可以把每一个按钮都用一个变量表示,当然需要用布尔变量,当未输入时值为0(即false,假),输入后值为1(即true,真)。先来实现一个按钮吧:
bool button1 = 0;
真不错,接下来把九个按钮都安上
bool button1 = 0;
bool button2 = 0;
bool button3 = 0;
bool button4 = 0;
bool button5 = 0;
bool button6 = 0;
bool button7 = 0;
bool button8 = 0;
bool button9 = 0;
让我们使用cin输入流来控制按钮的输入。
bool button1 = 0;
bool button2 = 0;
bool button3 = 0;
bool button4 = 0;
bool button5 = 0;
bool button6 = 0;
bool button7 = 0;
bool button8 = 0;
bool button9 = 0;
cin >> button1 >> button2 >> button3 >> button4 >> button5 >> button6 >> button7 >> button8 >> button9; //控制按钮,1代表按下,0代表不按。如按下1 3 5号按钮则输入1 0 1 0 1 0 0 0。
噢我的天哪,这么长的语句!
2.2 9个变量太麻烦?初步认识数组
太繁琐啦,九个按钮居然需要九个变量,有没有更好用的方法呢?有的。我们可以使用数组。
数组和变量差不多,你可以把它看作是多个变量的集合。
你可以像声明变量一样声明一个数组。
例如:
int a[5];
声明一个长度为5的名为a的整型数组。中括号里的这里是声明数组的长度。但是调用时……
a[4] = 5;
这时,中括号里的是这个数组的下标。注意:数组下标 是从零开始的。如果你声明了int a[5];,事实上你所能调用的数组中最后一个数值是a[4]。因为这个数组的第一个值是a[0]。下标和长度可不一样。
我们再次来看一看输入面板的开发。
/*原来的代码
*bool button1 = 0;
*bool button2 = 0;
*bool button3 = 0;
*bool button4 = 0;
*bool button5 = 0;
*bool button6 = 0;
*bool button7 = 0;
*bool button8 = 0;
*bool button9 = 0;
*cin >> button1 >> button2 >> button3 >> button4 >> button5 >> button6 >> button7 >> button8 >> button9;
*/
//更改后:
bool button[10]; //button[0]空着不用,方便理解
for (int i = 1,i <= 9;i ++){ //for循环,循环九次,以后再慢慢讲
cin >> button[i];
}
是不是一下子简短了许多?
3.逻辑判断部分的开发
输入面板已经开发完了,接下来还剩下整个密码门最核心的部分——逻辑判断部分。它负责判断密码是否正确并控制门的开关。准备好了吗,戴上橡胶手套,我们开始吧。
3.1 逻辑与或非
首先你得知道判断部分是和输入面板连接在一起的。所以我们可以通过上面数组的每一个下标的值来判断。
在开发逻辑判断部分之前,你得确定一个密码。
我们就假设密码是1 3 5吧,逻辑判断部分的工作就是检测按钮1,3,5是否被按下了。如果是的,就打开门并输出“欢迎回家”,否则就输出“密码错误”。
既然要打开门,不如我们设置一个命名为“门”的布尔型变量吧
bool button[10]; //button[0]空着不用,方便理解
for (int i = 1,i <= 9;i ++){ //for循环,循环九次,以后再慢慢讲
cin >> button[i];
}
bool door = 0; //控制门的开关,默认状态是关(0)
逻辑判断部分要如何编写呢?
我们需要判断按钮1,3,5是否被按下,也就是判断按钮1,3,5的值是否为1,如果是的话,就把door的值改为1并且输出“欢迎回家”,否则输出“密码错误”。
也就是说我们需要判断 按钮1被按下 并且 按钮3被按下 并且 按钮5被按下。
噢,是时候呼叫 “超级逻辑与运算符” 来帮忙了
bool button[10]; //button[0]空着不用,方便理解
for (int i = 1,i <= 9;i ++)
{ //for循环,循环九次,以后再慢慢讲
cin >> button[i];
}
bool door = 0;
if ((button[1] == 1)&&(button[3] == 1)&&(button[5] == 1))
{
door = 1;
cout << "欢迎回家" << endl;
}
else cout << "密码错误" << endl; //if-else语句是后话了,我们以后会细讲
真不错,逻辑判断部分已经初具雏形了。这时,科学家们又遇到了难题。总有一些熊孩子会喜欢把所有的按钮都按一遍,这样按钮1,3,5也能变为1值,也能把门打开。那密码门还不如不装。所以我们需要增加一个判断条件,如果其他按钮也被按下了,就把门关上。
bool button[10]; //button[0]空着不用,方便理解
for (int i = 1,i <= 9;i ++)
{ //for循环,循环九次,以后再慢慢讲
cin >> button[i];
}
bool door = 0;
if ((button[1] == 1)&&(button[3] == 1)&&(button[5] == 1))
{
if ((button[2] == 1)||(button[4] == 1)||(button[6] == 1)||(button[7] == 1)||(button[8] == 1)||(button[9] == 1)
cout << "密码错误" << endl;
else
{
door = 1;
cout << "欢迎回家" << endl;
}
}
else cout << "密码错误" << endl; //if-else语句是后话了,我们以后会细讲
好了,最核心的部分已经被我们完成了,接下来就交给科学家们完成前端的开发吧。相信有了这款密码锁,再也没有人会遭窃了。
尾声
热点新闻!昨日晚一户人家保险箱被盗,据办案民警称,小偷在作案时带了一把铁镐,把密码门挖破后盗走了保险箱……
啊这……