6.4 项目四编程实现通过指令控制两个灯的亮灭

更新于 2026年10月10日 版权声明
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,则程序如下:

图示

图示

或者也可以将程序写为:

图示

图示

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)