P2-3与P2-4.【C语言基本数据类型、运算符和表达式】第三节与第四节

讲解视频:
P2-3.【基本数据类型、运算符和表达式】第三节
P2-4.【基本数据类型、运算符和表达式】第四节
目录
必备知识与理论
任务实施
必备知识与理论
C语言中把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。 其运算符和表达式数量之多,在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善,这也是C语言的主要特点之一。
本任务只介绍最常用的算术运算符、赋值运算符、关系运算符、逻辑运算符、逗号运算符及其相应的表达式。其它运算符将在后续任务中介绍。
1.算术运算符与算术表达式
(1)算术运算符
用于各类数值运算。包括加(+)、减(-)、乘(*)、除 (/)、求余(%,或称模运算)、自增(++)、自减(--)共7种。
双目运算符是有两个运算量参与运算的运算符。如a+b,4 -8,c/5等都是有两个量参加运算。
双目运算符中的加(+)、减(-)、乘(*)运算与普通的算术运算中的加法、减法、乘法相同,具有左结合性,这里不在再解释。使用算术运算符应注意以下几点:
“+”、“-”也可分别作正值、负值运算符,此时为单目运算,具有右结合性, 如+X,-5等。
除法运算符“/”是双目运算,具有左结合性。当参与运算量均为整型时,结果也为整型,舍去小数,如5/2的值为2,而不是2.5;如果运算量中有一个是实型,则结果为双精度实型,如5.0/2的值为2.5。
求余运算符(模运算符)“%”是双目运算,具有左结合性。要求参与运算的量必须为整型。求余运算的结果等于两数相除后的余数,一般情况下,所得余数与被除数符号相同。如5%2=1,10%5=0,8%-5=3。
自增运算符(++)的功能是使变量的值自增1,自减运算符 (--)的功能是使变量值自减1。它们均为单目运算,都具有右结合性。自增、自减运算符只能用于变量,而不能用于常量或表达式,如6++或(a+b)++都是不合法的。自增、自减运算符可有以下几种形式。
++i /* i值自增1后再参与其他运算 */
--i /* i值自减1后再参与其他运算 */
i++ /* i参与运算后再将值自增1 * /
i-- /* i参与运算后再将值自减1 * /
对于一个变量i实行前置运算(++i)和后置运算(i++),其运算结果是一样的,即都使变量i的值加1(i=i+1)。但++i和i++的不同之处在于++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。
例如,假设i的初值为3,则:
j=++i; /* i的值先变成4再赋给j,j的值为4 */
j=i++; /* 先将i的值赋给j,j的值为3,然后i变为4 */
(2)算术表达式
用算术运算符和圆括弧将操作数(即常量、变量和函数)组合起来的符合C语言语法规则的式子,称为C算术表达式。
C表达式不允许使用方括号和花括号,只能使用圆括号帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。
2.赋值运算符与赋值术表达式
赋值运算符用于赋值运算,分为简单赋值(=)、复合算术运算赋值 (+=,-=, *=,/=,%=)和复合位运算赋值(&=,|=,^ =, >>=, <<= ) 共3 类。
(1)简单赋值运算
简单赋值的一般格式为:
变量名=表达式
含义是将赋值运算符右边表达式的值存放到以左边变量名为标识的存储单元中。
例如:语句i=3中的赋值运算符“=”的功能是将整型常量3赋给整型变量i,这样i的值就是3。
(2)复合赋值运算符
C语言规定可以在赋值运算符“=”之前加上其它运算符,以构成复合赋值运算符。其一般格式为:
变量 双目运算符=表达式;
等价于:
变量=变量 双目运算符 表达式;
例如:
n+=1; /* 等价于n=n+1 */
x*=y+1;/* 等价于x=x*(y+1) */
C语言规定,所有双目运算符都可以与赋值运算符一起组合成复合赋值运算符。共有10种复合赋值运算符,即+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。 其中后5种是有关位运算的,将在后面介绍。复合赋值运算符的优先级与赋值运算符的优先级相同,且结合方向也一致。
(3)赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般格式为:
变量=表达式
赋值表达式的求解过程如下:
①先求解赋值运算符右侧“表达式”的值。
②将赋值运算符右侧“表达式”的值赋给左侧的变量。
③赋值表达式的值就是被赋值变量的值。
(4)变量赋初值
在程序中常常需要对一些变量赋初值,以便使用变量。C语言允许在定义变量的同时为其赋初值。
int a=1;
等价于:
int a;
a=1;
3.逗号运算符与逗号表达式
C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个或多个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:
表达式1,表达式2,…,表达式n
求值过程为:先求出表达式1的值,再求出表达式2的值,……,依次求出各个表达式的值,并以表达式n的值作为整个逗号表达式的值。
逗号运算符是所有运算符中级别最低的,且具有从左至右的结合性。
例如:a=3*4,a*5,a+10;
求解过程为:先计算3*4,将12赋给a,然后计算a*5,值为60,最后计算a+10,值为12+10=22,所以整个表达式的值为22,变量a的值为12。
4.关系运算符和关系表达式
(1) 关系运算符
关系运算符用于比较运算。包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)和不等于(!=)6种。
关系运算符都是双目运算符,其结合性均为左结合。在6个关系运算符中,前面四个的优先级相同(>,<,>=,<=),后两种(==,!=)的优先级相同,并且前面4种的优先级高于后面两种。
用关系运算符比较的数据有:整型、实型和字符型,字符串则不能用关系运算符做比较。比较整型或实型数据时,按照数值大小进行比较;比较字符型数据时,按照字符的ASCII值进行比较。
关系运算符的优先级低于算术运算符,高于赋值运算符。
(2)关系表达式
用关系运算符将两个比较的对象连接起来的式子称为关系表达式,其格式为:
表达式 关系运算符 表达式
5. 逻辑运算符和逻辑表达式
(1)逻辑运算符
逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)3种运算符。与 (&&)和或(||)运算符均为双目运算符,具有左结合性。非(!)运算符为单目运算符,具有右结合性。
(2)逻辑表达式
用逻辑运算符将运算对象连接起来的有意义的式子称为逻辑表达式,其格式:
表达式 逻辑运算符 表达式
若逻辑表达式成立为真(即true)则返回1;否则,表达式为假(即false)返回0。
6. 运算符的优先级与结合性
C语言规定了运算符的“优先级”和“结合性”。在表达式求解时,先按运算符的“优先级别”高低次序执行。
例如:a-b*c等价于a-(b*c),运算符“*”的优先级高于运算符“-”。
如果在一个运算对象两侧的运算符优先级别相同,则按规定的“结合方向”处理。左结合性(自左向右结合方向)是指运算对象先与左边的运算符结合,右结合性(自右向左结合方向)是指运算对象先与右边的运算符结合。
例如:a-b+c等价于(a-b)+c。
在书写有多个运算符的表达式时,应注意各个运算符的优先级,确保表达式中的运算符能以正确的顺序参与运算。对于复杂的表达式,为了清晰起见可加圆括号“()”强制规定运算顺序。
任务实施
现在来完成本任务:计算数学表达式的值。

