《C语言程序设计教程》课件--第2章

上传人:工**** 文档编号:568589835 上传时间:2024-07-25 格式:PPT 页数:61 大小:273.50KB
返回 下载 相关 举报
《C语言程序设计教程》课件--第2章_第1页
第1页 / 共61页
《C语言程序设计教程》课件--第2章_第2页
第2页 / 共61页
《C语言程序设计教程》课件--第2章_第3页
第3页 / 共61页
《C语言程序设计教程》课件--第2章_第4页
第4页 / 共61页
《C语言程序设计教程》课件--第2章_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《《C语言程序设计教程》课件--第2章》由会员分享,可在线阅读,更多相关《《C语言程序设计教程》课件--第2章(61页珍藏版)》请在金锄头文库上搜索。

1、第第2 2章章 C C语言基础语言基础北京科技大学北京科技大学 计算机系计算机系C C 语言程序设计语言程序设计2024/7/25本章主要内容本章主要内容l l本章介绍本章介绍C语言的基础,包括:语言的基础,包括: 数据类型数据类型 运算符和表达式运算符和表达式l l均是程序设计的基本知识均是程序设计的基本知识l l为什么讨论为什么讨论这些知识这些知识?通常通常程序程序要对数据进行操作处理:要对数据进行操作处理:处理的对象是处理的对象是数据数据通过通过运算符和表达式运算符和表达式进行操作进行操作22024/7/25例如:例如:【例【例2.1】计算圆的面积,半径为】计算圆的面积,半径为 5 cm

2、。 程序如下:程序如下: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对数据进行的运算:对数据进行的运算:* 、=例例jc2_132024/7/25分析:分析:计算机操作处理时,要完成以下工作计算机操作处理时,要完成以下工作:l l在内存中给半径在内

3、存中给半径 r 和运算结果和运算结果 area 开辟存开辟存储空间,存放它们的值。储空间,存放它们的值。应该留多大的地应该留多大的地方来存放它们的值?方来存放它们的值?l l数据数据 5 和和 3.14 与与 r 、area 不同,它们是在不同,它们是在编写程序时就给出确定的值,在运算过程编写程序时就给出确定的值,在运算过程中不会改变。中不会改变。这样的数计算机怎么处理?这样的数计算机怎么处理?l l对对整数整数 5 和和小数小数3.14 ,计算机,计算机存放时是否存放时是否有区别?有区别?涉及数据类型涉及数据类型的基本知识的基本知识42024/7/25C语言的数据类型语言的数据类型 C数据类

4、型数据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型整型整型整型整型 字符型字符型字符型字符型 实实实实型型型型( (浮浮浮浮点点点点型型型型) ) 空类型空类型空类型空类型单精度型单精度型单精度型单精度型 双精度型双精度型双精度型双精度型 基本类型基本类型基本类型基本类型指针类型指针类型构造类型构造类型本章讨论本章讨论本章讨论本章讨论基本类型数据基本类型数据基本类型数据基本类型数据52024/7/252.1.1 整型数据整型数据 1整型数据的类型整型数据的类型 基本整型数据基本整型数据 int ,分配分配 2 Byte 短整型数据短整型数据 short int,

5、分配分配 2 Byte 长整型数据长整型数据 long int,分配分配 4 Byte整型数据均以整型数据均以二进制补码二进制补码形式存储形式存储问题:问题:为什么要采用补码?为什么要采用补码?如何表示?如何表示?62024/7/25计算机中正、负数的表示计算机中正、负数的表示 例如:例如:109 (1101101)2要区别:要区别:109 和和 109 方法是:方法是:将符号也数码化将符号也数码化即:即:正的符号正的符号 用用 0 表示表示 负的符号负的符号 用用 1 表示表示 计算机中的数表示方法是:计算机中的数表示方法是: 符号位符号位二进制数值二进制数值(以以 8bit 为例为例) 1

