单片机c语言教程:C51循环语句

单片机c语言教程第十三课 C51循环语句

循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作。如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 1000 次空语句 才能达到延时的目的(当然能使用定时器来做,这里就不讨论),如果是写 1000 条空语 句那是多么麻烦的事情,再者就是要占用很多的存储空间。我们能知道这 1000 条空语句, 无非就是一条空语句重复执行 1000 次,因此我们就能用循环语句去写,这样不但使程序

结构清晰明了,而且使其编译的效率大大的提高。在 C 语言中构成循环控制的语句有 while,do-while,for 和 goto 语句。同样都是起到循环作用,但具体的作用和使用方法又大不一 样。我们具体来看看。

goto 语句

这个语句在很多高级语言中都会有,记得小时候用 BASIC 时就很喜欢用这个语句。它是 一个无条件的转向语句,只要执行到这个语句,程序指针就会跳转到 goto 后的标号所在的 程序段。它的语法如下:

goto 语句标号; 其中的语句标号为一个带冒号的标识符。示例如下

void main(void)

{

unsigned char a;

start: a++;

if (a==10) goto end;

goto start;

end:;

}

上面一段程序只是说明一下 goto 的使用方法,实际编写很少使用这样的手法。这段程序的意思

是在程序开始处用标识符“start:”标识,表示程序这是程序的开始,“end:”标识程序的 结束,标识符的定义应遵循前面所讲的标识符定义原则,不能用 C 的关键字也不能和其它变 量和函数名相同,不然就会出错了。程序执行 a++,a 的值加 1,当 a 等于 10 时程序会跳到 end 标识处结束程序,不然跳回到 start 标识处继续 a++,直到 a 等于 10。上面的示例说明 goto 不但能无条件的转向,而且能和 if 语句构成一个循环结构,这些在 C 程序员的程 序中都不太常见,常见的 goto 语句使用方法是用它来跳出多重循环,不过它只能从内层循环 跳到外层循环,不能从外层循环跳到内层循环。在下面说到 for 循环语句时再略为提一提。 为何大多数 C 程序员都不喜欢用 goto 语句?那是因为过多的使用它时会程序结构不清晰,

过多的跳转就使程序又回到了汇编的编程风格,使程序失去了 C 的模块化的优点。

while 语句

while 语句的意思很不难理解,在英语中它的意思是“当…的时候…”,在这里我们可 以理解为“当条件为真的时候就执行后面的语句”,它的语法如下:

while (条件表达式) 语句;

使用 while 语句时要注意当条件表达式为真时,它才执行后面的语句,执行完后再次回

到 while 执行条件判断,为真时重复执行语句,为假时退出循环体。当条件一开始就为假时, 那么 while 后面的循环体(语句或复合语句)将一次都不执行就退出循环。在调试程序时要

注意 while 的判断条件不能为假而造成的死循环,调试时适当的在 while 处加入断点,也许 会使你的调试工作更加顺利。当然有时会使用到死循环来等待中断或 IO 信号等,如在第一 篇时我们就用了 while(1)来不停的输出“Hello World!”。下面的例子是显示从 1 到 10 的累 加和,读者能修改一下 while 中的条件看看结果会如果,从而体会一下 while 的使用方法。

#include

#include

void main(void)

{

unsigned int I = 1;

unsigned int SUM = 0; //设初值

SCON = 0x50; //串行口方式 1,允许接收

TMOD = 0x20; //定时器 1 定时方式 2

TCON = 0x40; //设定时器 1 开始计数

TH1 = 0xE8; //11.0592MHz 1200 波特率

TL1 = 0xE8; TI = 1;

TR1 = 1; //启动定时器

while(I<=10)

{

SUM = I + SUM; //累加

printf ("%d SUM=%d\n",I,SUM); //显示

I++;

}

while(1); //这句是为了不让程序完后,程序指针继续向下造成程序“跑飞”

}

//最后运行结果是 SUM=55;

do while 语句

