① c语言:开关灯
#include"stdio.h"
intmain(intargc,char*argv[]){
charlmp[5001];
inti,j,N,M;
printf("PleaseenterN&M(int0<N<5001,0<M<=N)... ");
if(scanf("%d%d",&N,&M)!=2||N<1||N>5000||M<1||M>N){//保证输入的N,M符合要求,否则退出
printf("Inputerror,exit... ");
return0;
}
for(i=1;i<=N;lmp[i++]=1);//N盏灯全开启(原始状态)
for(i=1;i<=M;i++)//遍历M个人
for(j=1;j<=N;lmp[j++]^=!(j%i));//每个人把与自己编号成整数倍的灯作相反操作
for(j=0,i=1;i<=N;i++)//输出,从编号小至大遍历所有灯
if(!lmp[i])//输出已被关闭的灯的编号
printf(j++?",%d":"%d",i);
printf(" ");
return0;
}
运行样例:
② 51单片机一个开关控制一盏灯的c程序是什么
一个简单的开关控制一盏灯的c程序如下:
#include<reg52.h>
sbit S1=P1^4; //将S1位定义为P1^4,检测独立按键
sbit led0=P1^0; //将led0定义为P1.0口的LED
/***********************************************************************************************************************************************
延时函数
***********************************************************************************************************************************************/
void delay(void)
{
unsigned int i;
for(i=5000;i>0;i--)
;
}
/***********************************************************************************************************************************************
主函数
***********************************************************************************************************************************************/
void main(void)
{
while(1)
{
if(S1==0) //判断是否有键按下
{
delay(); //有键按下,延时去抖,真正应用时要少用这种延时,占用时间,用定时器延时或一个寄存器循环检测10多次按键
if(F0==0) //用F0标志位判断键按下是否已经处理,因刚学C语言没多久,
//不知道怎么定义RAM能位寻址的寄存器,先用F0,按键多的话,一个F0不够用
{
F0=1; //F0置1,表示这次按键按下已处理
led0=~led0; //将LED亮灭状态取反
}
}
else 高握腔 戚衫 //S1=1说明按键释放
{
F0=0; 皮悄 //F0清零,清按键已处理标志
}
}
}
③ 用c语言一个开关控制两个灯开关闭合灯1亮灯2灭开关打开灯1灭灯2亮
开关控制的话就不用编程语言了好吗,因为开关是直接的物理连接,通过电路实现就好,那我就理解成你是想用单片机来实现吧,首先单片机与外设怎样连接我不考虑,因为你没说。那么我就当是我可以随意的使用单片机的输出吧,然后开关闭合理解成按键是高电平,再按一次取反。
#include<89c51.h>//是不是这个头文件记不清了。。
#defineuintunsignedint
#defineucharunsignedchar
#defineLED1P1_0
#defineLED2P1_1
#defineKEY1P0_1
/*函数声明,延迟函数,LED灯初始化函数,按键KEY初始化,按键KEY查询函数*/
voidDelayMs(uintn);
voidLEDInit(void);
voidKEYInit(void);
ucharKEYScan(void);
/*主函数*/
voidmain()
{
LED1=0;
LED2信袭码=1;//不同的接法可能导致结果不一样,有的高电平亮有的低电平
while(1)//具体看你自己的板子怎么接的
{
if(KEYScan())
LED1=~LED1;
LED2=~LED2;
}
}
/*检测按键状态*/
ucharKEYScan(void)
{
if(KEY1==0)
DelayMs(100);//延时一段时间,以免抖动
禅宏if(KEY1==0)
{
滑哪DelayMs(100);
while(KEY1==0);
return1;
}
else
return0;
}
/*延迟函数*/
voidDelayMs(uintn)
{
inti;
while(n--)
{
for(i=587;i>0;i--);
}
}
以上代码是做CC2530实验的时候做的,修改了一下。
④ C语言开灯问题就解释,题目什么意思
//我觉得7号灯肯定是在关闭状态
//因为第1个人把所有等打开,那么只有第7个人是7的倍数,
//所以第7个人会把第7个灯关闭掉,7号灯的状态肯定是关闭的
//所以说你这个输出有可能是错误的。
//给你写的完整代码,希望能帮到你。
#include<stdio.h>
#defineN1000
structLight
{
intnum;
intonOff;//1打开0关闭
};
intmain()
{
intn,k,i;
Lightlight[N];
scanf("%d%d",&k,&n);
if(k>n||n>1000) //不符合条件的直接返回
return0;
for(i=0;i<N;i++)//初始化灯都是亮着的,因为第1个人会把所有灯打开
{
light[i].onOff=1;
light[i].num=i+1;
}
for(i=2;i<=k;i++)//从第2个人开始循环,一直到第k个
for(intj=0;j<n;j++)
if(light[j].num%i==0&&light[j].num>=i)//如果灯的编号是人的编号的倍数,且灯号大于人号
{
if(light[j].onOff==1)//如果是开,就关闭,否则打开
light[j].onOff=0;
elselight[j].onOff=1;
//输出信息
printf("i=%d第%d号灯,状态:%d ",i,light[j].num,light[j].onOff);
}
for(i=0;i<n;i++)//遍历,输出所有打开的灯
if(light[i].onOff==1)
printf("%d",light[i].num);
printf(" ");
return0;
}