C语言Day07

循环结构
什么是循环

循环:代码重复执行

分类
  • 无限循环:程序中应该避免无限循环。程序中的无限循环必须可控。
  • 有限循环:循环限定循环次数或者循环条件。
循环的构成
  1. 循环体
  2. 循环条件
当型循环的实现
while

一般形式:while(表达式)循环体语句

语法:

while(循环条件)
{
    循环语句;
}

说明:

  1. 循环条件的返回值必须是布尔类型,在C语言中,布尔类型为真使用非0来表示,布尔类型为假使用0表示
  2. { }包起来的内容整体称之为循环体
  3. 我们要在循环体中控制循环条件的变化,否则会产生死循环

执行过程:

特点:

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

举例:

#include <stdio.h>
// 2+4+6+8+...+100
int main()
{
  int sum = 0;
  int i = 2;

  while (i <= 100)
  {
    if (i % 2 == 0)
    {
      sum += i;
    }
    // 写if的外面,因为这样i的值是从1-100
    i++;
  }

  printf("从1到100的偶数和为:%d\n", sum);
}
for

语法:

for(①表达式1;②表达式2;③表达式3)
{
    4循环体语句;
}

说明:

  1. ()中可以保留两个分号,举例:(;;)
  2. 表达式1 是循环变量,我们需要赋初值,循环变量可以是列表,多个循环变量使用逗号分隔,举例: int i = 0,j = 0
  3. 表达式2 是循环条件,用来限制循环的次数,循环条件支持关系表达式,如果加入逻辑表达式,会变成复合表达式。 举例: i  <  10  &&  j  <  10
  4. 表达式3 改变循环条件,支持列表,这里可以使用赋值表达式,举例:i++,j++
  5. 执行顺序:
死循环
while(1)

循环的嵌套

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

循环结构的典型应用场景
  • 求累加和:举例: 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 ],获取每一个元素,数组后续说明!
  • ...
基础算法模型

1. 累加和

  • 定义一个变量,并赋初值为0;
  • 用该变量累加( + = )每一个数据项( i )
  • 当访问完每一个数据项,此时该变量的取值就是累加和的结果。

2. 累乘

  • 定义一个变量,并赋初值为1;
  • 用该变量累乘( *= )每一个数据项;
  • 当访问完每一个数据项,此时该变量的取值就是累乘的结果。

3. 极值【知识点:数组

  • 定义一个变量,并赋初值为第一个数据项
  • 从第二个数据项开始,一次性与该变量进行比较,如果大于/小于该变量,则将当前数据项的数据赋值给该变量。
  • 当访问完每一个数据项,此时该变量的取值就是求极值的结果。
break和continue
  • break

功能:

  1.  用在switch中,用来跳出switch的case语句;如果case没有break,可能会产生case穿透。
  2. 用在循环中(while,do while,for),提前结束循环,也就是跳出整个循环。

说明:

  1. break不能用于循环语句和switch语句之外的任何其它语句之中。
  2. break只能终止并跳出最近一层的结构。

图示:

案例:

/**
 *   需求:break案例-马杰参与一阶段分段考试,如果考试及格,就跳出循环,否则就一直考
*/
#include <stdio.h>

int main()
{
    printf("一阶段分段考试");

    //声明一个变量,用来存放考试成绩
    int score = 0;

    do
    {
        //int score = 78;  //score的作用域只能作用于{}以内
        printf("马杰开始一阶段开始考试...\n");

        scanf("%d",&score);

        //开始合格,结束考试
        if(score >= 60)
        {
            break;
        }
        

    }while(1);
    
    printf("考试通过!\n");
}

案例:

/**
  *  break,输出1~100之间的偶数,只输出前10个
 */
#include <stdio.h>

int main()
{
    for(int i = 1; i <= 100; i++)
    {
        if(i % 2 == 0)
        {
            printf("%d\t",i);
        }
    }

    return 0;
}

  • continue

功能:continue语句不会结束整个循环,而是跳过本次循环尚未执行的语句,进入下一次循环。

说明:

1.仅用于循环语句中。

2.在嵌套循环的情况下,continue语句只对包含它的最内层的循环体语句起作用。

图示:

举例

#include <stdio.h>

// 使用continue
void fun02()
{
  int sum = 0;
  for (int i = 1; i <= 100; i++)
  {
    // 判断奇数
    if (i % 2 == 1)
    {
      continue; // 跳出所有奇数
    }
    sum += i;
  }
  printf("1~100之内所有偶数和是:%d\n", sum);
}

int main()
{
  fun02();
}
  • 跳出多层循环

跳出多层循环是不能使用break和continue的,因为他们只能跳出单层循环,跳多层循环,只能自己定义标志位进行跳出。

案例:

//定义一个标志位
int isFlag = 1;//默认循环成立
char fu;

while(isFlag)
{
    printf("第一层循环执行的内容\n");

    while(isFlag)
    {
        printf("第二层循环执行的内容\n");

        printf("是否跳出循环? (y/n)");
        scanf("%c %c",fu);
        if(fu == 'Y' || fu == 'y')
        {
            isFlag == 0;
        }
    }
}

注意:如果是多层循环,进的时候是从外到内,跳出的时候是从内到外。

补充
什么是素数

素数也被称作质数,只能被1和自身整除的数就叫做素数。

直到型循环的实现
do while
do
{
    循环体;

} while(循环条件);

说明:

  1. 循环条件的返回值必须是布尔类型,在C语言中,布尔类型为真使用非0来表示,布尔类型为假使用0表示
  2. { }包起来的内容整体称之为循环体
  3. 我们要在循环体中控制循环条件的变化,否则会产生死循环

执行过程:

特点:

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

goto
语法:
goto 标签(label)

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

案例:

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

goto只能在同一个函数中跳转,goto会破坏代码结构,同时会降低代码可读性。

总结
  • for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限循环的几率。
  • 应用场合:for语句往往应用于循环次数事先可以确定的场景。

死循环

for(表达式1;;表达式3);


for(;;)

循环实现的三要素

  • 循环变量初始化
  • 循环条件
  • 循环变量更新

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值