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

C语言(分支结构)

问题引出

我们在程序设计往往会遇到如下的问题,比如下的函数的计算。
在这里插入图片描述
也就是我们是必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句。

条件判断

根据某个条件成立与否,决定是否执行指定的任务(操作)。
在这里插入图片描述
条件判断的结果是逻辑值(布尔类型值,也就是说分支语句的条件可以使用关系表达式和逻辑表达式),在程序中用真(1)和假(0)来表示。

关系运算及其表达式

关系运算符及其优先次序

关系运算符是用来进行比较的符号,C语言中提供了6种关系运算符:
在这里插入图片描述

关系表达式

关系表达式是指用关系运算符将两个表达式连接起来组成的有意义的式子。
在这里插入图片描述
在C语言中,用1(非0)表示关系表达的值为真(条件成立),0表示关系表达式的值为假(条件不成立),即关系表达式的值要么是1(条件成立),要么是0(条件不成立)

问题引出

有时,只用一个简单的关系表达式无法完整地表达一个条件。
在这里插入图片描述
其中的条件需要用逻辑表达式来表示:x!=0&&a!=0 ,&&就是一种逻辑运算符。

逻辑运算及其表达式

逻辑运算符及其优先级

逻辑运算符是构成复杂的复合条件的运算符。
C语言中提供3种逻辑运算符:
在这里插入图片描述

逻辑表达式

在这里插入图片描述
用逻辑运算将关系表达式或逻辑量连接起来构成的有意义的式子。
在这里插入图片描述
逻 辑 表 达 式 中 各 种 运 算 符 的 优 先 级 顺 序 如
下:
!(逻辑非) → 算术运算符 → 关系运算符 → &&和|| → 赋值运算符
C语言编译系统在表示逻辑运算符结果时:真用1表示,假用0表示

案例

假设a = 4,b = 5,则:

 !a        -- 0   
a && b       -- 1 
a || b      -- 1 
!a || b     -- 14 && 0 || 2  -- 1 

⼩贴⼠:
实际上,逻辑运算符两侧的运算对象不但可以是0和1,或是0和⾮0,⽽且也可以是字符型、实型和指针型等。系统最终是以0和⾮0来判定它们的真假的。例如:’c’ && ‘d’ 为1

⽤if语句实现分⽀结构

单分支:if…

语法:

// 语法1:舍弃{}if (表达式)
单语句; // 语法2:保留{}
if  (表达式){}

流程图
在这里插入图片描述
功能
若表达式值为True(⾮0),则执⾏表达式后⾯的语句,执⾏完该语句后继续执⾏if语句后的语句。
若表达式值为0,则不执⾏表达式后⾯的语句⽽直接执⾏if语句后⾯的语句。
说明:
如果表达式(条件表达式)后⾯的是复合语句,则要⽤⼀对花括号{}括起来。单语句可有可⽆。
案例:
要求:计算并输出下列分段函数的值
在这里插入图片描述
在这里插入图片描述
代码:

#include <stdio.h>int main(){// 创建两个变量,用来存储两个操作数double x,y = -2; // 我们给y赋初始值,假定x < 0// 从控制台输入xprintf("请输入一个整数,作为x的值:\n");scanf("%lf",&x);// 校验if (x >= 0) y = 2;printf("x=%lf,y=%lf\n",x,y);return 0; 
}

案例:
要求:有a,b,c三个数,要求从控制台输⼊,并且求出最⼤值
分析:

  1. 通过控制台给a,b,c赋值
  2. 创建⼀个变量max,⽤来存放a,b,c中的最⼤值,默认a是最⼤值(这样可以减少⼀次判断)
  3. 让b,c和max进⾏⽐较,将最⼤值存⼊max
    代码:
 /*************************************************************************> File Name:    
> Author:       
demo02.cfpf> Description:  单分支 if..> Created Time: 2024年11月29日 星期五 10时59分45秒
************************************************************************/#include <stdio.h>int main(int argc,char *argv[]){// 要求:求a,b,c中的最大值
// 创建三个变量,用来存放a,b,c的值
int a,b,c;// 创建一个变量,用来存放max的值
printf("请在控制台输入三个整数:\n");scanf("%d%d%d",&a,&b,&c);// 创建一个变量,用来存放max的值
int max = a;// 让最大值分别和b,c进行比较
if (max < b){max = b; // 如果max < b,就让b作为a,b中的最大值
}if (max < c){max = c; // 其实a,b中的最大值和c比}printf("%d,%d,%d中的最大值是%d\n",a,b,c,max);return 0;}

有可能产⽣的问题:
scanf()同时输⼊多个变量时,默认时使⽤空格或者回⻋换⾏。
在变量赋值前使⽤变量,导致运算结果错误(莫名输出随机数)

双分支:if…else…

语法:

 // 舍弃{}if (表达式)
单语句1;else
单语句2;// 针对以上写法,我们可以使用三目表达式:表达式 ? 单语句1 : 单语句2// 保留{}if  (表达式){
单语句或者复合语句1;}else{
单语句或者复合语句2;}