do while 语句能说是 while 语句的补充,while 是先判断条件是否成立再执行循环体,

而 do while 则是先执行循环体,再根据条件判断是否要退出循环。这样就决定了循环体无 论在任何条件下都会至少被执行一次。它的语法如下:

do 语句 while (条件表达式)

用 do while 怎么写上面那个例程呢?先想一想,再参考下面的程序。

#include

#include

void main(void)

{

unsigned int I = 1;

unsigned int SUM = 0; //设初值

SCON = 0x50; //串行口方式 1,允许接收 TMOD = 0x20; //定时器 1 定时方式 2

TCON = 0x40; //设定时器 1 开始计数

TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8;

TI = 1;

TR1 = 1; //启动定时器

do

{

SUM = I + SUM; //累加

printf ("%d SUM=%d\n",I,SUM); //显示 I++;

}

while(I<=10);

while(1);

}

在上面的程序看来 do while 语句和 while 语句似乎没有什么两样,但在实际的应用中要注

意任何 do while 的循环体一定会被执行一次。如把上面两个程序中 I 的初值设为 11,那么 前一个程序不会得到显示结果,而后一个程序则会得到 SUM=11。

for 语句

在明确循环次数的情况下,for 语句比以上说的循环语句都要方便简单。它的语法如下: for ([初值设定表达式];[循环条件表达式];[条件更新表达式]) 语句 中括号中的表达式是可选的,这样 for 语句的变化就会很多样了。for 语句的执行:先

代入初值,再判断条件是否为真,条件满足时执行循环体并更新条件,再判断条件是否为 真……直到条件为假时,退出循环。下面的例子所要实现的是和上二个例子一样的,对照着 看不难理解几个循环语句的差异。

#include

#include

void main(void)

{

unsigned int I;

unsigned int SUM = 0; //设初值

SCON = 0x50; //串行口方式 1,允许接收 TMOD = 0x20; //定时器 1 定时方式 2

TCON = 0x40; //设定时器 1 开始计数

TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8;

TI = 1;

TR1 = 1; //启动定时器

for (I=1; I<=10; I++) //这里能设初始值,所以变量定义时能不设

{

SUM = I + SUM; //累加

printf ("%d SUM=%d\n",I,SUM); //显示

}

while(1);

}

如果我们把程序中的 for 改成 for(; I<=10; I++)这样条件的初值会变成当前 I 变量的

值。如果改成 for(;;)会怎么样呢?试试看。

continue 语句

continue 语句是用于中断的语句,通常使用在循环中,它的作用是结束本次循环,跳 过循环体中没有执行的语句,跳转到下一次循环周期。语法为:

continue;

continue 同时也是一个无条件跳转语句,但功能和前面说到的 break 语句有所不一样, continue 执行后不是跳出循环,而是跳到循环的开始并执行下一次的循环。在上面的例子 中的循环体加入 if (I==5) continue;看看什么结果?

return 语句

return 语句是返回语句,不属于循环语句,是要学习的最后一个语句所以一并写下了。 返回语句是用于结束函数的执行,返回到调用函数时的位置。语法有二种:

return (表达式);

return; 语法中因带有表达式,返回时先计算表达式,再返回表达式的值。不带表达式则返回的

值不确定。

下面是一个同样是计算 1-10 的累加,所不一样是的用了函数的方式。

#include

#include

int Count(void); //声明函数

void main(void)

{

unsigned int temp;

SCON = 0x50; //串行口方式 1,允许接收 TMOD = 0x20; //定时器 1 定时方式 2

TCON = 0x40; //设定时器 1 开始计数

TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8;

TI = 1;

TR1 = 1; //启动定时器

temp = Count();

printf ("1-10 SUM=%d\n",temp); //显示

while(1);

}

int Count(void)

{

unsigned int I, SUM;

for (I=1; I<=10; I++)

{

SUM = I + SUM; //累加

}

return (SUM);

}

时间: 2024-10-13 19:00:37

