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