6、09 110 1101 0110 1101109 110 1101 1110 110172024/7/25问题:计算机计算复杂化问题:计算机计算复杂化例如计算:例如计算: (-19)+(+22)1001 0011 + 0001 0110解决的方法是:解决的方法是: 使用使用反码反码或或补码补码的表示方法(按前述的表示方法(按前述表示的编码称为表示的编码称为原码原码),即能将减法一律),即能将减法一律转换为加法。转换为加法。 需要判断符号是否相同:需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同

7、,结果符号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进行绝对值相减行绝对值相减行绝对值相减行绝对值相减82024/7/25原码、反码和补码原码、反码和补码l l正数正数:原码、反码、补码相同原码、反码、补码相同 符号位为符号位为0,数值为对应的二进制数。,数值为对应的二进制数。 109 01101101原原 = 01101101反反 = 01101101补补l l负数负数:原码原码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数。数。 1

8、0911101101原原反码反码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反。数各位变反。 10910010010反反 补码补码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反加数各位变反加1 1。10910010011补补92024/7/252. 有符号和无符号整型数据有符号和无符号整型数据 有符号的整型数据有符号的整型数据 signed int 无符号的整型数据无符号的整型数据 unsigned int区别是将区别是将最高位最高位看作符号位还是数据位看作符号位还是数据位例如:例如: 1111 1111 1010 1000作为作为有

9、符号数有符号数使用时,最高为符号位使用时,最高为符号位为负数,值是:为负数,值是:- 88(再求一次补)(再求一次补)作为作为无符号数无符号数使用时,最高为数据位使用时,最高为数据位为无符号的数,值是:为无符号的数,值是:65448102024/7/25例如:例如:main( ) unsigned int m; m= 6544865448; printf(nm=%d%dn,m); printf(m=%u%un,m); 例jc2_a输出结果:输出结果: m=-88m=65448按有符号数输出按有符号数输出按无符号数输出按无符号数输出112024/7/25整型数据的类型及规定整型数据的类型及规定l

10、 l方括号表示可选项方括号表示可选项l lint 分配分配2 Byte,long分配分配4 Byte类型名称类型名称类型名称类型名称类型符类型符类型符类型符bitbit取值范围取值范围取值范围取值范围整型整型整型整型( (短整型短整型短整型短整型) ) signed signed int int signed signed shortshort intint 1616- -2 215152 21515-1-1(-32768(-3276832767 )32767 )无符号整型无符号整型无符号整型无符号整型unsignedunsigned intint 16160 0 2 21616-1-1(0(

11、065535 )65535 )长整型长整型长整型长整型 signed signed longlong intint 3232-2-231312 23131- 1- 1无符号长整型无符号长整型无符号长整型无符号长整型 unsigned longunsigned long intint 32320 0 2 23232-1-1122024/7/252.1.2 实型数据实型数据 1实型数据的类型实型数据的类型 单精度实型数据单精度实型数据 float,分配分配4 Byte 双精度实型数据双精度实型数据double,分配,分配 8 Byte2实型数据的存储实型数据的存储 单精度实型单精度实型单精度实型单

12、精度实型指数部分指数部分指数部分指数部分小数部分小数部分小数部分小数部分 小数的符号位小数的符号位指数的符号位指数的符号位132024/7/25实型数据的类型及规定实型数据的类型及规定 l lC C标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。定具体小数和指数部分的位数。定具体小数和指数部分的位数。定具体小数和指数部分的位数。l l一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,一般

13、而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。有效数字的意义?有效数字的意义?类型类型类型类型类型符类型符类型符类型符ByteByte绝对值的范围绝对值的范围绝对值的范围绝对值的范围有效数字有效数字有效数字有效数字单精度型单精度型单精度型单精度型 floatfloat4 41010-37 -37 10 1038387 78 8 位位位位双精度型双精度型

14、双精度型双精度型 doubledouble8 81010-307 -307 101030830815151616位位位位例例例例jC2jC2jC2jC2_a_a_a_a142024/7/252.1.3 字符型数据字符型数据 l l字符型数据字符型数据char,分配分配 1 Byte l l字符型数据是指字母、数字、各种符号等字符型数据是指字母、数字、各种符号等用用ASCII值表示的字符值表示的字符l l例如例如 a 是一个是一个char类型数据,称作字符类型数据,称作字符常量,存储:常量,存储:0 1 1 0 0 0 0 12.1.4 2.1.4 空类型空类型l l空类型空类型voidl l通