单片机c语言教程:C51循环语句的相关文章

zerglurker的C语言教程008——循环语句详解

上节课我们提到了程序语句的三大执行顺序:顺序执行.条件执行和循环执行 今天我们详细讲讲循环执行,不废话,先上代码和运行效果 首先来一段示例代码,老规矩,新建一个空项目(参考006课) 新建一个空的main.cpp和public.h public.h里面定义代码如下: void LargeDistributionSequence(unsigned int nLength); main.cpp代码如下: #include <stdio.h> #include "public.h"

java语言基础与go语言基础,循环语句的区别

java语言  循环语句 for(表达式1(参数初始化):表达式2(条件判断):表达式3(更新循环变量)){ 语句循环操作: } 首先;参数的初始化,接下来条件判断,(条件成立),再执行循环操作,然后更新循环变量,又来做条件判断(条件成立),又执行循环操作:以此循环. 一,循环的三要素 1,循环变量 2,循环条件 3,循环体 二,do-while循环(先循环,再判断,至少循环一次) do{ 语句: }while(条件); 三,while循环(先判断,再循环,有可能一次也不循环) while(条件

【C语言】用循环语句输出菱形

//用循环语句输出菱形 #include <stdio.h> int main() { int i,j; for(i=0;i<=3;i++) //上4行 { for(j=0;j<=3;j++) //上4行的左边 { if(i+j<=2) printf(" "); else printf("*"); } for(j=4;j<=6;j++) //上4行的右边 { if(j-i>=4) printf(" ");

Java语言----三种循环语句的区别

------- android培训.java培训.期待与您交流! ---------- 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; } eg: 1 class Dome_For2{ 2 public static void main(String[] args) { 3 //System.out.println("Hello World!"); 4 //求1-10的偶数的和 5 int sum = 0; 6 fo

Python 3基础教程6-for循环语句

本文介绍另外一种循环语句,for循环,直接看例子. 用for实现打印1到9的数字. 方法一:写入一个列表,然后遍历列表 # 这里介绍 for循环# 打印1到9 exampleList = [1,2,3,4,5,6,7,8,9] for eachNumber in exampleList: print (eachNumber)方法二:用Python自带函数range(1,9)# 打印1到9 for i in range(1,10): print (i)注意上面是range(1,10),右边是不包括

C语言中的循环语句练习

注:练习题目均出自<明解C语言 入门篇> 一.do语句 1,求多个整数的和及平均值 #include<stdio.h> int main(void) { int sum = 0; //和 int cnt = 0; //整数个数 int retry; //判断是否继续 do{ int t; printf("请输入一个整数:"); scanf("%d",&t); sum = sum + t; cnt = cnt + 1; printf(&

Oracle中的sql脚本语言中的循环语句介绍

--sql脚本语言的循环介绍:--1.goto循环点.declare  x number;begin  x:=0;--变量初始化:  <<repeat_loop>>--设置循环点.  x:=x+1;  dbms_output.put_line(x);--循环体  if x<9 then            --进入循环的条件.    goto repeat_loop;   --用goto关键字引导进入循环.    end if;end; --2.for循环. declare

【学习ios之路:C语言】数组.循环.语句总和运用试题练习

1).求一个数组中的第二大值.数组中的值范围10 - 30 ,存储空间大小为10. 代码如下: int a[10] = {0}; int max = 0, secMax = 0; //定义第一大值,第二大值. for (int i = 0; i< 10; i++) { a[i] = arc4random() %(30 - 10 + 1) + 10;//随机值 10-30 printf("a[%d] = %d\n" ,i ,a[i]); } for (int i = 0 ; i &

go语言循环语句 for

Go语言中的循环语句只支持for关键字,而不支持while和do-while结构. sum := 0 for i := 0; i < 10; i++ { sum += i } 无限循环的写法: sum := 0 for { sum++ if sum > 100 { break } } 条件表达式中也支持多重赋值: a := []int{1, 2, 3, 4, 5, 6} for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 { a[i