嵌入式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)⚡️…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
