从单片机基础到程序框架(全集 2019pdf版).pdf - 第215页

第五十一节: for 和 while 的循环嵌套。 【51.1 循环的嵌套。 】 大循 环的内 部又 包含 了小循 环, 称为 循环嵌 套。 生活 中,循 环嵌 套的 现象很 常见 ,一 年 12 个 月, 假设 每个月都是 30 天( 仅仅假设而 已) ,1 月份 3 0 天,2 月份 30 天......11 月份 3 0 天,12 月份 3 0,这里的年 就是大循环 ,年内部的月 就是小循环。 一年 12 个月 ,大循环就是 12…

100%1 / 836
十进制:4
十六进制:4
二进制:100
4 个数
十进制:3
十六进制:3
二进制:11
分析:
变量 a 6。
变量 b 3。
变量 c 4。
变量 d 3。
【50.6 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。
第五十一节: for while 的循环嵌套。
【51.1 循环的嵌套。
大循环的内部又包含了小循环,称为循环嵌套。生活中,循环嵌套的现象很常见,一 12 月,假设
每个月都是 30 天(仅仅假设而已),1 月份 30 天,2 月份 30 天......11 月份 30 天,12 月份 30,这里的年
就是大循环,年内部的月就是小循环。一年 12 个月,大循环就是 12 次。一个月 30 天,小循环就是 30
for 语句来表达,大意如下
for(m=1;m<=12;m++) //大循环。一 12 个月。这里 m 看作月,代表一年 12 个月的大循环。
{
for(d=1;d<=30;d++) //内嵌小循环。一月 30 天。这里的 d 看作天,代表一个 30 天的小循环。
{
}
}
【51.2 循环嵌套的执行顺序。
例子如下:
for(i=0;i<2;i++) //大循
{
语句 1;
for(k=0;k<3;k++) //内嵌的小循
{
语句 2;
}
语句 3;
}
上述例子中 i for 称为大循环 k for 称为小循环单片机从大循环入口进来由上往下执
行,执行第 1 次大循环,先执行 1 “语句 1”,接着进入小循环,小循环要连续循环执行 3 “语句 2”
跳出小循环,之后执行 1 “语句 3”然后再返回到大循环入口判断 i 条件是否满足此时条件满足,继续
执行第 2 次大循环,1 “语句 1”,3 “语句 2”1 次“语句 3”,第 2 次循环结束后又返回到大循环入口
判断 i 条件,此时 i 已经等于 2 不再小于 2 因此条件不满足结束整个循环嵌套上述执行的语句顺
如下:
语句 1; //第 1 次大循环开始
语句 2;
语句 2;
语句 2;
语句 3;
语句 1; //第 2 次大循环开始
语句 2;
语句 2;
语句 2;
语句 3;
根据此顺序,再看一个具体的程序例子
a=0;
b=0;
for(i=0;i<2;i++) //大循
{
a=a+1; //被执行了 2
for(k=0;k<3;k++) //内嵌的小循
{
b= b+1; //被执行了 6
}
}
上述例子中执行完程序后,a 的值变成了 2,b 的值变成了 6。重点分析 b 的变化,“b=b+1”在内嵌循
环体里被执行了 6 ,6 从何而来?就是 i 乘以 k 6。这个乘法次数是循环嵌套一个很重要的特性。
上述程序如果用 while 语句来实现,等效如下:
a=0;
b=0;
i=0; //控制大循环的变量初始化
while(i<2) //大循环
{
a=a+1; //被执行了 2
k=0; //控制小循环的变量初始化
while(k<3) //内嵌的小循环
{
b= b+1; //被执行了 6
k=k+1;
}
i=i+1;
}
【51.3 循环嵌套的常见用途---二维数组的应用。
二维数组 a[2][3],它有 6 个变量,在没有 for 语句之前,如果要依次把每个元素单独赋值清零真不
容易,要写 6 次赋值语句如下:
a[0][0]=0;
a[0][1]=0;
a[0][2]=0;
a[1][0]=0;
a[1][1]=0;
a[1][2]=0;
自从懂了 for 嵌套语句之后,可以让同样功能的代码简洁许多。上述代码等效于如下:
for(i=0;i<2;i++) //大循
{
for(k=0;k<3;k++) //内嵌的小循