嵌入式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)⚡️…...

第3章 数据链路层
王道学习 考纲内容 (一)数据链路层的功能 (二)组帧 (三)差错控制 检错编码;纠错编码 (四)流量控制与可靠传输机制 流量控制、可靠传输与滑动窗口…...

使用OrangePi KunPeng Pro部署AI模型
目录 一、OrangePi Kunpeng Pro简介二、环境搭建三、模型运行环境搭建(1)下载Ollama用于启动并运行大型语言模型(2)配置ollama系统服务(3)启动ollama服务(4)启动ollama(5)查看ollama运行状态四、模型部署(1)部署1.8b的qwen(2)部署2b的gemma(3)部署3.8的phi3(4)部署4b的qwen(5)部…...

SpringMVC 数据映射VC
从 view 层发送请求到Controller,在Controller中获取参数: 在不输入值时会报400,参数错误 在不输入值时num默认为null 没有找到对应标签名称叫nums的,输入任何值时都报400 设置required默认值为false,即使表单没有nums…...

Clickhouse Bitmap 类型操作总结—— Clickhouse 基础篇(四)
文章目录 创建 Bitmap 对象Bitmap 转换为整数数组计算总数(去重)值指定start, end 索引生成子 Bitmap指定 start 索引和数量限制生成子 Bitmap指定偏移量生成子 Bitmap是否包含指定元素两个 Bitmap 是否存在相同元素一个是否为另一个 Bitmap 的子集求最小…...

202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量,一切的好事都应该有权利发生
202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量 《我自我的田渠归来》作者张晓风,被称为华语散文温柔的一支笔,她的短文很有味道,角度奇特,温柔慈悲而敏锐。 很幸运遇到了这本书,以她的感受重新认识一些事…...

SheetJS V0.17.5 导入 Excel 异常修复 Invalid HTML:could not find<table>
导入 Excel 提示错误:Invalid HTML:could not find<table> 检查源代码 发现 table 属性有回车符 Overview: https://docs.sheetjs.com/docs/ Source: https://git.sheetjs.com/sheetjs/sheetjs/issues The public-facing websites of SheetJS: sheetjs.com…...

重学java51.Collections集合工具类、泛型
"我已不在地坛,地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…...

OSPF扩展知识2
FA-转发地址 正常 OSPF 区域收到的 5 类 LSA 不存在 FA 值; 产生 FA 的条件: 1、5类LSA ----假设 R2为 ASBR,90/0 口工作的 OSPF 中,g0/1 口工作在非 ospf 协议或不同 ospf 进程中;若 g0/1 也同时宣告在和 g0/0 相同的 OSPF 进程…...

数据库技术基础
数据库技术基础 导航 文章目录 数据库技术基础导航一、基础概念数据库系统数据库管理系统DBMS分类数据库技术的发展数据库体系结构 二、数据模型数据模型基本概念 三、数据库的控制功能事务概述SOL中事务定义语句日志文件故障种类两个操作Undo/Redo事务故障的恢复系统故障的恢…...

这些项目,我当初但凡参与一个,现在也不至于还是个程序员
10年前,我刚开始干开发不久,我觉得这真是一个有前景的职业,我觉得我的未来会无限广阔,我觉得再过几年,我一定工资不菲。于是我开始像很多大佬说的那样,开始制定职业规划,并且坚决执行。但过去这…...