(1)先将数学表达式
转换成C语言表达式为:x=(-b+5*a*a)/(2*a)。
(2)确定变量a、b和x的数据类型。为便于计算,将a、b定义为整型,x定义为实型。
(3)由于a、b为整型,根据C语言的运算规则,两个整数相除的结果为整型数据,而x定义为实型数据,为了得到正确的结果,可进行强制类型转换。
程序代码如下:
#include <stdio.h>
main()
{ int a,b;
float x;
scanf("%d%d",&a,&b); /* 通过键盘给a,b赋值,&a表示变量a的地址 */
x=(float)(-b+5*a*a)/(2*a); /* 将右边整型数据转换为实型 */
printf("x=%f\n", x);
}
程序运行结果:
2 3↙
x=4.250000
相关文章:
P2-3与P2-4.【C语言基本数据类型、运算符和表达式】第三节与第四节
讲解视频: P2-3.【基本数据类型、运算符和表达式】第三节 P2-4.【基本数据类型、运算符和表达式】第四节 目录 必备知识与理论 任务实施 必备知识与理论 C语言中把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。 其运算符和表达式数量之多&a…...
Python | Leetcode Python题解之第492题构造矩形
题目: 题解: class Solution:def constructRectangle(self, area: int) -> List[int]:w int(sqrt(area))while area % w:w - 1return [area // w, w]...
新版vs code + Vue高亮、语法自动补全插件
vs code 版本或及以上 安装以下三个插件插件 Vetur Vue语法支持。包括语法高亮、语法代码提示、语法lint检测 ESLint语法纠错 Prettier 2.左下角设置 3.进行配置 配置内容: {"editor.fontSize": 20,"window.zoomLevel": 1,"workben…...
【优选算法】(第四十五篇)
目录 地图分析(medium) 题目解析 讲解算法原理 编写代码 课程表(medium) 题目解析 讲解算法原理 编写代码 地图分析(medium) 题目解析 1.题目链接:. - 力扣(LeetCode&#…...
自闭症儿童的康复与培养:揭秘有效方法
在生命的广阔画卷中,每一个孩子都是独一无二的色彩,他们带着各自的使命和梦想,踏上人生的旅程。然而,对于自闭症儿童而言,这段旅程似乎更加崎岖和艰难。幸运的是,星贝育园康复中心如同一盏明灯,…...
rom定制系列------小米8澎湃os1.0.28安卓13客户定制固件 刷写以及界面预览
💝💝💝 小米8后置指纹版,机型代码dipper, 官方最终版为12.5.2安卓10的版本。对于一些工作室不太适用。客户需要应用在安卓13的固件。根据客户提供的固件将卡刷改为线刷。并且修改其中客户需求。去除不需要的内置应用以…...
【CTF-SHOW】Web入门 Web14 【editor泄露-详】【var/www/html目录-详】
editor泄露问题通常出现在涉及文件编辑器或脚本编辑器的题目中,尤其是在Web安全或Pwn(系统漏洞挖掘)类别中。editor泄露的本质是由于系统未能妥善处理临时文件、编辑历史或进程信息,导致攻击者可以通过某种途径获取正在编辑的敏感…...
Chrome谷歌浏览器禁止空格下翻页但可以暂停和播放视频脚本js
前提 播放某些网站的视频的时候(不能网页全屏的视频) 会产生空格下翻页但是不能暂停播放视频,解决方案:下载油猴或者脚本猫把这代码填进去 (function() {use strict;document.body.onkeydown function(event) {var e window.event || event;// 检查是否按下空格…...
【笔记】【YOLOv10图像识别】自动识别图片、视频、摄像头、电脑桌面中的花朵学习踩坑
(一)启动 创建环境python3.9 打开此环境终端 (后面的语句操作几乎都在这个终端执行) 输入up主提供的语句:pip install -r requirements.txt 1.下载pytorch网络连接超时 pytorch网址: Start Locally | P…...
H-TCP 的效率和公平性
昨晚带安孩楼下玩耍,用手机 desmos 作了一组 response curve 置于双对数坐标系: 长肥管道的优化思路都很类似,cwnd 增长快一点: BIC TCP:二分查找逼近 capacity;CUBIC TCP:上凸曲线逼近 capa…...
集群与分布式
Cluster(集群)概述 当单独一台主机无法承载现有的用户请求量;或者一台主机因为单一故障导致业务中断的时候,就可以增加服务主机数,这些主机在一起提供服务,就叫集群,而用户所看到的依然是单个的主机,用户并…...
git rebase的常用场景: 交互式变基, 变基和本地分支基于远端分支的变基
文章目录 作用应用场景场景一:交互式变基(合并同一条线上的提交记录) —— git rebase -i HEAD~2场景二:变基(合并分支) —— git rebase [其他分支名称]场景三:本地分支与远端分支的变基 作用 使git的提交记录变得更加简洁 应用场景 场景…...
HttpURLConnection构造请求体传文件
HttpURLConnection构造请求体传文件 在Java中,使用HttpURLConnection构造请求体传输文件,你需要做以下几步: 1、创建URL对象指向你想要请求的资源。 2、通过URL打开连接,转换为HttpURLConnection实例。 3、设置请求方法为POST。 …...
STM32传感器模块编程实践(九) VL53L0X激光红外测距传感器简介及驱动源码
文章目录 一.概要二.VL53L0X测距原理三.VL53L0X主要特性四.VL53L0X硬件参考设计五.模块接线说明六.模块通讯协议介绍七.光学盖玻片介绍八.STM32单片机与VL53L0模块实现距离测量实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 九.小结 一.概要 VL53L0X是一款由ST࿰…...
fastjson注解说明,fastjson注解有那些?fastjson是java的json序列化和反序列化工具包
fastjson注解说明,fastjson注解有那些?fastjson是java的json序列化和反序列化工具包 包版本说明 fastjson请使用1.2.83以上版本,小于这个版本的存在漏洞。 fastjson请使用1.2.83以上版本,小于这个版本的存在漏洞。 fastjson请使用1.2.83以上版本,小于这个版本的存在漏洞…...
VIT:论文关键点解读与常见疑问
VIT贡献点: 1. 首次将 Transformer 应用于图像识别任务 核心贡献:ViT 论文的最大贡献是提出将原本用于自然语言处理(NLP)的 Transformer 架构成功应用于图像任务。传统的计算机视觉模型主要依赖卷积神经网络(CNN&…...
ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南
在地理信息系统(GIS)的应用中,加载高清影像与街道地图对于地图制图、影像查阅、空间数据分析等工作至关重要。天地图作为官方出品的地图服务,以其标准的数据、较快的影像更新速度等特点受到广泛欢迎。以下是如何在ArcGIS中无插件加…...
工业相机选型(自用笔记)
可参考链接: 相机和镜头选型需要注意哪些问题_靶面尺寸-CSDN博客 工业相机选型方法_ccd工业相机选型步骤-CSDN博客 1、相机 1.1 传感器类型(CCD/CMOS) CCD相机: 1)目标是运动的则优先考虑。 2)需要高质量图像,如进行…...
【网安笔记】4种拒绝服务攻击
目录 一、SYN Flood 攻击 二、UDP Flood 攻击 三、ICMP Flood 攻击 四、HTTP Flood 攻击 拒绝服务攻击(Denial of Service attack,简称 DoS 攻击)是指攻击者通过向目标服务器或网络发送大量的请求,使其资源耗尽,无…...
WPF 的组件数据绑定详解
Windows Presentation Foundation(WPF)是微软推出的一种用于构建 Windows 应用程序的 UI 框架。WPF 提供了强大的数据绑定功能,能够轻松地将 UI 控件与数据源连接,从而实现富用户体验,分离前端设计和业务逻辑。本文将详…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
uniapp获取当前位置和经纬度信息
1.1. 获取当前位置和经纬度信息(需要配置高的SDK) 调用uni-app官方API中的uni.chooseLocation(),即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...
linux设备重启后时间与网络时间不同步怎么解决?
linux设备重启后时间与网络时间不同步怎么解决? 设备只要一重启,时间又错了/偏了,明明刚刚对时还是对的! 这在物联网、嵌入式开发环境特别常见,尤其是开发板、树莓派、rk3588 这类设备。 解决方法: 加硬件…...
TMC2226超静音步进电机驱动控制模块
目前已经使用TMC2226量产超过20K,发现在静音方面做的还是很不错。 一、TMC2226管脚定义说明 二、原理图及下载地址 一、TMC2226管脚定义说明 引脚编号类型功能OB11电机线圈 B 输出 1BRB2线圈 B 的检测电阻连接端。将检测电阻靠近该引脚连接到地。使用内部检测电阻时,将此引…...
FTPS、HTTPS、SMTPS以及WebSockets over TLS的概念及其应用场景
一、什么是FTPS? FTPS,英文全称File Transfer Protocol with support for Transport Layer Security (SSL/TLS),安全文件传输协议,是一种对常用的文件传输协议(FTP)添加传输层安全(TLS)和安全套接层(SSL)加密协议支持的扩展协议。…...
