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

C语言之判断与循环语句知识点总结

目录

if选择结构

单选择结构

双选择结构

多选择结构

代码示例

switch case语句

break语句的用法

while循环语句

do-while循环语句

for循环语句

循环的嵌套

continue语句


if选择结构

当我们需要根据条件的成立与否来执行不同的代码块时,可以使用C语言中的if选择结构。if选择结构可以根据判断条件的结果来决定程序的执行路径,从而实现不同的逻辑分支。

在C语言中,if选择结构有三种形式:单选择、双选择和多选择。下面逐一介绍这三种形式。

单选择结构

单选择结构用if语句实现,它的基本语法如下:

if (条件表达式)
{// 当条件成立时执行的代码块
}

其中,条件表达式是一个逻辑表达式,如果它的值为真(非零),则执行if语句后的代码块;如果它的值为假(0),则跳过if语句后的代码块。

双选择结构

双选择结构用if-else语句实现,它的基本语法如下:

if (条件表达式)
{// 当条件成立时执行的代码块
}
else
{// 当条件不成立时执行的代码块
}

条件表达式的值为真时,执行if语句后的代码块;条件表达式的值为假时,执行else语句后的代码块。

多选择结构

多选择结构用if-else if-else语句实现,它的基本语法如下:

if (条件表达式1)
{// 当条件1成立时执行的代码块
}
else if (条件表达式2)
{// 当条件2成立时执行的代码块
}
else if (条件表达式3)
{// 当条件3成立时执行的代码块
}
...
else
{// 当以上条件都不成立时执行的代码块
}

多选择结构中,条件表达式按顺序进行判断,只有第一个为真的条件对应的代码块会被执行。如果所有条件都不成立,则执行else语句后的代码块。

在实际应用中,可以根据具体需求灵活运用这些选择结构。需要注意的是,条件表达式的值应该是一个逻辑值(0或非零),并且代码块的花括号是必需的,即使代码块只有一行。

代码示例

#include <stdio.h>int main() {int num = 10;if (num > 0) {// 单选择:当num大于0时执行以下代码块printf("数字为正。\n");} else if (num < 0) {// 多选择:当num小于0时执行以下代码块printf("数字为负数。\n");} else {// 双选择:当num等于0时执行以下代码块printf("数字为零。\n");}return 0;
}

在这个示例中,我们首先判断num是否大于0,如果是,则打印"数字为正。"。如果不是,则继续判断num是否小于0,如果是,则打印"数字为负数。"。如果num既不大于0也不小于0,那么它必定等于0,于是打印"数字为零。"。

switch case语句

当我们需要根据不同的取值来执行不同的代码块时,可以使用C语言中的switch case语句。switch case语句是一种多选择结构,它可以根据表达式的值来选择执行相应的代码块。

switch case语句的基本语法如下:

switch (表达式)
{case 值1:// 当表达式的值等于值1时执行的代码块break;case 值2:// 当表达式的值等于值2时执行的代码块break;case 值3:// 当表达式的值等于值3时执行的代码块break;...default:// 当表达式的值与上述所有值都不匹配时执行的代码块break;
}

switch关键字后面的表达式的值会与各个case后面的值进行比较,如果匹配,则执行对应的代码块。如果没有匹配的值,可以使用default关键字指定一个默认的代码块。在每个case的代码块末尾使用break关键字来终止switch语句的执行,否则会继续执行下一个case的代码块,直到遇到break或整个switch语句结束。 

以下是一个简单的示例来说明switch case语句的用法:

#include <stdio.h>int main() {int day = 4;switch (day) {case 1:printf("Monday\n");break;case 2:printf("Tuesday\n");break;case 3:printf("Wednesday\n");break;case 4:printf("Thursday\n");break;case 5:printf("Friday\n");break;default:printf("Weekend\n");break;}return 0;
}

在这个示例中,我们根据变量day的值来选择打印相应的星期几。因为day的值为4,所以匹配到了case 4,并执行了对应的代码块,打印"Thursday"。

需要注意的是,switch case语句只能用于判断整型或字符型的值,不能用于判断浮点数、字符串等其他类型的值。每个case后面的值必须是一个常量表达式,而不能是变量。

break语句的用法

在C语言中,break语句是一种控制语句,用于终止循环或switch语句的执行。当程序执行到break语句时,会立即跳出当前的循环或switch语句,并开始执行下一条语句。

break语句通常用于以下两种情况:

1、终止循环

