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 控件与数据源连接,从而实现富用户体验,分离前端设计和业务逻辑。本文将详…...

房子,它或许是沃土
刚成家,来客时,它是客房 成家后,没小孩,它是书房 有小孩,未分房,它暂且是书房 孩子大些,它是孩子们埋下梦想种子,生根发芽的地方...

【Golang】Go语言http编程底层逻辑实现原理与实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

SOLIDWORKS参数化软件
在产品设计和工程领域,参数化设计是一种革命性的方法,它允许设计者通过定义一系列规则和关系来创建和修改模型。参数化设计的核心在于将设计过程分解为一系列可调整的参数,如尺寸、形状、材料属性等,这些参数之间通过数学关系相互…...

上位机开发常用技术 C# Task 线程 开始,暂停,继续,停止
上位机开发中一定会用到的技术就是 设备的线程开始运行执行生产流程,在生产过程中会有要打开安全门或暂停设备动作,人为去排除设备小问题的时就要用到暂停功能,问题排除后设备继续运行,生产完成后设备停止。 这些操作是上位机开发…...

MySQL 密码忘记了怎么办?
在使用 MySQL 的过程中,有时候我们可能会忘记密码。别担心,本文将详细介绍在 Windows 系统下如何重新设置 MySQL 密码。 一、停止 MySQL 服务 打开“服务”窗口,可以通过在 Windows 搜索栏中输入“服务”来找到并打开它。在服务列表中找到“…...

Java中常见的自带数据结构类
目录 一、ArrayList(动态数组) 特性 常用方法 二、LinkedList(双向链表) 特性 常用方法 三、ArrayDeque(双端队列) 特性 常用方法 四、HashMap(哈希表) 特性 常用方法 五、TreeMap&…...

数据结构——链表,哈希表
文章目录 链表python实现双向链表复杂度分析 哈希表(散列表)python实现哈希表哈希表的应用 链表 python实现 class Node:def __init__(self, item):self.item itemself.next Nonedef head_create_linklist(li):head Node(li[0])for element in li[1…...

如何使用Python对Excel、CSV文件完成数据清洗与预处理?
在数据分析和机器学习项目中,数据清洗与预处理是不可或缺的重要环节。 现实世界中的数据往往是不完整、不一致且含有噪声的,这些问题会严重影响数据分析的质量和机器学习模型的性能。 Python作为一门强大的编程语言,提供了多种库和工具来帮…...

第8篇:网络安全基础
目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇:网络安全基础 引言 在现代信息社会中,计算机网络无处不在,从互联网到局…...

Flutter 中的 PopScope 小部件:全面指南
Flutter 中的 PopScope 小部件:全面指南 在 Flutter 应用开发中,导航和路由管理是构建复杂应用时必须面对的挑战之一。PopScope 小部件是 Flutter 2.0 版本引入的一个新功能,它提供了一种更灵活的方式来控制页面的弹出和返回行为。本文将带你…...