什么是循环结构
代码在满足某种条件的前提下,重复执行,就叫做循环结构。
循环的分类
无限循环:其实就是死循环,程序设计中尽量避免无限循环,如果非要使用,那么这个循环一
定要在可控范围内。
有限循环:循环限定循环次数或者终止循环的条件。
循环的构成
循环条件
循环体
当型循环的实现
特点:先判断,后执行,如果条件不满足,一次都不执行
典型代表:
while
循环和
for
循环
while
语法

说明:
1.
循环条件的返回值必须是逻辑值(布尔类型,条件表达式只能是关系表达式或者逻辑表达式,
可以是具体的值(
0
,非
0
,
true
,
false
))。在
C
语言中,使用
0
和非
0
来表示关系表达式或者逻
辑表达式的值,如果引入
<stdbool.h>
,也可以使用
true
或者
false
来表示。
2.
{}
包起来的内容整体称之为 循环体
3.
我们要在循环体中控制循环条件的变化,否则产生死循环。
执行过程:

特点:
先判断,后执行,循环题语句有可能一次都不执行。
案例:
需求:求
1~100
的累加和
分析:
创建一个变量
sum=0
,用来接收累加和
创建一个变量
i
,用来表示计算数,我们给
i
给个初始值
i = 1
,每次循环的时候,让
i++
在循环中,使用
sum+=i
,完成累加和计算
同时我们要限定
i
的范围
i <=100
第一次:
sum += i = 0 + 1 = 1 0+1
第二次:
sum += i = 1 + 2 = 3 1+2
第三次:
sum += i = 3 + 3 = 6 1+2+3
...



案例:
需求:求
1~100
以内的偶数和,也就是
2+4+6+...+100
的累加和
分析:
创建两个变量,一个变量
sum = 0
用来存储偶数和,一个变量
i = 2
用作循环变量
创建一个循环,设置循环条件:
i <= 100
在循环体中,需要使用一个
if
语句判断
i
是否为偶数
if(i % 2 == 0)
,如果满足,就求偶数
和:
sum += i
在循环体的最后一行,写代码改变循环变量的值:
i++
循环结束,打印输出
sum


for..
原则上,
for
循环能实现的,
while
循环一定可以实现,
for
循环可以看做是
while
循环的一种特殊写
法。
语法:
说明:
> Description: while
案例:求
1
~
100
以内的偶数和
> Created Time: 2025
年
02
月
12
日 星期三
10
时
02
分
52
秒
************************************************************************/
#include <stdio.h>
int
main
(
int
argc
,
char *
argv
[])
{
//
创建两个变量,一个变量
sum
用来存偶数和,一个变量
i
用来存循环变量
int
sum
=
0
,
i
=
2
;
//
循环求偶数和
while
(
i
<=
100
)
{
//
过滤掉奇数
if
(
i
%
2
==
0
)
{
sum
+=
i
;
}
i
++
;
//
改变循环变量的值
}
printf
(
"1~100
以内的偶数和是
%d\n"
,
sum
);
return
0
;
}
while
(
1
)
//
我们一定要在死循环中进行必要的限制
1
for
(
①
表达式
1
;
②
表达式
2
;
③
表达式
3
)
{
④
循环体语句
;
//
如果是单语句,可以省略
{};
如果是复合语句,必须保留
{}
}
说明:
①
()
中可以只保留两个
;;
,举例:
for(;;)
,此时就是
for
循环的死循环
②
表达式
1
是
循环变量
,我们需要赋初值,循环变量可以是单个,也可以是列表,多个循环
变量使用逗号分隔
③
表达式
2
是
循环条件
,用来限制循环的次数,循环条件支持关系表达式、逻辑表达式,举
例:
i<10 && j<=i
④
表达式
3
是
改变循环变量(条件)
,支持列表,这里可以使用赋值表达式,举例:
i++,j-
-
⑤
执行顺序:
①②④③ → ②④③ → ②④③ →...→②
执行过程:

特点:先判断,后执行,循环体语句有可能一次都不执行
案例:





