实验室里密码锁的开发——你了解运算符吗(三)

引子


热点新闻!昨日晚一户人家保险箱被盗,小偷从窗户逃出。据被害人称,自己家里装的是最简单的木门,用手一推就能够打开。

额,也许我们需要安装密码锁来防盗了。

实验室邀请你参加新版密码门的开发工作!我们出发吧!


目录

引子

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的运算

开发前我们需要了解布尔型变量是什么。如果你不知道,你可以去看看:

你真的了解常量和变量吗 拓展 布尔变量w

我们可以把每一个按钮都用一个变量表示,当然需要用布尔变量,当未输入时值为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语句是后话了,我们以后会细讲

好了,最核心的部分已经被我们完成了,接下来就交给科学家们完成前端的开发吧。相信有了这款密码锁,再也没有人会遭窃了。


尾声


热点新闻!昨日晚一户人家保险箱被盗,据办案民警称,小偷在作案时带了一把铁镐,把密码门挖破后盗走了保险箱……

啊这……

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RedstoneCuberoot

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

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

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

打赏作者

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

抵扣说明:

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

余额充值