发表日期:2016-10-31 14:59:40文章编辑:浏览次数: 标签:
顺序结构的特点是程序段中的语句按书写顺序执行,每个执行语句执行且只执行一次。
分支结构是根据所设定的条件,在几个执行程序段中选择一个符合条件地执行。在每种条件下,仅执行一个分支而忽略其它分支。
循环结构:顾名思义是反复执行某一程序段,直到循环的条件被破坏而退出。
除非将一个循环程序段放到
void init()
{
}
函数体内,否则,这个函数体内的语句不会被反复执行。
但放在函数
void repeat()
{
}
里的语句,将无条件地多次被执行。由于机器人程序通常是一个“接收信息--处理信息”的循环往复的执行过程,所以,机器人程序的主体部分,往往放在这个函数体内。例如下面的程序段:
void init() void init() {}
{ void repeat()
beep(1000); {
} beep(1000);
void repeat(){} }
我们仅听到机器人一秒钟的叫声。如果改成右边的程序,就会听到不断的叫声,直到关机。
机器人这一长叫声,其实是机器人不断反复执行beep(1000)的结果,只是由于循环的速度快得我们无法觉察它是一连串声音的连续而已。
改程序如下
void init(){}
void repeat()
{
beep(1000);delay(1000);
}
执行结果就会让你清楚听出它们是循环往复的结果。
录入并运行下面的程序(接上LED灯板)
#include <LNDZ.h>
LED led(23);
int i=0,j;
void init(){ }
void repeat()
{
i++;
if (i>1000) while(1); // 当 i 的值累加到1000时停下,循环终止,程序结束。
j=i % 9; // 将 i 的值除以 9 的余数做为亮灯的序号。
led.sw(j,1);delay(500);led.sw(j,0);
}
上述程序我们可以改写为:
#include <LNDZ.h>
LED led(23);
int i=0,j;
void init()
{
for (i=0;i<=1000;i++) // 变量 i 自动从0逐一增至1000为止
{
j=i % 9;
led.sw(j,1);delay(500);led.sw(j,0);
}
}
void repeat() { }
请读者将 for (i=0;i<=1000;i++) 改为for (i=1000,i>=0;i--)再运行上述程序,观察对结果的影响,理解for 循环的意义。
下面这段程序,会输出一组有趣的数字,你不忍试试:
void init()
{
int a=1,i;
for (i=1;i<20;i++)
{
winprintln(a);
a=a+2*i+1; //或写成a+=2*i+1
}
}
观察运行结果,理解这些数字是如何递推出来的。
还有一个著名的数安序列,称为菲波拉契数列,它的前几项是
1,1,2,3,5,8,13,21……
明白人一看就知道,从第三项起,它的每一项是其前面两项之和。下面的程序段,求出该数列的前25项。
int a=1,b=1;
int i,c;
winprint("1 1");
for (i=3;i<26,i++)
{
c=a+b;
winprint(c);winprint(" ");
a=b;b=c;
}