当前位置: 首页 > news >正文

C语言基础(08)【循环结构】

循环结构

什么是循环条件

代码在满足某种条件的情况下,重复执行,就叫做循环结构。

循环的分类:

  • 无限循环:其实就是死循环,程序设计中避免无限循环,如果非要使用,那么这个循环一定要在可控的范围内。
  • 有限循环:循环限定循环次数或者终止循环的条件。

循环的构成

  • 循环条件
  • 循环体

当型循环的实现

特点:先判断,后执行。如果条件不满足,一次都不执行。

典型代表:while循环和for循环

while

语法:

//写法:省略{}
while(循环条件)循环语句;//单语句
//写法2:保留{}
while(循环条件)
{循环语句;//可以是单语句,可以是符合语句
}

说明:

1.循环条件的返回值必须是逻辑值(布尔类型,表达式只能是关系表达式或者逻辑表达式,也也可以是具体的值(0,非0)).在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
  • 代码:

#include <stdio.h>
int main(int argc,char *argv[])
{// 定义两个变量,sum存储累加和,i用来存储计算数(循环变量,是一个可变变量)int sum = 0,i = 1;// 写一个循环,实现累加和计算while(i <= 100){// 累加和计算sum += i; // sum = sum + i;// 给循环变量赋值,用来影响循环条件i++;}printf("1~100的累加和是%d\n",sum);return 0;
}

案例:

  • 需求:求1~100以内的偶数和,也就是2+4+6+…+100的累加和
  • 分析: 创建两个变量,一个变量sum = 0用来存储偶数和,一个变量i = 2用作循环变量
    • 创建一个循环,设置循环条件:i <= 100
    • 在循环体中,需要使用一个if语句判断i是否为偶数 if(i % 2 == 0),如果满足,就求偶数 和:sum += i
    • 在循环体的最后一行,写代码改变循环变量的值:i++
    • 循环结束,打印输出sum
  • 代码:
#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++;// 改变循环变量的值}pri0ntf("1~100以内的偶数和是%d\n",sum);return 0;
}

死循环:

while(1)//要在死循环中进行必要的限制

for

原则上:for循环能实现的while循环一定能实现

语法:

for(表达式1;表达式2;表达式3)
{循环体语句;//如果单语句,可以省略{},如果是复合语句必须保留{}}

说明:

()中可以保留两个;;举例:for(;;)此时for循环是死循环

表0达式1循环变量,我们需要赋初始值,循环变量可以是单个,也可以是多个,0多个循环变量要用逗号隔开

表达式2循环条件用来限制循环的次数,循环条件支持表达式,举例

表达式3改变循环变量(条件)支持列表,这里可以使用赋值表达式,举例:i++,i–

⑤执行顺序:①②④③→②④③…→②
特点:先判断,后执行,循环体语句有可能一次都不执行。

案例:

#include <stdio.h>
#include <math.h>
/*** 需求:while循环案例:计算1~100以内的偶数和
0 */ 
int while_test()
{// 创建一个变量用来存储sumint sum = 0;// 创建一个循环变量,并初始化(表达式1)int i = 2;// 循环while(i <= 100) // 循环条件(表达式2){// 过滤调奇数 循环体语句if (i % 2 == 0){sum += i;  }// 改变循环条件(表达式3)i++;}printf("1~100以内的偶数和是%d\n",sum);
}
/*** 需求:for循环案例:计算1~100以内的偶数和*/ 
int for_test()
{// 创建一个变量用来存储sumint sum = 0;// 创建一个循环变量,并初始化(表达式1)int i = 2;// 循环for(;i <= 100;) // 循环条件(表达式2){// 过滤调奇数 循环体语句if (i % 2 == 0){sum += i;  }// 改变循环条件(表达式3)i++;}printf("1~100以内的偶数和是%d\n",sum);
}
/*** 需求:for循环案例:计算1~100以内的偶数和*/ 
int for_test2()
{// 创建一个变量用来存储sumint sum = 0;// 循环for(int i = 2; i <= 100; i++) // 循环条件(表达式2){// 过滤调奇数 循环体语句if (i % 2 == 0){sum += i;  }}printf("1~100以内的偶数和是%d\n",sum);
}
/*** for循环案例* 需求:用户可以通过键盘录入一个整数n,用来作为阶乘的最高位,比如n = 5,那么阶乘表示:1 * 2 * 3 * 4 
* 5*/ 
int for_test3()
{// 创建一个变量,接收控制台输入的整数nint n;// 创建一个变量,用来接收阶乘的结果int r = 1;printf("请输入一个整数:\n");scanf("%d",&n);// 使用for循环实现阶乘 fabs()求绝对值,需要引入 math.hfor (int i = 1; i <= fabs(n); i++){r *= i;}printf("1~%d之间的阶乘的将结果是%d\n",(int)fabs(n),r);
}
int main(int argc,char *argv[])
{while_test();for_test();for_test2();for_test3();return 0;
}

死循环的写法:

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

循环实现的三要素:

  • 循环变量的初始化,举例: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,因为第一个就是1int f2 = 1; // 后一个数,默认是1,因为第二个就是1int i = 1; // 循环变量,控制循环次数,我们需求是输出20个,只需要10次for(;i <= 10; i++){printf("%12d%12d\n",f1,f2);// 第1次:1 1 2 3 5 8f1 += f2; // f1 = f1 + f2f2 += f1; // f2 = f2 + f1}return 0;
    }