注意:
else语句本身不能单独存在,必须依赖于if配对使用
流程图:
在这里插入图片描述
功能:
若表达式的值为1,则执行语句1;否则执行语句2。不管条件表达式成不成立都要执行一个语句,其次需要
主要的是,语句1和语句2都可以是复合语句。
说明:
if…else…结构可以实现双分支选择结构。C语言允许if…else…结构嵌套。即在语句1与语句2中又可以包含完
整的if语句或者if…else结构,并且这种嵌套可以多层(为了保证程序的执行效率,建议不超过4层)。
利用if…else结构的嵌套,可以实现多分支选择结构。

案例:
要求:计算并输出下列分段函数的值
在这里插入图片描述
流程图:
在这里插入图片描述
代码:

/*************************************************************************> File Name:    
> Author:       
demo03.cfpf> Description:  双分支 if..else..> Created Time: 2024年11月29日 星期五 11时42分39秒
#include <stdio.h>************************************************************************/int main(int argc,char *argv[]){}// 需求:计算并输出下列分段函数的值
// 创建两个变量,存放x,y的值
int x,y;// 通过键盘录入数据
printf("请输入一个整数:\n");scanf("%d",&x);// 校验
if (x < 0)y = -2;elsey = 2;// 打印输出测试结果
printf("x=%d,y=%d\n",x,y);return 0;}

改造为三⽬运算符的写法:

 /*************************************************************************> Created Time: 2024年11月29日 星期五 11时42分39秒
************************************************************************/int main(int argc,char *argv[])14// 需求:计算并输出下列分段函数的值
// 创建两个变量,存放x,y的值int x,y;// 通过键盘录入数据
printf("请输入一个整数:\n");scanf("%d",&x);// 校验
// 三目表达式
y = x < 0 ? -2 : 2;// 打印输出测试结果
printf("x=%d,y=%d\n",x,y);return 0;}

多分支:if…else…if…else

语法:

写法1:嵌套if..else..(不推荐)if(表达式1) 语句1;elseif(表达式2) 语句2;else...elseif(表达式n) 语句n;else 语句n+1;
写法2:并列if..else..if....else..(推荐)    
if(表达式1) 语句1;else if(表达式2) 语句2;...[else if(表达式n) 语句n;][else 语句n+1;]

在这里插入图片描述
案例:
要求:根据学⽣的成绩,对学⽣进⾏分级,
成绩 >= 90,A
成绩 >= 80,B
成绩 >= 60,C
成绩 < 60,D
代码

