《C语言第2章C的基础知识.ppt》由会员分享,可在线阅读,更多相关《C语言第2章C的基础知识.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2 2章章 C C语言基础语言基础华北电力大学华北电力大学 计算机系计算机系C C 语言程序设计语言程序设计C语言基础语言基础12023/1/16本章主要内容本章主要内容l本章介绍本章介绍C语言的基础,包括:语言的基础,包括:数据类型数据类型运算符和表达式运算符和表达式l均是程序设计的基本知识均是程序设计的基本知识l为什么讨论为什么讨论这些知识这些知识?通常通常程序程序要对数据进行操作处理:要对数据进行操作处理:处理的对象是处理的对象是数据数据通过通过运算符和表达式运算符和表达式进行操作进行操作22023/1/16例如:例如:【例【例2.1】计算圆的面积,半径为】计算圆的面积,半径为 5
2、cm。程序如下:程序如下:void main()float r r,areaarea;r r=5 5;areaarea=3.143.14*r r*r r;printf(%fn,areaarea);运算结果是输出运算结果是输出运算结果是输出运算结果是输出圆的面积:圆的面积:圆的面积:圆的面积:78.50000078.500000程序中用到的数据:程序中用到的数据:r、area、5、3.14对数据进行的运算:对数据进行的运算:*、=32023/1/16分析:分析:计算机操作处理时,要完成以下工作计算机操作处理时,要完成以下工作:l数据数据r和和area是变量,在内存中需要给半径是变量,在内存中需要
3、给半径 r 和运算结果和运算结果 area 开辟存储空间,存放它们开辟存储空间,存放它们的值。的值。应该留多大的地方来存放它们的值?应该留多大的地方来存放它们的值?l数据数据 5 和和 3.14 是常量与是常量与 r、area 不同,它们不同,它们是在编写程序时就给出确定的值,在运算过是在编写程序时就给出确定的值,在运算过程中不会改变。程中不会改变。这样的数计算机怎么处理?这样的数计算机怎么处理?l对对整数整数 5 和和小数小数3.14,计算机,计算机存放时是否有存放时是否有区别?区别?涉及数据类型涉及数据类型的基本知识的基本知识42023/1/16C语言的数据类型语言的数据类型 C数据类型数
4、据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型整型整型整型整型(很多种)(很多种)(很多种)(很多种)字符型字符型字符型字符型 实实实实型型型型(浮浮浮浮点点点点型型型型)空类型空类型空类型空类型单精度型单精度型单精度型单精度型 双精度型双精度型双精度型双精度型 基本类型基本类型基本类型基本类型指针类型指针类型构造类型构造类型本章讨论本章讨论本章讨论本章讨论基本类型数据基本类型数据基本类型数据基本类型数据52023/1/162.1.1 整型数据整型数据 1整型数据的类型整型数据的类型基本整型数据基本整型数据 int,分配分配 4 Byte短整型数据短整型数据 s
5、hort int,分配分配 2 Byte长整型数据长整型数据 long int,分配分配 4 Byte整型数据均以整型数据均以二进制补码二进制补码形式存储形式存储问题:问题:为什么要采用补码?为什么要采用补码?如何表示?如何表示?62023/1/16计算机中正、负数的表示计算机中正、负数的表示 例如:例如:109(1101101)2要区别:要区别:109 和和 109 方法是:方法是:将符号也数码化将符号也数码化即:即:正的符号正的符号 用用 0 表示表示 负的符号负的符号 用用 1 表示表示 计算机中的整数表示方法是:计算机中的整数表示方法是:符号位符号位二进制数值二进制数值(以以 8bit
6、 为例为例)109 110 1101 0110 1101109 110 1101 1110 110172023/1/16问题:计算机计算复杂化问题:计算机计算复杂化例如计算:例如计算:(-19)+(+22)1001 0011+0001 0110解决的方法是:解决的方法是:使用使用补码补码的表示方法(按前述表示的的表示方法(按前述表示的编码称为编码称为原码原码),即能将减法一律转换为),即能将减法一律转换为加法。加法。需要判断符号是否相同:需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符
7、号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进行绝对值相减行绝对值相减行绝对值相减行绝对值相减82023/1/16原码、反码和补码原码、反码和补码l正数正数:原码、反码、补码相同原码、反码、补码相同符号位为符号位为0,数值为对应的二进制数。,数值为对应的二进制数。109 01101101原原=01101101反反=01101101补补l负数负数:原码原码符号位为符号位为1 1,数值为绝对值的二进制数,数值为绝对值的二进制数 109 11101101原原反码反
8、码符号位为符号位为1 1,数值为绝对值的二进制数,数值为绝对值的二进制数各位变反各位变反 109 10010010反反 补码补码符号位为符号位为1 1,数值为绝对值的二进制数,数值为绝对值的二进制数各位变反加各位变反加1 1 109 10010011补补92023/1/16用补码计算用补码计算例如计算:例如计算:(-19)+(+22)1110 1101+0001 0110=0000 0011(0000 0011)2=3102023/1/162.有符号和无符号整型数据有符号和无符号整型数据有符号的整型数据有符号的整型数据 int无符号的整型数据无符号的整型数据 unsigned int区别是将区
9、别是将最高位最高位看作符号位还是数据位看作符号位还是数据位例如:例如:1111 1111 1010 1000作为作为有符号数有符号数使用时,最高为符号位使用时,最高为符号位为负数,值是:为负数,值是:-88(再求一次补)(再求一次补)作为作为无符号数无符号数使用时,最高为数据位使用时,最高为数据位为无符号的数,值是:为无符号的数,值是:65448112023/1/16例如:例如:void main()int m;m=65448;printf(nm=%dn,m);printf(m=%un,m);输出结果:输出结果:m=-88m=65448按有符号数输出按有符号数输出按无符号数输出按无符号数输出1
10、22023/1/16整型数据的类型及规定整型数据的类型及规定l方括号表示可选项方括号表示可选项lint 分配分配4 Byte,long分配分配4 Byte类型名称类型名称类型符类型符bit取值范围取值范围整型整型(短整型短整型)signed int signed short int 3216-231231-1(-3276832767)无符号整型无符号整型unsigned int32 0 232-1长整型长整型signed long int32-231231-1无符号长整型无符号长整型 unsigned long int320 232-1132023/1/162.1.2 实型数据实型数据 1实型
11、数据的类型实型数据的类型 单精度实型数据单精度实型数据 float,分配分配4 Byte双精度实型数据双精度实型数据double,分配,分配 8 Byte2实型数据的存储实型数据的存储 单精度实型单精度实型单精度实型单精度实型指数部分指数部分指数部分指数部分小数部分小数部分小数部分小数部分 小数的符号位小数的符号位指数的符号位指数的符号位142023/1/16实型数据的类型及规定实型数据的类型及规定 lC标准并未具体规定各种实型数据所占字节数,标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。也不规定具体小数和指数部分的位数。l一般而言,小数部分位数多,数据表示的有效数
12、一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的字多,精度就高;而指数部分位数多,则表示的数据范围更大。数据范围更大。有效数字的意义?有效数字的意义?类型类型类型符类型符Byte绝对值的范围绝对值的范围有效数字有效数字单精度型单精度型 float410-37 103878 位位双精度型双精度型 double810-307 103081516位位152023/1/162.1.3 字符型数据字符型数据 l字符型数据字符型数据char,分配分配 1 Byte l字符型数据是指字母、数字、各种符号等字符型数据是指字母、数字、各种符号等用用ASCII值表示的字符值表示
13、的字符l例如例如 a 是一个是一个char类型数据,称作字符类型数据,称作字符常量,存储:常量,存储:0 1 1 0 0 0 0 12.1.4 空类型空类型l l空类型空类型voidl l通常与指针或函数结合使用通常与指针或函数结合使用 162023/1/162.2 常量、变量与标准函数常量、变量与标准函数 l主要内容:主要内容:常量常量变量变量标准库函数标准库函数172023/1/162.2.1 常量常量 l在运行程序的过程中值保持不变的量在运行程序的过程中值保持不变的量1整型常量整型常量 十进制十进制:09八进制八进制:07,以,以 0开头开头十六进制十六进制:09,AF/af,以以 0
14、x或或 0X 开头开头例如:例如:100 -8 0 +123100 -8 0 +123010 024 0100 073010 024 0100 0730 0 x38 0 x10 0X10 0XFF 0 x0ax38 0 x10 0X10 0XFF 0 x0a182023/1/161.整型常量整型常量l整型常量的类型:整型常量的类型:根据值大小默认类型根据值大小默认类型整型常量后面加整型常量后面加l或或L,则认为是则认为是long int型型 例如:例如:123 123L、032、432l、0 x100l注意:注意:l十六进制常量中可以使用大写字母十六进制常量中可以使用大写字母AF,也可以使用小
15、写字母也可以使用小写字母af。l八进制常量中不能出现数字八进制常量中不能出现数字 8 或或 9例如:例如:018、0921非法非法192023/1/162.实型常量实型常量 十进制形式十进制形式 1.0 1.+12.0 -12.0 0.01.0 1.+12.0 -12.0 0.0指数形式指数形式 1 1e3 1.8e-3 -123E-6 -.1E-3e3 1.8e-3 -123E-6 -.1E-3等价于:等价于:等价于:等价于:1101103 3 1.810 1.810-3-3 -1231012310-6-6 -0.1100.110-3-3指数只能是整数,而尾数则可以是整数也可以是指数只能是整
16、数,而尾数则可以是整数也可以是小数小数,无论指数或尾数均不能省略,无论指数或尾数均不能省略例如:例如:1 1e e、E.5E.5、E-3E-3 非法非法实型常量的类型:默认为实型常量的类型:默认为doubledouble型,后面加型,后面加F F(或或f f),),则强调表示该数是则强调表示该数是float类型类型例如:例如:3.5f f、1e2F F 202023/1/163.字符型常量字符型常量 l字符常量字符常量 单引号括起来的单个字符单引号括起来的单个字符例如:例如:a、A、+、3、等等 l转义字符常量转义字符常量单引号括起来的单引号括起来的 与规定与规定字符字符组合,例如:组合,例如
17、:00字符串结束标志字符串结束标志n换行换行t跳到下一个输出位置跳到下一个输出位置双引号字符双引号字符dddddd为为1到到3位八进制数所代表的字符位八进制数所代表的字符xhhhh为为1到到2位十六进制数所代表的字符位十六进制数所代表的字符如如 102表示表示B如如 x47表示表示G212023/1/164.字符串常量字符串常量 l用双引号括起的一个字符序列用双引号括起的一个字符序列例如:例如:ABC、12、a、nt nGood morning、l字符串常量的长度字符串常量的长度:所包含的字符个数所包含的字符个数 l字符串常量的存储方式:字符串常量的存储方式:nG o o dm o rni n
18、 g 0a0所占存储单元数:所占存储单元数:串长度串长度1例如:例如:字符串字符串结束标记结束标记222023/1/164.字符串常量字符串常量(续续)如果反斜杠和双引号作为字符串中的如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。有效字符,则必须使用转义字符。例例:C:msdosv6.22 C:msdos v6.22 I say:Goodbye!I say:Goodbye!l如果要表示单引号字符,必须用转义如果要表示单引号字符,必须用转义字符。字符。232023/1/16字符常量字符常量 A 与字符串常量与字符串常量 A 的区别:的区别:(1)定界符不同:)定界符不同:字符常量
19、使用单引号字符常量使用单引号A,而字符串常量使用双引号而字符串常量使用双引号 A ;(2)长度不同:)长度不同:字字符符常常量量的的长长度度固固定定为为1,而而字字符符串串常常量量的的长长度度,可可以是以是0,也可以是某个整数;,也可以是某个整数;(3)存储要求不同:)存储要求不同:字符常量存储的是字符的字符常量存储的是字符的ASCII码值,码值,字字符符串串常常量量,除除了了要要存存储储有有效效的的字字符符外外,还还要要存存储储一个结束标志一个结束标志 0 。242023/1/165.符号常量符号常量 l以标识符来代表的常量以标识符来代表的常量l事先由编译预处理命令事先由编译预处理命令def
20、ine定义定义l编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译编译例如:例如:#define define LENLEN 2.52.5void main()void main()float a,b;float a,b;a=2*3.14*a=2*3.14*LENLEN;b=3.14*b=3.14*LENLEN*LENLEN;printf(a=%f,b=%fn,a,b);printf(a=%f,b=%fn,a,b);定义符号常量定义符号常量定义符号常量定义符号常量使用符号常量使用符号常量使用符号常量使用符号常量编译前系统进行替换编译前系统进行替换编译前系统
21、进行替换编译前系统进行替换252023/1/165.符号常量符号常量void main()float a,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf(a=%f,b=%fn,a,b);define是编译预处理命令,必须以是编译预处理命令,必须以“#”开开头头 后面不能加分号。后面不能加分号。编译预处理命令在后面讨论。编译预处理命令在后面讨论。替换为替换为替换为替换为262023/1/162.2.2 变量变量 1.变量的有关概念变量的有关概念l在程序运行过程中,其值可以改变的数据,称在程序运行过程中,其值可以改变的数据,称为变量,变量用标识符表示,称为为变量,变量用标
22、识符表示,称为变量名变量名l变量必须变量必须“先定义后使用先定义后使用”l系统为变量分配存储单元,存储变量的值系统为变量分配存储单元,存储变量的值l编写程序时通过变量名来存、取编写程序时通过变量名来存、取变量值变量值a a510510变量值变量值变量值变量值为变量分配的为变量分配的为变量分配的为变量分配的存储单元地址存储单元地址存储单元地址存储单元地址变量名变量名变量名变量名例如:例如:例如:例如:变量变量变量变量名为名为名为名为a a a aa a a a中存放中存放中存放中存放的值是的值是的值是的值是5 5 5 510101010a a a a的存储地址是的存储地址是的存储地址是的存储地址
23、是0 x10020 x10020 x10020 x10020 x1002272023/1/162.变量定义变量定义变量定义的一般格式:变量定义的一般格式:数据类型说明符数据类型说明符 变量列表变量列表;例如:例如:int i;long k,m;float x,y;char ch1,ch2;必须使用合法的标识符作变量名必须使用合法的标识符作变量名不能使用关键字为变量命名不能使用关键字为变量命名282023/1/163.变量的初始化:变量的初始化:在说明变量的同时对变量赋初值。在说明变量的同时对变量赋初值。例如:例如:int a=5,b=10+2;double x=23.568,y;char ch
24、1=a,ch2=66,ch3=142;错误的初始化:错误的初始化:int a=3+b,b=5;float m=n=23.16;292023/1/16系统为变量分配存储空间示意图系统为变量分配存储空间示意图内存内存:内存是由一系列字节组成的,每个字:内存是由一系列字节组成的,每个字节都有一个唯一的地址编码。节都有一个唯一的地址编码。例如:例如:short int x;系统为变量系统为变量x在内存中分配的存储空间是连在内存中分配的存储空间是连续的两个字节。续的两个字节。10011002x其中:其中:1001和和1002是字节的编码,第是字节的编码,第1个字节个字节的编码的编码1001称为变量称为变
25、量x的地址,表示为的地址,表示为&x。即即&x的值为的值为1001。302023/1/16系统为变量分配存储空间示意图系统为变量分配存储空间示意图例如:例如:float y;系统为变量系统为变量y在内存中分配的存储空间是连在内存中分配的存储空间是连续的续的4个字节。个字节。例如:例如:其中:其中:2001到到2004是字节的编码,第是字节的编码,第1个个字节的编码字节的编码2001称为变量称为变量y的地址,表示的地址,表示为为&y。即即&y的值为的值为2001。20012002y20032004312023/1/162.2.3 标准库函数标准库函数l由由C编编译译系系统统定定义义的的一一种种函
26、函数数,存存放放在在系系统统函数库中,用户可以根据需要随时调用函数库中,用户可以根据需要随时调用l常用函数常用函数如:如:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材常用数学函数参见教材 附录附录)l函数调用形式函数调用形式:函数名(参数表)函数名(参数表)例如:例如:putchar(a)sqrt(x)getchar();322023/1/162.3 运算符和表达式运算符和表达式l主要内容:主要内容:算术运算符和算术表达式算术运算符和算术表达式赋值运算符和赋值表达式赋值运算符和赋值表达式关系运算符和关系表达式关系运算符和关系表达式逻辑运算符和逻辑表达式逻辑运算符
27、和逻辑表达式位运算符和位运算表达式位运算符和位运算表达式条件运算符和条件表达式条件运算符和条件表达式逗号运算符和逗号表达式逗号运算符和逗号表达式其他运算符及其运算其他运算符及其运算332023/1/16要求掌握:要求掌握:l每种表达式的运算符每种表达式的运算符l运算符的优先级和结合性运算符的优先级和结合性l每种表达式值的特点和值的数据类型每种表达式值的特点和值的数据类型l表达式的命名表达式的命名342023/1/16学习运算符要注意:学习运算符要注意:1 1 运算符功能运算符功能2 2 与运算量关系与运算量关系要求运算量个数要求运算量个数要求运算量类型要求运算量类型3 3 运算符优先级别运算符
28、优先级别4 4 结合方向结合方向5 5 结果的类型结果的类型352023/1/16运算符的有关概念运算符的有关概念l作用:作用:对运算对象完成规定的操作运算对运算对象完成规定的操作运算l类型:类型:按运算对象分:按运算对象分:l单目、双目、三目单目、双目、三目按功能分:按功能分:l算术、赋值、关系、逻辑算术、赋值、关系、逻辑l条件、逗号、位、其他条件、逗号、位、其他362023/1/16运算符的优先级和结合性运算符的优先级和结合性l优先级优先级指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序当一个表达式中出现多个运算符时,表达式的当一个表达式中出现多个运算符时,表达式的求值运算按运算符
29、的优先级别从高到低的顺序求值运算按运算符的优先级别从高到低的顺序执行执行例如:例如:算术运算优先于关系运算算术运算优先于关系运算,如:如:a+bca+bc 算术运算中先算术运算中先*/*/后后+-+-,如:如:a+b*ca+b*cl l优先级的应用优先级的应用 当一个运算对象的两侧运算符的当一个运算对象的两侧运算符的当一个运算对象的两侧运算符的当一个运算对象的两侧运算符的优先级不相同优先级不相同优先级不相同优先级不相同时,时,时,时,先处理先处理先处理先处理优先级优先级优先级优先级高高高高的运算符,的运算符,的运算符,的运算符,再处理再处理再处理再处理优先级优先级优先级优先级低低低低的运算符。
30、的运算符。的运算符。的运算符。例如:例如:例如:例如:a*b-4 a*b-4 a*b-4 a*b-4 先计算先计算先计算先计算a*ba*ba*ba*b ,再计算减法。,再计算减法。,再计算减法。,再计算减法。a-b*4 a-b*4 a-b*4 a-b*4 先计算先计算先计算先计算b*4 b*4 b*4 b*4,再计算减法。,再计算减法。,再计算减法。,再计算减法。372023/1/16运算符的优先级和结合性运算符的优先级和结合性l l结合性结合性指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向分为:从左向右分为:从左向右分
31、为:从左向右分为:从左向右(左结合左结合左结合左结合)和从右向左和从右向左和从右向左和从右向左(右结合右结合右结合右结合)例如:例如:例如:例如:算术运算符为算术运算符为算术运算符为算术运算符为左结合左结合左结合左结合 a-b+4a-b+4a-b+4a-b+4 赋值运算符为赋值运算符为赋值运算符为赋值运算符为右结合右结合右结合右结合 a=b=5a=b=5a=b=5a=b=5结合性的应用结合性的应用-当一个运算对象两侧运算符的当一个运算对象两侧运算符的当一个运算对象两侧运算符的当一个运算对象两侧运算符的优先级相同优先级相同优先级相同优先级相同时,时,时,时,根据结合性来决定先处理哪个运算符根据结
32、合性来决定先处理哪个运算符根据结合性来决定先处理哪个运算符根据结合性来决定先处理哪个运算符-如:如:如:如:a*b/c a*b/c a*b/c a*b/c 左结合:先计算乘法,再计算除法左结合:先计算乘法,再计算除法左结合:先计算乘法,再计算除法左结合:先计算乘法,再计算除法(C C语言规定见教材语言规定见教材语言规定见教材语言规定见教材 附录附录附录附录)382023/1/16本章涉及的运算符本章涉及的运算符+-*/%+-*/%+-+-+-+-=+=-=*=/=%=+=-=*=/=%=&=|=!=&|&|!&|&|?:?:,&sizeofsizeof(数据类型标识符数据类型标识符)类型类型种
33、类种类算术运算符算术运算符赋值运算符赋值运算符关系运算符关系运算符逻辑运算符逻辑运算符位运算符位运算符条件运算符条件运算符逗号运算符逗号运算符其他运算符其他运算符392023/1/16表达式的有关概念表达式的有关概念l什么是表达式什么是表达式由由运算符运算符将运算对象连接成的式子,它将运算对象连接成的式子,它描述了一个具体的求值运算过程。描述了一个具体的求值运算过程。l计算表达式的值计算表达式的值按照运算符的运算规则求值按照运算符的运算规则求值求值时注意运算符的优先级和结合性求值时注意运算符的优先级和结合性l表达式值的类型表达式值的类型自动转换自动转换(由系统完成由系统完成)强制转换(由用户编
34、程实现)强制转换(由用户编程实现)402023/1/16例如:例如:表达式:表达式:150+b*2-12.456(算术表达式)(算术表达式)b=(+a)-2(赋值表达式)(赋值表达式)a/=a*=(a=2)(赋值表达式)(赋值表达式)f=abc(赋值表达式)(赋值表达式)-a|+b&c+(逻辑表达式)(逻辑表达式)ab?a:b(条件表达式)(条件表达式)a=3,a+=3,a*a(逗号表达式)(逗号表达式)a+b4(关系表达式)(关系表达式)表达式的命名:按运算符级别最低的来命名表达式的命名:按运算符级别最低的来命名412023/1/16算术运算算术运算l算术运算符的优先级算术运算符的优先级()
35、+-+-+-*/%+-同级同级 同级同级 同级同级 单目单目 双目双目 高高高高 低低低低l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*a a*a*a 的连乘,或的连乘,或的连乘,或的连乘,或用标准库函数用标准库函数用标准库函数用标准库函数 pow(apow(a,3),3)l l“/”的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据整型数据相除时,
36、运算结果也是整型数据整型数据相除时,运算结果也是整型数据整型数据相除时,运算结果也是整型数据 l l“%”要求运算对象必须是整型数据,功能是求两数要求运算对象必须是整型数据,功能是求两数要求运算对象必须是整型数据,功能是求两数要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同相除的余数,余数的符号与被除数的符号相同相除的余数,余数的符号与被除数的符号相同相除的余数,余数的符号与被除数的符号相同422023/1/16l算术表达式中的乘号不能省略,适当添算术表达式中的乘号不能省略,适当添加圆括号。加圆括号。如:数学表达式:如:数学表达式:1/2(a+b)对应的对应的C
37、表达式为:表达式为:1.0/2*(a+b)如:数学表达式:如:数学表达式:对应的对应的C表达式为表达式为:(a+b)/(c-d)432023/1/16自增自减运算自增自减运算l+-是是单目运算符单目运算符l有前缀和后缀有前缀和后缀两种形式两种形式 前缀形式前缀形式:先自增先自增(自减自减)再引用;再引用;后缀形式后缀形式:先引用再自增先引用再自增(自减自减);l功能:功能:前缀形式前缀形式 +a a 等价于等价于 a=a+1a=a+1 -a a 等价于等价于 a=a a=a 1 1 后缀形式后缀形式 a+a+等价于等价于 a=a+1a=a+1 a a-等价于等价于 a=a a=a 1 1表达式
38、的值会不同表达式的值会不同442023/1/16例如:例如:当当 a5 时时 +a 表达式的值为表达式的值为 6,且且 a6 a+表达式的值为表达式的值为5,且且 a6 b=+a 等价于等价于 a=a+1;b=a 表达式的值为表达式的值为6,且,且 a=6,b=6 b=a+等价于等价于 b=a;a=a+1 表达式的值为表达式的值为5,且,且 a=6,b=5 452023/1/16说明:说明:l+和和-的运算对象只能是变量(或运算结的运算对象只能是变量(或运算结果是变量的表达式)果是变量的表达式),不能是常量(或运算不能是常量(或运算结果是数值的表达式)。结果是数值的表达式)。例如:例如:5+、
39、(a+2)+不合法。不合法。l具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。例如:例如:a+等价于等价于 -(a+)l如果有多个运算符连续出现时,如果有多个运算符连续出现时,C系统尽可系统尽可能多的从左到右将字符组合成一个运算符能多的从左到右将字符组合成一个运算符例如:例如:i+j 等价于等价于 (i+)+j -i+-j 等价于等价于-(i+)+(-j)462023/1/16赋值运算赋值运算l赋值运算符赋值运算符(右结合)右结合)=+=-=*=/=%=&=|=l赋值表达式赋值表达式将将表达式的值表达式的值存入存入变量变量对应的内存单元中对应的内存单元中m=12b=(+a)
40、-2 m%=3+n 等价于等价于 m=m%(3+n)x*=(x=5)等价于等价于 x=x*(x=5)472023/1/16说明:说明:l赋值号赋值号左边必须是变量左边必须是变量,右边可以是,右边可以是C语言语言任意合法的表达式任意合法的表达式例如:例如:n=t+210 等价于:等价于:a=(b=(b*c)10)l赋值号与数学中的等号含义不同赋值号与数学中的等号含义不同例如:例如:数学中数学中 a=b 等价于等价于 b=a C语言中语言中 a=b 不等价于不等价于 b=a482023/1/16关系运算关系运算l关系运算符关系运算符(左结合)左结合)=!=较高较高 较低较低l关系表达式关系表达式用
41、关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子 例如:例如:12=c 等价于等价于 a=(b=c)与与 (a=b)=c 不等价不等价l关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术492023/1/16说明:说明:l关系运算的结果是关系运算的结果是1或者或者0。C语言用数值语言用数值 1 表示表示逻辑真逻辑真,0 表示表示逻辑假逻辑假例如:例如:75 的值是的值是 1,57 的值是的值是 0 ab的值是的值是 0,a=z l逻辑运算符的优先级逻辑运算符的优先级 和结合性:和结合性:!是单目运算符,是单目运算符,右结合右结合,高于算术,高于算术&和和|是双目运算
42、符,是双目运算符,左结合左结合,高于,高于赋值运算符,低于关系运算符赋值运算符,低于关系运算符522023/1/16逻辑运算规则逻辑运算规则l从左到右依次进行逻辑计算从左到右依次进行逻辑计算运算对象为运算对象为非非0 0表示表示逻辑真逻辑真运算对象为运算对象为 0 0 表示表示逻辑假逻辑假l逻辑运算的结果为逻辑运算的结果为 0 0 或或 1 1例如设:例如设:a=15,b=0,c=-2 a&b&c 结果为结果为0 a|b|c 结果为结果为1 (a+c)|b&c 结果为结果为1532023/1/16逻辑运算规则(续)逻辑运算规则(续)l运算按照运算按照从左至右从左至右的顺序进行,一旦能够的顺序进
43、行,一旦能够确定逻辑表达式的值,就立即结束运算确定逻辑表达式的值,就立即结束运算逻辑运算的短路性质逻辑运算的短路性质例如例如设:设:a=1,b=0,c=-2a&b&c(a+)|+b&-c为为 0,运算终止,表达式,运算终止,表达式值值为为 0为非为非0,运算终止,表达式值为,运算终止,表达式值为 1且且a为为2,b为为0,c为为-2(b,c保持原值保持原值)542023/1/16关系与逻辑运算符的应用关系与逻辑运算符的应用l表示数学公式表示数学公式abc l判断判断a,b,c三条线段能否组成一个三角形三条线段能否组成一个三角形 la,b不同时为负不同时为负 a+bc&a+cb&b+caa=0|
44、b=0!(a0&b0)(a=0)|(a=0&b=0&b=0)a=0)|(a=0&b=0&b=0)ab&bc552023/1/16位运算符位运算符&|位逻辑运算符位逻辑运算符移位运算符移位运算符单目单目单目单目l l位运算符的运算对象只能是位运算符的运算对象只能是整型数据整型数据或或字字符型数据符型数据,不能是实型数据,不能是实型数据l l运算对象一律按二进制补码参加运算,并运算对象一律按二进制补码参加运算,并按位进行运算按位进行运算l l位运算的结果是一个整型数据位运算的结果是一个整型数据低于单目、算术运算符,低于单目、算术运算符,高于其他运算符高于其他运算符低于单目、算术和关系运低于单目、算
45、术和关系运算符,高于其他运算符算符,高于其他运算符562023/1/16位逻辑运算符的运算规则位逻辑运算符的运算规则 l假设假设ai和和bi均是一个二进制位(均是一个二进制位(bit)运算对象运算对象逻辑运算结果逻辑运算结果aibiai&biai|biai biai000001010111100110111100例如:例如:假设假设a=10,b=010 求求a&b、a|b、ab、a572023/1/16程序如下:程序如下:int main()int a=10,b=010;printf(%d%dn,a&b,a|b);printf(%d%dn,ab,a);return 0;输出结果:输出结果:8
46、108 102 -112 -11 0000 0000 0000 1010 0000 0000 0000 1010&0000 0000 0000 1000&0000 0000 0000 1000 0000 0000 0000 1000 0000 0000 0000 1000即:即:即:即:a&ba&b的值是的值是的值是的值是8 8 0000 0000 0000 1010 0000 0000 0000 1010 1111 1111 1111 0101 1111 1111 1111 0101即:即:即:即:a a的值是的值是的值是的值是-1111582023/1/16移位运算移位运算l例如:例如:a
47、b-1 等价于等价于 (a+8)(b-1)例如:例如:假设假设a=10,b=2,求求ab-1 int main()int a=10,b=2;printf(%d%dn,abab-1a+8b-1);return 0;输出结果:输出结果:40 940 9请自行分析请自行分析请自行分析请自行分析运行结果运行结果运行结果运行结果592023/1/16条件表达式运算条件表达式运算l条件运算符:条件运算符:?:l条件表达式的一般形式条件表达式的一般形式 表达式表达式1?表达式表达式2:表达式表达式3例如:例如:m=10&b-20?a:b x=3+a5?100:200 l lC语言中唯一的语言中唯一的三目运算
48、符三目运算符,要正确区分用,要正确区分用?和和:分隔的表达式分隔的表达式l l涉及条件运算符的优先级与结合性涉及条件运算符的优先级与结合性602023/1/16条件运算符优先级条件运算符优先级l条件运算符优先级高于赋值、逗号运算符,条件运算符优先级高于赋值、逗号运算符,低于其他运算符低于其他运算符 例如:例如:m=10&b-20?a:b x=3+a5?100:200等价于:等价于:(m=10&b-20)?a:b等价于:等价于:x=(3+a5)?100:200)612023/1/16条件运算符的结合性条件运算符的结合性 l条件运算符具有条件运算符具有右结合性右结合性l当一个表达式中出现多个条件运
49、算符时,当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒应该将位于最右边的问号与离它最近的冒号号配对配对,并按这一原则正确区分各条件运,并按这一原则正确区分各条件运算符的运算对象。算符的运算对象。例如:例如:wx?x+w:xy?x:y 与与 wx?x+w:(xy?x:y)等价等价 与与(wx?x+w:xy)?x:y 不等价不等价 622023/1/16逗号表达式运算逗号表达式运算l逗号表达式的一般形式逗号表达式的一般形式 表达式表达式1,表达式,表达式2,表达式,表达式nl 逗号表达式的值逗号表达式的值从左向右,依次对表达式求值,最从左向右,依次对表达式求值,最后得到后
50、得到表达式表达式n 的值就是逗号表达的值就是逗号表达式的值式的值632023/1/16逗号表达式运算逗号表达式运算例如:例如:a=5,a+,a*3 表达式表达式值为值为 18,且,且a=6 t=1,t+5,t+表达式表达式值为值为 1,且,且t=2 x=(a=3*5,a*4)赋值表达式赋值表达式的值为的值为60,且,且x=60,a=15642023/1/16取地址运算符取地址运算符&为单目运算符为单目运算符运算对象只能是变量运算对象只能是变量 运算结果是变量的存储地址运算结果是变量的存储地址 例如有定义例如有定义:int a,student;char ch;可以对变量可以对变量a、ch、stu