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

news2024/11/27 5:31:46

讲解视频:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以简单组合优化为例讨论计算复杂性

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报 所用教材&#xff1a;北京大学屈婉玲教授《算法设计与分析》 课程资料&#xff1a;https://www.icourse163.org/course/PKU-1002525003 承诺不用于任何商业用途&#xff0c;仅用于学术交流和分享 更多内容请关注课题…

centOS实用命令

一、查看进程&#xff0c;端口占用 netstat命令(window和linux通用&#xff0c;细节不同) 查看端口占用(linux) netstat -ano |grep 8080查看端口占用(window) netstat -ano |findstr 8080ps命令 可以直接使用ps aux查看所有用户的进程信息 一些参数 参数解释-p根据进程P…

【git】如何快速准确的回退(revert)已经合并(merge)主分支(master)的新提交代码

文章目录 前言一、merge模式二、回滚步骤总结 前言 我们在做一些需求&#xff0c;正常流程经过开发&#xff0c;测试到最后和代码上线。但是有时候就会发生一些小插曲&#xff0c;比如产品说老板说某某某你的代码要延后上线&#xff01;&#xff01;或者你写的不合格预发环境出…

(成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号

文章目录 &#x1f315;问题&#x1f315;查看系统版本&#x1f315;为什么更新更成了atzlinux&#x1f315;通过修复依赖关系尝试解决右上角红色错误符号&#x1f315;把源换成ubuntu的源&#x1f315;删除atzlinux源和自定义的第三方源&#x1f315;重新创建/etc/os-release文…

AJAX——服务端响应 JSON 数据

网页文件中&#xff1a; js 文件中&#xff1a; 本文分享到此结束&#xff0c;欢迎大家评论区相互讨论学习&#xff0c;下一篇继续分享AJAX中AJAX 请求超时与网络异常处理的学习。

吴伟仁《英国文学史及选读》第一二册课后答案PDF

新经典高等学校英语专业系列教材《英国文学史及选读》根据英国文学历史的顺序结合作品选读编写而成&#xff0c;在历史部分&#xff0c;对英国文学史的每个阶段作了简明扼要的概述&#xff0c;而在作品选读部分则尽可能遴选了文学史上的重要作家和重要作品。教材内容丰富&#…

python机器人编程——用python调用API控制wifi小车的实例程序

目录 一、前言二、一个客户端的简单实现2.1 首先定义一个类及属性2.2 其次定义连接方法2.3 定义一些回调函数2.4 定义发送小车指令方法2.5 定义一个正常关闭方法 三、python编程控制小车的demo实现四、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源p…

vue elementui table编辑表单时,弹框增加编辑明细数据

需求: 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;通过弹框方式增加或者编辑。 效果图&#xff1a; 代码&#xff1a; <!-- 新增主表弹窗 Begin --><el-dialog:title"titleInfo"top"5vh"centerwidth"…

从零开始学PHP之输出语句变量常量

一、 输出方式 在 PHP 中输出方式&#xff1a; echo&#xff0c;print&#xff0c;print_r&#xff0c;var_dump 1、echo和print为php的输出语句 2、var_dump&#xff0c;print_r为php的输出函数 &#xff08;这里不做介绍&#xff09;echo 和 print 区别 1、echo - 可以输出…

Python学习的自我理解和想法(15)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第15天&#xff0c;从今天开始&#xff0c;每天一到两个常用模块&#xff0c;更完恢复到原来的&#xff0c;开学了&#xff0c;时间不多&am…

StarRocks大批量数据导入方案-使用 Routine Load 导入数据

本文详细介绍如何使用Routine Load 导入数据 一、准备工作 1.1 安装基础环境 主要是安装StarRocks和Kafka&#xff0c;本文直接跳过不做详细介绍~ 二、概念及原理 2.1 概念 导入作业&#xff08;Load job&#xff09; 导入作业会常驻运行&#xff0c;当导入作业的状态为 R…

【数据结构与算法】链表(上)

记录自己所学&#xff0c;无详细讲解 无头单链表实现 1.项目目录文件 2.头文件 Slist.h #include <stdio.h> #include <assert.h> #include <stdlib.h> struct Slist {int data;struct Slist* next; }; typedef struct Slist Slist; //初始化 void SlistI…

算法专题八: 链表

目录 链表1. 链表的常用技巧和操作总结2. 两数相加3. 两两交换链表中的节点4. 重排链表5. 合并K个升序链表6. K个一组翻转链表 链表 1. 链表的常用技巧和操作总结 常用技巧 画图!!! 更加直观形象, 便于我们理解引入虚拟头节点, 方便我们对链表的操作, 减少我们对边界情况的考…

《欢乐饭米粒儿》第九季热播中,今晚精彩继续!

由鲜博士独家冠名播出的独创小品剧《欢乐饭米粒儿》第九季正在辽宁卫视热播&#xff0c;本期节目将于今晚20:50在辽宁卫视继续为观众带来欢笑与感动。本周节目亮点纷呈&#xff0c;三个小品故事不仅延续了节目一贯的幽默风格&#xff0c;更在欢笑中传递了深刻的社会价值和情感共…

Java 8 Stream API:从基础到高级,掌握流处理的艺术

一、Stream&#xff08;流&#xff09;基本介绍 Java 8 API 添加了一个新的抽象称为Stream&#xff08;流&#xff09;&#xff0c;可以让你以一种声明的方式处理数据&#xff0c;这种风格将要处理的元素集合看做一种流&#xff0c;元素流在管道中传输&#xff0c;并在管道中间…

Kamailio-Sngrep 短小精悍的利器

一个sip的抓包小工具&#xff0c;在GitHub上竟然能够积累1K的star&#xff0c;看来还是有点东西&#xff0c;当然官方的友链也是发挥了重要作用 首先送上项目地址&#xff0c;有能力的宝子可以自行查看 经典的网络抓包工具有很多&#xff0c;比如&#xff1a; Wireshark&…

vue实现文件预览和文件上传、下载、预览——多图、模型、dwg图纸、文档(word、excel、ppt、pdf)

整体思路&#xff08;模型特殊不考虑&#xff0c;别人封装不具备参考性&#xff09; 图片上传采用单独的组件&#xff0c;其他三种类型采用一个上传组件&#xff08;仅仅文件格式不同&#xff09;文件上传采用前端直接上传阿里云的方式图片预览使用elementUI自带的image预览dw…

双目标定的原理

标定目的&#xff1a;建立相机成像几何模型并矫正透镜畸变。 建立相机成像几何模型&#xff1a;计算机视觉的首要任务就是要通过拍摄到的图像信息获取到物体在真实三维世界里相对应的信息&#xff0c;于是&#xff0c;建立物体从三维世界映射到相机成像平面这一过程中的几何模…

ssm剧本杀预约系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环境与技术 3 2.1 Java语言…

【p2p、分布式,区块链笔记 Blockchain】truffle002 unleashed_rentable_nft 项目

上一篇&#xff1a;【p2p、分布式&#xff0c;区块链笔记 Blockchain】truffle001 以太坊开发框架truffle初步实践 项目结构 项目实现了一个简单的可租赁的 NFT 系统&#xff0c;用户可以铸造和销毁 NFT。这是作者写的项目介绍&#xff08;后边看issue才发现的&#xff09;&a…