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

C语言基础13:循环结构 for和while

循环结构

什么是循环结构

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

循环的分类

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

循环的构成

  • 循环条件
  • 循环体

当型循环的实现

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

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

while

语法:

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

说明:

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

    /*************************************************************************> File Name:    demo01.c> Author:         ZK> Description: while循环案例:求1~100的累加和> Created Time: 2025年02月12日 星期三 09时44分51秒************************************************************************/#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以内的偶数和。

  • 分析:

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

    /*************************************************************************> File Name:    demo02.c> Author:       ZK> Description: while案例:求1~100以内的偶数和 > Created Time: 2025年02月12日 星期三 10时02分54秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
    {//创建两个变量,一个变量sum用来存偶数和,一个变量i用来存循环变量int i = 1,sum = 0;//循环求和while (i <= 100){//过滤奇数if (i % 2 == 0)sum += i;i++;//改变循环变量的值}printf("1~100的偶数和是%d\n",sum);return 0;
    }

死循环:

while (1)
for…

原则上,for循环能实现的,while循环一定可以实现,for循环可以看作是while循环的一种特殊写法。

语法:

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

说明:

​ ①( )中可以只保留;;,举例:for(;;),此时就是for循环的死循环

​ ②表达式1循环变量,我们需要赋初值,循环变量可以是单个,也可以是列表,多个循环变量使用逗号分隔

​ ③表达式2循环条件,用来限制循环的次数,循环条件支持关系表达式、逻辑表达式,举例:i < 10 && j<=i

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

​ ⑤执行顺序:①②④③→②④③→②④③→…→②

// 

执行过程:

在这里插入图片描述

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

案例:

/*************************************************************************
> File Name:
demo03.c
> Author:
FPF
> Description: for循环案例
> Created Time: 2025年02月12日 星期三 10时52分51秒
************************************************************************/
#include <stdio.h>
#include <math.h>
/**
* 需求:while循环案例:计算1~100以内的偶数和
*/
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
    • 斐波拉契数列的特点是第2个就等于前两个数之和,最开始的第1,2数是固定的,都是1
  • 代码:

    /*************************************************************************> File Name:    demo04.c> Author:       ZK> Description:  for循环案例:求斐波拉契数列的前20位> Created Time: 2025年02月12日 星期三 11时31分44秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
    {int i = 1;//定义一个循环变量int f1 = 1;//数列第一位int f2 = 1;//数列第二位for (;i <= 10;i++){printf("%d %d ",f1,f2);//第一次:1 1 2 3f1 += f2;f2 += f1;}return 0;
    }
http://www.lryc.cn/news/535584.html

相关文章:

  • 六西格玛设计培训如何破解风电设备制造质量与成本困局
  • 【Android开发】安卓手机APP使用机器学习进行QR二维码识别
  • Zabbix-监控SSL证书有效期
  • 生成式聊天机器人 -- 基于Pytorch + Global Attention + 双向 GRU 实现的SeqToSeq模型 -- 上
  • Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统
  • 基于进化式大语言模型的下一代漏洞挖掘范式:智能对抗与自适应攻防体系
  • 游戏引擎学习第99天
  • 脉冲当量含义
  • docker compose部署flink集群
  • docker compose快速部署kafka-connect集群
  • 【核心特性】Go 模块化开发入门(go mod 深度解析)
  • 国产ARM处理器工控机如何助力企业实现自主可控?
  • dns功能及工作原理是什么?
  • Java中的Map集合与文件操作详解
  • SAP-ABAP:dialog界面中的数据块Event Block详解举例
  • PostgreSQL 开发利器:Navicat 核心功能与资源攻略
  • 飞算 JavaAI:加速 AI + 行业趋势的智能化进程
  • XZ_Mac电脑上本地化部署DeepSeek的详细步骤
  • Flink-DataStream API
  • 2.4 构建模块化应用
  • DeepSeek:从入门到精通
  • JAVA学习第二天
  • DevOps工具链概述
  • windows系统远程桌面连接ubuntu18.04
  • kafka动态监听主题
  • Python虚拟环境管理工具 pyenv
  • 网络安全产品架构图 网络安全相关产品
  • C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)
  • 如何实现Deepseek的本地部署并集成本地知识库?
  • vue学习笔记8