C语言入门4-运算符和表达式
一、 分类
C语言一共有34种运算符,10种运算类型,本节我们要掌握的有( 7 种)
算术运算符(+、-、*、/、%)、
关系运算符(>、>=、==、!=、<、<=)、
赋值运算符(=、+=、-=、*=、/=、%=)、
逻辑运算符(!、||、&&)、
条件运算符、(?:)、a
若按参与运算的对象个数,C语言运算符可分为
单目运算符(++ -- )
双目运算符(如+、-)
三目运算符(如?:)
二、 运算符的结合性和优先级
- 1. 运算符的结合性
在C语言的运算符中,
所有的单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右向左,
其余运算符的结合方向是从左向右。
( 算术运算符 关系运算符 逗号运算符 )
运算符的优先级
单目运算符(如!)、
- 2.
初等运算符(圆括号()、下标运算符[]、结构体成员运算符->)>单目运算符>算术运算符(先乘除后加减)>关系运算符>逻辑运算符(不包括!)条件运算符>赋值运算符>逗号运算符
三、 算术运算符 和算术表达式
- 1. 基本的算数运算符
(1). +加法运算 或 正值运算符
4+4、+5、
(2). .- 减法运算 或 负值运算符
6-4、-10、-29
(3). * 乘法运算
注意符号,不是x,而是*
(4). /除法运算
注意符号,不是÷,也不是\,而是/
整数除于整数,还是整数。1/2的值是0,这个并不是二分之一, 不会四舍五入,直接截断取值。
(5)%取余运算
取余:即两个整数相除之后的余数
注意:%两侧只能是整数,正负性取决于%左侧的数值 2.注意:
(1).当运算对象是负数时,不同机器的运算结果也可能是不同的。
(2).双目运算符两边的数值类型必须一致才能进行运算,所得结果也是相同类型的数值。
(3).双目运算符两边的数值类型如果不一致,必须由系统先进行一致性转换。
转换规则:char->short->int->unsigned->long->double->float
(这里涉及到数据类型的转换,后期会详细讲解)
(4).C语言规定,所有实数的运算都是以双精度方式进行的,若是单精度数值,则需要在尾数后面补零,转换长双精度数才能进行运算。
- 2. 算术表达式
(1).算术表达式是用 算术运算符和括号 将运算量(也称操作数)连接起来的、符合C语言语法规则的表达式。
其中运算对象包括函数、常量、变量。
(2).算术表达式的运算规则:
A.在算术表达式中,可以使用多层圆括号,但括号必须配对。
运算时从内层括号开始,由内向外依次计算各表达式的值。
- 在算术表达式中,对于不同优先级的运算符,可按运算符的优先级由高到低进行运算,
若表达式中运算符的优先级相同,则按运算符的结合方向(算术运算符的结合方向是从左到右)进行运算。
如果一个运算符两侧的操作数类型不同,则先利用自动转换或强制转换,使两者具有相同数据类型,
然后再进行运算。
四、 关系运算(比较运算)和关系表达式
- 1. 关系运算符:
C语言提供了6种关系运算符:
==(等于)、
!=(不等于)、
>(大于)、
>=(大于等于)、
<(小于)、
<=(小于等于)
- 2. 关系表达式
(1).定义:由关系运算符连成的表达式。关系运算符的两边可以是C语言中任意合法的表达式。
(2).关系运算符的结果是一个整数值——“0或者1”,用非零值表示“真”,用零值表示“假”
(3).当关系运算符两边值的类型不一致时,系统将自动转化。
/* 验证关系表达式的值 */
#include "stdio.h"
void main()
{
printf("3>2 的逻辑值是:%d \n",3>2);
printf("3>=2 的逻辑值是:%d \n",3>=2);
}
注:关系表达式的逻辑结果 只有 两个,
当表达式成立(为真)值为1, 当表达式不成立(为假)值为0。
**当表达式成立(为真)值为true, 当表达式不成立(为假)值为false。( 错!!)
**当表达式成立(为真)为true, 当表达式不成立(为假)为false。 ( 对!!!)
- 3. 结合性:
自左向右:4>3 >2,先判断4是否大于3,再判断1是否大于2
- 4. 优先级:
关系运算符中
(==、!=)的优先级相等, (优先级低)
(<、<=、>、>=)的优先级相等,(优先级高)
且前者的优先级低于后者:
2==3>1,先判断3是否大于1,再判断2是否等于1。
- 5. 注意:
A.当关系运算符两边值的类型不一致时,如一边是整型,另一边是实型,系统将自动将整型转化为实型数,然后再进行比较。
B.若复合语句中有关系运算式和算术运算式时,因为算术运算符的优先级高于关系运算符,所以应该先算出算术表达式的值再去判断关系表达式的值。
五、 逻辑运算符和逻辑表达
C语言提供了3中逻辑运算符:
- 1. 1.&& 逻辑与
(1). 使用格式: 条件A && 条件B;
(2). 运算结果:
只有当条件A和条件B都成立时,结果才为1,也就是“真”;
其余情况的结果都为0,也就是“假”。
因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假”
(3).注意:
1>.若想判断a的值是否在(3, 5)范围内,千万不能写成3<a<5,
因为关系运算符的结合方向为“从左往右”。
比如a为2,它会先算3<a,也就是3<2,条件不成立,结果为0。
再与5比较,即0<5,条件成立,结果为1。
因此 3<a<5的结果为1,条件成立,也就是说当a的值为2时,a的值是在(3, 5)范围内的。这明显是不对的。正确的判断方法是:(a>3) && (a<5)
2>.C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑与也适用于数值。比如 5 && 4的结果是1,为“真”;-6 && 0的结果是0,为“假”
- 2. 2.|| 逻辑或
(1).使用格式:
条件A || 条件B;
(2). 运算结果:
当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;
只有当条件A和条件B都不成立时,结果才为0,也就是“假”。
(3).注意:
C语言规定:任何非0值都为“真”,只有0才为“假”。
因此逻辑或也适用于数值。
比如 5 || 4的结果是1,为“真”;
-6 || 0的结果是1,为“真”;
0 || 0的结果是0,为“假”。
- 3. 3.! 逻辑非
(1).使用格式:
! 条件A;
(2).运算结果:
其实就是对条件A进行取反:
若条件A成立,结果就为0,即“假”;
若条件A不成立,结果就为1,即“真”。
也就是说:真的变假,假的变真。
例:逻辑非的结合方向是“自右至左”。
比如表达式 ! (a>5)
若a的值是6:先判断a>5,成立,再取反之后的结果为0 ;
若a的值是2:先判断a>5,不成立,再取反之后的结果为1 ;
如果a的值大于5,结果就为0;否则,结果就为1 .
注意:
1>.可以多次连续使用逻辑非运算符:
!(4>2)结果为0,是“假”,
!!(4>2)结果为1,是“真”,
!!!(4>2)结果为0,是“假”
2>.C语言规定:
任何非0值都为“真”,只有0才为“假”。
因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。
!5、!6.7、!-9的结果都为0,
!0的结果为1
- 4. 结合性:自左向右
- 5. 优先级
逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > ||
例1:表达式!(3>5) || (2<4) && (6<1) :
先计算 !(3>5)、(2<4)、(6<1),结果为1,
式子变为1 || 1 && 0,
再计算1 && 0,式子变为1 || 0,
最后的结果为1
例2:表达式3+2<5||6>3 等价于 ((3+2) < 5) || (6>3),结果为1 例3:表达式4>3 && !-5>2 等价于 (4>3) && ((!(-5)) > 2) ,结果为0
六、 条件运算符
- 1. 条件运算符是一个三目运算符。
- 2. 格式:
(条件判断)?操作1:操作2
- 3. 作用:
如果条件表达式为真,则执行操作1,条件表达式为假,则执行操作2
- 4. 优先级:
条件运算符高于赋值运算符,但低于逻辑运算符、关系运算符和算术运算符
例:int a = 5?10:2; 获得a、b中的最大数 获得a、b、c中的最大数
七、 赋值运算符和赋值表达式
C语言中,“=”称作赋值运算符,作用是将一个数值赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。
- 1. 简单赋值
(1).一般形式:变量名=表达式
(2).注意:
1>.在程序中可以多次给一个变量赋值,每赋一次值,与该变量相应的存储单元的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。
即,最左边变量所得到的新值是整个赋值表达式的值。
2>.赋值运算符的优先级别高于逗号运算符。
3>.注意赋值运算符“=”和等于运算符“==”的差别
4>.赋值运算符的左侧只能是变量,而不能使常量或表达式。
右侧可以是表达式,包括赋值运算表达式。
“a=b=1+1”是对的,而“a=1+1=b”是错的
(原因:由于赋值运算表达式的结合方式是从右到左,其第一个赋值表达式的左侧是常数,所以错误)
- 2. 复合赋值
(1).在赋值运算符之前加上其他运算符可以构成复合赋值运算符。其中与算术运算有关的复合运算符有+=、-=、*=、/=、和%=等。
(2).注意:
1>.两个符号之间不可以有空格
2>.复合赋值运算符的优先级与赋值运算符的相同。
表达式n+=1等价于n=n+1,作用是去变量n中的值增1再赋值给变量n,
其他复合赋值运算符的运算规则以此类推。
例:求表达式a+=a-=a*a的值
解:先进行“a-=a*a”运算,相当于a=a-a*a=12-144=-132
再进行“a+=-132”运算,相当于a=a+(-132)=-132-132=-264
3>.如果赋值运算符两侧的类型不一致,在赋值前系统将自动先把右侧的值或通过表达式求得的数值按赋值号左边变量的类型进行转换。
- 3. 自增自减运算
(1).自加运算符“++”和自减运算符“--”的作用是使运算变量的值增1或减1。
(2).自加、自减运算符是单目运算符。其运算对象可以是整型或实型变量,但不能是常量和表达式,因为不能给常量或者表达式赋值。
(3).自加、自减运算符可以作为可以作为前缀运算符,也可以作为后缀运算符构成一个表达式,如++i、--i、i++、i--等都是合法的表达式。
1>.无论是前缀还是后缀运算符,一定会有i的值加1或则减1这一步。
2>.++i、--i:在使用i之前,先使i的值加1或减1,再使此时的表达式的值参加运算。(即加前或则减前取值)
3>. i++、i--:在使用i之后,使i的值加1或减1,再使此时的表达式的值参加运算。(即加后或则减后取值)
八、 典型练习题*****九九乘法表
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{ int i,o,z;
for (i=;i<=;i++){
for(o=;o<=i;o++){
z=i*o;
printf("%d*%d=%d\t",o,i,z); }
printf("\n"); } }
Visual C++6.0下载链接
链接:https://pan.baidu.com/s/18ubNr9Gor3GbRrAkJe612w 密码:piek
C语言入门4-运算符和表达式的更多相关文章
- C语言基础知识-运算符与表达式
C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...
- c语言笔记3运算符与表达式
运算符与表达式 知识点一 操作数:参与运算的具体对象. 运算符:指明了对操作数进行的某项运算. 表达式:表示一个求值得规则.它由变量.常量.运算符和函数.括号按一定规则组成. 书写表达式的细节:1,运 ...
- JAVA语言中的运算符和表达式
JAVA——运算符 按运算符要求的运算符个数可分为一元.二元.三元运算符: 一元运算符有一个操作数:如正数或者负数前面的“+”.“—”,和自增“++”.自减“- -”. 二元运算符有两个操作数:如除法 ...
- Java语言常用的运算符和表达式详解
Java提供了丰富的运算符,如算术运算符.关系运算符.逻辑运算符.位运算符等等.Java的表达式就是用运算符连接起来的符合Java规则的式子.运算符的优先级决定了表达式中运算执行的先后顺序.在编写程序 ...
- c语言数据类型、运算符和表达式
数据类型 1.基本数据类型: 基本数据类型最主要的特点是,其值不可以分解为其他类型.也就是说,基本数据类型是 自我说明的 2.构造数据类型: 构造数据类型是根据已定于的一个或多个数据类型用构造的方法来 ...
- 针对安卓java入门:运算符和表达式
逻辑运算符 &&和&判断是一样的,区别在于过程,&会把整个过程算一遍,&&一旦碰到false就不会往下
- 【C语言学习】《C Primer Plus》第5章 运算符、表达式和语句
学习总结 1.有了一定的语言基础,运算符和表达式这些都大同小异,无外乎赋值运算符(=).算术运算符(+.-.*./.%.++.——)和其他的一下运算符(sizeof.(type)). 2.声明一个参数 ...
- C语言入门(1)——C语言概述
1.程序与编程语言 我们使用计算机离不开程序,程序告诉计算机应该如何运行.程序(Program)是一个精确说明如何进行计算的指令序列.这里的计算可以是数学运算,比如通过一些数学公式求解,也可以是符号运 ...
- JAVA基础——运算符和表达式
JAVA语言常用的运算符和表达式详解 一.简述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 age 的值设置为 20 ,这时候就需要一个&q ...
随机推荐
- SIP:用Riverbank的SIP创建C++库的Python模块(把自己的C++库包装成Python模块)
我们发现PyQt做的Python版的PyQt是如此好用,如果想把自己的C++库包装成Python模块该如何实现呢? 这里介绍下用SIP包装C++库时值得参考的功能实现: 需要Python模块中实现C+ ...
- kube框架结构-一个小型响应式CSS框架
当你开始初建一个新的项目时,你可能需要一个不太复杂的基础框架,Kube框架应该是你最好的选择.一个独立的CSS文件,帮助你更简单的创建响应式的的布局设计. Kube Framework包括网格.按钮. ...
- excel导入到数据库的异常处理
excel导入到数据库,这个是经常发生的,今天就碰到了一个非常郁闷的事情,在导入到oracle数据的时候,总是出现ORA-01756: 引号内的字符串没有正确结束,认真的排插了数据当中可能出现的错误, ...
- 函数式编程里的Materialization应该翻译成什么?
Materialization是函数式编程里的一个专业术语, 用于特指函数式编程中查询被实际执行并生成结果的这一过程. 首先, 搜了一下中文资料, 暂时没有对该词的中文翻译, CSDN\博客园\阿里 ...
- HTML连载11-HTML中被废弃的标签&字符实体
一.为什么会有被废弃的标签 答:HTML中以前存在一部分不是用来添加语义的标签,而与我们HTML标签是用来添加语义的,这与我们的定义不相符. 例如: 1.标签<br>:换行 2.标签&l ...
- webstrom sass 关于arguments 和 Output paths to refresh 设置
第一种设置: Arguments:--no-cache --update -t expanded $FileName$:$FileNameWithoutExtension$.css Output pa ...
- 【前端工具】页面加载获取url param
例如跳转进入一个页面: https://mp.csdn.net/postedit/74766644?name=catalina&flag=1 函数: function getParam(par ...
- Ember报错
错误是ember-data的版本不对 解决办法是: npm install --save ember-data@2.14.2 //bing.com中去查资料,应有尽有
- 秒懂Hash算法(一):什么是Hash
Hash函数 在一般的线性表.树结构中,数据的存储位置是随机的,不像数组可以通过索引能一步查找到目标元素.为了能快速地在没有索引之类的结构中找到目标元素,需要为存储地址和值之间做一种映射关系h(key ...
- Linux运维工程师学习成长路线
不过大家的留言都很精彩,希望大家也可以去留言区逛一逛~~ 好在这不是最后一期送书,之前已经有了好多活动,小编一定继续为大家多送些福利. 希望大家可以一如既往的关注脚本之家,支持爱你们的小编,共同进步! ...