当我们需要在满足某个条件时退出循环时,可以使用break语句。例如,在一个for循环中,当遇到某个特定条件时,我们希望立即退出循环,可以这样写:

for (int i = 0; i < 10; i++) {if (i == 5) {break;}printf("%d\n", i);
}

上述代码中,当i等于5时,执行break语句,跳出for循环,不再执行后续的代码块。

2、终止switch语句

在C语言中,switch语句中的每个case后面都需要使用break语句来终止该case的执行,否则程序将继续执行下一个case的代码块。例如:

switch (num) {case 1:printf("One\n");break;case 2:printf("Two\n");break;default:printf("Other\n");break;
}

 在上述代码中,当num的值为1时,执行case 1的代码块,并在末尾使用break语句来终止该case的执行。如果没有break语句,程序将继续执行下一个case的代码块,直到遇到break或switch语句结束。

需要注意的是,break语句只能用于循环语句或switch语句中,不能在其他地方使用。同时,当嵌套多个循环或switch语句时,break语句只会终止最内层的循环或switch语句的执行,如果需要终止外层的循环或switch语句,可以使用标签(label)和goto语句来实现。

while循环语句

在C语言中,while循环是一种常用的迭代结构,它会根据给定的条件重复执行一段代码块,直到条件不再满足为止。while循环的基本语法如下:

while (条件)
{// 循环体代码块
}

在每次循环开始之前,会首先判断条件是否满足。如果条件为真(非零),则执行循环体代码块;如果条件为假(零),则跳过循环体,继续执行后续的代码。

以下是一个简单的示例来说明while循环的用法:

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

运行结果:

0
1
2
3
4

 在这个示例中,我们使用while循环打印从0到4的整数。循环的条件是i < 5,当i小于5时,执行循环体代码块,打印i的值,并将i递增1。当i等于5时,条件不再满足,循环结束。

需要注意的是,如果循环条件一开始就不满足,那么循环体代码块将不会执行,循环会被跳过。

在使用while循环时,需要注意避免无限循环的情况。如果循环条件始终为真,循环将永远不会结束,这可能会导致程序陷入死循环,造成系统资源的浪费。因此,在编写while循环时,确保循环条件能够在某个时刻变为假,以便终止循环。

do-while循环语句

在C语言中,do-while循环是一种迭代结构,它与while循环相似,但是它会先执行一次循环体代码块,然后再根据给定的条件决定是否继续执行循环。do-while循环的基本语法如下:

do {// 循环体代码块
} while (条件);

与while循环不同的是,do-while循环的条件是在循环体执行之后进行判断。即使条件不满足,循环体至少会被执行一次。

以下是一个简单的示例来说明do-while循环的用法:

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

运行结果:

0
1
2
3
4

在这个示例中,我们使用do-while循环打印从0到4的整数。循环体代码块会先执行一次,然后再判断条件i < 5是否满足。只要条件为真,即i小于5,就会继续执行循环体,打印i的值,并将i递增1。当i等于5时,条件不再满足,循环结束。

需要注意的是,与while循环一样,确保循环条件能够在某个时刻变为假,以便终止循环。否则,如果循环条件始终为真,就会导致无限循环的情况。

do-while循环的一个常见应用是在需要至少执行一次循环体的情况下,再根据条件进行后续的迭代。

for循环语句

在C语言中,for循环是一种常用的迭代结构,它允许我们根据给定的条件重复执行一段代码块,通常用于已知循环次数的情况。for循环的基本语法如下:

for (初始化表达式; 循环条件; 更新表达式) {// 循环体代码块
}

for循环由三个部分组成:

  1. 初始化表达式(Initialization Expression):在循环开始前执行一次的表达式,用于初始化循环变量或设置初始条件。
  2. 循环条件(Loop Condition):在每次循环开始之前进行判断的表达式,如果条件为真(非零),则执行循环体代码块;如果条件为假(零),则跳出循环。
  3. 更新表达式(Update Expression):在每次循环结束后执行的表达式,用于更新循环变量或改变循环条件。

以下是一个简单的示例来说明for循环的用法:

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

运行结果:

0
1
2
3
4

在这个示例中,我们使用for循环打印从0到4的整数。初始化表达式为int i = 0,将循环变量i初始化为0。循环条件为i < 5,只要条件为真,即i小于5,就执行循环体代码块,打印i的值。更新表达式为i++,每次循环结束后将i递增1。当i等于5时,条件不再满足,循环结束。

