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

C语言 --- 分支

C语言 --- 分支

  • 语句
  • 分支语句
    • 含义
    • if...else语句
      • 单分支if语句
        • 语法形式
      • 双分支 if-else 语句
        • 语法形式
      • 悬空else
        • 含义
        • 问题描述
      • 多分支 if-else 语句
        • 语法形式
    • switch...case语句
      • 含义
      • 语法形式
  • 总结

💻作者简介:曾与你一样迷茫,现以经验助你入门 C 语言
💡个人主页:@笑口常开xpr的个人主页
📚系列专栏:C 启新程
✨代码趣语:C 语言是一种简洁、高效、强大的语言,它能够让你做任何你想做的事情。
💪代码千行,始于坚持,每日敲码,进阶编程之路。

在这里插入图片描述

       在编程的世界里,每一行代码都可能隐藏着无限的可能性。你是否想过,一个小小的程序究竟能改变什么?它可以是解决复杂问题的工具,也可以是实现梦想的桥梁。今天,就让我们一起走进 C 语言分支和循环的世界,探索它的无限潜力。

语句

C语言的代码是由⼀条⼀条的语句构成的,C语言中的语句可为以下五类:

  • 空语句
  • 表达式语句
  • 函数调用语句
  • 复合语句
  • 控制语句

在这里插入图片描述

分支语句

含义

       在 C 语言中,分支语句也被称为选择语句,它通常用于根据不同的条件来执行不同的代码块。

if…else语句

if-else 语句是最基本的选择结构,用于根据条件的真假来决定执行哪一段代码。

单分支if语句

语法形式
if(表达式)
{
//当表达式为真时,执行的代码块。
}

注:如果表达式的结果为真,则语句执行。在C语言中0表示假,非0表示真。

下面展示一些 代码示例

#include <stdio.h>
int main() 
{int num = 10;scanf("%d", &num);//输入一个数字if (num > 5) //if语句进行条件判断{printf("输入的数字大于5\n");}return 0;
}

代码解释

在上面的代码中,如果输入的数字大于5,则会输出"输入的数字大于5";
反之,则不输出。

双分支 if-else 语句

语法形式
if(表达式)
{
//当表达式为真时,执行的代码块。
}
else
{
//当表达式为假时,执行的代码块。
}

注:在C语言中语句是以分号结束,且从主函数开始执行,自上而下依次执行的。

下面展示一些 代码示例

#include <stdio.h>
int main() 
{int num = 10;scanf("%d", &num);//输入一个数字if (num > 5) //条件判断{printf("输入的数字大于5\n");//条件为真时执行}else{printf("输入的数字小于5\n");//条件为假时执行}return 0;
}

代码解释

在上面的代码中,如果输入的数字大于5,则会输出"输入的数字大于5",这句话;
反之,则输出"输入的数字小于5"这句话。

悬空else

含义

“悬空 else”是在使用 if-else 语句嵌套时容易出现的一个问题,它涉及到 else 子句与 if 语句的匹配规则。

问题描述

       在 C 语言中,当有多个 if 语句嵌套且只有一个 else 语句时,else 子句会和离它最近的、还未匹配 else 的 if 语句进行匹配,即使在代码缩进上可能会让人产生误解,这就可能导致程序的逻辑与开发者的预期不符,从而出现 “悬空 else” 问题。

下面展示一些 代码示例

#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

代码解释

在 C 语言中,else子句总是与离它最近的、尚未匹配else的if语句相匹配。
这里的else是与内层的if (b == 2)相匹配,而不是外层的if (a == 1)。
首先判断外层条件a == 1,由于a的值为0,所以a == 1这个条件不成立;
那么内层的if-else语句就不会被执行。
由于外层if (a == 1)条件不成立,程序不会进入内层的if-else判断;
因此不会输出任何信息,程序直接结束。

改进建议

为了避免 “悬空 else” 问题带来的逻辑混淆;
建议使用**花括号{ }**明确代码块的范围,让代码的逻辑更加清晰。

下面展示 修改后的代码

#include <stdio.h>int main()
{int a = 0;int b = 2;if (a == 1) {if (b == 2) {printf("hehe\n");}else {printf("haha\n");}}return 0;
}

多分支 if-else 语句

语法形式
if(表达式)
{
//当表达式为真时,执行的代码块。
}
else if(表达式)
{
//当if的表达式为假时且else if的表达式为真时,执行的代码块。
}
...
...
else
{
//当前面的表达式都为假时,执行的代码块。
}

下面展示一些 代码示例

#include <stdio.h>int main() 
{int score = 0;scanf("%d", &score);if (score >= 90){printf("优秀\n");}else if (score >= 70) {printf("良好\n");}else if (score >= 60) {printf("及格\n");}else {printf("不及格\n");}return 0;
}

代码解释

在上面的代码中,如果输入的成绩大于等于90,则会输出"优秀";
如果输入的成绩大于等于70小于等于90,则会输出"良好";
如果输入的成绩大于等于90,则会输出"优秀";
如果输入的成绩大于等于60小于等于70,则会输出"及格";
反之,如果分数小于60,则输出"不及格"。

