嵌入式学习第11天——C语言选择结构

2024年7月29日 第11天

选择(分支)结构

分支结构:又被称为选择结构

概念

选择结构:根据条件成立与否,选择相应的操作。

条件构建

  • 关系表达式:含有关系运算符的表达式(>,<,>=,<=,!=,==)

  • 逻辑表达式:含有逻辑运算符的表达式(&&,||,!),往往是用来构建复杂的复合条件,比如:

     if(year % 100 == 0 && year % 4 !=0)  // 这种既含有关系表达式,又含有逻辑表达式的条件叫做复合条件
  • 常量/变量:值是否非0,取值(0|1)

    注意:类似以下写法,是无效的,没有意义的。

     if(x+y) // 编译通过,但没有实际意义,不建议这样写if(5*6)

选择结构的形式

单分支

语法:

 if(条件表达式){语句1;}

说明:条件表达式成立,执行语句1,否则跳过该分支结构。单分子条件不满足可以不执行。

例子:

 if a = 5;if(a < 0){a = -a;}printf("a=%d\n");
 /*** 需求:从键盘输入一个字符,如果输入的是英文大写字母,则将它转换成>小写字母后输出,否则输出原来输入的字符*/#include <stdio.h>​int main(){//声明一个变量,存放从键盘录入的字符char c;​printf("请输入一个英文字母:\n");scanf("%c",&c);​//判断if(c >= 'A' && c <='Z'){//c = c + 32;c += 32;}printf("输入的字符是:%c\n",c);​return 0;}/*********************************************************请输入一个英文字母:V输入的字符是:v**********************************************************/
双分支

语法:

 if(条件表达式){语句1;}else{语句2;}

说明: 条件表达式 成立,执行语句1,否则执行语句2。双分支不管条件是否满足,都要执行。

例子:

 #include <stdio.h>​int main(void){//申明三个变量来存放计算数double a,x,y;​//通过键盘输入a,xprintf("请输入两个数字:\n");scanf("%lf,%lf",&a,&x);​//检验除数if(x != 0 && a != 0){y = 1/x + 1/a;}else{y = 10000;}//输出printf("y=%f\n",y);​return 0;}/************************************************请输入两个数字:2,4y=0.750000请输入两个数字:0,0y=10000.000000****************************************************/
三目运算符

语法:

 表达式1?表达式2:表达式3;

说明:?:条件运算符,主要可以简化双分支为同一变量赋值的操作。

求值过程:先计算表达式1的值,非0,则将表达式2的结果作为条件运算符的最终结果;否则将表达式3的结果作为条件运算符最终结果

案例:

 #include <stdio.h>​int main(void){//需求:求a,b两个数中最大数​//写法1:正常写法int a = 5,b = 3;if(a > b){printf("最大数是:%d\n",a);}else{printf("最大数是:%d\n",b);}​//写法2:省略{}int a1 = 5,b1 = 3;if(a1 > b1)printf("最大数是:%d\n",a1);​elseprintf("最大数是:%d\n",b1);​//写法3:三目运算符int a2 = 5,b2 = 3;int ret = a2 > b2 ? a2 : b2;printf("最大数是:%d\n",ret);return 0;}/************************************************最大数是:5最大数是:5最大数是:5***********************************************/

案例:

 #include <stdio.h>​int main(){//需求:输入两个实数,按代数值 由小到大的顺序输出这两个实数​//申明变量,存储操作数int a,b;​printf("请输入两个数值作为操作数:\n");scanf("%d,%d",&a,&b);​//校验//方式1if(a > b){printf("由小到大的顺序是:%d,%d\n",b,a);}else{printf("由小到大的顺序是:%d,%d\n",a,b);}​//方式2//创建一个临时变量,用来存放交换信息int t = 0;if(a >b){t = a;a = b;b = t;}printf("由小到大的顺序是:%d,%d\n",a,b);​return 0;}/********************************************请输入两个数值作为操作数:4,5由小到大的顺序是:4,5由小到大的顺序是:4,5​请输入两个数值作为操作数:6,3由小到大的顺序是:3,6由小到大的顺序是:3,6**********************************************/

案例:

 #include <stdio.h>​int main(){////int a,b,c,t;printf("请从键盘输入三个数:\n");scanf("a=%d,b=%d,c=%d",&a,&b,&c);​//条件判断if(a > b){t = a;a = b;b = t;}if(a > c){t = a;a = c;c = t;}if(b > c){t = b;b = c;c = t;}printf("三个数字由小到大是:%d,%d,%d\n",a,b,c);​return 0;}/**************************************************请从键盘输入三个数:a=5,b=8,c=3三个数字由小到大是:3,5,8*******************************************************/
多分支

语法:

 if(条件1){语句1;}else if(条件2){语句2;}...else {语句n+1;}

