C语言:分支结构

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        -- 1
4 && 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>
{// 创建两个变量,用来存储两个操作数double x,y = -2;// 我们给y赋初值,假定<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三个数,要求从控制台输入,并且求出最大值
    • 分析:
      • 通过控制台给a,b,c赋值
      • 创建一个变量max,用来存放a,b,c中的最大值,默认a是最大值
      • 让b,c和max进行比较,将最大值存入max
      • 代码:
#include <stdio.h>int main()
{// 创建三个变量,用来存放a,b,c的值int a,b,c;// 通过控制台输入a,b,c三个数printf("请在控制台输入三个整数:\n");scanf("%d%d%d",&a,&b,&c);// 创建一个变量maxint max = a;// 让最大值和b,c进行比较if(max < b){max = b;// 如果max < b,就让b作为最大值}if(max < c){max = c;// 如果max < c,就让c作为最大值}printf("%d,%d,%d中的最大值是%d\n",a,b,c,max);return 0;
}
双分支:if…else…

语法:

// 舍弃{}if(表达式)单语句1else单语句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…结构的嵌套,可以实现多分支选择结构

案例:

  • 要求:计算并输出下列分段函数的值
  • 代码:
#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;
}

改为三目运算符的写法:

#include <stdio.h>
int main(int argc, char *argv[])
{// 需求:计算并输出下列分段函数的值// 创建两个变量,存放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..elseif(表达式1)语句1elseif(表达式2)语句2else...elseif(表达式n)语句n;else 语句n+1;
写法2:并列if..else..if....else..(推荐)if(表达式1)语句1else if(表达式2)语句2...else if(表达式n)语句n;else 语句n+1

流程图:

在这里插入图片描述

案例:

  • 要求:根据学生的成绩,对学生进行分级

    成绩>=90,A;

    成绩>=80,B;

    成绩>=60,C;

    成绩<60,D;

  • 代码:


/**
* 要求:根据学生的成绩,对学生进 行分级,成绩 >= 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){printf("A\n");}else{printf("D\n");}
}int main(int argc,char *argv[])
{if_test1();if_test2();return 0;
}

if…else结构注意点

  • if…else结构中的语句1与语句2都可以是复合语句。
  • 在if…else结构中,语句1与语句2都可以是空语句。

在这里插入图片描述

if语句的嵌套

语法:

if(..)if(..) 语句1else   语句2elseif(..) 语句3else   语句4

流程图:

在这里插入图片描述

注意:

① else总是与前面最近的未配对的if配对使用

② 可通过增加{}来确定配对关系

③只要if中包含if,都属于是if语句的嵌套

案例:

/**
* 要求:根据学生的成绩,对学生进行分级,
成绩 >= 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,个位数:1233%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段;

​ 输⼊其它字符时为错。

  • 代码:
#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[])
{switch_test1();return 0;
}
案例:
  • 要求:若要求按照百分制考试分数输出等级。

  • 分析:

​ 若分段原则如下:

​ 90~100 为A级;

​ 80~89 为B级;

​ 70~79 为C级;

​ 60~69 为D级;

​ 其它为E级。

  • 代码:
#include <stdio.h>
/*
- 要求:若要求按照百分制考试分数输出等级
- 分析:
若分段原则如下:
90~100 为A级; 9,10
80~89 为B级; 8
70~79 为C级; 7
60~69 为D级; 6
其它为E级。
*/
int switch_test2()
{// 创建一个变量,存放分段标识(等级)int grade;// 通过键盘录入一个数字printf("input grade:\n");scanf("%d", &grade);// 校验switch ((grade / 10)){case 10:case 9:printf("A\n");break;case 8:printf("B\n");break;case 7:printf("C\n");break;case 6:printf("D\n");break;default:printf("E\n");}
}
int main(int argc, char *argv[])
{switch_test2();return 0;
}

​ 80~89 为B级;

​ 70~79 为C级;

​ 60~69 为D级;

​ 其它为E级。

  • 代码:
#include <stdio.h>
/*
- 要求:若要求按照百分制考试分数输出等级
- 分析:
若分段原则如下:
90~100 为A级; 9,10
80~89 为B级; 8
70~79 为C级; 7
60~69 为D级; 6
其它为E级。
*/
int switch_test2()
{// 创建一个变量,存放分段标识(等级)int grade;// 通过键盘录入一个数字printf("input grade:\n");scanf("%d", &grade);// 校验switch ((grade / 10)){case 10:case 9:printf("A\n");break;case 8:printf("B\n");break;case 7:printf("C\n");break;case 6:printf("D\n");break;default:printf("E\n");}
}
int main(int argc, char *argv[])
{switch_test2();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用anzocapital昂首资本技术优化订单执行

在金融市场的深海中&#xff0c;anzocapital昂首资本作为内行&#xff0c;深知订单执行的技术缺陷如何悄然侵蚀交易者的利润。那么&#xff0c;一个懂交易的人会如何避免这些缺陷&#xff0c;确保自己的投资策略不被市场波动所左右呢? 在订单执行过程中&#xff0c;技术缺陷可…

RTR Chaptor11 下

全局光照 定向遮蔽预计算定向遮蔽定向遮蔽的动态计算使用定向屏蔽进行着色 满反射全局光照表面预照明定向表面预照明预计算传输存储方法动态漫反射全局光照光照传播体积基于体素的方法屏幕空间方法其他方法 镜面全局光照局部环境贴图环境贴图的动态更新基于体素的方法平面反射屏…

超越DFINE最新目标检测SOTA模型DEIM

代码地址&#xff1a;https://github.com/ShihuaHuang95/DEIM 论文地址&#xff1a;DEIM: DETR with Improved Matching for Fast Convergence 论文中文版&#xff1a;DEIM: 改进匹配的 DETR 以实现快速收敛 以下是文章的主要贡献和发现&#xff1a; DEIM框架&#xff1a;提…

位运算的总结--奇思妙解

目录 前言 先回顾常用的位运算 1&#xff1a;给一个数 n &#xff0c;确定它的二进制表示中的第x位是0 还是 1 2&#xff1a;将一个数 n 的二进制表示的第x 位修改成 1 3&#xff1a;将一个数 n 的二进制表示的第 x位修改成 0 4&#xff1a;与位图联系 5&#xff1a;提取一…

语音识别flask接口开发

要开发一个flask语音识别接口&#xff0c;首先要解决语音文件在网络中的传输问题&#xff0c;然后选识别算法进行识别 文章目录 1、以二进制文件流方式上次语音2、网页端长连接流式上传语音文件3、语音识别接口 1、以二进制文件流方式上次语音 python服务端代码&#xff0c;以…

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…

JS中的原型链与继承

原型链的类比 JS中原型链&#xff0c;本质上就是对象之间的关系&#xff0c;通过protoype和[[Prototype]]属性建立起来的连接。这种链条是动态的&#xff0c;可以随时变更。 这个就跟C/C中通过指针建立的关系很相似&#xff0c;比如&#xff0c;通过指针建立一个链表&#xf…

CSS学习记录04

CSS边框 CSS border 属性指定元素边框的样式、宽度和颜色。border-style 属性指定要显示的边框类型。dotted - 定义点线边框dashed - 定义虚线边框solid - 定义实线边框double - 定义双边框groove - 定义3D坡口边框&#xff0c;效果取决于border-color值ridge - 定义3D脊线边框…

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…

福昕PDF低代码平台

福昕PDF低代码平台简介 福昕PDF 低代码平台是一款创新的工具&#xff0c;旨在简化PDF处理和管理的流程。通过这个平台&#xff0c;用户可以通过简单的拖拽界面上的按钮&#xff0c;轻松完成对Cloud API的调用工作流&#xff0c;而无需编写复杂的代码。这使得即使没有编程经验的…

oracle 11g中如何快速设置表分区的自动增加

在很多业务系统中&#xff0c;一些大表一般通过分区表的形式来实现数据的分离管理&#xff0c;进而加快数据查询的速度。分区表运维管理的时候&#xff0c;由于人为操作容易忘记添加分区&#xff0c;导致业务数据写入报错。所以我们一般通过配置脚本或者利用oracle内置功能实现…

Antd X : 迅速搭建 AI 页面的解决方案

前言 随着 AI 热度的水涨船高&#xff0c;越来越多的 AI 应用如井喷式爆发&#xff0c;那么如何迅速搭建一个 AI 应用的美观高质量 Web 前端页面呢&#xff0c; Antd 团队给出了一个解决方案。 X Ant DesIgn XAI 体验新秩序Ant Design 团队匠心呈现 RICH 设计范式&#xff0…

SD Express 卡漏洞导致笔记本电脑和游戏机遭受内存攻击

Positive Technologies 最近发布的一份报告揭示了一个名为 DaMAgeCard 的新漏洞&#xff0c;攻击者可以利用该漏洞利用 SD Express 内存卡直接访问系统内存。 该漏洞利用了 SD Express 中引入的直接内存访问 (DMA) 功能来加速数据传输速度&#xff0c;但也为对支持该标准的设备…

波特图方法

在电路设计中&#xff0c;波特图为最常用的稳定性余量判断方法&#xff0c;波特图的根源是如何来的&#xff0c;却鲜有人知。 本章节串联了奈奎斯特和波特图的渊源&#xff0c;给出了其对应关系和波特图相应的稳定性余量。 理论贯通&#xff0c;不在于精确绘…

React 组件中 State 的定义、使用及正确更新方式

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;React篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容React 组件中 State 的定义、使用及正确更新方式 前言 在 React 应用开发中&#xff0c;state …

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

查询产品所涉及的表有(product、product_admin_mapping)

文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService1. 完整SQL分析可选部分&#xff08;条件筛选&#xff09;&#xff1a; 2. 涉及的表3. 总结4. 功能概述 查询指定管理员下所有产品所涉及的表&#xff1f;…

游戏引擎学习第36天

仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中&#xff0c;目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎&#xff0c;这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中&#xff0…

【SpringMVC】用户登录器项目,加法计算器项目的实现

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;用户登录项目实现 1&#xff1a;需求 2&#xff1a;准备工作 &#xff08;1&#xf…

3.5 认识决策树

3.5 认识决策树 3.5.1 认识决策树 如何高效的进行决策&#xff1f; 特征的先后顺序 3.5.2 决策树分类原理详解 已知有四个特征&#xff0c;预测 是否贷款给某个人。 先看房子&#xff0c;再看工作&#xff0c;是否贷款。 年龄&#xff0c;信贷情况&#xff0c;工作&#…