循环实现的三要素:
循环变量的初始化,举例:
int i = 2;
循环条件,举例:
i <= 100
循环变量的更新,举例:
i++
案例:
需求:求斐波拉契数列前
20
个
分析:
斐波拉契数列指的是复合一定规则的数列,举例:
1,1,2,3,5,8...
斐波拉契数列的特点是,第
3
个就等于前
2
个数之和,最开始的第
1,2
个数是固定的,都是
1
代码:
#include <stdio.h>
int
main
(
int
argc
,
char *
argv
[])
{
int
f1
=
1
;
//
前一个数,默认是
1,
因为第一个就是
1
int
f2
=
1
;
//
后一个数,默认是
1,
因为第二个就是
1
int
i
=
1
;
//
循环变量,控制循环次数,我们需求是输出
20
个,只需要
10
次
for
(;
i
<=
10
;
i
++
)
{
printf
(
"%12d%12d\n"
,
f1
,
f2
);
//
第
1
次:
1 1 2 3 5 8
f1
+=
f2
;
// f1 = f1 + f2
f2
+=
f1
;
// f2 = f2 + f1
}
return
0
;
}
直到型循环的实现
特点:先执行,后判断,不管条件是否满足,至少执行一次。
代表:
do..while
,
goto(
已淘汰,不推荐使用
)
do..while
语法:
do
{
循环体
;
}
while
(
循环条件
);
说明:
①
循环条件的返回值必须是逻辑值(
0
或者非
0
)
②
{}
包起来的内容整体称之为
循环体
③
我们要在
循环体
中控制
循环条件
的变化,否则会产生死循环。
执行过程:

特点:先执行,后判断,不管条件是否满足,循环体语句至少执行一次。
案例:
需求:求
1~100
以内的偶数和
分析:
创建一个变量,用来存储
sum
创建一个循环变量
i = 2;
创建一个
do..while
循环,在循环体中,校验偶数
i % 2 == 0
,如果满足,就实现偶数和计算
sum += i
计算完之后,再循环体的末行,对循环条件进行更新,
i++
限制循环条件:
i <= 100
循环结束,打印输出
sum
的值
代码:
/**************************
#include <stdio.h>
int
main
(
int
argc
,
char *
argv
[])
{
//
创建一个变量,用来存储偶数和
int
sum
=
0
;
//
创建一个循环变量
int
i
=
2
;
do
{
if
(
i
%
2
==
0
)
{
sum
+=
i
;
}
i
++
;
//
更新循环变量
}
while
(
i
<=
100
);
printf
(
"1~100
以内的偶数和是
%d\n"
,
sum
);
return
0
;
}
goto
语法:
标签:标明目标的代码的位置,是一个不加
""
的字符串。
案例:
需求:求
1~100
以内的偶数和
代码:
int
sum
=
0
;
//
创建一个循环变量
int
i
=
2
;
do
{
if
(
i
%
2
==
0
)
{
sum
+=
i
;
}
i
++
;
//
更新循环变量
}
while
(
i
<=
100
);
printf
(
"1~100
以内的偶数和是
%d\n"
,
sum
);
retur
goto
标签
(
label
)
1
/*************************************************************************
> File Name: demo02.c
> Author: FPF
> Description: goto
案例
> Created Time: 2025
年
02
月
13
日 星期四
09
时
48
分
53
秒
************************************************************************/
#include <stdio.h>
int
main
(
int
argc
,
char *
argv
[]
当前第
12
页,共
26
页
注意事项
1.
可读性
:
goto
语句会破坏代码的结构和可读性,使得代码难以理解和维护。因此,应尽量
避免使用。
2.
替代方案
:大多数情况下,可以使用循环、条件语句、函数等结构来替代
goto
语句,使代
码更加清晰和易于管理。
3.
嵌套限制
:虽然
goto
语句可以跨函数跳转(即跳转到另一个函数中的标签),但这种用法
是不合法的,并且会导致编译错误。
goto
语句只能在同一函数内部跳转。
4.
错误处理
:在某些情况下,
goto
语句可以用于错误处理,例如从嵌套的多层循环中跳出。
但即使在这种情况下,也应谨慎使用,并考虑是否有更好的替代方案。
总结
虽然
goto
语句在
C
语言中是合法的,并且有时可能看起来很方便,但过度使用或不当使用会导
致代码质量下降。因此,建议尽量避免使用
goto
语句,而是采用更结构化和可维护的编程方
法。
//
创建一个变量存放偶数和
int
sum
=
0
;
//
创建一个循环变量
int
i
=
2
;
//
定义一个标签(标签名自定义,这是一个不带引号的字符串)我们一般给需要重复执行的代码添加标签
loop
:
//
这个标签需要通过
goto
触发
if
(
i
%
2
==
0
)
{
sum
+=
i
;
}
i
++
;
//
循环条件的校验
if
(
i
<=
100
)
{
//
触发循环
goto
loop
;
}
printf
(
"1~100
以内的偶数和是
%d\n"
,
sum
);
return
0
;
}