案例:

 #include <stdio.h>​int main(){//需求:编写一个程序,要求输入一个x值,输出y值​//方法1:嵌套的if...int x,y;​printf("请输入一个整数x值:\n");scanf("%d",&x);​//条件判断if(x < 0){y = -1;}else{if(x == 0){y = 0;}else{y = 1;}}​printf("方式1-输出y的值是:%d\n",y);​//方式2:多分支if...else if...else...​//条件判断if(x < 0){y = -1;}else if(x == 0){y = 0;}else{y = 1;}printf("方式2-输出y的值是:%d\n",y);​return 0;}/******************************************请输入一个整数x值:6方式1-输出y的值是:1方式2-输出y的值是:1​请输入一个整数x值:0方式1-输出y的值是:0方式2-输出y的值是:0​请输入一个整数x值:-5方式1-输出y的值是:-1方式2-输出y的值是:-1******************************************/

案例:

 #include <stdio.h>/***需求:高校要求对实训学生根据实训成绩进行评级范围:0 <= score <= 100;评级:score >= 90 优秀score >= 80 良好score >= 70 中等score >= 60 及格score < 60  不及格*/int main(){//声明一个变量,存储成绩int score;printf("请录入学生成绩:\n");scanf("%d",&score);//对score进行合法校验if(score >= 0 && score <= 100){//对合法成绩进行评级if(score >= 90){printf("优秀\n");}else if(score < 90 && score >= 80){printf("良好\n");}else if(score < 80 && score >= 70){printf("中等\n");}else if(score < 70 && score >= 60){printf("及格\n");}else{printf("不及格\n");}}else{//成绩不合法printf("您输入的成绩不合法,请重新录入!\n");}​return 0;}/***************************************************请录入学生成绩:89良好​请录入学生成绩:58不及格​请录入学生成绩:120您输入的成绩不合法,请重新录入!*******************************************************/
switch

语法:

 switch(表达式) // 不能是布尔型和 浮点型{case 常量表达式1:语句体1;break;case 常量表达式2:语句体2;break;...case 常量表达式n:语句体n;break;default:语句体n+1;break;// 可以省略}

说明:

(1)switch后括号内的表达式可以是任何类型的表达式;

(2)若表达式的值与某个常量表达式的值相等时,执行此case后面的语句;若没有相等的值时,执行default后面的语句;

(3)每个case后面的常量表达式的值都必须不相同,否则出现矛盾;

(4)各个case 和default出现的次序不影响执行结果;

(5)case后面的语句中如果没有break语句,则执行完本case后的语句会接着执行下面的case(case穿透);

(6)多个case可共用一组语句。

注意:

1.表达式一般写一个变量,变量的值是一个确定的常量。

2.当遇到break或者switch语句的右大括号时,switch语句结束。

3.表达式中的数据类型:char,short,int,long,long long,不能是浮点型。

表达式和常量的数据类型要一致(支持隐式转换),比较是否相同。

案例:

 #include <stdio.h>/***需求:高校要求对实训学生根据实训成绩进行评级范围:0 <= score <= 100;评级:100 > score >= 90  优秀 90~99/10 == 9 && 100/10 == 1090 > score >= 80   良好 80~89/10 == 880 > score >= 70   中等 70~79/10 == 770 > score >= 60   及格 60~69/10 == 6score < 60  不及格*/int main(){int score;//成绩​printf("请输入实训成绩:\n");scanf("%d",&score);​if(score >= 0 && score <= 100){//对成绩进行加工int l = score / 10;switch(l){case 10://100分case 9://90~99分printf("优秀\n");//这里:多个case共用一块代码break;case 8://80~89分printf("良好\n");break;case 7://70~79分printf("中等\n");break;case 6://60~69分printf("及格\n");break;default:printf("不及格\n");}​}else{printf("录入的成绩不合法!\n");}return 0;}/*****************************************请输入实训成绩:100优秀​请输入实训成绩:120录入的成绩不合法!​请输入实训成绩:78中等​请输入实训成绩:58不及格*********************************************/

案例:

 /***需求:实现简易计算器,要求实现+,-,x,/运算*/#include <stdio.h>​int main(){printf("简易计算机 v1.0\n");printf("请输入两个操作数:\n");​double x,y;char ch;scanf("%lf,%lf",&x,&y);scanf("%c",&ch);printf("请输入运算符:(+、-、.*、/)\n");scanf("%c",&ch);​//计算switch(ch){case '+':printf("%.2lf+%.2lf=%.2lf\n",x,y,x+y);break;case '-':printf("%.2lf-%.2lf=%.2lf\n",x,y,x-y);break;case '.':case '*':printf("%.2lf*%.2lf=%.2lf\n",x,y,x*y);break;  case '/':if(y == 0){printf("除数不能为0\n");   }else{printf("%.2lf/%.2lf=%.2lf\n",x,y,x/y);}break;defalut:printf("您的输入错误!\n");​}return 0;}/*************************************简易计算机 v1.0请输入两个操作数:3,5请输入运算符:(+、-、.*、/)+3.00+5.00=8.00​简易计算机 v1.0请输入两个操作数:6,2请输入运算符:(+、-、.*、/)-6.00-2.00=4.00​简易计算机 v1.0请输入两个操作数:3,4请输入运算符:(+、-、.*、/)*3.00*4.00=12.00​简易计算机 v1.0请输入两个操作数:8,4请输入运算符:(+、-、.*、/)/8.00/4.00=2.00*****************************************/

switch语句的case穿透:

  1. case穿透:当case后的break被省略;就会直接执行它后面紧跟的case中的语句(不会判断表达式是否和它后面的case常量是否相同),这样的现象称之为case穿透。

  2. default语句一般放在所有case之后,表明所有的case都不成立时,执行default中的语句;default语句可以放在switch语句{}内的任意位置。

总结

  • 如果需要一个判断结果,使用单分支

  • 如果需要两个判断结果,且智能有两个判断结构,使用双分支

  • 如果需要判断N个结果中的某几个,或者所以,使用多分支

扩展

条件表达式中的运算符优先级

逻辑非(!)> 算术运算符(+-*/%)> 关系运算符(> < >= <= != ==)> 逻辑运算符(&&、||)> 赋

值运算符(=、+=)

设置vimtab字符数

 set tabstop=4set shiftwidth=4set expandtab

以上是嵌入式学习第11天笔记,有什么还请指正,谢谢!

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

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

相关文章

贪心系列专题篇三

目录 单调递增的数字 坏了的计算器 合并区间 无重叠区间 用最少数量的箭 声明&#xff1a;接下来主要使用贪心法来解决问题&#xff01;&#xff01;&#xff01; 单调递增的数字 题目 思路 如果我们遍历整个数组&#xff0c;然后对每个数k从[k,0]依次遍历寻找“单调递…

【计算机毕设论文】基于SpringBoot的诗词管理系统

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】小伙伴可以关注我 感兴趣的可以先收藏起来&#xff0c;同学门有不懂的毕设选题&#xff0c;项目以及论文编写等…

一款DC双向马达驱动电路的桥式驱动芯片 - SS6286L

电机驱动芯片 - SS6286L是一款DC双向马达驱动电路&#xff0c;它适用玩具类别的电机驱动、自动阀门电机驱动、电磁门锁驱动等。它有两个逻辑输入端子用来控制电机前进、后退及制动。该电路具有良好的抗干扰性&#xff0c;微小的待机电流、低的输出内阻&#xff0c;同时&#xf…

Could not install packages due to an EnvironmentError: [WinError 5]

Could not install packages due to an EnvironmentError: [WinError 5] 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城…

通配符https证书的申请途径和配置方法

一、通配符SSL证书的功能 通配符SSL证书&#xff0c;也被称为泛域名证书&#xff0c;是一种特殊类型的SSL证书&#xff0c;它能够保护一个主域名及其所有次级子域名&#xff08;不可跨级保护&#xff09;。例如&#xff0c;如果您的主域名是example.com&#xff0c;那么一个通…

四款2024年不入耳耳机排行榜分享,入耳式耳机戴不舒服的可入手

随着长时间的入耳式耳机佩戴&#xff0c;很多人都发现其实入耳式耳机逐步成为了引起耳朵感染疾病的原因之一。因为经常佩戴入耳式耳机会导致耳道湿度高、微生物更容易生长&#xff0c;进而耳道分泌物也更多了&#xff0c;所以其实现在流行的不入耳耳机&#xff0c;也就是开放式…

昇思25天学习打卡营第1天|快速入门实操教程

昇思25天学习打卡营第1天|快速入门实操教程 目录 昇思25天学习打卡营第1天|快速入门实操教程 一、MindSpore内容简介 主要特点&#xff1a; MindSpore的组成部分&#xff1a; 二、入门实操步骤 1. 安装必要的依赖包 2. 下载并处理数据集 3. 构建网络模型 4. 训练模型…

vue项目中 watch监听的用法

1.导航栏有个搜索功能&#xff0c;点击搜索是路由跳转到课程列表这个页面&#xff0c; 2. 搜索关键字课程&#xff0c;路由跳转到openClass页面&#xff0c;并且携带query参数 search <div class"inputStyle" style"width: 280px;"><el-input v…

Tsucs吸引子:动态系统的神秘引力——从状态方程到稳定解的追寻

Tsucs吸引子&#xff1a;动态系统的神秘引力——从状态方程到稳定解的追寻 Tsucs吸引子的直观类比 你可以把Tsucs吸引子想象成一个神秘的“黑洞”&#xff0c;它不断地“吸引”着动态系统中的各种状态&#xff0c;使它们最终都落入一个稳定的“中心点”&#xff0c;就像黑洞吞噬…

