【4.0】C-循环结构及其应用
前言
循环是程序的一种基本结构,它可以解决很多有用的问题,特别是那些重复性有规律的事情。
while
循环语句
while
循环语句的语法格式如下:
1 | while(表达式){ |
while
语句的执行过程是:根据表达式判断,如果为真,则执行循环体,一直执行循环体,直到break;
才会跳出循环。
需要注意的是,
while
是在循环前,先判断
【实例】求 $n!$。
【代码示例1】
1 |
|
【示例代码2】
1 |
|
【输出1】
【输出2】
do-while
循环语句
在while
语句中,是在执行循环体之前进行循环条件判断的。因此,在有的时候,需要在循环体执行后进行判断,也就是说循环体的语句无论什么条件下都至少要执行一次。为了方便这种情况,C语言提供了do-while
语句,语法格式如下:
1 | do |
该语句的执行过程为:执行循环体结束,判断表达式,如果为真,则继续执行循环体,反之则跳出循环体。
【实例】求$1+2+3+4+······+100$,即$\sum\limits_{i = 1}^{100}i$。
【代码示例】
1 |
|
【输出】
for
循环语句
对循环状态的初始化和对循环控制变量的修改,是循环语句中不可缺少的两个组成部分。为了便于描述,阅读和检查,C语言提供了与while
语句和do-while
语句功能相似的for
语句。for
语句是控制循环语句最广泛的一种循环控制语句。其功能是某段程序代码执行若干次,特别适合已知循环次数的情况。其语法格式如下:
1 | for (表达式1; 表达式2; 表达式3) |
其中:
- 表达式1常为赋值表达式,用来确定循环结构中的控制循环次数的变量的初始值,实现循环控制变量的初始化。
- 表达式2常为关系表达式或者逻辑表达式,用来判断循环是否继续执行,通常将循环控制变量与某一值进行比较来判断是否继续执行循环体。
- 表达式3为表达式语句,用来描述控制变量的变化,常为自增或者自减表达式。
【实例】输入10个整数,求这10个整数的和。
【代码示例】
1 |
|
注意:
for
循环中的表达式1,表达式2,表达式3都是选择项,即可以缺省,但分号;
不可以缺省。省略表达式1,表示不对循环控制变量赋初值。语法格式如下:
1
for(;表达式1;表达式2)
实际上表达式1可以写在for语句结构的外面。例如:
1
n=20;for(;表达式1;表达式2)
一般使用这种格式的原因是:循环控制变量的初值不是已知常量值,而是需要通过前面的语句执行计算得到。
省略表达式2,表示不用判断循环条件是否成立,循环条件总是满足的。此时如果不做其他处理时,则为死循环,类似于
while(1)
的效果。省略表达式3,可以在循环体中进行控制。
省略三个表达式,可以使用
break;
来控制跳出循环。for
语句的循环体可以是空语句,表示当循环满足时空操作。一般用于延时处理,例如:1
for(int i =0;i<10000;i++);
表示循环空循环了10000次,占用一定的时间,起到了延时效果。
在
for
语句中,表达式1和表达式3都可以是一项或者多项。相当于多一项,各项之间用,
隔开。
for
结构不是狭义上的计数式循环,是广义上的循环结构。
【实例】猴子吃桃问题,猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天早上都这么吃,直到第10天早上只剩下1个桃子,求第一天共摘了多少桃子?
【代码示例】
1 |
|
【输出】
循环嵌套
一个循环语句中包含另一个完整的循环结构,称为循环的嵌套。嵌套在内的称为内循环,嵌套内循环的循环称为外循环。理论上循环的嵌套是无限的。
对于双重循环来说,内层循环的执行次数为:内层次数 $\times$ 外层次数。
【实例】输出十行星号(*
)半金字塔形
【代码示例】
1 |
|
【输出】
break
语句和continue
语句
在循环结构的循环体中,可以使用break
语句和continue
语句来控制循环的流程。其中break
语句的功能是从循环体中退出,提前结束循环;continue
语句的功能则是终止本次循环,跳出本次循环体中剩余未执行的语句,转向下一次循环是否执行的循环条件判断。
break
语句
break
语句的格式如下:
1 | break; |
break
语句只能出现在switch
语句或者循环语句的循环体中
continue
语句
continue
语句格式如下:
1 | continue; |
说明:
continue
语句只能出现在while
,do-while
和for
循环语句的循环体中。
goto
语句和标号
goto
语句是无条件转移语句。其功能是改变程序控制的流程,无条件地将控制转移到语句标号所在处。语法格式如下:
1 | goto 语句标号; |
其中:**语句标号用标识符来命名,当它放在某个语句行前面做该语句行的标识时,它的后面需要有冒号:
**。例如:
1 | error:语句; |
在C语言中,语句标号通常与goto
语句配合使用,表示无条件跳转到语句标号指定的语句位置。在程序中,标号必须与goto
语句处于同一个函数中,但可以不在同一个循环层中。
goto
语句不常用,主要是因为大量使用它会破坏程序的结构化,使程序的流程混乱,可读性降低。
【实例】求$1+2+3+4+······+100$,即$\sum\limits_{i = 1}^{100}i$。
【代码示例】
1 |
|
【输出】