循环结构感悟

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值