C++零基础入门:运算符与表达式详解 —— 树莓派Pico编程应用
C++语言作为信息学奥赛的指定语言,广泛应用于嵌入式开发、系统编程、游戏开发等领域。对于初学者而言,掌握基本的运算符和表达式是进行编程的基础,而这些基础知识能够帮助你解决各种实际问题。本文将带你深入理解C++中的运算符与表达式,并通过树莓派Pico开发板项目,结合硬件控制,实现有趣的编程应用。
一、运算符与表达式概述
1. 什么是运算符?
运算符是用来对变量、常量进行运算的符号。在C++中,常见的运算符有:
- 算术运算符:
+
、-
、*
、/
、%
- 关系运算符:
==
、!=
、>
、<
、>=
、<=
- 逻辑运算符:
&&
、||
、!
- 赋值运算符:
=
、+=
、-=
、*=
、/=
等 - 自增自减运算符:
++
、--
- 位运算符:
&
、|
、^
、<<
、>>
- 条件运算符:
? :
2. 什么是表达式?
表达式是由运算符、变量、常量等组合而成的计算公式,可以通过运算符对其进行计算。一个简单的表达式例如:
int result = 5 + 3;
5 + 3
是一个算术表达式,结果为 8
,赋值给 result
变量。
二、常见运算符的使用
1. 算术运算符
算术运算符是最常见的运算符,用来执行基本的数学运算:
int a = 10; int b = 5; int sum = a + b; // 加法运算 int diff = a - b; // 减法运算 int prod = a * b; // 乘法运算 int quotient = a / b; // 除法运算 int remainder = a % b; // 取余运算
- 加法、减法、乘法、除法、取余是常见的算术操作。
2. 关系运算符
关系运算符用于比较两个值,并返回布尔值(true
或 false
):
int x = 10; int y = 20; bool result = x < y; // true,因为 10 < 20
- 常用关系运算符有:
==
(等于)、!=
(不等于)、>
(大于)、<
(小于)、>=
(大于等于)、<=
(小于等于)。
3. 逻辑运算符
逻辑运算符用于组合多个条件表达式:
bool a = true; bool b = false; bool andResult = a && b; // false bool orResult = a || b; // true bool notResult = !a; // false
- &&(与):两个条件都为
true
时返回true
。 - ||(或):其中一个条件为
true
时返回true
。 - !(非):反转布尔值。
4. 赋值运算符
赋值运算符用于将右侧值赋给左侧变量:
int a = 5; // 简单赋值 a += 3; // a = a + 3,即 a 变为 8 a -= 2; // a = a - 2,即 a 变为 6
- 常用赋值运算符有:
=
(赋值)、+=
、-=
、*=
、/=
、%=
。
5. 自增与自减
自增和自减用于对变量进行递增或递减:
int a = 5; a++; // a 增加 1,结果为 6 a--; // a 减少 1,结果为 5
++
(自增)和--
(自减)分别增加或减少变量的值。
三、结合树莓派Pico的编程实践
在树莓派Pico的实际编程中,运算符与表达式不仅帮助我们进行数学计算,还能控制硬件设备的状态。例如,控制LED的开关、计算时间间隔、控制PWM信号等。
1. 控制LED闪烁频率
通过运算符和表达式,可以动态改变LED的闪烁频率,学习C++中的算术和赋值运算符:
#include <Arduino.h>const int LED_PIN = 25; // LED引脚 int blinkDelay = 1000; // 初始闪烁时间为1000毫秒void setup() {pinMode(LED_PIN, OUTPUT); }void loop() {digitalWrite(LED_PIN, HIGH); // 点亮LEDdelay(blinkDelay); // 延迟 blinkDelay 毫秒digitalWrite(LED_PIN, LOW); // 熄灭LEDdelay(blinkDelay); // 延迟 blinkDelay 毫秒// 动态调整闪烁间隔blinkDelay -= 100; // 每次减少100毫秒if (blinkDelay <= 100) {blinkDelay = 1000; // 最小值为1000毫秒} }
在这个示例中,blinkDelay -= 100;
使用了赋值运算符来减小闪烁时间,从而让LED闪烁得更快。
2. 使用条件运算符进行条件判断
通过条件运算符,我们可以在一行代码中实现判断:
int ledStatus = (blinkDelay > 500) ? 1 : 0; // 如果 blinkDelay 大于500,ledStatus 为 1 否则为 0 digitalWrite(LED_PIN, ledStatus);
此行代码将根据 blinkDelay
的值控制LED的开与关,实现条件控制。
3. 使用自增运算符进行计数
在计时器应用中,自增运算符常用于计数:
int counter = 0; while (counter < 10) {digitalWrite(LED_PIN, HIGH); // 点亮LEDdelay(500); // 延迟500毫秒digitalWrite(LED_PIN, LOW); // 熄灭LEDdelay(500); // 延迟500毫秒counter++; // 每次循环后,计数器增加1 }
自增运算符 counter++
用于每次循环后自动增加计数器的值,直到计数达到设定值。
四、常见运算符题型与讲解
1. 运算符优先级题
题目:请分析以下代码并输出结果:
int a = 5, b = 10;
int result = a + b * 2
解析:运算符优先级规则,*
的优先级高于 +
,因此先执行 b * 2
,然后再进行 a + (b * 2)
。所以 result = 5 + (10 * 2)
,结果为 25
。
2. 条件运算符题
题目:编写一个程序,判断一个整数是否为偶数,并输出相应的结果。
int num = 6; int result = (num % 2 == 0) ? 1 : 0;
解析:条件运算符判断 num % 2 == 0
是否为真,如果为真,result
为 1(偶数),否则为 0(奇数)。
3. 逻辑运算符题
题目:编写一个程序,判断一个数字是否大于 5 且小于 10。
int num = 7; bool result = (num > 5) && (num < 10);
解析:此题中,&&
运算符表示“与”操作,只有两个条件都为 true
时,result
才为 true
。
4. 自增与自减题
题目:以下代码的输出结果是什么?
int x = 5; int y = x++ + ++x;
解析:x++
是后置自增,先取值再加 1;++x
是前置自增,先加 1 再取值。因此,y = 5 + 7
,最终结果是 y = 12
。
五、总结与学习建议
通过对运算符和表达式的深入理解,不仅能够帮助您掌握C++编程的基础,还能通过树莓派Pico等硬件平台将理论应用于实践。以下是一些学习建议:
- 掌握基础运算符:理解并熟练使用算术、关系、逻辑等基本运算符,是学习编程的关键。
- 动手实践:通过控制LED灯、传感器等硬件设备,结合运算符进行计算和控制,提升实际编程能力。
- 逐步扩展应用:通过增加更多功能(如按键控制闪烁速度、添加显示屏等),逐步扩展项目的复杂度。
结语
运算符和表达式是编程的基础,通过实践学习它们,能够帮助您在信息学奥赛的学习中打下坚实的基础。如果你正在入门C++编程,希望本文能为你提供启发和帮助。欢迎点赞、收藏并分享给更多的编程爱好者!
相关文章:
C++零基础入门:运算符与表达式详解 —— 树莓派Pico编程应用
C语言作为信息学奥赛的指定语言,广泛应用于嵌入式开发、系统编程、游戏开发等领域。对于初学者而言,掌握基本的运算符和表达式是进行编程的基础,而这些基础知识能够帮助你解决各种实际问题。本文将带你深入理解C中的运算符与表达式࿰…...
mvc命令
命令 mvc MVC(Model-View-Controller)是一种软件架构模式,用于组织和管理应用程序的代码mvc重要的三部分 (1)模型(Model):负责存储系统的中心数据,提供访问数据的函数,封装了应用程序的功能内核。 (2)视图&…...
Kafka-创建topic源码
一、命令创建topic kafka-topics --create --topic quickstart-events --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2 二、kafka-topics脚本 exec $(dirname $0)/kafka-run-class.sh org.apache.kafka.tools.TopicCommand "$" 脚本中指定了…...
如何开展单元测试
1、是什么 单元测试(Unit Testing)又称为模块测试,是针对程序模块来进行正确性检验的测试工作。 程序模块是软件设计的最小单位,程序单元是应用的最小可测试部件 • 在面向过程编程中,一个单元就是单个程序、函数、过…...
网络练级宝典-> UDP传输层协议
目录 传输层 端口号 端口号和进程的关系 UDP协议 UDP协议格式 UDP数据封装: UDP数据分用: 面向数据报 UDP的缓冲区 UDP的缺点 基于UDP的应用层协议 传输层 端口号 我们知道端口号对应的其实就是一个进程的pid,在操作系统中二者的…...
【Elasticsearch】07-ES聚合
1. 桶 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组…...
Unity 画线(UILineRenderer)
实现 以鼠标点击点作为起点创建UILineRenderer 并记录起点。 GameObject go new GameObject(); go.transform.parent transPaint; go.transform.localPosition Vector3.zero; line go.AddComponent<UILineRenderer>(); line.LineWidth widthLine; line.color col…...
【Linux测试题】
1. 选择题 题目: 如果想将电脑中Windows C盘(hd1)安装在Linux文件系统的/winsys目录下,请问正确的命令是()。 选项: A. root104.123.123.123:~# mount dev/hd1 /winsys B. root104.123.123.12…...
什么是快速傅里叶变换?
一、FFT概念 快速傅里叶变换(Fast Fourier Transform,FFT)是一种高效计算离散傅里叶变换(Discrete Fourier Transform,简称DFT)及其逆变换的算法。DFT和FFT都是音频处理、图像分析、振动分析、无线通信等许…...
android-studio开发第一个项目,并在设备上调试
恭喜你成功安装并配置好了 Android Studio!下面是开发你的第一个 Android 项目并在设备上调试的详细步骤: 1. 启动 Android Studio 首先,启动 Android Studio。你可以通过以下几种方式启动: 使用桌面快捷方式(如果已…...
深入浅出:php-学习入门全攻略
文章目录 1. 为什么选择 PHP?2. 安装 PHP 环境2.1 Windows 系统安装步骤 1:下载 PHP步骤 2:解压并配置步骤 3:配置环境变量步骤 4:验证安装 2.2 Mac 系统安装步骤 1:使用 Homebrew 安装步骤 2:验…...
Qml之基本控件
一.Qml常用控件 1.Text(显示普通文本和富文本) 1.1显示普通文本: Window { visible: true width: 320 height: 240 title: qsTr("Hello World") Text { text: "Hello World!" font.family: "Helvetica" font.pointSize: 24 color:…...
redis机制详解
RDB 快照机制 在默认情况下,Redis 会将内存数据库的快照存储在名为 “dump.rdb” 的二进制文件中。同时,你可以通过相关设置,让 Redis 在满足特定条件时自动保存数据集。例如,设定 “save 60 1000”,意味着当在 60 秒内…...
【知识科普】Linux系统下用户权限体系
文章目录 概述一、用户类型二、用户权限的组成三、权限的表示方法四、权限的修改方法五、特殊权限六、权限掩码(umask) 密码相关一、修改用户密码二、删除用户密码三、设置用户密码有效期四、查询用户密码信息五、密码策略配置 SSH远程访问1. 检查SSH服务…...
【数据结构】堆
目录 一、堆 二、堆的模拟实现 1.结构体 2.push 3.pop和top 三.实现堆排序 1.成堆算法 2.堆排序 heap模拟实现源码_gitee 一、堆 分为大堆和小堆 大堆是每个父节点都大于子节点,小堆则相反是每个父节点都小于子节点 底层抽象结构是完全二叉树࿰…...
6.824/6.5840 Lab 1: MapReduce
宁静的夏天 天空中繁星点点 心里头有些思念 思念着你的脸 ——宁夏 完整代码见: https://github.com/SnowLegend-star/6.824 由于这个lab整体难度实在不小,故考虑再三还是决定留下代码仅供参考 6.824的强度早有耳闻,我终于也是到了挑战这座高…...
Day5:生信新手笔记 — R语言基本语法
一、数据类型 (重点只有两个,剩下的不看) 1.1 向量(vector) 矩阵(Matrix) 数组(Array) 1.2 数据框(Data frame) x<- c(1,2,3) #常用的向…...
lua download
https://www.lua.org/ https://www.lua.org/versions.html#5.4...
安装更新upgrade导致ubuntu崩溃
安装更新导致ubuntu崩溃 前言uuid编不过,导致的崩溃 记录一些ubuntu崩溃的过程。 目前只有一个,以后遇到都放在这里,以提醒自己。 前言 如果从10000年看现在的linux,不是说不完美,而是糟透了。 linux的版本号…...
软件测试最新项目合集【商城、外卖、银行、金融等等.......】
项目一:ShopNC商城 项目概况: ShopNC商城是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城,系统PC后台是基于ThinkPHP MVC构架开发的跨…...
【学习总结|DAY09】Java 流程控制与数据操作练习一:录入三位数并筛选符合条件的数字
一、主要代码: import java.util.Scanner;public class demo07 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.print("请输入一个大于100的三位数:");int number scanner.nextInt();if (nu…...
“放弃Redis Desktop Manager使用Redis Insight”:日常使用教程(Redis可视化工具)
文章目录 更新Redis Insight连接页面基础解释自动更新key汉化暂时没有找到方法, Redis Desktop Manager在连接上右键在数据库上右键在key上右键1、添加连接2、key过期时间 参考文章 更新 (TωT)ノ~~~ βyё βyё~ 现在在维护另一…...
使用lumerical脚本语言创建弯曲波导并进行数据分析(纯代码实现)
本文使用lumerical脚本语言创建弯曲波导、设置有限差分时域(FDTD)模拟、改变波导弯曲半径计算损耗、绘制图像展示电场强度分布情况及对具有不同弯曲半径的波导进行一系列模拟和分析操作(代码均有注释讲解)。 一、创建弯曲波导 1.1 基本结构讲解 (1)包层(Clad) 在波导结…...
AC+AP漫游实验
实验拓扑 实验要求 1.AP1服务vlan10,AP2服务vlan20,实现三层漫游 2.AP1与AP2为不同AP组,直接转发 实验步骤 1.配置VLAN放行相关流量 交换机与AP接口为trunk口并修改PVID为30 2.配置相关业务使得ap上线 3.配置vap上线,AP可用…...
七:仪表盘安装-controller node
一:工具、环境准备-controller node 二:OpenStack环境准备-controller node 三:安装服务-controller node 四:工具、环境准备-compute node 五:OpenStack环境准备-compute node 六:安装服务-compute node 七…...
pandas习题 067:小于 60 的部分列修改为 60
(编码题)修改以下名为 df 的 DataFrame 的值,将 Q1、Q2、Q3、Q4 列中小于 60 的分数修改为 60。 import pandas as pd# 示例数据 data = {name: [Alice, Bob, Charlie],...
Flutter 版本管理工具FVM
FVM是一款非常好用的Flutter版本管理工具。FVM官网: 下面是使用 FVM(Flutter Version Manager)管理 Flutter 版本的整个流程,包括安装、配置环境变量以及基本的使用步骤。 1. 安装 FVM FVM 可以通过多种方式安装,下…...
图学习GNN笔记
目录 第一部分:预测分析中的图学习4.3 案例研究:图上的学习机器学习生命周期 第二部分:图特征学习特征表示与嵌入为什么难以学习? 第三部分:节点嵌入嵌入节点设置学习节点嵌入浅层编码如何定义节点相似性? …...
装饰器—购物打折
from collections import namedtuple# 定义促销策略列表 promos []# 装饰器函数,用于注册促销策略 def promotion(promo_func):promos.append(promo_func)return promo_func# 促销策略1:忠诚度积分折扣 promotion def fidelity(order):""&quo…...
【Linux---10】本地机器 <=> 服务器 文件互传
文章目录 1. 小文件互传2. 大文件互传 1. 小文件互传 使用sz命令。 说明:sz命令是ZModem文件传输协议的一部分,用于在Linux和Unix系统中,从本地系统发送(send)文件到远程系统。sz命令通常与rz命令(ZModem接…...
Mysql数据库基础篇笔记
目录 sql语句 DDL——数据库定义语言(定义库,表,字段) 数据库操作: 表操作: DML 增删改语句 DQL 语法编写顺序: 条件查询 DCL 用户管理: 权限管理: 函数 常见字符串内置函…...
QT 实现QStackedWidget切换页面右移动画
1.实现效果 以下是一个QStackedWidget,放了两个QPushButton在上面,点击切换不同的界面。 为了方便查看动画特效,设置了每个界面的背景图片。 2.实现思路 首先截取当前界面的图片,渲染到一个QLabel上,然后设置QPropertyAnimation动画,动画的作用对象就是这个QLabel,不断…...
RocketMQ rocketmq-tools管理主题
RocketMQ rocketmq-tools管理主题 环境和软件版本增删改查 环境和软件版本 Win10、IDEA、Jdk1.8、rocketmq 5.1.3、rocketmq-tools 5.1.3 引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-tools</artifactId&g…...
Docker 容器隔离关键技术:Seccomp
Docker 容器隔离关键技术:Seccomp 在 Docker 容器中,Seccomp(Secure Computing Mode) 是一种内核安全机制,用来限制容器内的程序可以调用哪些系统调用(Syscalls)。通过列清单的方式,…...
2024年顶级小型语言模型前15名
本文,我们将深入了解2024年备受瞩目的十五款小型语言模型(SLMs),它们分别是Llama 3.1 8B、Gemma2、Qwen 2、Mistral Nemo、Phi-3.5等。这些SLMs以其精巧的体积和高效率著称,它们不需要依赖庞大的服务器资源,…...
【大模型微调】pdf转markdown
目前市面上大部分都是pdf文档,要想转换成能训练的文本,调研了各种工具。 觉得MinerU确实不错。 参考此链接进行操作 MinerU/docs/README_Ubuntu_CUDA_Acceleration_en_US.md at master opendatalab/MinerU GitHub 需要注意的几个点: 1. 使用root账户安装的,配置文件在…...
【Nacos02】消息队列与微服务之Nacos 单机部署
Nacos 部署 Nacos 部署说明 Nacos 快速开始 Nacos 快速开始 版本选择 当前推荐的稳定版本为2.X Releases alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Re…...
PROTEUS资源导引
本专栏讲述51、32单片机的仿真设计,且所有文章资源共享,如需哪篇文章,可按ctrlF键搜索查询,点击进入即可。 -----------------------------------------------------------目录------------------------------------------------…...
对力扣77组合优化的剪枝操作的理解
77. 组合 代码随想录放出了这一张图 我乍一看觉得想当然,但是仔细想想,又不知道以下剪枝代码作何解释,因此我想通过这篇文章简要解释一下 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int sta…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg封装
封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...
http 与 https 汇总
文章目录 http 与 httpsHTTP(超文本传输协议)介绍1. 基本概念2. 工作原理3. 特点4. 应用场景 HTTPS(超文本传输安全协议)介绍1. 基本概念2. 工作原理3. 特点4. 应用场景 HTTP协议的工作原理请求阶段响应阶段客户端解析处理 协议的…...
龙蜥 Linux 安装 Nginx
龙蜥 Linux 安装 Nginx 下载编译安装配置编译参数先装依赖编译安装 使用启动检查配置文件重启关闭 503权限问题参考资料 下载 下载地址详情见参考资料,我下的 nginx-1.26.2.tar.gz 到 /home/jerry/ /home/jerry$ curl -O http://nginx.org/download/nginx-1.26.2.…...
8. 一分钟读懂“代理模式”
8.1 模式介绍 代理模式是一种结构型设计模式,它通过提供一个代理对象来替代对另一个对象(真实对象)的访问。代理对象与真实对象实现相同的接口,并通过代理类对真实对象的访问进行控制,可以在调用前后执行附加操作&…...
分布式搜索引擎Elasticsearch
Elasticsearch是一个基于Lucene库的开源分布式搜索引擎,它被设计用于云计算中,能够实现快速、near-real-time的搜索,并且可以进行大规模的分布式索引。 以下是一个简单的Python代码示例,展示如何使用Elasticsearch的Python客户端…...
完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)
基本上完全按照手册来的,除了Ubuntu虚拟机使用了22.04 Jammy版本,鸿蒙手册里是20.04 版本,主要是鸿蒙里3年前的手册了,所以就擅自用了高版本。 据此还想到一点,鸿蒙LiteOS,还挺稳定的,3年也没有…...
MySQL 8.0与PostgreSQL 15.8的性能对比
以下是MySQL 8.0与PostgreSQL 15.8的性能对比: MySQL 8.0性能特点: MySQL在处理大量读操作时表现出色,其存储引擎InnoDB提供了行级锁定和高效的事务处理,适用于并发读取的场景。MySQL通过查询缓存来提高读取性能,查询缓…...
hive 行转列
行转列的常规做法是,group bysum(if())【或count(if())】 建表: CREATE TABLE table2 (year INT,month INT,amount DOUBLE );INSERT INTO table2 (year, month, amount) VALUES(1991, 2, 1.2),(1991, 3, 1.3),(1991, 4, 1.4),(1992, 1, 2.1),(1992, 2, 2.2),(1992…...
linux——进程间通信system V消息队列
Linux——命名管道及日志-CSDN博客 文章目录 目录 文章目录 前言 一、system V消息队列是什么? 二、相关库接口 1.shmget接口 2、ftok接口 3、shmget、ftok接口封装 4、共享内存操作 编辑 5、shmdt接口 三.函数的调用 1、查看共享内存 2、shell 四…...
Seatunnel解决ftp读取json文件无法读取数组以及格式化之后的json无法解析的问题
问题原因 在JsonRead这个方法里面 在源码中使用的逻辑是读取一行 然后把这个json进行解析 但是这样存在一个问题 比如如果json的格式是这样的 { name:“zhangsan”, age:25 } 如果是这样的话 第一行读到的内容就是 { 显然 一个 { 并不是一个…...
[Vue Router warn]: No match found for location with path 解决方法
在使用vue3 vue-router4时 当列表A组件使用 加上keep-alive缓存后,跳转至详情页面时出现 [Vue Router warn]: No match found for location with path "/atlas/editDetails" 解决方案: 把 router.push({ path: "/atlas/editDetails&…...