switch…case语句

含义

switch 语句用于基于一个表达式的值从多个分支中选择一个来执行。

语法形式

switch (expression) 
{case constant1:// 当 expression 的值等于 constant1 时执行的代码块break;//跳出switch...case语句case constant2:// 当 expression 的值等于 constant2 时执行的代码块break;// 可以有更多的 case 分支default:// 当 expression 的值与所有 case 常量都不匹配时执行的代码块break;
}

注:switch语句用于判断条件有多个结果的情况
它把多重的else if改成更易用、可读性更好的形式
switch后的expression必须是整型表达式
case后的值必须是整形常量表达式
case决定入口,break决定出口
下面展示第一个 代码示例

//输入1~7的数字,打印对应的星期几
#include<stdio.h>
int main()
{int day = 0; scanf("%d", &day);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;}return 0;
}

代码解释

此程序根据 day 的值输出对应的星期信息。
break 语句用于跳出 switch 语句;
若省略 break,会继续执行后续 case 分支的代码。

编程好习惯

1 在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加 break语句)。
2 在每个switch语句中都放一条default子句是个好习惯,甚至可以在后边再加一个break。

下面展示第二个 代码示例

#include<stdio.h>
int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入错误,请输入1~7的数字\n");break;}return 0;
}

代码解释

此程序根据 day 的值输出是工作日还是休息日。
如果输入1-5,则输出工作日;
如果输入6-7,则输出休息日;
反之,则输出"输入错误,请输入1~7的数字"这句话。

注:default和case没有顺序要求,取决于编码习惯

在这里插入图片描述

总结

       至此,关于 C 语言的分支探索暂告一段落,但你的编程征程才刚刚启航。写代码是与机器深度对话,过程中虽会在语法、算法困境里挣扎,但这些磨砺加深了对代码的理解。愿你合上电脑后,灵感不断,在 C 语言的世界里持续深耕,书写属于自己的编程传奇,下一次开启,定有全新的精彩等待。小编期待重逢,盼下次阅读见你们更大进步,共赴代码之约!

相关文章:

C语言 --- 分支

C语言 --- 分支 语句分支语句含义if...else语句单分支if语句语法形式 双分支 if-else 语句语法形式 悬空else含义问题描述 多分支 if-else 语句语法形式 switch...case语句含义语法形式 总结 &#x1f4bb;作者简介&#xff1a;曾与你一样迷茫&#xff0c;现以经验助你入门 C 语…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.10 ndarray内存模型:从指针到缓存优化

2.10 ndarray内存模型&#xff1a;从指针到缓存优化 目录 #mermaid-svg-p0zxLYqAnn59O2Xe {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-p0zxLYqAnn59O2Xe .error-icon{fill:#552222;}#mermaid-svg-p0zxLYqAnn59O…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.6 广播机制核心算法:维度扩展的数学建模

2.6 广播机制核心算法&#xff1a;维度扩展的数学建模 目录/提纲 #mermaid-svg-IfELXmhcsdH1tW69 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IfELXmhcsdH1tW69 .error-icon{fill:#552222;}#mermaid-svg-IfELXm…...

K8S极简教程(4小时快速学会)

1. K8S 概览 1.1 K8S 是什么 K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ 1.2 K8S核心特性 服务发现与负载均衡&#xff1a;无需修改你的应用程序即可使用陌生的服务发现机制。存储编排&#xff1a;自动挂载所选存储系统&#xff0c;包括本地存储。Secret和…...

系统URL整合系列视频二(界面原型)

视频 系统URL整合系列视频二&#xff08;界面原型&#xff09; 视频介绍 &#xff08;全国&#xff09;大型分布式系统Web资源URL整合需求界面原型讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格&#xff0c;控制粒度也越来越细。安全级别提高的同时也增加…...

虚幻浏览器插件 UE与JS通信

温馨提示&#xff1a;本节内容需要结合插件Content下的2_Communication和Resources下的sample.html 一起阅读。 1. UE调用JS 1.1 JS脚本实现 该部分共两步: 导入jstote.js脚本实现响应函数并保存到 ue.interface 中 jsfunc 通过json对象传递参数&#xff0c;仅支持函数名小…...

OpenAI深夜反击:o3-mini免费上线,能否撼动DeepSeek的地位?

还在为寻找合适的 AI 模型而烦恼吗&#xff1f;chatTools 平台为您精选 o1、GPT4o、Claude、Gemini 等顶尖 AI 模型&#xff0c;满足您不同的 AI 应用需求。立即体验强大的 AI 能力&#xff01; 深夜反击&#xff0c;OpenAI祭出o3-mini 在DeepSeek异军突起&#xff0c;搅动AI行…...

Golang 应用的 Docker 部署方式介绍及使用详解

