C语言中的控制语句(循环语句while、for)

embedded/2024/12/22 1:00:11/

循环语句

  • 什么是循环
    • 重复执行代码
  • 为什么需要循环
  • 循环的实现方式
    • while
    • do...while
    • for

while语句

 语法格式:

while (条件) {循环体……
}

需求:跑步5圈

示例代码:

#include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的定义int i = 1;// 2. while 控制重复的次数while (i <= 5) {// 3. 打印跑步第几圈printf("跑步第 %d 圈\n", i);// 4. 条件改变i++;}return 0;
}

do...while语句

语法格式:

do {循环体……
} while (条件);
  • do-while 循环语句是在执行循环体之后才检查 条件 表达式的值
  • 所以 do-while 语句的循环体至少执行一次,do…while也被称为直到型循环

需求:跑步5圈

示例代码:

#include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的定义int i = 1;do {// 2.1 打印跑步第几圈printf("跑步第 %d 圈\n", i);// 2.2 条件改变i++;} while ( i <= 5 ); // 3. 控制重复的次数return 0;
}

 for语句

语法格式:

for ( init; condition; increment ) {循环体
}
  • init会首先被执行,且只会执行一次
  • 接下来,会判断 condition,如果条件condition为真
  • 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句
  • 条件再次被判断

需求:跑步5圈

示例代码:

#include <stdio.h>int main() {// 需求跑步5圈for (int i = 1; i <= 5; i++) {printf("跑步第 %d 圈\n", i);}return 0;
}

 死循环

  • 条件永远为真的循环就是死循环
  • 示例代码
​
#include <stdio.h>int main() {// while (1) {//     printf("根本停不下来\n");// }for(;;) {printf("根本停不下来\n");}return 0;
}​

循环案例

实现1+2+3……100所有数字的累加

#include <stdio.h>int main() {// 需求:实现1+2+3……100所有数字的累加// 定义条件变量初始值为1int i = 1;// 定义累加变量,初始值为0int sum = 0;// 循环控制100次while (i <= 100) {// 累加sum += i;// 条件改变i++;}// 循环外面,打印最终的累加和printf("sum = %d\n", sum);// for循环实现int temp = 0;for (int i = 1; i <= 100; i++) {temp += i;}printf("temp = %d\n", temp);return 0;
}

循环嵌套

需求如下:

通过for循环嵌套打印内容:
* * * * * 
* * * * * 
* * * * * 
* * * * * 
* * * * * 
说明:
1)每行有5个*,总共有5行
2)*之间有空格隔开
3)printf()1次只能打印1个*

示例代码:

#include <stdio.h>int main() {for (int i = 0; i <= 4; i++) {for (int j = 0; j <= 4; j++) {printf("* ");}printf("\n");}return 0;
}

跳转关键字

  • 循环和switch专属的跳转:break
  • 循环专属的跳转:continue
  • 无条件跳转:goto

break

  • 循环的break说明
    • 某一条件满足时,不再执行循环体中后续重复的代码,并退出循环
  • 需求:一共吃5碗饭, 吃到第3碗吃饱了, 结束吃饭动作

示例代码:

#include <stdio.h>int main() {// 需求: 一共吃5碗饭, 吃到第3碗吃饱了, 结束吃饭动作// 1. 定义条件变量,为了查看方便, 计数器从 1 开始int i = 1;while (i <= 5) { // 2. 控制条件if (i == 3) {printf("吃饱了,不吃了\n");break; // 结束循环,退出循环}printf("吃第 %d 碗饭\n", i);// 3. 条件变量改变i++;}return 0;
}

continue

  • 某一条件满足时,不再执行本次循环体中后续重复的代码,但进入下一次循环判断
    • while循环,continue 之前一定要修改计数器(条件变量),否则,导致死循环
  • 需求:一共吃5个苹果,吃到第3个遇到虫子,这个跳过不吃,下一个继续

示例代码:

