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;
}
}