4.1.7 程序跳转语句
程序跳转语句主要用于控制程序执行流程,跳转或改变程序的执行顺序。在C51语言中,主要包括3种跳转语句:goto语句、break语句和continue语句。下面分别进行介绍。
1.goto语句
goto语句是一个无条件的转向语句,其一般形式如下。
goto语句标号;
其中,语句标号为一个带冒号的有效标识符。在C51中执行到这个语句时,程序指针就会无条件地跳转到goto后的标号所指向的程序段。goto语句的程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
int i=0,total=0;
loop://语句标号
total=total+i;//执行运算
i++;
if(i<101)//如果i<101则转向loop处
goto loop;//转向loop处继续执行
printf(“1+2+……+100=%d\n”,total);//输出求和结果
}
该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。
1+2+……+100=5050
本程序用来计算1加到100的总和。程序中首先定义了一个loop语句标号,然后执行累计求和运算,接着判断变量,当i的值小于101的时候,程序执行goto语句无条件跳转到loop标号处继续执行,实现求和运算,最后输出结果。
在C51程序中使用goto语句进行程序设计时,需要注意如下几点。
❑goto语句后面语句标号的定义应遵循C51标识符定义原则。
❑语句标号不能使用C51的关键字,也不能和其他变量和函数同名。
❑标号必须和goto语句处于同一函数中,可以不在同一个循环中。
❑goto语句常与if语句连用,当满足某一条件时,程序自动跳转到标号处执行。
❑goto语句可以从内层循环跳到外层循环,而不能从外层循环跳到内层循环中。
❑在结构化程序设计时,对goto语句应当慎用,过多地使用会使程序结构不清晰。因为goto语句破坏了程序的模块化结构,使程序可读性变差,增加维护的难度。但在多层嵌套退出时,用goto语句较合理。
2.break语句
break语句通常是用来跳出循环程序块,一般用在循环语句和开关语句中。break语句的一般形式如下所示。
break;
在C51程序中,break语句通常用于以下两种情况。
❑在for、while、do-while循环语句中,break语句和if语句一起使用,当满足一定条件时便跳出循环体。
❑在switch开关语句中使用break语句,可使程序跳出switch语句,执行switch语句后续的程序代码。如果没有break语句,则switch语句将成为一个死循环而无法退出。
注意对于多重循环嵌套时,使用break语句只能跳出当前循环,而不会跳出所有外层循环。
break语句的程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
int i,total;//声明变量
i=0;//变量初始化
total=0;
while(1)//while循环
{
total=total+i;//累加求和
i++;
if(i>100)//判断i是否大于100
break;//跳出while循环
}
printf(“1+2+……+100=%d\n”,total);//输出求和结果
}
该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。
1+2+……+100=5050
本程序用来计算1加到100的总和。程序中首先声明并初始化变量i和total,然后在while循环语句中执行累计求和运算,其中判断i是否大于100,如果为真则执行break语句跳出while循环。最后输出结果。
在C51程序设计中使用break语句时,要注意以下几点。
❑break语句只适用于单分支的if条件语句,对于多分支的if条件语句不起作用。
❑如果遇到多层循环嵌套的情况,一个break语句只能向外跳出一层循环。如果需要跳出多层循环,需要多次在每层循环中使用break语句。
3.continue语句
continue语句用来执行跳过循环体中剩余的语句,而强行执行下一次循环的操作。continue语句使用的一般形式如下。
continue;
在C51中,continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,可以提前结束本次循环。continue语句的程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
char ch[]={‘a','B','c','D','e','F’};//初始化字符数组
int i=-1;
while(i<5)//进入循环
{
i++;
if(ch[i]>=‘a'&&ch[i]<='z’)//是否为小写字符
continue;//如果是,则退出本次循环,进入下次循环
printf(“ch[%d]=%c\n”,i,ch[i]);//输出字符数组中的大写字符
}
}
该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。
ch[1]=B
ch[3]=D
ch[5]=F
在本例中,首先声明并初始化了一个字符数组ch,然后在while语句中逐个判断每个字母是否是小写,如果是小写字母则使用continue语句退出本次循环,继续执行下次循环,否则将打印输出所有的大写字母。