从零开始探索C语言(四)----循环

文章目录

  • 1. C 循环
    • 1.1 while 循环
    • 1.2 for 循环
    • 1.3 do...
    • 1.4 嵌套循环
  • 2. 循环控制语句
    • 2.1 break 语句
    • 2.2 continue 语句
    • 2.3 goto 语句

1. C 循环

有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

1.1 while 循环

只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。

C 语言中 while 循环的语法:

while(condition)
{statement(s);
}

在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* while 循环执行 */while( a < 20 ){printf("a 的值: %d\n", a);a++;}return 0;
}

在这里插入图片描述

1.2 for 循环

C 语言中 for 循环的语法:

for ( init; condition; increment )
{statement(s);
}

下面是 for 循环的控制流:

  1. init 会首先被执行,且只会执行一次。这一步允许声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
#include <stdio.h>int main ()
{/* for 循环执行 */for( int a = 10; a < 20; a = a + 1 ){printf("a 的值: %d\n", a);}return 0;
}

在这里插入图片描述

如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。

实例

#include <stdio.h>int main ()
{for( ; ; ){printf("该循环会永远执行下去!\n");}return 0;
}

当条件表达式不存在时,它被假设为真。您也可以设置一个初始值和增量表达式,但是一般情况下,C 程序员偏向于使用 for(;;) 结构来表示一个无限循环。

注意:可以按 Ctrl + C 键终止一个无限循环。

1.3 do…

while 循环
C 语言中 do…while 循环的语法:

do
{statement(s);}while( condition );

请注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。

如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止。

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* do 循环执行,在条件被测试之前至少执行一次 */do{printf("a 的值: %d\n", a);a = a + 1;}while( a < 20 );return 0;
}

在这里插入图片描述

1.4 嵌套循环

C 语言允许在一个循环内使用另一个循环,下面演示几个实例来说明这个概念:
C 语言中 嵌套 for 循环 语句的语法:

for (initialization; condition; increment/decrement)
{statement(s);for (initialization; condition; increment/decrement){statement(s);... ... ...}... ... ...
}

如以下示例:

#include <stdio.h>int main ()
{/* 局部变量定义 */int i, j;for(i=2; i<100; i++) {for(j=2; j <= (i/j); j++)if(!(i%j)) break; // 如果找到,则不是质数if(j > (i/j)) printf("%d 是质数\n", i);}return 0;
}

在这里插入图片描述

C 语言中 嵌套 while 循环 语句的语法:

while (condition1)
{statement(s);while (condition2){statement(s);... ... ...}... ... ...
}

如以下示例:

#include <stdio.h>
int main()
{int i=1,j;while (i <= 5){j=1;while (j <= i ){printf("%d ",j);j++;}printf("\n");i++;}return 0;
}

在这里插入图片描述

C 语言中 嵌套 do…while 循环 语句的语法:

do
{statement(s);do{statement(s);... ... ...}while (condition2);... ... ...
}while (condition1);

如以下示例:

#include <stdio.h>
int main()
{int i=1,j;do{j=1;do{printf("*");j++;}while(j <= i);i++;printf("\n");}while(i <= 5);return 0;
}

在这里插入图片描述

关于嵌套循环有一点值得注意,可以在任何类型的循环内嵌套其他任何类型的循环。比如,一个 for 循环可以嵌套在一个 while 循环内,反之亦然。

2. 循环控制语句

2.1 break 语句

C 语言中 break 语句有以下两种用法:

  1. 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。

  2. 它可用于终止 switch 语句中的一个 case。

如果使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

C 语言中 break 语句的语法:

break;

在这里插入图片描述
实例:

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* while 循环执行 */while( a < 20 ){printf("a 的值: %d\n", a);a++;if( a > 15){/* 使用 break 语句终止循环 */break;}}return 0;
}

在这里插入图片描述

2.2 continue 语句

C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。

对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 while 和 do…while 循环,continue 语句重新执行条件判断语句。

C 语言中 continue 语句的语法:

continue;

在这里插入图片描述
示例:

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* do 循环执行 */do{if( a == 15){/* 跳过迭代 */a = a + 1;continue;}printf("a 的值: %d\n", a);a++;}while( a < 20 );return 0;
}

在这里插入图片描述

2.3 goto 语句

