C语言·分支和循环语句(超详细系列·全面总结)

前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下分支循环语句的知识点,我们一起来看看吧~

目录

一、什么是语句?💫

1、⭐️语句的定义⭐️

2、⭐️语句的分类⭐️

二、分支语句 💫

1、⭐️if 语句⭐️

2、⭐️switch 语句⭐️

三、循环语句 💫

1、⭐️while 循环⭐️

1.1、🌈while 循环中的 break 

1.2、🌈while 循环中的continue 

2、⭐️for 循环⭐️

2.1、🌈for 循环的变种

2.2、🌈for 循环与 while 循环

3、⭐️do...while() 循环⭐️


 

🌈心跳sy的C语言专栏  ⏪C语言知识点汇总到这了,有兴趣的友友可以订阅看看哟~

一、什么是语句?💫

1、⭐️语句的定义⭐️

在C语言中,语句是用于执行操作的代码单元。

语句总是以分号(;)结尾,这是C语言中语句的标志;语句可以简单,也可以复杂,它们可以执行各种操作,如计算、赋值、函数调用、条件执行、循环等。

2、⭐️语句的分类⭐️

👉C语句可分为以下五类:

🔶表达式语句

由表达式加上分号组成,例如:a+b=c;是一个赋值语句,用于将 b+c 的结果赋值给 a;

🔶函数调用语句

用于调用函数并执行它的代码,例如:printf("Hello,World!") 调用了标准库中的printf函数来输出文本到控制台;

🔶控制语句

用于控制程序的执行流程;包括条件语句(如 if 和 switch)和循环语句(如 for、while 和 do while)

🔶复合语句

由花括号 { } 包围的一个或多个语句的集合;

🔶空语句 

只有一个分号的语句,不执行任何操作,通常用于占位符或者满足语法要求;

👉本节主要介绍控制语句中的分支语句和循环语句~

二、分支语句 💫

👉分支语句又叫条件判断语句,是一种选择结构,包括 if 语句和 switch 语句;

1、⭐️if 语句⭐️

⭕️if语句:用于基于条件执行代码块

⭕️语法结构

if(表达式)    

    语句;

if (condition)
{
    //如果条件为真,执行这里的代码
}

⭕️if 语句还可以与 else 语句结合使用,用于在条件为 false 时执行另一段代码:  

if(表达式)    

    语句1;

else  

    语句2;

if (condition) 
{
    // 如果条件为真,执行这里的代码
} 
else 
{
    // 如果条件为假,执行这里的代码
}

⭕️if 多分支,语句可以嵌套,以便更复杂的条件检查:

if(表达式1)    

   语句1;

else if(表达式2)    

   语句2;

else    

   语句3;

if (condition1) 
{
    // 如果条件1为真,执行这里的代码
} 
else if (condition2) 
{
    // 如果条件1为假且条件2为真,执行这里的代码
} 
else 
{
    // 如果条件1和条件2都为假,执行这里的代码
}

👉代码演示:

#include <stdio.h>
//代码1
int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age<18)
    {
        printf("未成年\n");
    }
}

🔸输入的年龄若小于18,则输出“未成年”并换行;

int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age<18)
     {
        printf("未成年\n");
     }
    else
     {
        printf("成年\n");
     }
}

🔸输入年龄若小于18则输出未成年,否则输出成年; 

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if(age<18)
     {
        printf("少年\n");
     }
    else if(age>=18 && age<30)
     {
        printf("青年\n");
     }
    else if(age>=30 && age<50)
     {
        printf("中年\n");
     }
    else if(age>=50 && age<80)
     {
        printf("老年\n");
     }
    else
     {
        printf("老寿星\n");
     }
    
}

🔸输入年龄若小于18,则输出少年;若大于等于18小于30,则输出青年;若大于等于30小于50,则输出中年;若大于等于50,小于80,则输出老年;若大于等于80,则输出老寿星; 

🔴注意:

else 的匹配问题:else 是和它离得最近的 if 匹配的。

2、⭐️switch 语句⭐️

👉在C语言中,switch 语句提供了一种根据不同条件执行不同代码块的方法,它是一种多分支选择结构,适用于一个变量或表达式有多种可能的值(比如5、6、7或以上个值)时进行决策。

👉switch 语句的语法如下:

switch (expression) 
{
    case constant1:
    // 如果expression等于constant1,则执行这里的代码
        break;
    case constant2:
    // 如果expression等于constant2,则执行这里的代码
        break;
    // 可以有任意数量的case
    default:
    // 如果expression与所有constant都不匹配,则执行这里的代码
        break;
}