15、常与指针或函数结合使用通常与指针或函数结合使用 152024/7/252.2 常量、变量与标准函数常量、变量与标准函数 l主要内容:主要内容: 常量常量 变量变量 标准库函数标准库函数162024/7/252.2.1 常量常量 l l在运行程序的过程中值保持不变的量在运行程序的过程中值保持不变的量1整型常量整型常量 十进制十进制十进制十进制:0909 八进制八进制八进制八进制:0707,以,以,以,以 0 0开头开头开头开头 十六进制十六进制十六进制十六进制:0909,AF/afAF/af,以以以以 0 0x x或或或或 0 0X X 开头开头开头开头例如:例如:100 -8 0 +12310

16、0 -8 0 +123010 024 0100 073010 024 0100 0730 0x38 0x10 0X10 0XFF 0x0ax38 0x10 0X10 0XFF 0x0a172024/7/251. 整型常量整型常量l l整型常量的类型:整型常量的类型: 根据值大小默认类型。根据值大小默认类型。 整型常量后面加整型常量后面加l或或L,则认为是则认为是long int型型 例如:例如:123L、0L、432l、0x100l注意:注意:l l十六进制常量中可以使用大写字母十六进制常量中可以使用大写字母AF,也可以使用小写字母也可以使用小写字母af。 l l八进制常量中不能出现数字八进制

17、常量中不能出现数字 8 或或 9例如:例如:018、0921非法非法182024/7/252. 实型常量实型常量 十进制形式十进制形式十进制形式十进制形式 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指数只能是整数,而尾数则可以是整数也可以是指数只

18、能是整数,而尾数则可以是整数也可以是小数小数 ,无论指数或尾数均不能省略,无论指数或尾数均不能省略例如:例如:1 1e e、E.5E.5、E-3E-3 非法非法实型常量的类型:默认为实型常量的类型:默认为doubledouble型,后面加型,后面加F F(或或f f),),则强调表示该数是则强调表示该数是float类型类型例如:例如:3.5f f、1e2F F 192024/7/253. 字符型常量字符型常量 l l可视字符常量可视字符常量可视字符常量可视字符常量 单引号括起来的单个可视字符单引号括起来的单个可视字符单引号括起来的单个可视字符单引号括起来的单个可视字符例如:例如:例如:例如:

19、aa、A A 、+ + 、33、 等等等等 l l转义字符常量转义字符常量转义字符常量转义字符常量 单引号括起来的单引号括起来的单引号括起来的单引号括起来的 与与与与可视字符可视字符可视字符可视字符组合,例如:组合,例如:组合,例如:组合,例如:0000字符串结束标志字符串结束标志字符串结束标志字符串结束标志 n n回车换行回车换行回车换行回车换行 t t跳到下一个输出位置跳到下一个输出位置跳到下一个输出位置跳到下一个输出位置 双引号字符双引号字符双引号字符双引号字符 dddddd dddddd为为为为1 1到到到到3 3位八进制数所代表的字符位八进制数所代表的字符位八进制数所代表的字符位八进

20、制数所代表的字符 xhhxhh hhhh为为为为1 1到到到到2 2位十六进制数所代表的字符位十六进制数所代表的字符位十六进制数所代表的字符位十六进制数所代表的字符202024/7/254. 字符串常量字符串常量 l l用双引号括起的一个字符序列用双引号括起的一个字符序列 例如:例如:ABC、123、a、 nt nGood morningl l字符串常量的长度字符串常量的长度 : 所包含的字符个数所包含的字符个数 l l字符串常量的存储方式:字符串常量的存储方式: n nGG o o o o d dmm o o r rn ni i n n g g 00a a00所占存储单元数:所占存储单元数:

21、串长度串长度1例如:例如:字符串字符串结束标记结束标记212024/7/255. 符号常量符号常量 l l以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量l l事先编译预处理命令事先编译预处理命令事先编译预处理命令事先编译预处理命令definedefine定义定义定义定义l l编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译编译编译编译例如:例如:例如:例如: # #define define LENLEN 2.52.5main( )mai

