c语言三种循环结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("%d\n",c);
else if(i==7)
printf("%d\n",c);
else if(i==8)
printf("%d\n",c);
else if(i==9)
printf("%d\n",c);
else if(i==9)
printf("%d\n",c);
}
}
}
void serial_init(void) //串口初始化函数
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”,以此类推······
任务1:控制LED小灯亮灭
1.流程图如下:
2.程序如下:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void main()//主函数
{
while(1)//while死循环
{
if((P3&0x10)==0)//判断P3口上的八位与00010000相与后是否等于0,若是,则P3.4口为低电平,也就是接在P3.4口上的开关按上了。
}
第三种(switch):
#include <reg51.H>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
void serial_init(void);
void main ()
{
uint i,c;
serial_init();
任务二:循环点亮led小灯
1.流程图如下:
2.程序如下:
#include <reg51.H>
#define uint unsigned int
#define uchar unsigned char
void DelayMs(uint i)//延时子程序
{
uint j;
for(;i!=0;i--)
{
for(j=100;j!=0;j--);
case 10: c=i*i;printf("%d\n",c);break;
default:break;
}
}
}
}
void serial_init(void) //串口初始化函数
{
TMOD = 0x20; //T1工作方式1,用于设定波特率
TH1 = 0xF3; //波特率4800Bps,12MHz晶振
while(1)
{
for(i=1;i<11;i++)
{
switch(i)
{
case 1: c=i*i;printf("%d\n",c);break;
case 2: c=i*i;printf("%d\n",c);break;
case 3: c=i*i;printf("%d\n",c);break;
case 4: c=i*i;printf("%d\n",c);break;
任务三:用3种循环实现输出1~10的平方
第一种(for循环):
#include <reg51.H>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
void serial_init(void);
void main ()
case 4: P1=0xf7;break;//当i的值为4时,点亮P1.3口上的灯
case 5: P1=0xef;break;//当i的值为5时,点亮P1.4口上的灯
case 6: P1=0xdf;break;//当i的值为6时,点亮P1.5口上的灯
case 7: P1=0xbf;break;//当i的值为7时,点亮P1.6口上的灯
}
}
void Ledlight(uchar i)
{
switch(i)
{
case 1: P1=0xfe;break;//当i的值为1时,点亮P1.0口上的灯
case 2: P1=0xfd;break;//当i的值为2时,点亮P1.1口上的灯
case 3: P1=0xfb;break;//当i的值为3时,点亮P1.2口上的灯
while(1)
{
for(i=1;i<11;i++)
{c=i*i;
if(i==1)
printf("%d\n",c);
else if(i==2)
printf("%d\n",c);
else if(i==3)
printf("%d\n",c);
else if(i==5)
printf("%d\n",c);
else if(i==6)
P1=0xfe;//当P3.4口上的开关按上了,那么就由用户使接在P1.0口上的灯亮。
elseBaidu Nhomakorabeaif((P3&0x20)==0)//和上面的一样,判断P3.5口上的开关是否按上了。
P1=0Xfd;//当P3.5口上的开关按上了,点亮接在P1.1口上的灯。
else if((P3&0x40)==0)//判断P3.6口的开关是否按上了。
case 5: c=i*i;printf("%d\n",c);break;
case 6: c=i*i;printf("%d\n",c);break;
case 7: c=i*i;printf("%d\n",c);break;
case 8: c=i*i;printf("%d\n",c);break;
case 9: c=i*i;printf("%d\n",c);break;
第二种(if嵌套):
#include <reg51.H>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
void serial_init(void);
void main ()
{
uint i,c;
serial_init();
case 8: P1=0x7f;break;//当i的值为8时,点亮P1.7口上的灯
default:break;
}
}
void main ()
{
uchar i;
while(1)
{
for(i=8;i>0;i--)
{
Ledlight(i);
DelayMs(100);
}
}
}
3.仿真结果如下:
4.仿真结果分析:由程序可知,利用开关分支语句实现小灯循环点亮,P1口一共接8个灯所以设置8个分支,当参数i=8时,选择第八个分支“case 8”即点亮P1.7口上的灯,然后判断i是否仍然大于0,是的话i自减1,再选择相应的分支点亮相对应的小灯实现循环点亮。
}
3.仿真结果如下:
4.仿真结果分析:
从仿真图以及程序可以看出,当P3.4口上的开关按下时,不管其它三个开关有没有按下,只有受P3.4口开关控制的那个灯(p1.0口上的灯)才亮,以此类推,当只有P3.7口上的开关按下时,P1.3口上的灯才亮,而其它灯不亮,因为控制其它灯的按键没有按下,接在其它灯的IO口处于高电平状态。
P1=0xfb;//当P3.6口上的开关按上了,点亮接在P1.2口上的灯。
else if((P3&0x80)==0)//判断P3.7口的开关是否按上了。
P1=0xf7;//当P3.7口上的开关按上了,点亮接在P1.3口上的灯。
else P1=0xff;//当没有按键按下时,P1口上的全部灯都不亮。
}
{
TMOD = 0x20; //T1工作方式1,用于设定波特率
TH1 = 0xF3; //波特率4800Bps,12MHz晶振
TL1 = 0xF3;
PCON |= 0x80; //SMOD = 1,波特率加倍
SCON = 0x50; //允许发送接收
ES = 0; //禁止串口中断
TI = 1;
TR1 = 1;
{
uint i,c;
serial_init();
while(1)
{
for(i=1;i<11;i++)
{
c=i*i;
printf("%d\n",c);
}
}
}
void serial_init(void) //串口初始化函数
{
TMOD = 0x20; //T1工作方式1,用于设定波特率
TH1 = 0xF3; //波特率4800Bps,12MHz晶振
TL1 = 0xF3;
PCON |= 0x80; //SMOD = 1,波特率加倍
SCON = 0x50; //允许发送接收
ES = 0; //禁止串口中断
TI = 1;
TR1 = 1;
}
相关文档
最新文档