⭕️其中 expression 通常是一个变量或整型表达式,constant1、2是整型常量表达式,每个 case 后跟一个常量值(如整数常量或字符常量),如果 expression 的值与某个 case 后的常量值相等,则执行该 case 后的代码块,直到遇到 break 语句为止。如果没有任何 case 常量与 expression 的值匹配,且提供了 default 标签,则执行 default 后的代码块。

⭕️break 语句用于退出 switch 语句,防止执行其他 case 的代码块。如果忘记在每个 case 的代码块末尾添加 break 语句,程序将继续执行下一个 case 的代码块,直到遇到 break 为止,这可能是程序员想要的行为,也可能导致错误,所以在使用时需格外注意。

👉以下演示了根据一周的不同天数打印不同的消息:

#include <stdio.h>

int main() {
    int day = 3; // 假设今天是星期三
    switch (day) {
        case 1:
            printf("今天是星期一\n");
            break;
        case 2:
            printf("今天是星期二\n");
            break;
        case 3:
            printf("今天是星期三\n");
            break;
        case 4:
            printf("今天是星期四\n");
            break;
        case 5:
            printf("今天是星期五\n");
            break;
        case 6:
            printf("今天是星期六\n");
            break;
        case 7:
            printf("今天是星期日\n");
            break;
        default:
            printf("无效的天数值\n");
            break;
    }
    return 0;
}

🔸switch 语句检查变量 day 的值,并根据其值执行相应的 case 分支。由于 day 的值为3,程序将打印“今天是星期三”。如果 day 的值不在1到7之间,程序将执行 default 标签后的代码块。 

三、循环语句 💫

1、⭐️while 循环⭐️

🍀上文介绍的if语句,当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。

❓由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢?

⭕️在C语言中,while 循环是一种基本的循环结构,它允许你重复执行一段代码,直到指定的条件不再满足。while 循环在循环开始之前检查条件,因此它可能完全不执行循环体中的代码,如果初始条件就不满足。while 循环的语法如下:  

while (condition) 
{
    // 循环体:只要condition为真,就会重复执行的代码块
}

👉condition 是一个表达式,每次循环开始前都会对其进行求值。如果 condition 的值为真,则执行循环体内的代码块。执行完循环体内的代码后,程序会回到 while 语句处,再次检查 condition 的值,若为真则再次执行循环体中的代码,这个过程会一直重复,直到 condition 的值为假,此时循环终止,程序会继续执行循环之后的下一条语句。  

🔸举例:

//计算1到5的和:

#include <stdio.h>

int main() 
{
    int i = 1; // 初始化变量i
    int sum = 0; // 初始化总和变量
    while (i <= 5) 
     { 
        // 当i小于或等于5时循环
        sum += i; // 将i加到总和
        i++; // 递增i
     }
    printf("1到5的和是: %d\n", sum); // 输出结果
    return 0;
}

🔸初始条件满足,循环开始执行。循环体中的代码将 i 加到 sum 上,并将 i 递增。每次循环结束后,都会再次检查 i 是否小于或等于5。当 i 的值递增至6时,条件不再满足,循环终止。

1.1、🌈while 循环中的 break 

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

🔸可见输出结果是1234,说明循环只输出了四次,到第五次结束循环;

⭕️总结:

break在while循环中的作用: 在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。 

1.2、🌈while 循环中的continue 

​
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
  {
   if(i == 5)
   continue;
   printf("%d ", i);
   i = i+1;
  }
 return 0;
}

​

🔸可以看到,i 进循环之后,i 不断增加,当 i 等于5时,进行了一次 continue,之后输出就没有 i 等于5的值,但之后仍然进入循环,持续输出直到满足 while 的条件为止,循环结束;

⭕️总结:

continue在while循环中的作用就是: continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。

2、⭐️for 循环⭐️

⭕️语法: for(表达式1; 表达式2; 表达式3)

                      循环语句;

🔶表达式1为初始化部分,用于初始化循环变量的;

🔶表达式2为条件判断部分,用于判断循环时候终止;

🔶表达式3为调整部分,用于循环条件的调整。 

//使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>

int main()
{
 int i = 0;
 //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
 for(i=1; i<=10; i++)
 {
   printf("%d ", i);
 }
 return 0;
}

⭕️在for循环中也可以出现break和continue,他们的意义和使用方法在while循环中是一样的,注意遇到 continue ,会跳过 continue 后面的代码,直接去循环的调整部分。

2.1、🌈for 循环的变种

int main()
{
    for (;;)
    {
        printf("hehe\n");
    }

    return 0;
}

🔸此代码for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,很容易导致问题,比如上述代码判断部分恒为真,最后输出无数次hehe,且不会停止,会一直循环。

int main()
{
    int i = 0;
    int j = 0;
    //这里打印多少个hehe?
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10; j++)
        {
            printf("hehe\n");
        }
    }

    return 0;
}

