循环结构;

什么是循环:代码的重复执行,就叫做循环。

循环的分类:

        无限循环:程序设计中尽量避免无限循环。(程序中的无限循环必须可控)

        有限循环:循环限定循环次数或者循环的条件。

循环的构成:

        循环体

        循环条件

当型循环的实现:

while

           语法:while(循环条件)

                        {

                                循环语句;

                        }

说明:

1. 循环条件的返回值必须是布尔类型,在C语言中,布尔类型为真使用 非0 来表示,布尔类型为假使 用 0 表示。

2. {} 包起来的内容整体称之为为 循环体 。

3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。

执行过程:

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

案例:

/*
需求:while循环案例:如何编程来计算1 + 2 + 3 + … + 100?
*/
#include <stdio.h>
int main()
{
// 定义一个变量,保存累加和
int sum = 0;
// 定义一个循环变量
int i = 1;
while(i <= 100) // 循环条件,这里可以有关系表达式、逻辑表达式,表达式运算结果是boolean(1,0)
{
// 累加计算
// sum = sum + i;
sum += i;
// 给循环变量赋值,用来影响循环条件
i++;
}
printf("1~100的累加和是:%d\n",sum);
return 0;
}

死循环:while(1) // 我们会在死循环进行必要的限制

for..

for(①表达式1;②表达式2;③表达式3)

        {

        ④循环体语句;

        }

说明:

1. () 中可以只保留两个分号,举例: (;;)

2. ① 是循环变量,我们需要赋初值,循环变量可以是列表,多个循环变量使用逗号分隔,举例: in t i=0,j=0

3. ② 是循环条件,用来限制循环的次数,循环条件支持关系表达式,如果加入逻辑表达式,会变成 复合表达式,举例: i < 10 && j < 10

4. ③ 改变循环条件,支持列表,这里可以使用赋值表达式,举例: i++,j++

5. 执行顺序:①②④③ --> ②④③ --> ②④③ ... --> ②,这里①只执行1次。

执行过程:

特点:

先判断,后执行,循环体语句有可能一次都不执行。

案例:

/**
* 需求:for循环案例-求1~100之间的偶数和
*/
#include <stdio.h>
// while实现
void while_test()
{
int sum = 0;
int i = 1;
while(i <= 100)
{
if(i % 2 == 0)
{
sum += i;
}
i++;
}
printf("while实现:1~100之间的偶数和:%d\n",sum);
}
// for实现
void for_test()
{
int sum = 0;
for(int i = 1;i <= 100;i++) // 死循环表示:while(1)、for(;;)
{
if(i % 2 == 0)
{
sum += i;
}
}
printf("for实现:1~100之间的偶数和:%d\n",sum);
}
int main()
{
while_test();
for_test();
return 0;
}

总结:

for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限循环的几率

应用场合:for语句往往应用于循环次数事先可以确定的场景。

死循环:for(表达式1;;表达式3);

                for(;;);

循环实现的三要素

循环变量初始化

循环条件

循环变量更新

案例:

/*
需求:for案例-求Fibonacci数列前20个数。
*/
#include <stdio.h>
int main()
{
int f1 = 1;// 前一个数,默认是1,因为第1个是1
int f2 = 1;// 后一个数,默认是1,因为第2个是1
int i = 1;// 循环变量
for(;i <= 20;i++)
{
printf("%12d%12d",f1,f2);
// 一行显示两个数,每两个换一行
if(i % 2 == 0)
{
printf("\n");
}
f1 = f1 + f2; // f1 = 2 = 1+1
f2 = f2 + f1; // f2 = 3 = 1+2
}
return 0;
}

直到型循环的实现

do..while

语法:

do

{

循环体;

}

while(循环条件);

说明:

1. 循环条件的返回值必须是布尔类型,在C语言中,布尔类型为真使用 非0 来表示,布尔类型为假使 用 0 表示。

2. {} 包起来的内容整体称之为为 循环体 。

3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。

执行过程:

特点:

先执行,后判断,循环体语句至少执行一次。

案例:

/*
需求:do..while案例:求1~100之间奇数的累加和
*/
#include <stdio.h>
int main()
{
// 创建一个变量,用来存储累加和
int sum = 0;
// 创建循环变量,默认值1
int i = 1;
do
{
// 判断i是否是奇数
if(i % 2 != 0)
{
sum += i;
}
i++;// 改变循环变量的值
}while(i <= 100);
printf("1~100之间奇数的累加和是:%d\n",sum);
return 0;
}

goto

语法:goto 标签(label);

标签:标明目标代码的位置,是一个不加""的字符串。

案例:

// 需求:求1~100之内的累加和
int main()
{
int sum = 0;
int i = 1;
loop: // 自己定义的 标签
sum += i;
i++;
if(i <= 100)
{
goto loop;
}
printf("1~100之内的累加和是:%d\n",sum);
return 0;
}

注意:

goto只能在同一个函数中跳转,goto会破坏掉代码的结构,同时会降低代码可读性。在企业开发中, 不建议使用

循环的嵌套

3种循环(while、do……while、for)可以互相嵌套。在前一个循环结构的内部又存在一个完整的循环 结构,如:

案例:

/**
* 需求:嵌套for循环案例-求100~200之间的所有素数
*/
#include <stdio.h>
int main()
{
int num = 100;// 存放100~200之间的自然数
int i = 2;// 循环变量,默认从2开始,因为自然数除以1没有意义 102,100~102, 102%100,102%101
int isPrime = 1;// 用来记录1~自身之间能整除的次数 6, 2~5, 6%2,6%3,6%4,6%5
// 第1层for循环:生成100~200之间的自然数
for(;num <= 200; num++)
{
// 默认是素数
isPrime = 1;
// 第2层循环,生成 2~自身-1的自然数,用于和自身校验,是否能够整除,如果有1个能被整除,就说明不
是素数
for(i = 2; i < num -1; i++)
{
if(num % i == 0)
{
isPrime = 0;// 不是素数
}
}
if(isPrime) // 条件判断:isPrime == 1 缩写 isPrime
{
printf("%d ",num);
}
}
printf("\n");
return 0;
}

循环结构的典型应用场景

求累和:举例 1+2+3+4+..+100的和

求累乘:举例 1*2*3*4*..*100的积

求均值:举例: (1+2+3+4+..+100) / 100的值

求极值:举例: 12,34,55,2,66中的最大值或者最小值

元素遍历:常用于数组元素的遍历,比如:从 [1,2,3,4,5] 获取每一个元素。数组我们后续课程讲 解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值