辅助循环的三大关键字
管理循环语句的关键字除了while和for之外,还有三个重要的关键字可以辅助管理循环语句:break、return和continue。在循环体内如果程序运行到这三个关键字的时候都会发生跳转:
a)break让程序跳转到循环体之外;
b)return让程序跳转到整个函数之外;
c)continue是让程序跳转到循环头部。
break关键字
在C语言中break关键字可以两种语句中使用,一个是在switch分支语句中,另一个就是在循环语句中。在两种语句中break都是起跳转的作用, 在switch语句中让程序跳转出switch分支语句之外,在循环语句中让程序跳转出到循环体之外。
改造前一节的例程,在输入0之后立即结束循环,而不是把结束符0也参与总数与平局值的计算。
例4-17测试break关键字的作用 #include <stdio.h> int main() { int i = 0,n=-1; //初始化区 float sum=0; //初始化区 printf(“请连续输入多个数字以0作为结束:”); for(;;) //条件区为空 { scanf(“%d”,&n); if(n==0) break; //中断循环 sum+=n; ++i; //递增区 } printf(“你总共输入了%d个数字,平均值是:%0.2f\n”,i,sum/i); return 0; } |
将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:
a)用笔算或口算方法算出输入多个数据之后的打印结果,观察与实际打印出来的结果是否完全一致;
b)最好能在调试模式下单步执行,观察程序进入循环体之后反复执行以及条件成立时离开循环的过程;
结论:
break语句可以中断循环,条件区也可以结束循环,两者常常可以互相替换。只是条件区内是让循环继续执行的条件,而break关键字之前的条件是中断循环的条件,因此两者相互替换时条件是刚好相反的。
return关键字
在上一节的例程中,如果程序在循环体内遇到break关键字会立即跳转到循环体之外,循环体之后的所有语句包括打印等都还要继续执行。如果程序遇到了return关键字也会立即跳转,但是跳转的力度更大一些会跳转到整个函数之外,循环体之后的所有语句都不会执行。
例4-18测试return关键字的作用 #include <stdio.h> int main() { int i = 0,n=-1; float sum=0; printf(“请连续输入多个数字以0作为结束:”); while(1) { scanf(“%d”,&n); if(n==0) return 1; sum+=n; ++i; } printf(“你总共输入了%d个数字,平均值是:%0.2f\n”,i,sum/i); return 0; } |
将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:
a)观想输入多个数据之后程序的运行流程,猜测循环体之后的结果打印是否会被执行;
b)最好能在调试模式下单步执行,观察程序进入循环体之后反复执行以及当条件成立时离开循环体的过程;
结论:
在有些函数中return之后不带任何数字或表达式,在有些函数中必须要带上一个数字或这表达式返回,return关键字是否带内容返回是由函数类型决定的。在第六章的《函数与工程管理》中,还会进一步详细讲解return语句在函数中的作用及其使用方法。
continue关键字
continue关键字必须在循环体内部使用,在循环体之外使用编译就会报错。如果程序在循环体内运行时,如果遇到了continue关键字也会立即跳转。但是跳转目标不是循环体之外,而是跳转到循环体的头部继续执行循环。
例4-18测试continue关键字的作用 #include <stdio.h> int main() {//求在5到30之间有多少个7的整数倍的数字。 int i = 5,sum=0; for(;i<30;++i) { if(i%7) continue; ++sum; printf(“i=%d\n”,i); } printf(“总共%d个\n”,sum); return 0; } |
将以上代码输入到C语言编译器中进行编译、运行并查看打印结果:
a)输入数据之后观想程序的运行流程,猜测循环结束之后有多少个数字将被打印出来;
b)最好能在调试模式下单步执行,观察程序在循环体内反复执行以及条件成立时continue之后的运行流程;