需要注意的是,for循环中的三个部分都可以省略,但分号必须保留。例如,如果我们只想实现一个无限循环,可以这样写:

for (;;) {// 无限循环体代码块
}

 在这种情况下,循环条件被省略,循环将一直执行下去,除非在循环体内部使用break语句或其他方式跳出循环。

循环的嵌套

在C语言中,循环的嵌套指的是在一个循环结构内部包含另一个循环结构。通过循环的嵌套,我们可以实现更复杂的迭代控制和逻辑处理。C语言支持将任意类型的循环结构嵌套在其他循环结构内部,包括for循环、while循环和do-while循环。

下面是一个示例,展示了两个for循环的嵌套:

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

运行结果:

i = 0, j = 0
i = 0, j = 1
i = 1, j = 0
i = 1, j = 1
i = 2, j = 0
i = 2, j = 1

在这个示例中,我们使用两个for循环进行嵌套。外层循环控制变量i从0到2的迭代,内层循环控制变量j从0到1的迭代。内层循环的每次迭代都会完整地执行一遍,然后外层循环才会进入下一次迭代。这样,内层循环会在外层循环的每一次迭代中都被执行。

循环的嵌套可以用于处理多维数据结构(如二维数组)的遍历、实现复杂的逻辑判断和控制流程等。然而,需要注意的是,循环的嵌套可能会导致代码可读性降低和性能问题,尤其是当嵌套层数过多或循环体内部的操作较为复杂时。因此,在使用循环的嵌套时,需要仔细考虑代码结构和性能影响。

continue语句

在C语言中,continue语句是一种控制流语句,用于跳过当前循环迭代中的剩余代码,直接进入下一次迭代。当循环体内部遇到continue语句时,该语句后面的所有代码都将被忽略,直接开始下一次迭代。

continue语句通常用于在循环结构中进行条件判断,以便跳过某些不需要执行的迭代。以下是一个示例,展示了如何使用continue语句:

#include <stdio.h>int main() {for (int i = 0; i < 5; i++) {if (i == 2) {continue;}printf("%d\n", i);}return 0;
}

 运行结果:

0
1
3
4

在这个示例中,我们使用了一个for循环来迭代从0到4的整数。在每次迭代中,我们使用一个if语句来判断迭代变量i是否等于2。如果是,就执行continue语句,跳过当前迭代中的剩余代码;否则,就打印i的值。

需要注意的是,continue语句只能出现在循环结构内部,否则会导致编译错误。此外,如果嵌套了多层循环结构,在使用continue语句时需要注意,它只会跳过当前循环结构中的代码,而不是跳出所有嵌套的循环结构。

相关文章:

  • 基于群居蜘蛛算法的无人机航迹规划
  • PostgreSQL 的 Replication Slot分析研究
  • 数据结构实验3
  • 树与二叉树(考研版)
  • 基于Kubesphere容器云平台物联网云平台Devops实践
  • RabbitMQ的交换机(原理及代码实现)
  • WPF:自定义按钮模板
  • python基础语法(十一)
  • 研发效能认证学员作品:快速进行持续集成应用实践丨IDCF
  • 使用pycharm远程连接到Linux服务器进行开发
  • ES6中数值扩展
  • 论文-分布式-并发控制-并发控制问题的解决方案
  • 【面试经典150 | 栈】最小栈
  • 2023辽宁省赛E
  • 【QT】其他常用控件1
  • 收藏网友的 源程序下载网
  • [译] 怎样写一个基础的编译器
  • 【附node操作实例】redis简明入门系列—字符串类型
  • angular2开源库收集
  • emacs初体验
  • HTTP 简介
  • PaddlePaddle-GitHub的正确打开姿势
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何使用 JavaScript 解析 URL
  • 我感觉这是史上最牛的防sql注入方法类
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​插件化DPI在商用WIFI中的价值
  • #《AI中文版》V3 第 1 章 概述
  • #HarmonyOS:基础语法
  • #Lua:Lua调用C++生成的DLL库
  • (13):Silverlight 2 数据与通信之WebRequest
  • (poj1.3.2)1791(构造法模拟)
  • (多级缓存)缓存同步
  • (分类)KNN算法- 参数调优
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (算法)求1到1亿间的质数或素数
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)80c52学习之旅-起始篇
  • (一)u-boot-nand.bin的下载
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Linux下编译安装log4cxx
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core引入性能分析引导优化
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net Web项目创建比较不错的参考文章
  • .net 按比例显示图片的缩略图
  • .NET构架之我见
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境