c语言三种循环结构.docx
《c语言三种循环结构.docx》由会员分享,可在线阅读,更多相关《c语言三种循环结构.docx(12页珍藏版)》请在冰豆网上搜索。
c语言三种循环结构
任务1:
控制LED小灯亮灭
1.流程图如下:
2.程序如下:
#include
#defineuintunsignedint
#defineucharunsignedchar
voidmain()//主函数
{
while
(1)//while死循环
{
if((P3&0x10)==0)//判断P3口上的八位与00010000相与后是否等于0,若是,则P3.4口为低电平,也就是接在P3.4口上的开关按上了。
P1=0xfe;//当P3.4口上的开关按上了,那么就由用户使接在P1.0口上的灯亮。
elseif((P3&0x20)==0)//和上面的一样,判断P3.5口上的开关是否按上了。
P1=0Xfd;//当P3.5口上的开关按上了,点亮接在P1.1口上的灯。
elseif((P3&0x40)==0)//判断P3.6口的开关是否按上了。
P1=0xfb;//当P3.6口上的开关按上了,点亮接在P1.2口上的灯。
elseif((P3&0x80)==0)//判断P3.7口的开关是否按上了。
P1=0xf7;//当P3.7口上的开关按上了,点亮接在P1.3口上的灯。
elseP1=0xff;//当没有按键按下时,P1口上的全部灯都不亮。
}
}
3.仿真结果如下:
4.仿真结果分析:
从仿真图以及程序可以看出,当P3.4口上的开关按下时,不管其它三个开关有没有按下,只有受P3.4口开关控制的那个灯(p1.0口上的灯)才亮,以此类推,当只有P3.7口上的开关按下时,P1.3口上的灯才亮,而其它灯不亮,因为控制其它灯的按键没有按下,接在其它灯的IO口处于高电平状态。
任务二:
循环点亮led小灯
1.流程图如下:
2.程序如下:
#include
#defineuintunsignedint
#defineucharunsignedchar
voidDelayMs(uinti)//延时子程序
{
uintj;
for(;i!
=0;i--)
{
for(j=100;j!
=0;j--);
}
}
voidLedlight(uchari)
{
switch(i)
{
case1:
P1=0xfe;break;//当i的值为1时,点亮P1.0口上的灯
case2:
P1=0xfd;break;//当i的值为2时,点亮P1.1口上的灯
case3:
P1=0xfb;break;//当i的值为3时,点亮P1.2口上的灯
case4:
P1=0xf7;break;//当i的值为4时,点亮P1.3口上的灯
case5:
P1=0xef;break;//当i的值为5时,点亮P1.4口上的灯
case6:
P1=0xdf;break;//当i的值为6时,点亮P1.5口上的灯
case7:
P1=0xbf;break;//当i的值为7时,点亮P1.6口上的灯
case8:
P1=0x7f;break;//当i的值为8时,点亮P1.7口上的灯
default:
break;
}
}
voidmain()
{
uchari;
while
(1)
{
for(i=8;i>0;i--)
{
Ledlight(i);
DelayMs(100);
}
}
}
3.仿真结果如下:
4.仿真结果分析:
由程序可知,利用开关分支语句实现小灯循环点亮,P1口一共接8个灯所以设置8个分支,当参数i=8时,选择第八个分支“case8”即点亮P1.7口上的灯,然后判断i是否仍然大于0,是的话i自减1,再选择相应的分支点亮相对应的小灯实现循环点亮。
任务三:
用3种循环实现输出1~10的平方
第一种(for循环):
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voidserial_init(void);
voidmain()
{
uinti,c;
serial_init();
while
(1)
{
for(i=1;i<11;i++)
{
c=i*i;
printf("%d\n",c);
}
}
}
voidserial_init(void)//串口初始化函数
{
TMOD=0x20;//T1工作方式1,用于设定波特率
TH1=0xF3;//波特率4800Bps,12MHz晶振
TL1=0xF3;
PCON|=0x80;//SMOD=1,波特率加倍
SCON=0x50;//允许发送接收
ES=0;//禁止串口中断
TI=1;
TR1=1;
}
分析:
先给i赋值1,把i*i的值赋给c,再printf("%d\n",c)输出1的平方,然后判断i是否大于11,不是的话i自加1,变成2,再把c=2*2,输出2的平方“4”,以此类推······
第二种(if嵌套):
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voidserial_init(void);
voidmain()
{
uinti,c;
serial_init();
while
(1)
{
for(i=1;i<11;i++)
{c=i*i;
if(i==1)
printf("%d\n",c);
elseif(i==2)
printf("%d\n",c);
elseif(i==3)
printf("%d\n",c);
elseif(i==5)
printf("%d\n",c);
elseif(i==6)
printf("%d\n",c);
elseif(i==7)
printf("%d\n",c);
elseif(i==8)
printf("%d\n",c);
elseif(i==9)
printf("%d\n",c);
elseif(i==9)
printf("%d\n",c);
}
}
}
voidserial_init(void)//串口初始化函数
{
TMOD=0x20;//T1工作方式1,用于设定波特率
TH1=0xF3;//波特率4800Bps,12MHz晶振
TL1=0xF3;
PCON|=0x80;//SMOD=1,波特率加倍
SCON=0x50;//允许发送接收
ES=0;//禁止串口中断
TI=1;
TR1=1;
}
第三种(switch):
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voidserial_init(void);
voidmain()
{
uinti,c;
serial_init();
while
(1)
{
for(i=1;i<11;i++)
{
switch(i)
{
case1:
c=i*i;printf("%d\n",c);break;
case2:
c=i*i;printf("%d\n",c);break;
case3:
c=i*i;printf("%d\n",c);break;
case4:
c=i*i;printf("%d\n",c);break;
case5:
c=i*i;printf("%d\n",c);break;
case6:
c=i*i;printf("%d\n",c);break;
case7:
c=i*i;printf("%d\n",c);break;
case8:
c=i*i;printf("%d\n",c);break;
case9:
c=i*i;printf("%d\n",c);break;
case10:
c=i*i;printf("%d\n",c);break;
default:
break;
}
}
}
}
voidserial_init(void)//串口初始化函数
{
TMOD=0x20;//T1工作方式1,用于设定波特率
TH1=0xF3;//波特率4800Bps,12MHz晶振
TL1=0xF3;
PCON|=0x80;//SMOD=1,波特率加倍
SCON=0x50;//允许发送接收
ES=0;//禁止串口中断
TI=1;
TR1=1;
}