22、n( ) float a,b; float a,b; a= 2*3.14 * a= 2*3.14 *LENLEN; ; b=3.14* b=3.14*LENLEN* *LENLEN; ; printfprintf(a=%f,b=%fn,a,b);(a=%f,b=%fn,a,b); 定义符号常量定义符号常量定义符号常量定义符号常量使用符号常量使用符号常量使用符号常量使用符号常量编译前系统进行替换编译前系统进行替换编译前系统进行替换编译前系统进行替换222024/7/255. 符号常量符号常量main( ) float a,b; a= 2*3.14 *2.5; b=3.14*2.5*2.5; pr

23、intf(a=%f, b=%fn,a,b);define是编译预处理命令,必须以是编译预处理命令,必须以“#”开开头头编译预处理命令在第编译预处理命令在第7章讨论。章讨论。替换为替换为替换为替换为232024/7/252.2.2 变量变量 1. 变量的有关概念变量的有关概念l l在程序运行过程中,其值改变的数据,称在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为为变量,变量用标识符表示,称为变量名变量名。l l变量必须变量必须“先定义后使用先定义后使用”l l系统为变量分配存储单元,存储变量的值。系统为变量分配存储单元,存储变量的值。 l l编写程序时通过变量名来存、取编写程

24、序时通过变量名来存、取变量值变量值。a a510510变量值变量值变量值变量值为变量分配的为变量分配的为变量分配的为变量分配的存储单元存储单元存储单元存储单元变量名变量名变量名变量名例如:例如:有有变量变量a a它的值是它的值是5 51010242024/7/252. 变量定义变量定义变量定义的一般格式:变量定义的一般格式: 数据类型说明符数据类型说明符 变量列表变量列表;例如:例如:int i, j; long k, m; float x,y; char ch1,ch2;必须使用合法的标识符作变量名必须使用合法的标识符作变量名不能使用关键字为变量命名不能使用关键字为变量命名252024/7/

25、253. 变量的初始化:变量的初始化: 允许在说明变量的时候对变量赋初值。允许在说明变量的时候对变量赋初值。例如:例如:int a=5,b=10+2; double x=23.568,y ; char ch1=a,ch2=66,ch3=142; 表示定义变量并对变量存储单元赋值。表示定义变量并对变量存储单元赋值。错误的初始化:错误的初始化: int a=3+b,b=5; float m=n=23.16; 262024/7/252.2.3 标准库函数标准库函数l l由由C编编译译系系统统定定义义的的一一种种函函数数,存存放放在在系系统函数库中,用户可以根据需要随时调用统函数库中,用户可以根据需要

26、随时调用l l常用函数常用函数如:如:如:如:printfprintf、scanfscanf、fabsfabs、sqrtsqrt、sinsin、( (常用数学函数参见教材常用数学函数参见教材常用数学函数参见教材常用数学函数参见教材 P30 P30 表表表表2.52.5 ) )l l函数调用形式函数调用形式:函数名(参数表)函数名(参数表)例如:例如:putchar(a) sqrt(x)例例jc2_3272024/7/252.3 运算符和表达式运算符和表达式l l主要内容:主要内容: 算术运算符和算术表达式算术运算符和算术表达式 赋值运算符和赋值表达式赋值运算符和赋值表达式 关系运算符和关系表达

27、式关系运算符和关系表达式 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 位运算符和位运算表达式位运算符和位运算表达式 条件运算符和条件表达式条件运算符和条件表达式 逗号运算符和逗号表达式逗号运算符和逗号表达式 其他运算符及其运算其他运算符及其运算282024/7/25运算符的有关概念运算符的有关概念l l作用:作用: 对运算对象完成规定的操作运算对运算对象完成规定的操作运算l l类型:类型: 按运算对象分:按运算对象分:l l单目、双目、三目单目、双目、三目单目、双目、三目单目、双目、三目 按功能分:按功能分:l l算术、赋值、关系、逻辑算术、赋值、关系、逻辑算术、赋值、关系、逻辑算术、赋值、