#include <stdio.h>// 方式1:借助于执行顺序,减少判断的条件
int if_test1(){
``  // 创建一个变量,用来存放输入的成绩int score;// 通过控制台输入一个成绩printf("请输入一个整数:\n");scanf("%d",&score);// 校验,分级 95if(score >= 90){printf("A\n");}else if(score >= 80){printf("B\n");}else if(score >= 60){printf("C\n");}else {printf("D\n");}}// 方式2:不借助于执行顺序,做更精准的判断
int if_test2(){// 创建一个变量,用来存放输入的成绩int score;// 通过控制台输入一个成绩printf("请输入一个整数:\n");scanf("%d",&score);// 校验,分级 if(score >= 60 && score < 80){printf("C\n");}`else if(score >= 80 && score < 90){}printf("B\n");else if(score >= 90){}else 
{}}printf("A\n");printf("D\n");int main(int argc,char *argv[]){}

if…else结构注意点

if…else结构中的语句1与语句2都可以是复合语句。
在if…else结构中,语句1与语句2都可以是空语句。
在这里插入图片描述

if语句的嵌套

在这里插入图片描述
注意:
① else 总是与前面最近的未配对的if配对使用
② 可通过增加{}来确定配对关系
③ 只要if中包含if,都属于是if语句的嵌套

/*************************************************************************> File Name:    
demo04.c> Author:       
FPF> Description:  多分支:if..else if....else..> Created Time: 2024年11月29日 星期五 14时20分18秒
************************************************************************//*** 要求:根据学生的成绩,对学生进行分级,
成绩 >= 90,A
成绩 >= 80,B
成绩 >= 60,C
成绩 <  60,D*/#include <stdio.h>// 方式1:借助于执行顺序,减少判断的条件
int if_test1(){// 创建一个变量,用来存放输入的成绩
int score;// 通过控制台输入一个成绩
printf("请输入一个整数:\n");scanf("%d",&score);// 校验,分级 95if(score < 0 || score > 100){printf("您的输入不合法!\n");}else{if(score >= 90){printf("A\n");}   else if(score >= 80){printf("B\n");}else if(score >= 60){printf("C\n");}else {printf("D\n");}}}// 方式2:不借助于执行顺序,做更精准的判断
int if_test2(){// 创建一个变量,用来存放输入的成绩int score;// 通过控制台输入一个成绩printf("请输入一个整数:\n");scanf("%d",&score);// 校验,分级 if(score < 0 || score > 100){printf("您的输入不合法!\n");}else if(score >= 60 && score < 80){printf("C\n");}else if(score >= 80 && score < 90){printf("B\n");}else if(score >= 90){printf("A\n");}else {printf("D\n");}}int main(int argc,char *argv[]){if_test1();if_test2();return 0;}

如何摘除⼀个三位数中的每⼀位:
实现:123,个位数:123 % 10 = 3;⼗位数:123 % 100 / 10 = 2,123 / 10 % 10 =2;百位数:123 / 100 = 1

⽤switch语句实现分⽀结构

我们可以使用switch实现多分支选择结构(多分支也被称作多路分支)
语法:

 switch(表达式){case 常量表达式1:
语句1;break;case 常量表达式2:
语句2;break;...case 常量表达式n:
语句n;break;default:
语句n+1;break;// 一般省略
}

流程图:
在这里插入图片描述
在这里插入图片描述
说明:
① switch后括号内的表达式可以是任何类型的表达式,但是表达式的值必须为 整数值(整型,字符型,枚
举)
② 若表达式的值与某个常量表达式的值相等时,执行此case后面的语句;若没有相等的值时,执行
default后面的语句
③ 每个case后面的常量表达式的值必须不相同,否则出现矛盾。
④ 各个case和default出现的次序不影响执行结果。
⑤ case后面的语句中如果没有break语句,则执行完本case后的语句会接着执行下面的case;
⑥ 多个case公用一组语句。
案例:
要求:按照考试成绩的等级输出百分制分数段
分析:
设分段原则如下:
A级为85~100段;
B级为70~84段;
C级为60~69段;
D级为<60段;
输⼊其它字符时为错。
代码:

*************************************************************************> File Name:    demo05.c> Author:       冯鹏飞> Description:  多分支:switch> Created Time: 20241129日 星期五 155159************************************************************************/#include <stdio.h>/*- 要求:按照考试成绩的等级输出百分制分数段- 分析:设分段原则如下:      A级为85~100段;                 B级为70~84段;                  C级为60~69段;      D级为<60段;      输入其它字符时为错。*/int switch_test1(){// 创建一个变量,用来存放考试等级char grade;// 通过控制台输入一个字符printf("input grade:\n");scanf("%c",&grade);// 校验,根据等级输出分段switch(grade){case 'A':printf("85~100\n");break;case 'B':printf("70~84\n");break;case 'C':printf("60~69\n");break;case 'D':printf("<60\n");break;default:printf("Error\n");}}int main(int argc,char *argv[]){}

相关文章:

C语言(分支结构)

问题引出 我们在程序设计往往会遇到如下的问题&#xff0c;比如下的函数的计算。 也就是我们是必须要通过一个条件的结果来选择下一步的操作&#xff0c;算法上属于一个分支结构&#xff0c;C语言中实现分支结构主要使用if语句。 条件判断 根据某个条件成立与否&#xff0c…...

批量将不同的工作簿合并到同一个Excel文件

批量将不同的工作簿合并到同一个Excel文件 下面是一个示例&#xff0c;展示如何批量将不同的工作簿合并到同一个Excel文件&#xff0c;并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下&#xff1a; 步骤 1: 安装必要的库 首先确保你已安装 pan…...

详解AI网关助力配电房实现智能化管控应用

​对于一些建设年份久远的老旧配电房&#xff0c;由于配套降温散热设施设备不完善、线路设备老化等因素&#xff0c;极易出现因环境过热而影响设备正常稳定运行&#xff0c;进而导致电气故障甚至火灾等事故产生。 基于AI网关的配电房智能监控及管理 针对配电房的实时安全监测及…...

2025美赛数学建模常用数据库网站大全

优秀模板写作红宝书数学模型获取——更多资料请点击下方名片进群获取。 一、可以查询美国各个领域经济指标的网站: olap.epsnet.com.cnhttps://www.ers.usda.gov/data-products/rice-yearbook/www.ers.usda.govU.S. Energy Information Administration (EIA) www.eia.govhttp…...

Wordpress设置固定链接形式后出现404错误

比如固定连接设置为 /archives/%post_id%.html 这种形式&#xff0c;看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态...

我最近在干什么【1】

前言 打算开一个新系列&#xff0c;偏休闲点的&#xff0c;不是完整全面的技术分享&#xff0c;话题还是聚焦个人成长&#xff08;学的技术、了解到的信息、看的书……&#xff09; 方面。文章偏意识流点&#xff0c;单纯分享我最近在干什么&#xff0c;不定期更新&#xff0c…...

[Vue3]computed原理

Computed原理 不管在是 Vue 2 还是在 Vue 3 中&#xff0c;对 computed 本身的实现原理基本都是一样的。当使用 computed 计算属性时&#xff0c;组件初始化会对每一个计算属性都创建对应的 watcher , 然后在第一次调用自己的 getter 方法时&#xff0c;收集计算属性依赖的所有…...

Vue工程化开发中各文件的作用

1.main.js文件 main.js文件的主要作用&#xff1a;导入App.vue&#xff0c;基于App.vue创建结构渲染index.html。...

【c++笔试强训】(第三十一篇)

目录 最⻓回⽂⼦序列&#xff08;动态规划-区间dp&#xff09; 题目解析 讲解算法原理 编写代码 添加字符&#xff08;字符串&#xff09; 题目解析 讲解算法原理 编写代码 最⻓回⽂⼦序列&#xff08;动态规划-区间dp&#xff09; 题目解析 1.题目链接&#xff1a;最…...

Go 1.19.4 HTTP编程-Day 20

1. HTTP协议 1.1 基本介绍 HTTP协议又称超文本传输协议&#xff0c;属于应用层协议&#xff0c;在传输层使用TCP协议。HTTP协议属是无状态的&#xff0c;对事务处理没有记忆能力&#xff0c;如果需要保存状态需要引用其他技术&#xff0c;如Cookie。HTTP协议属是无连接的&…...

MySQL 8.0 的主主复制(双向复制)

在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主主复制&#xff08;双向复制&#xff09;&#xff0c;步骤与 Linux 类似&#xff0c;但有一些特定的配置和路径需要注意。以下是详细的简化步骤&#xff1a; 1. 使用 root 用户登录 确保你以 root 用户登录到 MySQL …...

四、自然语言处理_03LSTM与GRU

0、前言 随着循环神经网络&#xff08;RNN&#xff09;在各种序列数据处理任务中被广泛应用&#xff0c;研究人员逐渐发现了其在处理长序列数据时会容易出现梯度消失&#xff08;vanishing gradient&#xff09;和梯度爆炸&#xff08;exploding gradient&#xff09;问题&…...

磁盘系列基础知识(一):硬盘;IDE;ATA;SATA;AHCI;SCSI;SAS

磁盘系列基础知识&#xff08;一&#xff09;硬盘 IDE ATA SATA AHCI SCSI SAS 硬盘厂家 西部数据Western Digital/WD. 希捷 SEAGATE、三星 SAMSUNG、东之 Toshiba、英特尔 Intel、金士顿 Kingston、闪迪 SanDisk、 英睿达 Crucial、浦科特 Plextor 硬盘类别 HDD &#xff08;…...

taro小程序进入腾讯验证码

接入原因 昨天突然晚上有人刷我们公司的登录发送短信接口&#xff0c;紧急将小程序的验证码校验更新上去了 接下来就是我们的接入方法&#xff0c;其实很简单&#xff0c;不过有时候可能大家着急就没有仔细看文档&#xff0c;腾讯验证码文档微信小程序地址&#xff0c;注意这里…...

原子类相关

原子引用 JUC 并发包提供了&#xff1a; AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...

RabbitMQ 客户端 连接、发送、接收处理消息

RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务&#xff0c;不是像其他服务器一样&#xff0c;负责逻辑处理&#xff0c;然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息&#xff0c; 第一步&a…...

Java Web 3 Axios Vue组件库

一 Ajax 1 同步 异步 2 原生Ajax 比较繁琐 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…...

双目相机的标定,视差图,深度图,点云生成思路与实现。

该文档记录从双目相机标定到点云生成的所有过程&#xff0c;同时会附上代码。 代码直接能跑。https://github.com/stu-yzZ/stereoCamera 目录 大致思路如下&#xff1a; 一、相机标定 1、相机参数介绍 2、单目相机标定 3、双目相机标定 二、图片畸变矫正 三、极线矫正…...

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…...

2、C++命名空间

命名空间 命名空间是一种用来避免命名冲突的机制; 原理是将一个全局的作用域分成一个个命名空间&#xff0c;每个命名空间是个单独的作用域,从而有效避免命名冲突。 注意&#xff1a;命名空间定义在全局 命名空间定义格式 使用&#xff1a; …...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

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

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

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...