本文将介绍如何使用 Docker 部署一个基于 Go 语言的后台服务应用 godco&#xff0c;并介绍如何配置 MongoDB 数据库容器的连接&#xff0c;确保应用能够成功启动并连接到容器方式部署的mongoDB数据库。 前提条件 1.已安装 Docker/Podman 2.已安装 MongoDB 数据库容器&#xff…...

deep seek R1本地化部署及openAI API调用

先说几句题外话。 最近deep seek火遍全球&#xff0c;所以春节假期期间趁着官网优惠充值了deep seek的API&#xff0c;用openAI的接口方式尝试了下对deep seek的调用&#xff0c;并且做了个简单测试&#xff0c;测试内容确实非常简单&#xff1a;通过prompt提示词让大模型对用…...

力扣第435场周赛讲解

文章目录 题目总览题目详解3442.奇偶频次间的最大差值I3443.K次修改后的最大曼哈顿距离3444. 使数组包含目标值倍数的最少增量3445.奇偶频次间的最大差值 题目总览 奇偶频次间的最大差值I K次修改后的最大曼哈顿距离 使数组包含目标值倍数的最少增量 奇偶频次间的最大差值II …...

初入机器学习

写在前面 本专栏专门撰写深度学习相关的内容&#xff0c;防止自己遗忘&#xff0c;也为大家提供一些个人的思考 一切仅供参考 概念辨析 深度学习&#xff1a; 本质是建模&#xff0c;将训练得到的模型作为系统的一部分使用侧重于发现样本集中隐含的规律难点是认识并了解模型&…...

Signature

Signature 题目是&#xff1a; import ecdsaimport random​def ecdsa_test(dA,k):​sk ecdsa.SigningKey.from_secret_exponent(secexpdA,curveecdsa.SECP256k1)sig1 sk.sign(databHi., kk).hex()sig2 sk.sign(databhello., kk).hex()#不同的kr1 int(sig1[:64], 16)s1 i…...

93,【1】buuctf web [网鼎杯 2020 朱雀组]phpweb

进入靶场 页面一直在刷新 在 PHP 中&#xff0c;date() 函数是一个非常常用的处理日期和时间的函数&#xff0c;所以应该用到了 再看看警告的那句话 Warning: date(): It is not safe to rely on the systems timezone settings. You are *required* to use the date.timez…...

笔灵ai写作技术浅析(四):知识图谱

知识图谱(Knowledge Graph)是一种结构化的知识表示方式,通过将知识以图的形式进行组织,帮助AI系统更好地理解和利用信息。在笔灵AI写作中,知识图谱技术被广泛应用于结构化组织各种领域的知识,使AI能够根据写作主题快速获取相关的背景知识、概念关系等,从而为生成内容提供…...

Chromium132 编译指南 - Android 篇(四):配置 depot_tools

1. 引言 在前面的章节中&#xff0c;我们详细介绍了编译 Chromium 132 for Android 所需的系统和硬件要求&#xff0c;以及如何安装和配置基础开发环境和常用工具。完成这些步骤后&#xff0c;接下来需要配置 depot_tools&#xff0c;这是编译 Chromium 的关键工具集。depot_t…...

使用真实 Elasticsearch 进行高级集成测试

作者&#xff1a;来自 Elastic Piotr Przybyl 掌握高级 Elasticsearch 集成测试&#xff1a;更快、更智能、更优化。 在上一篇关于集成测试的文章中&#xff0c;我们介绍了如何通过改变数据初始化策略来缩短依赖于真实 Elasticsearch 的集成测试的执行时间。在本期中&#xff0…...

SQL进阶实战技巧:如何分析浏览到下单各步骤转化率及流失用户数?

目录 0 问题描述 1 数据准备 2 问题分析 3 问题拓展 3.1 跳出率计算...

机器学习--概览

一、机器学习基础概念 1. 定义 机器学习&#xff08;Machine Learning, ML&#xff09;&#xff1a;通过算法让计算机从数据中自动学习规律&#xff0c;并利用学习到的模型进行预测或决策&#xff0c;而无需显式编程。 2. 与编程的区别 传统编程机器学习输入&#xff1a;规…...

低代码系统-产品架构案例介绍、炎黄盈动-易鲸云(十二)

易鲸云作为炎黄盈动新推出的产品&#xff0c;在定位上为低零代码产品。 开发层 表单引擎 表单设计器&#xff0c;包括设计和渲染 流程引擎 流程设计&#xff0c;包括设计和渲染&#xff0c;需要说明的是&#xff1a;采用国际标准BPMN2.0&#xff0c;可以全球通用 视图引擎 视图…...

Electricity Market Optimization 探索系列(二)

​ 本文参考链接link 负荷持续时间曲线 (Load Duration Curve)&#xff0c;是根据实际的符合数据进行降序排序之后得到的一个曲线 这个曲线能够发现负荷在某个区间时&#xff0c;将会持续多长时间&#xff0c;有助于发电容量的规划 净负荷(net load) 是指预期负荷和预期可再生…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...