28、关系、逻辑l l条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他292024/7/25运算符的优先级和结合性运算符的优先级和结合性l l优先级优先级 指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序例如:例如:例如:例如:算术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算 算术运算中先算术运算中先算术运算中先算术运算中先 * / * / * / * / 后后后后 + - + - + - + -l l结合性结合性 指运算符号和运算对象的结合方向指运算符号和运算对象

29、的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向 分为:从左向右分为:从左向右分为:从左向右分为:从左向右( (左结合左结合左结合左结合) )和从右向左和从右向左和从右向左和从右向左( (右结合右结合右结合右结合) )例如:例如:例如:例如:算术运算符为算术运算符为算术运算符为算术运算符为左结合左结合左结合左结合 a-ba-b+ +4 4 赋值运算符为赋值运算符为赋值运算符为赋值运算符为右结合右结合右结合右结合 a= b = 5a= b = 5( C C语言规定见教材语言规定见教材语言规定见教材语言规定见教材 P297 P297 附录附录附录附录B B)302024/7/

30、25本章涉及的运算符本章涉及的运算符+ - * / % + - * / % + - * / % + - * / % + - + -+ - + -+ - + -+ - + -= += -= *= /= %= += -= *= /= %= += -= *= /= %= += -= *= /= %=&= |= = = = = = = = = = = = != & | & | & | & | ! ! ! !& | & | & | & | ?:?:?:?:, , , ,& & & & sizeof sizeof sizeof sizeof ( ( ( (数据类型标识符数据类型标识符数据类型标识符数据类型

31、标识符) ) ) )类型类型类型类型种类种类种类种类算术运算符算术运算符算术运算符算术运算符赋值运算符赋值运算符赋值运算符赋值运算符关系运算符关系运算符关系运算符关系运算符逻辑运算符逻辑运算符逻辑运算符逻辑运算符位运算符位运算符位运算符位运算符条件运算符条件运算符条件运算符条件运算符逗号运算符逗号运算符逗号运算符逗号运算符其他运算符其他运算符其他运算符其他运算符312024/7/25表达式的有关概念表达式的有关概念l l什么是表达式什么是表达式由由运算符运算符将运算对象连接成的式子,它将运算对象连接成的式子,它描述了一个具体的求值运算过程。描述了一个具体的求值运算过程。l l计算表达式的值计算

32、表达式的值按照运算符的运算规则求值按照运算符的运算规则求值求值时注意运算符的优先级和结合性求值时注意运算符的优先级和结合性l l表达式值的类型表达式值的类型自动转换自动转换强制转换强制转换 322024/7/25例如:例如:l l表达式:表达式:150+b*212.456 b=(+a)-2a /= a *= (a = 2) f=abc -a |+b&c+ max=ab ? a : b a=3,a+=3,a*a 1/(float)a+6 332024/7/25算术运算算术运算l l算术运算符的优先级算术运算符的优先级 ( ) + - + - * / % + - 同级 同级 同级 单目单目 双目双

33、目 高高高高 低低低低l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*a a*a*a 的连乘,的连乘,的连乘,的连乘,或用标准库函数或用标准库函数或用标准库函数或用标准库函数 powpow(a, 3)(a, 3)l l “ “/ /” ”的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型

34、数据个整型数据相除时,运算结果也是整型数据 l l“ “%” ”要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。 342024/7/25自增自减运算自增自减运算l l+ + -是是单目运算符单目运算符l l有前缀和后缀有前缀和后缀两种形式两种形式 前缀形式前缀形式: : 先自增先自增( (自减自减) )再引用;再引用;

35、后缀形式后缀形式: : 先引用再自增先引用再自增( (自减自减) );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表达式的值会不同表达式的值会不同352024/7/25例如:例如:当当 a5 时时 +a 表达式的值为表达式的值为 6,且且 a6 a+ 表达式的值为表达式的值为5 ,且且 a6 b=+a 等价于等价于 a=a+1; b=a