C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。

注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。

语法
C 语言中 goto 语句的语法:

goto label;
..
.
label: statement;

在这里,label 可以是任何除 C 关键字以外的纯文本,它可以设置在 C 程序中 goto 语句的前面或者后面。
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>int main ()
{/* 局部变量定义 */int a = 10;/* do 循环执行 */LOOP:do{if( a == 15){/* 跳过迭代 */a = a + 1;goto LOOP;}printf("a 的值: %d\n", a);a++;}while( a < 20 );return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/94979.html

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

相关文章

路由器的简单概述(详细理解+实例精讲)

系列文章目录 华为数通学习&#xff08;4&#xff09; 目录 系列文章目录 华为数通学习&#xff08;4&#xff09; 前言 一&#xff0c;网段间通信 二&#xff0c;路由器的基本特点 三&#xff0c;路由信息介绍 四&#xff0c;路由表 五&#xff0c;路由表的来源有哪些…

bazel构建原理

调度模型 传统构建系统有很多是基于任务的&#xff0c;例如 Ant&#xff0c;Maven&#xff0c;Gradle。用户可以自定义"任务"(Task&#xff09;&#xff0c;例如执行一段 shell 脚本。用户配置它们的依赖关系&#xff0c;构建系统则按照顺序调度。 基于 Task 的调度…

计算机网络 概述部分

目录 计算机网络在信息时代的作用 计算机网络的重要特征 网络&#xff0c;internet,Internet的区别 局域网 广域网的区别 网络协议的分层 计算机网络在信息时代的作用 计算机网络的重要特征 连通性&#xff1a;彼此联通&#xff0c;交换信息 共享性&#xff1a;信息共享…

JS算法与树(二)

前言 二叉搜索树&#xff08;BST&#xff09;存在一个问题&#xff1a;当你添加的节点数够多的时候&#xff0c;树的一边可能会非常的深。而其他的分支却只有几层。 AVL树 为了解决上面的问题&#xff0c;我们提出一种自平衡二叉搜索树。意思是任何一个节点左右两侧子树的高度之…

五金轴尺寸机器视觉测量软硬件方案--康耐德智能

检测内容&#xff1a; 五金轴尺寸机器视觉测量 检测要求&#xff1a; 精度0.015mm&#xff0c;速度180~240个/分钟 视觉可行性分析&#xff1a; 对样品进行了光学实验&#xff0c;并进行图像处理&#xff0c;原则上可以使用机器视觉系统进行测试测量。 结果&#xff1a; 对…

【核心复现】基于改进灰狼算法的并网交流微电网经济优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

伦敦银交易时间怎么选择?

伦敦银和伦敦金都是全球性的交易品种&#xff0c;一般的现货贵金属交易平台&#xff0c;都可以同时经营这两个品种&#xff0c;而且它们的交易时间是一致的&#xff0c;以香港市场的平台为例&#xff0c;基本上交易时间都会从北京周一的早上7点&#xff0c;延续到周六凌晨5点左…

截取字符串 substr lastIndexOf

效果图 代码 item.content.substr(item.content.lastIndexOf(/) 1, item.content.length - item.content.lastIndexOf(/)) 就可以得到

AAC和ADTS音频格式解析

1.ADTS是个啥 ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。 记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠也不能播。当时崩溃了,后来通过查找资料才知道。一般…

ELK安装、部署、调试(四)KAFKA消息队列的安装和部署

1.简介 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xff09;是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通…

K8S访问控制------认证(authentication )、授权(authorization )、准入控制(admission control )体系

一、账号分类 在K8S体系中有两种账号类型:User accounts(用户账号),即针对human user的;Service accounts(服务账号),即针对pod的。这两种账号都可以访问 API server,都需要经历认证、授权、准入控制等步骤,相关逻辑图如下所示: 二、authentication (认证) 在…

Linux学习之vsftpd虚拟用户

/etc/vsftpd/vsftpd.conf里边有几项跟vsftpd虚拟用户有关的主要配置&#xff1a; guest_enableYES&#xff0c;允许匿名用户登录vsftpd guest_usernamevirtual&#xff0c;指定虚拟用户账户为virtual&#xff0c;就是把虚拟用户映射成Linux本地用户&#xff0c;这样可以使用Lin…