用C语言实现显示16只灯的状态,并开关灯

本文介绍了一款使用C语言编写的控制实验室16盏灯开关的程序。通过定义两个字节变量并利用位运算,实现了灯的开关、状态显示等功能。用户可通过菜单输入进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux C老师布置了一个题,题意是控制实验室里的灯的开关,我们实验室的灯正好是16个,所以首先定义了一个两个字节的变量x,并赋了初始值,每一位表示一只灯的状态,1为亮,0为灭,正好是16只灯。
有一个显示菜单,输入数值可以用来选择进行什么操作,输入1表示进行开灯操作,输入2表示进行关灯操作,输入3表示显示所有灯的状态,输入4表示清屏,输入0表示退出。
开灯操作中输入1~16范围的一个数,使其开灯,主要用到与操作
关灯操作中输入1~16范围的一个数,使其关灯,主要用到异或操作,不过我用了一个麻烦的式子,可以自己修改哦。
程序只是有些长,但并不难哦,看代码吧!

#include<stdio.h>
#include<stdlib.h>//清屏函数的头文件 
int main(){
	unsigned int l1,l2,l3,l4,l5,x=0x0156;
	int s,t,m,i;
	while(1){
		printf("开灯请输入1,,关灯请输入2,显示所有灯的状态请输入3,清屏操作输入4,退出请输入0:");//显示操作菜单 
		scanf("%d",&s);//输入想进行第几个操作 
		if(s==1){
			l1=x;
			for(i=1;i<=16;i++){
				if((l1&0x0001)==0x0001)
					printf("%d个灯亮",i);
				else
					printf("%d个灯灭",i);
			l1=l1>>1;
			}
			printf("\n");
			printf("请输入灯号,使其亮:"); 
			scanf("%d",&t);
			x=x|(0x0001<<(t-1));
			l2=x;
			for(i=1;i<=16;i++){
			if((l2&0x0001)==0)//等于的优先级高于与,所以必须加括号 
					printf("%d个灯灭",i);
			l2=l2>>1;		
			}
			printf("\n");
		}
		if(s==2){
			l3=x;
	  		for(i=1;i<=16;i++){
				if((l3&0x0001)==0x0001)
					printf("%d个灯亮",i);
				else
					printf("%d个灯灭",i);
			l3=l3>>1;
			}
			printf("\n");
			printf("请输入灯号,使其灭:"); 
	    	scanf("%d",&m);
			x=x&(~(0x0001<<(m-1)));//直接用异或也可以 
			l4=x;
			for(i=1;i<=16;i++){
	 			if((l4&0x0001)!=0)
					printf("%d个灯亮",i);
			l4=l4>>1;
			}
			printf("\n");
		}	
		if(s==3){
			l5=x;	
			for(i=1;i<=16;i++){
				if((l5&0x0001)==0x0001)
					printf("%d个灯亮",i);
				else
					printf("%d个灯灭",i);
			l5=l5>>1;
			}
			printf("\n");
		}
		if(s==4) {
			system("cls");
		} //清屏函数 	
		if(s==0)
		break;
	}
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值