当前位置: 首页 > 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) 是指预期负荷和预期可再生…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...