36、表达式的值为表达式的值为6,且,且 a=6, b=6 b=a+ 等价于等价于 b=a; a=a+1 表达式的值为表达式的值为5,且,且 a=6, b=5 362024/7/25说明:说明:l l+ 和和和和 - - 的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是变量的表达式)变量的表达式)变量的表达式)变量的表达式), , 不能是常量(或运算结果是数不能是常量(或运算结果是数不能是常量(或运算结果是数不能是常量(或运算结果是数值的表达式)。值的表达式)。值的表达式)。值的表达式)。 例如:例如:例如:例如

37、: 5+5+、( (a+2)+a+2)+ 不合法。不合法。不合法。不合法。 l l具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。例如:例如:例如:例如: a+a+ 等价于等价于等价于等价于 -( -(a+)a+) l l如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,C C系统尽可能多系统尽可能多系统尽可能多系统尽可能多的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运

38、算符例如:例如:例如:例如: i + ji + j 等价于等价于等价于等价于 ( ( i+)+ji+)+j -i+-j-i+-j 等价于等价于等价于等价于 -( -(i+)+(-j)i+)+(-j) 372024/7/25main( ) int a=5; printf(%d %dn,a,a+ ); 说明(续):说明(续):l l对函数参数的求值顺序:对函数参数的求值顺序: Turbo C系统先计算最右边的参数值,系统先计算最右边的参数值,再依次计算左面的参数值。再依次计算左面的参数值。 【例【例2.5】有多个函数参数且为同一变量自增】有多个函数参数且为同一变量自增的运算处理。的运算处理。 输出

