6.4 项目四编程实现通过指令控制两个灯的亮灭
1.项目需求
通过程序设计实现用设置的指令控制两个灯的亮灭。
2.项目分析
要实现通过键盘输入的某个指令来控制两个灯的亮灭,可以通过数组存储输入的指令,然后判断该指令是否与控制灯亮灭的指令相同来实现。执行完毕将数组清0,等待下次指令的输入。假设用“1*”控制关闭灯D3,用“2*”控制打开灯D3,用“3*”控制关闭灯D4,用“4*”控制打开灯D4。
首先明确数组里存储的是将要输入的指令,该指令包括两个字符,因此定义字符类型的数组长度至少为2,假设定义字符数组:
char data[2]="00";
或
char data[2]={0,0};
或
char data[2];
data[0]=0;
data[1]=0;
定义一个内存接收字符的标志位flag,当flag为0时,说明处于接收字符的状态;当flag为1时,说明处于判断数组里字符与灯的控制关系状态。设置一个变量表示缓存里存储的输入字符,假设为temp。
`当flag为0时,开始接收字符,当缓存里的字符不为“*”并且已经接收的字符个数不超过2时,将缓存里的字符赋值给数组的第一个元素,当缓存里的字符为“*”时说明指令输入完毕,这时标志位flag置1,开始判断输入的指令要实现控制哪个灯的哪种状态。如果输入的字符已经有两个,那么字符输入完毕,标志位flag置1,同时将缓存内的字符清空。
当flag为1时,判断数组里的字符是否满足第一个元素为1,第二个元素为“*”,如果满足,则关闭灯D3;如果满足第一个元素为2,第二个元素为“*”,则打开灯D3;如果满足第一个元素为3,第二个元素为“*”,则关闭灯D4;如果满足第一个元素为4,第二个元素为“*”,打开灯D4。
判断完毕,将flag清0,数组清空。等待下次指令的输入。
3.程序设计4.举一反三


思考:如果程序改为用指令“11*”控制关闭灯D3,用“22*”控制打开灯D3,用“33*”控制关闭灯D4,用“44*”控制打开灯D4,程序该怎么编写?(https://www.daowen.com)
分析:
用3位指令控制两灯状态,因此数组的长度至少为3,所有跟数组长度有关的程序都要更改。另外,在判断数组里的字符时,可以用嵌套的条件语句来判断,也可以用逻辑与的操作来判断,因此至少可以用两种方法来解决这个问题。
程序如下:


或者可以将程序改为:


若将需求改为用指令“11*”控制关闭灯D3,用“12*”控制打开灯D3,用“21*”控制关闭灯D4,用“22*”控制打开灯D4,程序如何编写?
分析:
指令的第一位都是1时,如果第2位为1,第3位为“*”,则可以控制关闭灯D3,如果第2位为2,第3位为“*”,则可以控制打开灯D3,因此可以将各位的逻辑关系表示为:
如果第1位为1,第3位为“*”,则当第2位为1时,关闭灯D3,当第2位为2时,打开灯D3。同理,对于灯D4也是一样的:如果第1位为2,第3位为“*”,则当第2位为1时,关闭灯D4,当第2位为2时,打开灯D4。因此程序可以写为:


如果继续增加指令的位数,要注意更改数组的大小和初始值,在判断指令的字符时,要善于运用逻辑与来表示字符数组各元素的值,也要善于使用条件语句表示各元素的关系。例如,用“110*”控制关闭灯D3,用“220*”控制打开灯D3,用“330*”控制关闭灯D4,用“440*”控制打开灯D4,则程序如下:


或者也可以将程序写为:

