嵌入式0基础开始学习 ⅠC语言(3)分支结构
C语言程序设计结构
分三种
顺序结构:
一条一条指令执行。
int a,b;
a = 3;
b = 4;
分支结构(选择结构):
if语句
switch语句
循环结构:
for
while
do....while
goto
1.if语句
有三种基本形式:
(1)
if(表达式)
语句(指令)
表达式:进行选择的条件
任意c语言合法的表达式都可以
只要是合法的表达式就会有一个值。
我们需要判断这个表达式的值就ok
语句:
在满足条件下,要执行的语句或指令
单语句:一个;号的语句
复合语句:
{}/if/for/while....
执行顺序:
假如(if)“表达式”的值为非0(条件满足)
则执行下面的“语句”(指令)
例子:
int a =0; b=0;
if(3<2)
a =3 ;
b = 4;
printf("%d\n",a);//0
printf("%d\n",b);//4
没有语法问题,if只能够管一个;
所以不管“表达式”的值是否为真,
语句 b = 4一定会执行!!!!
编程建议大家,不管if后面有没有语句,先打一对{},以示主权,确定if的管辖范围
(2)
if(表达式)
语句1;
else
语句2;
else : 否则
执行顺序:
假如“表达式”的值为真(非0),则执行语句1,否则执行语句2
例子:
if(5>3)
a = 1;
b = 2;
else // error
a = 2;
b = 1;
编程建议;
不管if,else后面有没有语句,先打{}
if()
{
}
else
{
}
(3)if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式n-1)
语句n-1;
else
语句n;
=>
if(表达式)
{
语句1;
}
else
{
if(表达式2)
{
语句2;
}
else
.......
}
执行顺序:
判断“表达式1”的值,如果为真(非0),则执行语句1,否则,再判断
表达式2的值,如果为真(非0),则执行“语句2”,否则。。。
练习:
1.请大家从键盘输入两个整数a,b 按从小到大的顺序依次输出!!!
#include<stdio.h>
int main()
{
int a,b;
printf("请输入两个整数:\n");//在终端上面显示“请输入两个整数:”
scanf("%d%d",&a,&b);
if(a<b)
{
printf("%d<%d",a,b);
}
else
{
printf("%d<%d",b,a);
}
return 0;
}
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n%d",a<b?a:b,a>b?a:b);
return 0;
}
2.从键盘输入三个整数a,b,c按从小到大的顺序依次输出
#include<stdio.h>
int main()
{
int a,b,c,t;
printf("请输入三个整数:\n");
scanf("%d%d%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=c;
c=b;
b=t;
}
printf("%d<%d<%d\n",a,b,c);
return 0;
}
3.输入三个整数a,b,c,判断由这三个数为边是否能组成一个三角形
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
printf("能");
}
else
{
printf("不能");
}
return 0;
}
4.从键盘输入一个字符:大写转小写,小写转大写,其他原样输出
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
if(c<='Z'&&c>='A')
{
printf("%c",c+32);
}
else if(c<='z'&&c>='a')
{
printf("%c",c-32);
}
else
{
printf("%c",c);
}
}
有几个注意的点
(1)语句:
表达式语句: 表达式
b = 5 ===>表达式(赋值表达式)
b = 5; ===>赋值语句
if语句 分支语句
循环语句:
while
do。。。while
for
goto语句
return语句
....
(2)条件;
并列条件: 会一一判断他们
if(条件1)
{
}
if(条件2)
{
}
互斥条件: 有你没我,有我没你
if(条件1)
{
}
else
{
}
(3) if语句的嵌套
“条件里面又有条件”
在if语句中又包含一个或多个if称为if语句的嵌套
if(条件1)
{
if(条件2)
语句1
}
关键: else 匹配问题
else总是与它上面的,最近的,同级的,未匹配的if语句配对
if(条件1)
{
if()
语句1
else
语句2
}
else
{
if()
语句3
else
语句4
}
从键盘输入一个十六进制的字符[0-9 a-f A-F],输出其对应的数值
unsigned char ch;
int d;
scanf("%c",&ch);
if(ch == '0')
{
d = 0;
}
else if(ch == '1' )
{
d = 1;
}
else if(ch =='A' || ch =='a')
{
d =10;
}
......
上面的代码 好像在“列举”十六进制所有可能的字符
2.switch语句
switch(表达式)
{
case 常量\常量表达式1:
语句1
case 常量\常量表达式2:
语句2
default:
语句块n
}
switch语句:拿”表达式“的值,与case后面的”常量\常量表达式“作匹配,
一旦匹配成功,则从那个case后面开始执行,知道遇到break 或switch结束
如果没有一个匹配成功,则匹配default.
关于switch:
(1)switch 后面的“表达式"必须是一个可以列举的值,
必须为一个整数值:整型,字符型
(2)case后面的”常量表达式“也必须为一个整数的值
而且每个case后面的“常量表达式”的值也必须互不相同
(3)各个case和default出现的顺序是不会影响匹配结果
一旦匹配成功,就从该处往下执行
例子:
switch(a)
{
default: // default 永远是,所有的case都不匹配的时候,才匹配default
// 匹配的情况跟defalut的顺序无关
case 7:
case 5:
case 6:
case 1:
}
(4) "语句块"可以省略 意思就是说,多个case可以公用一个语句块
例子;
如:
switch(a)
{
case 1:
case 2:
case 3:
语句1
break;
}
(5) switch中的break 用来跳出它所属的switch语句
如:
switch(a)
{
case 1 :
a = 1;
case 2:
b = 2;
break;
case 3:
......
}
练习:
1.从键盘出入一个成绩(int),把这个成绩值对应的等级输出
'A':[90,100]
'B':[80,90)
'C':[70,80)
'D':[60,70)
'E':[0,60)
伪代码:
int score;
printf("请输入成绩:");
scanf("%d",&score);
switch(score/10)
{
case 10:
case 9:
A
break;
case 8:
B
break;
}
2.输入一个日期(year - month - day )求该日期到年末还有多少天?
//----> 数学问题(找到他的逻辑)--->用文字描述出来 ---> 写伪代码 ---> c语言代码
(1)先判断是否为闰年, 2月份为29/28
(2) 总的时间 - 已过的日期加起来
#include <stdio.h>
int main()
{
int year,month,day,n=0,ew;
printf("请输入年月日\n");
scanf("%d%d%d",&year,&month,&day);
if((year%4==0&&year%100!=0)||year%400==0)
{
ew=29; //闰年二月份的时间
}
else
{
ew=28; //不是闰年二月份的时间
}
switch(month)
{
case 1: n+=31; // n= n+31
case 2: n+=ew;
case 3: n+=31;
case 4: n+=30;
case 5: n+=31;
case 6: n+=30;
case 7: n+=31;
case 8: n+=31;
case 9: n+=30;
case 10: n+=31;
case 11: n+=30;
case 12: n+=31;
}
n=n-day;
printf("距离年末还有%d天\n",n);
return 0;
}
练习:
1.企业发放的奖金根据企业的当年利润所决定。
当利润 I 低于或等于100000元时,奖金可提成10%;
利润大于100000元,小于或等于200000元(100000 < I <= 200000)时,
低于100000元部分按10%提成,高于100000元的部分,可提成7.5%;
利润大于200000元,小于或等于400000元(200000 < I <= 400000)时,
低于200000元部分按上述方法提成,高于200000元的部分,可提成5%;
利润大于400000元,小于或等于600000元(400000 < I <= 600000)时,
低于400000元部分按上述方法提成,高于400000元的部分,可提成3%;
利润大于600000元,小于或等于1000000元(600000 < I <= 1000000)时,
低于600000元部分按上述方法提成,高于600000元的部分,可提成1.5%;
利润大于1000000元时,
低于1000000元部分按上述方法提成,高于1000000元的部分,可提成1%;
从键盘输入当年的利润 I,求应发的年终奖的奖金 P 。
要求:(任选其一)
(1) 用 if 语句 编程
(2) 用 switch 语句 编程
switch:
double I;
double p = 0;
scanf("%lf",&I);
switch((long)I/100000)
{
default:
case 10:
p += (I-1000000)*0.01;
I = 1000000;
case 9:
case 8:
case 7:
case 6:
p +=(I-600000)*0.015;
I = 600000;
......
......
}
2、 输入一个形式为 " 操作数 运算符 操作数" 的四则运算表达式,
输出运算的结果 ( + - * / )
如:
输入 5.2+4.8
输出 5.2+4.8 = 10.00 保留两位小数
char ch;
float a ,b;
scanf("%f%c%f",&a,&ch,&b);
switch(ch)
{
case '+':
printf("%f+%f = %.2f\n",a,b,a+b);
break;
case '-':
.......
}
3,C语言的if语句中,用作判断的表达式为? (C)
A,关系表达式 B,逻辑表达式 C,任意表达式 D,算数表达式
4,以下程序的运行结果是? (2)
main()
{
int a=2,b=-1,c=2;
if(a<b)
if(b<0) c=0;
else c+=1;
printf("%d",c);
}
5,以下程序的运行结果是? (3)
main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
}
6,以下程序的运行结果是? (SO)
void main()
{
int a=2;
switch(a)
{
default;
printf("S");
case 1:
printf("O");
}
}
7,以下程序的运行结果是? (不能确定)
if(a=b)
printf("a==b");
else
printf("a!=b);
8,如有int i=10,j=0;则执行完语句
if(j=0)i++;else i--;i的值为?
(9)
9,以下程序的运行结果是? (3)
#include<stdio.h>
main()
{
int x,y,z;
x=1;y=2;z=3;
if(x>y)
if(x>z) printf("%d",x);
else printf("%d",y);
printf("%d\n",z);
}
回顾;
c语言程序结构
顺序结构:一条一条从上而下执行
a = 2;
b = 3;
分支结构(选择结构):
a,if语句
if(表达式)
语句;
表达式:任何c语言中合法的表达式都可以
所谓的条件
语句: 单语句;
复合语句{}
if(表达式)
语句1;
else
语句2;
执行顺序:
if(如果)“表达式”的值为真(非0),那么执行语句1
否则执行语句2
if(表达式)
a =2;
b =3;
else //此处的else没有匹配到if(ERROR)
c = 4;
if(表达式1)
语句1;
else if(表达式2)
语句2;
....
else
语句n;
执行顺序:
先判断表达式1的值,如果为真 执行语句1;
否则判断表达式2的值,如果为真,执行语句2;
否则....
如果所有的表达式都不满足,则执行“语句n”
并列条件
if(a>100)
{
b = a;
}
if(a>50)
{
c = a;
}
互斥条件
if else
b, switch语句
switch(表达式)
{
case 常量表达式/常量 :
语句1;
case ...
default :
语句 n+1
}
表达式:是一个可以列举的整数值
常量表达式: 整型常量,字符型常量,
循环结构
相关文章:
嵌入式0基础开始学习 ⅠC语言(3)分支结构
C语言程序设计结构 分三种 顺序结构: 一条一条指令执行。 int a,b; a 3; b 4; 分支结构(选择结构):…...

设计模式21——命令模式
写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 命令模式(Command&…...

虚拟机报错:VMX 进程已提前退出。VMware Workstation 无法连接到虚拟机。
解决报错:VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。 VMX 进程已提前退出。 解决方案:右键桌面图标进入VMware Workstation Pro的属性设置,兼容性–勾选“以管理员…...

P2341 受欢迎的牛
题目描述 每一头牛的愿望就是变成一头最受欢迎的牛。现在有 N 头牛,给你 M 对整数,表示牛 A 认为牛 B 受欢迎。这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛 A 也认为牛 C 受欢迎。你的任务是…...

Linux系统编程(五)多线程
目录 一、基本知识点二、线程的编译三、 线程相关函数1. 线程的创建2. 线程的退出3. 线程的等待补充 四、综合举例 一、基本知识点 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个标准…...

HTTP Basic Access Authentication Schema
HTTP Basic Access Authentication Schema 背景介绍流程安全缺陷参考 背景 本文内容大多基于网上其他参考文章及资料整理后所得,并非原创,目的是为了需要时方便查看。 介绍 HTTP Basic Access Authentication Schema,HTTP 基本访问认证模式…...
#职场发展#其他
一闪论文是目前市场上一款非常靠谱的论文写作工具,不仅可以帮助用户快速完成论文撰写,还能对文章进行查重降重,确保内容原创性。从用户的角度来看,一闪论文确实是一个非常方便、实用的工具,能够大大提高写作效率&#…...

【Text2SQL 论文】评估 ChatGPT 的 zero-shot Text2SQL 能力
论文:A comprehensive evaluation of ChatGPT’s zero-shot Text-to-SQL capability ⭐⭐⭐⭐ arXiv:2303.13547 这篇论文呢综合评估了 ChatGPT 在 zero-shot Text2SQL 任务上的表现。 dataset 使用了 Spider、Spider-SYN、Spider-DK、Spider-Realistic、Spider-CG…...
安卓手机APP开发___设置闹钟
安卓手机APP开发___设置闹钟 目录 概述 设置不精确闹钟 在特定时间后发出闹钟 在特定时间范围内触发闹钟 以大致有规律的时间间隔响起重复闹钟 设置精确的闹钟 系统会在未来的某个精确时刻调用精确闹钟。 可能不需要精确闹钟的用例 设置精确闹钟的方法 系统资源消耗…...

如何评价GPT-4o
目录 1.概述 2.对比分析 2.1.版本 2.2.区别 2.2.1.技术方面的差异 2.2.2.性能提升 2.2.3.应用领域扩展 2.2.4.对未来发展的影响 3.技术能力 4.个人感受 1.概述 GPT-4o的发布无疑是人工智能领域的一次重要进展。作为GPT-4的升级版本,GPT-4o不仅在处理速度…...
自定义窗口事件循环系统
1.定义事件类型,mouse,wheel,drag,view。已处理的事件,accept需设置为true,防止重叠热区继续穿透。记录事件生成时间,全局位置和当前帧窗口下位置。 2.定义事件响应系统interactionSystem&…...
随机森林算法教程(个人总结)
背景 随机森林(Random Forest)是一种集成学习方法,主要用于分类和回归任务。它通过构建多个决策树并将其结果进行集成,提升模型的准确性和鲁棒性。随机森林在处理高维数据和防止过拟合方面表现出色,是一种强大的机器学…...

解决Android studio 一直提示下载gradle-xxx-all.zip问题
今天用AndroidStdiod打开一个新工程的时候,发现项目一直卡在正在下载gradle-xxx-all.zip的任务上,网络出奇的慢,即使配了VPN也无济于事,于是按照以往经验:将gradle-xxx-all.zip下载到.gradle\gradle\wrapper\dists目录…...

3DEXPERIENCE DELMIA Role: RVN - Robotics Virtual Commissioning Analyst
Discipline: Robotics Role: RVN - Robotics Virtual Commissioning Analyst 通过准确地模拟连接到PLC程序的机器人、设备和传感器,在制造虚拟孪生上执行虚拟调试情景 为任何机器人角色的多周期情景创建传感器,生成和变换零件启用 PLC 程序的虚拟验证和…...

js知识点之闭包
闭包 什么是闭包 闭包,是 JavaScript 中一个非常重要的知识点,也是我们前端面试中较高几率被问到的知识点之一。 打开《JavaScript 高级程序设计》和《 JavaScript 权威指南》,会发现里面针对闭包的解释各执一词,在网络上搜索关…...

LORA微调,让大模型更平易近人
技术背景 最近和大模型一起爆火的,还有大模型的微调方法。 这类方法只用很少的数据,就能让大模型在原本表现没那么好的下游任务中“脱颖而出”,成为这个任务的专家。 而其中最火的大模型微调方法,又要属LoRA。 增加数据量和模…...
LabVIEW全自动样品处理系统有哪些优势?
基于LabVIEW的全自动样品处理系统在现代科研和工业应用中展现出显著的优势,其在数据采集、分析和控制方面的性能使其成为提高效率和精度的理想选择。以下是该系统的详细优势: 高效自动化 LabVIEW的图形化编程语言极大地简化了自动化流程的开发。用户可…...
shell脚本操作http请求的返回值——shell处理json格式数据
日常工作中,我们经常会遇到http请求会返回大量格式固定的数据,而我们只需要其中的一部分,那么怎么提取我们想要的字段呢。 这里会介绍一种用shell脚本处理http请求返回,或者处理json格式数据的方式。 这里我们用到了 jq这个强大的…...
leetcode力扣 300. 最长递增子序列 II
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&#…...
C++_vector简单源码剖析:vector模拟实现
文章目录 🚀1.迭代器🚀2.构造函数与析构函数⚡️2.1 默认构造函数vector()⚡️2.2 vector(int n, const T& value T())⚡️内置类型也有构造函数 ⚡️2.3 赋值重载operator⚡️2.4 通用迭代器拷贝⚡️2.5 vector(initializer_list<T> il)⚡️…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...