c程序杂谈系列(职责链模式与if_else)

从处理器的角度来说&#xff0c;条件分支会导致指令流水线的中断&#xff0c;所以控制语句需要严格保存状态&#xff0c;因为处理器是很难直接进行逻辑判断的&#xff0c;有可能它会执行一段时间&#xff0c;发现出错后再返回&#xff0c;也有可能通过延时等手段完成控制流的正…

【C++/STL】:哈希 -- 线性探测哈希桶

目录 &#x1f4a1;前言一&#xff0c;unordered系列容器二&#xff0c;哈希2.1 哈希的概念2.2 哈希函数2.3 哈希冲突 三&#xff0c;哈希冲突解决(重点)3.1 开放定址法3.2 哈希桶(重点) 四&#xff0c;线性探测的实现4.1 线性探测的基本框架4.2 插入操作4.3 查找操作4.4 删除操…

Let‘s Encrypt

启动Https,需要从证书授权机构(简称CA)处获取一个证书,Lets Encrypt就是一个CA Lets Encrypt上可以获得免费的ssl证书,时间是3个越 下面通过Nginx和Lets Encrypt让网站升级到HTTPS Certbot简介 Certbot是Lets Encrypt官方推荐的获取证书的客户端 Centos 7.9操作 yum install …

openai版本不适配问题(在windows系统下openai migrate)

问题如下&#xff1a; 方法&#xff1a; 参考官网v1.0.0 Migration Guide openai/openai-python Discussion #742 GitHub 具体步骤&#xff1a; 1、curl -fsSL https://docs.grit.io/install | bash -x 但该命令可能不好用————将‘curl -fsSL https://docs.grit.io/i…

谷歌AI拿下IMO奥数银牌,数学推理模型AlphaProof面世,强化学习 is so back

用上了 Gemini 大模型与 AlphaZero 强化学习算法,几何、代数、数论全都会。 对于 AI 来说,奥数不再是问题了。 本周四,谷歌 DeepMind 的人工智能完成了一项壮举:用 AI 做出了今年国际数学奥林匹克竞赛 IMO 的真题,并且距拿金牌仅一步之遥。 上周刚刚结束的 IMO 竞赛共有…

深入分析 Android ContentProvider (九)

文章目录 深入分析 Android ContentProvider (九)ContentProvider 的高级使用及最佳实践&#xff08;续&#xff09;1. 复杂查询与联合查询复杂查询示例 2. 数据同步与一致性示例&#xff1a;使用事务确保数据一致性 3. 数据分页加载示例&#xff1a;分页加载数据 4. 内容提供者…

【CN】Argo 持续集成和交付(二)

7.25.通知 概述 Argo CD 通知持续监控 Argo CD 应用程序&#xff0c;并提供一种灵活的方式来通知用户应用程序状态的重要变化。使用灵活的触发器和模板机制&#xff0c;可以配置何时发送通知以及通知内容。Argo CD 通知包含有用的触发器和模板目录。因此&#xff0c;可以直接…

pycharm连接mysql

1、按照下图在pycharm找到数据库设置 在PyCharm右侧工具栏有Database&#xff0c;点击打开如果没有&#xff0c;则在view | Tool Windows | Database 选择显示 2、按照下图所示位置找到mysql&#xff08;本机由于配置过&#xff0c;所以由recent&#xff0c;第一次配置在列表中…

Cybersecurity ASPICE实施策略-基于ISO/SAE 21434-亚远景科技

近几年&#xff0c;随着软件定义汽车和汽车的智能化和网联化&#xff0c;使得汽车融合了现代通信与网络通信技术&#xff0c;实现了车与人、车与车、车与道路、车与云端等智能信息交互和共享&#xff0c;也让车具备了环境感知、协同控制、智能决策等功能&#xff1b;与此同时&a…

苹果推送iOS 18.1带来Apple Intelligence预览

&#x1f989; AI新闻 &#x1f680; 苹果推送iOS 18.1带来Apple Intelligence预览 摘要&#xff1a;苹果向iPhone和iPad用户推送iOS 18.1和iPadOS 18.1开发者预览版Beta更新&#xff0c;带来“Apple Intelligence”预览。目前仅支持M1芯片或更高版本的设备。Apple Intellige…

使用 Elasticsearch 和 LlamaIndex 保护 RAG 中的敏感信息和 PII 信息

作者&#xff1a;来自 Elastic Srikanth Manvi 在这篇文章中&#xff0c;我们将研究在 RAG&#xff08;检索增强生成&#xff09;流程中使用公共 LLMs 时保护个人身份信息 (personal identifiable information - PII) 和敏感数据的方法。我们将探索使用开源库和正则表达式屏蔽 …