#include <stdio.h>int main() {// 需求: 一共吃5个苹果,吃到第3个遇到虫子,这个跳过不吃,下一个继续// 1. 定义条件变量,为了查看方便, 计数器从 1 开始int i = 1;while (i <= 5) { // 2. 控制条件if (i == 3) {printf("这个有虫子,不吃了\n");i++;    // continue 之前一定要修改计数器(条件变量),否则,导致死循环continue;; // 跳过本次循环,下次继续}printf("吃第 %d 个苹果\n", i);// 3. 条件变量改变i++;}return 0;
}

goto

  • goto用于无条件跳转
    • 在一种情况下可以使用goto语句:从一组嵌套的循环中跳出
  • goto语句可以导致代码不易理解和维护,并且容易引入不必要的错误。因此,除非必要,最好不要使用goto语句

示例代码:

#include <stdio.h>int main() {int i = 0;while (i < 3) {if(i == 1) {goto End;	// 跳转到End标签}printf("i = %d\n", i);i++;}End:printf("this is ending!\n");return 0;
}


http://www.ppmy.cn/embedded/6466.html

相关文章

VBA 实现outlook 当邮件设置category: red 即触发自动创建jira issue

1. 打开: Outlook VBA&#xff08;Visual Basic for Applications&#xff09; 方法一: 在邮件直接搜索:Visual Basic editor 方法二: File -> Options -> Customize Ribbon-> 打钩 如下图: 2.设置运行VBA 脚本: File -> Options -> Trust center -> Trus…

FineBI 6.0 Linux 部署、ClickHouse 源配置

文章目录 FineBI 概述FineBI 部署安装环境说明1.下载安装包2.安装3.初始化设置4.登录5.快速入门 启动与关闭启动关闭 ClickHouse 源配置开启驱动上传功能驱动上传数据库连接配置基础表属性设置数据导入 FineBI 概述 FineBI 是一款国产的商业智能&#xff08;BI&#xff09;软件…

gazebo中vins-fusion在仿真小车上的部署

软件要求&#xff1a;Ubuntu 20.04 ros的noetic版本&#xff0c;我是在虚拟机vitrualbox上运行的 这几天在学ROS&#xff0c;跟着赵虚左老师过了一遍之后&#xff0c;感觉还是有很多不懂的地方&#xff0c;xtdrone上仿真跟着文档走了一遍&#xff0c;好像没学到什么东西&#…

微服务架构中的数据一致性设计及技术实现

目录 1.概要设计 1.1数据一致性模型 1.1.1 强一致性 1.1.2 最终一致性 1.2 技术实现策略 1.2.1 使用分布式事务 1.2.2 基于事件的最终一致性&#xff08;Event-Driven Architecture, EDA&#xff09; 1.2.3 使用数据库的特性 1.2.4 业务层面的策略 1.2.5 分布式锁和版…

【Python】如何在Ubuntu上设置Python脚本开机自启

你不知道我为什么狠下心 盘旋在你看不见的高空里 多的是 你不知道的事 蝴蝶眨几次眼睛 才学会飞行 夜空洒满了星星 但几颗会落地 我飞行 但你坠落之际 很靠近 还听见呼吸 对不起 我却没捉紧你 &#x1f3b5; 王力宏《你不知道的事》 前置要求 确保你的Ub…

JVM概述

JVM概述 1、一些性能上的问题 我好好运行的线上系统突然间卡死了&#xff0c;系统无法访问&#xff0c;当然这个原因非常多&#xff1b;想解决线上的JVM GC问题却无从下手&#xff1b;新的项目上线了&#xff0c;对于各种JVM参数的设置一脸茫然&#xff0c;全部直接默认&…

JS继承与原型、原型链

在 JavaScript 中&#xff0c;继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式&#xff0c;并提供相应的示例代码&#xff0c;并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之…

什么是边缘计算?它为何如此重要?-天拓四方

随着信息技术的快速发展&#xff0c;数据处理和计算的需求日益增大&#xff0c;特别是在实时性要求极高的场景中&#xff0c;传统的云计算模式面临着巨大的挑战。在这样的背景下&#xff0c;边缘计算作为一种新兴的计算模式&#xff0c;正逐渐受到业界的广泛关注。那么&#xf…