39、结果:输出结果: 6 5运行例运行例2.5382024/7/25说明(续):说明(续):【例【例2.6】有多个函数参数且为同一变量多次】有多个函数参数且为同一变量多次自增的运算处理。自增的运算处理。 main( ) int a=5; printf(%d%dn,a,(a+)+( a+); 输出结果:输出结果: 7 11运行例运行例2.6392024/7/25赋值运算赋值运算l l赋值运算符赋值运算符( (右结合)右结合) = += - -= *= /= %= &= |= = = = l l赋值表达式赋值表达式 将将表达式的值表达式的值存入存入变量变量对应的内存单元中对应的内存单元中m=12b=(

40、+a)-2 m%=3+n 等价于等价于 m=m%(3+n) x *= (x = 5)402024/7/25说明:说明:l l赋值号左边必须是变量,右边可以是赋值号左边必须是变量,右边可以是C语言语言任意合法的表达式任意合法的表达式例如:例如:n= t +210 等价于:等价于:a= (b=( (b*c)10) )l l赋值号与数学中的等号含义不同赋值号与数学中的等号含义不同例如:例如:数学中数学中 a=b 等价于等价于 b=a C语言中语言中 a=b 不等价于不等价于 b=a412024/7/25关系运算关系运算l l关系运算符关系运算符关系运算符关系运算符 ( ( ( (左结合)左结合)左结

41、合)左结合) = = = = != != 较高较高较高较高 较低较低较低较低l l关系表达式关系表达式关系表达式关系表达式 用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子 例如:例如:例如:例如:1212 =c c 等价于等价于等价于等价于 a = ( b=c )a = ( b=c ) 与与与与 ( (a=b)=c a=b)=c 不等价不等价不等价不等价l l关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术422024/7/25说明:

42、说明:l l关系运算的结果应该是关系运算的结果应该是逻辑值逻辑值。C语言用语言用数值用数值用 1 表示表示逻辑真逻辑真, 0 表示表示逻辑假逻辑假例如:例如: 75 的值是的值是 1,57 的值是的值是 0 ab的值是的值是 0, a= z l l逻辑运算符的优先级逻辑运算符的优先级 和结合性:和结合性: !是单目运算符,是单目运算符,右结合右结合,高于算术,高于算术 & 和和 | 是双目运算符,是双目运算符,左结合左结合,高于,高于赋值运算符,低于关系运算符赋值运算符,低于关系运算符452024/7/25逻辑运算规则逻辑运算规则l l从左到右依次进行逻辑计算从左到右依次进行逻辑计算运算对象为

43、运算对象为非非0 0表示表示逻辑真逻辑真运算对象为运算对象为 0 0 表示表示逻辑假逻辑假l l逻辑运算的结果为逻辑运算的结果为 0 0 或或 1 1例如设:例如设:a=15,b=0,c=-2 a & b & c 结果为结果为0 a | b | c 结果为结果为1 (a+c) | b & c 结果为结果为1462024/7/25逻辑运算规则(续)逻辑运算规则(续)l l运算按照运算按照从左至右从左至右的顺序进行,一旦能够的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算确定逻辑表达式的值,就立即结束运算逻辑运算的短路性质逻辑运算的短路性质例如例如设:设:a=1,b=0,c=-2a & b

44、& c(a+) | + b& -c为为 0,运算终止,表达式,运算终止,表达式值值为为 0为非为非0,运算终止,表达式值为,运算终止,表达式值为 1且且a为为2,b为为0,c为为-2 (b,c保持原值保持原值)472024/7/25关系与逻辑运算符的应用关系与逻辑运算符的应用l l表示数学公式表示数学公式abc l l判断判断a, b, c三条线段能否组成一个三角形三条线段能否组成一个三角形 l la, b不同时为负不同时为负 a+bc & a+cb & b+caa=0 | b=0!(a0 & b0) ( (a=0)|(a=0&b=0&b=0)a=0)|(a=0&b=0&b=0)ab & bc

45、482024/7/25位运算符位运算符 & | & | 位逻辑运算符位逻辑运算符移位运算符移位运算符单目单目单目单目l l位运算符的运算对象只能是位运算符的运算对象只能是整型数据整型数据或或字字符型数据符型数据,不能是实型数据,不能是实型数据l l运算对象一律按二进制补码参加运算,并运算对象一律按二进制补码参加运算,并按位进行运算按位进行运算l l位运算的结果是一个整型数据位运算的结果是一个整型数据低于单目、算术运算符,低于单目、算术运算符,高于其他运算符高于其他运算符低于单目、算术和关系运低于单目、算术和关系运算符,高于其他运算符算符,高于其他运算符492024/7/25位逻辑运算符的运算规

46、则位逻辑运算符的运算规则 l l假设假设ai和和bi均是一个二进制位(均是一个二进制位(bit) 运算对象运算对象运算对象运算对象逻辑运算结果逻辑运算结果逻辑运算结果逻辑运算结果a ai ib bi ia ai i&b&bi ia ai i|b|bi ia ai i bbi i a ai i0 00 00 00 00 01 10 01 10 01 11 11 11 10 00 01 11 10 01 11 11 11 10 00 0例如:例如:假设假设a=10,b=010 求求a&b、 a | b、 ab、a502024/7/25程序如下:程序如下: main( ) int a=10, b=0

47、10; printf(%d %dn, a&ba&b, a|b); printf(%d %dn, ab, aa); 输出结果:输出结果:8 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 1

48、111 1111 1111 0101即:即:即:即: a a的值是的值是的值是的值是- - - -1111运行运行jc2_b512024/7/25移位运算移位运算l l例如:例如:ab-1 等价于等价于 (a+8)(b-1) 例如:例如:假设假设a=10,b=2,求求ab-1 main( ) int a=10, b=2; printf(%d %dn, abab-1a+8b-1); 输出结果:输出结果:40 940 9运行运行jc2_c请自行分析请自行分析请自行分析请自行分析运行结果运行结果运行结果运行结果522024/7/25条件表达式运算条件表达式运算l l条件运算符:条件运算符:? :l

49、l条件表达式的一般形式条件表达式的一般形式 表达式表达式1 ? 表达式表达式2 : 表达式表达式3例如:例如:m=10 & b-20 ? a : b x=3+a5 ? 100 : 200 l lC语言中唯一的语言中唯一的三目运算符三目运算符,要正确区分用,要正确区分用 ?和和 :分隔的表达式分隔的表达式l l涉及条件运算符的优先级与结合性涉及条件运算符的优先级与结合性532024/7/25条件运算符优先级条件运算符优先级l l条件运算符优先级高于赋值、逗号运算符,条件运算符优先级高于赋值、逗号运算符,低于其他运算符低于其他运算符 例如:例如: m=10 & b-20 ? a : b x=3+a

50、5 ? 100 : 200等价于:等价于:(m=10 & b-20) ? a : b等价于:等价于:x= ( 3+a5 ) ? 100 : 200 )542024/7/25条件运算符的结合性条件运算符的结合性 l l条件运算符具有条件运算符具有右结合性右结合性l l当一个表达式中出现多个条件运算符时,当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒应该将位于最右边的问号与离它最近的冒号号配对配对,并按这一原则正确区分各条件运,并按这一原则正确区分各条件运算符的运算对象。算符的运算对象。 例如:例如:wx ? x+w : xy ? x : y 与与 wx ? x+w :

51、( xy ? x : y) 等价等价 与与 (wx ? x+w : xy) ? x : y 不等价不等价 552024/7/25逗号表达式运算逗号表达式运算l l逗号表达式的一般形式逗号表达式的一般形式 表达式表达式1,表达式,表达式2,表达式,表达式nl l 逗号表达式的值逗号表达式的值 从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到表表表表达式达式达式达式n n 的值就是逗号表达式的值的值就是逗号表达式的值的值就是逗号表达式的值的值就是逗号表达式的值例如:例如:例如:例如: a=5, a+,

52、a* 3 表达式表达式表达式表达式值为值为值为值为 18 18,且,且,且,且a=6 a=6 t=1, t+5, t+ 表达式表达式表达式表达式值为值为值为值为 1 1,且,且,且,且t=2 t=2 x=(a=3*5, a*4 ) 赋值表达式赋值表达式赋值表达式赋值表达式的值为的值为的值为的值为6060,且,且,且,且x=60, a=15x=60, a=15562024/7/25取地址运算符取地址运算符 & 为单目运算符为单目运算符 运算对象只能是变量运算对象只能是变量 运算结果是变量的存储地址运算结果是变量的存储地址 例如有定义例如有定义:int a , student;char ch;可以

53、对变量可以对变量a、ch、student 进行进行&运算:运算:&a &ch &student572024/7/25长度运算符长度运算符 sizeof 为单目运算符为单目运算符 运算对象只能是运算对象只能是变量名变量名或或数据类型标识符数据类型标识符 运算结果为该变量或该数据类型的长度运算结果为该变量或该数据类型的长度 main( ) int a=5; double x; printf(%d %d ,sizeof(intint),sizeof(a a); printf(%d %d ,sizeof(doubledouble),sizeof(x x); printf(%d %dn,sizeof(f

54、loatfloat),sizeof(charchar); 输出结果:输出结果:2 2 2 2 8 88 8 4 4 1 1运行jc2_d582024/7/252.4 运算中数据类型的转换运算中数据类型的转换2.4.1 数据类型的自动转换数据类型的自动转换l l转换原则:转换原则: 自动将精度低、表示范围小的自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算运算对象类型向精度高、表示范围大的运算对象类型转换对象类型转换 char, shortchar, shortdoubledoublelonglongfloatfloatunsignedunsignedintint高精度高精度高精

55、度高精度低精度低精度低精度低精度例如有定义:例如有定义:int a; char ch;表达式:表达式:a-ch*2+35La-ch*2+ 35.592024/7/252. 赋值运算中的类型转换赋值运算中的类型转换 l l = 小数部分自动补小数部分自动补小数部分自动补小数部分自动补0 0 l l = 自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(注意不进行注意不进行注意不进行注意不进行四舍五入四舍五入四舍五入四舍五入) l l = l l = 自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节l l = l l = 自动给高字节补自动给高字节补自动给高字节补自动给高字节补0 0 或或或或补补补补1 1602024/7/252.4.2 数据类型的强制转换数据类型的强制转换 l l强制转换的一般形式强制转换的一般形式 (类型名类型名) 表达式表达式例如:例如: (int)( b+3*x)%3 1/(float)a+6l l注意:注意: (float) 22/5 与与 (float) (22/5) 不同不同l l错误的类型转换:错误的类型转换: (int) b=a+5 b= int (3*a) 61

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号