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

循环语句

  • 什么是循环
    • 重复执行代码
  • 为什么需要循环
  • 循环的实现方式
    • 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.hqwc.cn/news/636616.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPAM模型(细粒度图像分类)

OPAM模型&#xff08;细粒度图像分类&#xff09; 摘要Abstract1. OPAM1.1 文献摘要1.2 细粒度图像分类1.3 研究背景1.4 OPAM模型创新点1.5 OPAM模型1.5.1 补丁过滤1.5.2 显着性提取1.5.3 细粒度区域级注意模型对象-空间约束方法&#xff08;Object spatial constraint&#xf…

ICLR 2024 | FTS-Diffusion: 用于合成具有不规则和尺度不变模式的金融时间序列的生成框架

ICLR 2024 | FTS-Diffusion: 用于合成具有不规则和尺度不变模式的金融时间序列的生成框架 原创 QuantML QuantML 2024-04-17 09:53 上海 Content 本文提出了一个名为FTS-Diffusion的新颖生成框架&#xff0c;用于模拟金融时间序列中的不规则和尺度不变模式。这些模式由于其独…

质谱原理与仪器2-笔记

质谱原理与仪器2-笔记 常见电离源电子轰击电离源(EI)碎片峰的产生典型的EI质谱图 化学电离源(CI)快原子轰击源(FAB)基体辅助激光解析电离(MALDI)典型的MALDI质谱图 大气压电离源(API)电喷雾离子源(ESI)大气压化学电离源(APCI)APCI的正负离子模式 大气压光电离源(APPI) 常见电离…

Mac多媒体播放器 Movist Pro v2.11.4中文激活版下载

Movist Pro for Mac是一款专业的媒体播放器&#xff0c;特别为Mac用户设计。它不仅界面简洁美观&#xff0c;而且功能强大&#xff0c;能满足用户各种播放需求。 Movist Pro v2.11.4中文激活版下载 首先&#xff0c;Movist Pro for Mac支持多种媒体文件的播放&#xff0c;包括视…

微信小程序-长按显示,点击空白区域关闭

<view bind:tap"closeLongAction"><view bind:longpress"openAction></view><view wx:if"{{longActionIsShow}}"> 长按显示的区域 </view> </view>openAction(e) {console.log(322,e);this.setData({longActionI…

第65天:API攻防-接口安全WebPackRESTSOAPWSDLWebService

目录 思维导图 前置知识 案例一&#xff1a;WebService 类-Wsdl&ReadyAPI-SQL 注入 案例二&#xff1a;SOAP 类-Swagger&SoapUI&EXP-信息泄露 案例三&#xff1a;HTTP 类-WebPack&PackerFuzzer-信息泄露 思维导图 前置知识 RPC接口: 登录游戏时候登录账号…

ES中文检索须知:分词器与中文分词器

ElasticSearch (es)的核心功能即为数据检索&#xff0c;常被用来构建内部搜索引擎或者实现大规模数据在推荐召回流程中的粗排过程。 ES分词 分词即为将doc通过Analyzer切分成一个一个Term&#xff08;关键字&#xff09;&#xff0c;es分词在索引构建和数据检索时均有体现&…

Windows 下最好用的流程图软件Visio

keywords: Visio 小问题记录 连接线箭头 如果在 Visio 2013/2016 里画流程图&#xff0c;发现连接线没有箭头&#xff0c;检查一下「设计」菜单里是否将主题设置成了「无主题」&#xff0c;如果是&#xff0c;取消掉就好了。 鼠标悬停提示 把鼠标悬停在图形上四周应该有几…

c++ - 空间申请和释放 new/delete

文章目录 一、c/c内存分布二、new/delete 的使用三、malloc/free 和 new/delete 的对比四、new/delete 的实现原理五、匹配问题 一、c/c内存分布 求下面各个变量的位置 // c/c内存分布int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar …

Android开发——Fragment

Demo fragment_blank.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

Python编程技巧揭秘:深入理解Lambda函数,如何使用匿名函数简化你的代码

文章目录 1. Lambda函数2. 在实际应用中使用Lambda2.1 使用Lambda函数进行列表排序2.2 在高阶函数中使用Lambda 3. Lambda的局限性和注意点 在这篇文章中&#xff0c;将深入探讨Python中的Lambda函数&#xff0c;这是一种强大的编程工具&#xff0c;可以以更简洁、高效的方式编…