🔸此代码包含了一个双层嵌套的 for 循环结构。外层 for 循环控制变量 i ,内层循环控制变量 j,会输出10*10=100个hehe

int main()
{
    //代码3
    int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个hehe?

    for (; i < 10; i++)
    {
        for (; j < 10; j++)
        {
            printf("hehe\n");
        }
    }

    return 0;
}

🔸此代码最后只打印出10个hehe,这是因为 i 和 j 都省略了初始化部分,尤其是 j 省略了 j=0,这会导致第一次外循环进来的时候,j 的内循环已经循环了三次,j 已经变成10了,当 i 再次增加的时候内循环就进不去了,所以只输出了10个。

2.2、🌈for 循环与 while 循环

🔶while 循环在循环开始前检查条件,如果条件为真,则执行循环体中的代码。 

适用场景:

🔸当循环的结束条件在循环体内部动态计算时。

🔸当只需检查一个条件就决定是否继续循环时。 

🔶for 循环也用于重复执行代码,但它在循环开始前就初始化变量,并在每次循环结束时更新变量,检查条件

适用场景:

🔸当已知循环的执行次数时。

🔸遍历数组或集合等需要计次遍历的情况。

区别:

🔶初始化:for 循环将初始化、条件检查和步进操作集于一体,适合于执行已知次数的循环;while 循环在循环开始前仅检查条件,适用于未知循环次数的情况。

🔶代码结构:for 循环的代码结构集中,使得循环的初始化、条件和步进一目了然,便于阅读和管理;while 循环的这些元素可能分散在代码的不同部分,需要更多的注意力来确保逻辑正确。

3、⭐️do...while() 循环⭐️

⭕️语法: 

do

循环语句;

while(表达式);

⭕️do while循环至少执行一次,使用的场景有限,所以不是经常使用。 

int main()
{
	int i = 10;
	do
	{
	  printf("%d\n", i);
	} while (i < 10);
	return 0;
}

🔸从显示结果来看,do while()循环先执行一次代码块内容,之后才进入while语句中的判断,所以输出一次10。

🔸在do while() 循环中也可以出现break和continue,他们的意义和使用方法在while循环中是一样的

 本文到此结束💞💞💞感谢大家花费宝贵的时间阅读本文章,制作不易,希望大家多多支持呀😘😘😘,如有任何问题欢迎各位大佬在评论区批评指正!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

剪画小程序:短视频搬运必备!去除视频字幕!

在这个人人都自媒体的盛世&#xff0c;新人想要创作爆款视频那里难上加难&#xff0c;所以搬运视频就成了很多新手自媒体人的不二选择。 搬运优质内容成为许多人的需求。但原视频中的字幕往往成为困扰大家的难题。 你是否曾为了搬运一个精彩的短视频&#xff0c;却因为无法去除…

gitee设置ssh公钥密码避免频繁密码验证

gitee中可以创建私有项目&#xff0c;但是在clone或者push都需要输入密码&#xff0c; 比较繁琐。 公钥则可以解决该问题&#xff0c;将私钥放在本地&#xff0c;公钥放在gitee上&#xff0c;当对项目进行操作时带有的私钥会在gitee和公钥进行验证&#xff0c;避免了手动输入密…

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接&#xff1a;[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机&#xff0c;得到如下页面&#xff0c;类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果&#xff0c;可以猜测php脚本命令是ping -c 4 $ip&#xff0c;暂时不知道执行的函数…

【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结

文章目录 文件存储存储到文件读取文件 SharedPreferences存储存储获取SharedPreferences对象Context 类的 getSharedPreferences() 方法Activity 类的 getPreferences() 方法PreferenceManager 类中的 getDefaultSharedPreferences() 方法 示例 读取记住密码的功能 SQLite数据库…

通信协议_C#实现CAN通信

CAN协议 CAN&#xff08;Controller Area Network&#xff09;即控制器局域网络。特点&#xff1a; 多主网络&#xff1a;网络上的任何节点都可以主动发送数据&#xff0c;不需要一个固定的主节点。双绞线&#xff1a;使用双绞线作为通信介质&#xff0c;支持较远的通信距离。…

挑战房市预测领头羊:KNN vs. 决策树 vs. 线性回归

挑战房市预测领头羊&#xff08;KNN&#xff0c;决策树&#xff0c;线性回归&#xff09; 1. 介绍1.1 K最近邻&#xff08;KNN&#xff09;&#xff1a;与邻居的友谊1.1.1 KNN的基础1.1.2 KNN的运作机制1.1.3 KNN的优缺点 1.2 决策树&#xff1a;解码房价的逻辑树1.2.1 决策树的…

kafka服务介绍