直到型循环

特点:先执行,后判断。不管条件是否满足,至少执行一次。

代表:do…while,goto(已淘汰,不推荐)

do …whlie

语法:

do
{循环体;
}while(循环条件)

说明:

​ ①循环条件的返回值必须是逻辑值(0或非0)

​ ②{}包起来的内容整体称之为循环体

​ ③我们要在循环体中控制循环条件的变化,否则产生死循环

​ 执行过程:

案例:

goto

语法:

loop:标签内容 //定义一个标签,(标签名自定义,这是一个不带引号的字符串)我们一般需要重复执行代码添加标签goto 标签(lable)

标签:标明

循环的嵌套

3种循环(while,do…while、for)可以互相嵌套。在前一个循环内容又存放一个未完成循环。

案例:

  • 求100~200之间的所有素数(又称为质数)

  • 分析:

    • 只能被1和自身整除的数叫做素数或者质数。(思路反推,过滤和合数)
  • 代码:

    //创建一个变量,存放100~200之间的自然数
    int num = 100;
    //循环变量,默认从2,开始,因为自然数除以1没有意义。现在需要校验2~自身减1的数,排除(1~自身)(2~100)
    int a;
    //第一层for循环:生成100~200之间的自然数
    for(;num <= 200;num++)
    {//第二层循环:校验一个自然数,检测是否是非素数for(i = 2;i < num;i++){//被校验数能否被校验数整除}
    }
    

    循环结构的典型应用场景

  • 求累和:举例::1+2+3+…100的和,sum = 0;

break与continue

break

功能:

​ ①用在switch中,用来跳出switch的case语句:如果case没有break,可能会产生case穿透。

​ ②用在循环中(while、do…while…、for),提前结束循环,也就是跳出整个循环。

相关文章:

  • PCB设计教程【强化篇】——USB拓展坞原理图设计
  • 生成式AI模型学习笔记
  • Fastapi 学习使用
  • 告别压降损耗与反向电流困扰:汽车电子电源防反接方案全面解析与理想二极管应用
  • 【Unity笔记】Unity WASD+QE 控制角色移动与转向(含 Shift 加速)实现教程
  • 【Python进阶】CPython
  • 分析XSSstrike源码
  • 关联子串 - 华为OD统一考试(JavaScript题解)
  • 姜老师MBTI课程:4条轴线的总结
  • ssh连接断开,保持任务后台执行——tmux
  • Java 中 Redis 过期策略深度解析(含拓展-redis内存淘汰策略列举)
  • spring boot项目中的一些常用提示信息
  • C++17新特性 Lambda表达式
  • 第十四篇:MySQL 运维中的故障场景还原与排查实战技巧
  • NLP基础:从词嵌入到预训练模型应用
  • token
  • 进程间通信(消息队列)
  • C++学习打卡
  • qwen3解读
  • Redis事务详解:原理、使用与注意事项
  • 柳州公司网站建设/如何制作网页最简单的方法
  • 南宁做网站公司必荐云尚网络/google年度关键词
  • 制作人在那个网站能看/安新seo优化排名网站
  • 网站开发网站设计制作/seo霸屏软件
  • 17网站一起做网店优势与劣势/小程序制作费用一览表
  • 服务好的武进网站建设/关键词推广价格