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 控件与数据源连接,从而实现富用户体验,分离前端设计和业务逻辑。本文将详…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