kafka 安装使用管理 Kafka Apache Kafka 是一个开源的分布式事件流平台&#xff0c;主要用于实时数据传输和流处理。它最初由 LinkedIn 开发&#xff0c;并在 2011 年成为 Apache 基金会的顶级项目。Kafka 设计的目标是处理大规模的数据流&#xff0c;同时提供高吞吐量、低延迟…

shopee虾皮 java后端 一面面经 整体感觉不难

面试总结&#xff1a;总体不难&#xff0c;算法题脑抽了只过了一半&#xff0c;面试官点出了问题说时间到了&#xff0c;反问一点点&#xff0c;感觉五五开&#xff0c;许愿一个二面 1.Java中的锁机制&#xff0c;什么是可重入锁 Java中的机制主要包括 synchronized关键字 Loc…

SpringBoot整合elasticsearch-java

一、依赖 系统使用的是ElasticSearch8.2.0 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.0</version> </dependency> 二、配置 1、yml文件配置 elastics…

SpringBoot入门:如何新建SpringBoot项目(保姆级教程)

在本文中&#xff0c;我们将演示如何新建一个基本的 Spring Boot 项目。写这篇文章的时候我还是很惊讶的&#xff0c;因为我发现有些java的初学者&#xff0c;甚至工作10年的老员工居然并不会新建一个SpringBoot项目&#xff0c;所以特别出了一篇文章来教大家新建一个SpringBoo…

关于pycharm上push项目到gitee失败原因

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;https://blog.csdn.net/u011628215/article/details/140577821?spm1001.2014.3001.5502 前言&#xff1a;最近新建项目push上gitee都没有问题&#xff0c;但是当在gitee网站进行了一个…

基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)

构建监控平台数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示&#xff0c;运维团队可以迅速发现异常&#xff0c;优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…

CefSharp音视频编译与免费下载

注&#xff1a;Cefharp 音频和视频播放编译&#xff0c;生成相应的dll文件&#xff0c;从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例&#xff0c;您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

【Qt 】JSON 数据格式详解

文章目录 1. JSON 有什么作用?2. JSON 的特点3. JSON 的两种数据格式3.1 JSON 数组3.2 JSON 对象 4. Qt 中如何使用 JSON 呢&#xff1f;4.1 QJsonObject4.2 QJsonArray4.3 QJsonValue4.4 QJsonDocument 5. 构建 JSON 字符串6. 解析 JSON 字符串 1. JSON 有什么作用? &#x…

VIN解析汽车详情|阿里云实现调用API接口

介绍&#xff1a; 本次解析通过阿里云云市场的云服务来实现通过17位车架号来自动识别车型的详细信息&#xff0c;首先需要准备选择一家可以提供查询的商品。 https://market.aliyun.com/apimarket/detail/cmapi00065864#skuyuncode5986400001 步骤1: 选择商品 如图点击免费…

鸿蒙界面开发

界面开发 //构建 → 界面 build() {//行Row(){//列Column(){//文本 函数名(参数) 对象.方法名&#xff08;参数&#xff09; 枚举名.变量名Text(this.message).fontSize(40)//设置文本大小.fontWeight(FontWeight.Bold)//设置文本粗细.fontColor(#ff2152)//设置文本颜色}.widt…

四、GD32 MCU 常见外设介绍 (5) TIMER 模块介绍

5.1.TIMER 基础知识 TIMER分高级定时器&#xff0c;通用定时器L0&#xff0c;L1&#xff0c;L2和基本定时器。 5.2.硬件连接说明 TIMER 属于片内外设&#xff0c;对于外部硬件设计&#xff0c;只需要单独IO口外接信号线即可。 5.3.GD32 TIMER 外设原理简介&#xff08;以 G…

Mysql或MariaDB数据库的用户与授权操作——实操保姆级教程

一、问题描述 在日常的工作中,我们需要给不同角色的人员创建不同的账号,他们各自可访问的数据库或权限不一样,这时就需要创建用户和赋予不同的权限内容了。 二、问题分析 1、创建不同的角色账号; 2、给这些账号授予各自可访问数据库的权限。 三、实现方法 Centos8安装…

(7) cmake 编译C++程序(二)

文章目录 概要整体代码结构整体代码小结 概要 在ubuntu下&#xff0c;通过cmake编译一个稍微复杂的管理程序 整体代码结构 整体代码 boss.cpp #include "boss.h"Boss::Boss(int id, string name, int dId) {this->Id id;this->Name name;this->DeptId …

最简单的typora+gitee+picgo配置图床

typoragiteepicgo图床 你是否因为管理图片而感到头大&#xff1f;是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了&#xff0c;它们可以帮你轻松打造自己的图床&#xff0c;让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧&#xff01; Typora …