第2章-数据类型与运算符讲义课件

上传人:沈*** 文档编号:241672925 上传时间:2024-07-14 格式:PPT 页数:68 大小:1.49MB
返回 下载 相关 举报
第2章-数据类型与运算符讲义课件_第1页
第1页 / 共68页
第2章-数据类型与运算符讲义课件_第2页
第2页 / 共68页
第2章-数据类型与运算符讲义课件_第3页
第3页 / 共68页
点击查看更多>>
资源描述
江汉大学数计学院计算中心江汉大学数计学院计算中心20112011年年1 1月月第第2 2章章 数据类型和运算符数据类型和运算符C C 语言程序设计语言程序设计2024/7/142本章主要内容本章主要内容l l本章介本章介绍C语言的基言的基础,包括:,包括:数据类型数据类型 运算符和表达式运算符和表达式l l均是程序均是程序设计的基本知的基本知识l l为什么什么讨论这些知些知识?通常通常程序程序要对数据进行操作处理:要对数据进行操作处理:处理的对象是处理的对象是数据数据通过通过运算符和表达式运算符和表达式进行操作进行操作2024/7/143例如:例如:【例【例2.1】计算圆的面积,半径为】计算圆的面积,半径为 5 cm。程序如下:程序如下: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对数据进行的运算:对数据进行的运算:*、=2024/7/144分析:分析:计算机操作处理时,要完成以下工作计算机操作处理时,要完成以下工作:l l在内存中给半径在内存中给半径 r 和运算结果和运算结果 area 开辟存开辟存储空间,存放它们的值。储空间,存放它们的值。应该留多大的地应该留多大的地方来存放它们的值?方来存放它们的值?l l数据数据 5 和和 3.14 与与 r、area 不同,它们是在不同,它们是在编写程序时就给出确定的值,在运算过程编写程序时就给出确定的值,在运算过程中不会改变。中不会改变。这样的数计算机怎么处理?这样的数计算机怎么处理?l l对对整数整数 5 和和小数小数3.14,计算机,计算机存放时是否存放时是否有区别?有区别?涉及数据类型涉及数据类型的基本知识的基本知识2024/7/1452.1 C程序的符号系统程序的符号系统l lC程序中可以出程序中可以出现的字符包括:的字符包括:基本字符基本字符标识符标识符2024/7/1462.1.1 基本字符集基本字符集 l l大写英文字母大写英文字母:A B C X Y Z l l小写英文字母小写英文字母:a b c x y z l l数字数字:0 1 2 9 l l空白符空白符:空格符、换行符、制表符:空格符、换行符、制表符 l l特殊字符特殊字符:+-*/()_ =!#%.,;:“|&?$2024/7/1472.1.2 标识符标识符 l l由由字母字母、下划线下划线和和数字数字组成的字符序列,组成的字符序列,但必须用字母或下划线开头但必须用字母或下划线开头l l用于程序中的变量、符号常量、数组、函用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的数、数据类型等操作对象的名字名字1.1.关键字(保留字)关键字(保留字)2 2系统定义标识符系统定义标识符具有固定名字和特定含义的标识符具有固定名字和特定含义的标识符分为分为关键字关键字和和预定义标识符预定义标识符 3 3用户定义标识符用户定义标识符 用于对用户使用的变量、数组、函数用于对用户使用的变量、数组、函数等操作对象进行命名等操作对象进行命名 2024/7/148 关键字关键字 l l数据类型:数据类型:数据类型:数据类型:intint、charchar、floatfloat、doubledouble、shortshort、longlong、voidvoid、signedsigned、unsignedunsigned、enumenum、structstruct、unionunion、constconst、typedeftypedef、volatile volatile l l存储类别:存储类别:存储类别:存储类别:autoauto、staticstatic、registerregister、extern extern l l语句命令字:语句命令字:语句命令字:语句命令字:breakbreak、casecase、continuecontinue、defaultdefault、dodo、elseelse、forfor、gotogoto、if if、returnreturn、switchswitch、while while l l运算符:运算符:运算符:运算符:sizeof sizeof 2024/7/149预定义标识符预定义标识符l l系系统标准准库函数函数scanf、printf、putchar、getchar、strcpy、strcmp、sqrt等等l l编译预备处理命令理命令include、define等等2024/7/1410对标识符的规定对标识符的规定 l l用户定义标识符用户定义标识符必须以必须以字母字母或或下划线下划线“_ _”开头开头不能含有除字母、数字和下划线不能含有除字母、数字和下划线“_ _”外的其他字符外的其他字符标识符中大小写字母含义不同标识符中大小写字母含义不同l l关键字关键字必须用小写字母。不允许使用关键必须用小写字母。不允许使用关键字为变量、数组、函数等操作对象命名字为变量、数组、函数等操作对象命名l l预定义标识符预定义标识符允许用户对它们重新定义,允许用户对它们重新定义,当重新定义后将改变它们原来的含义当重新定义后将改变它们原来的含义2024/7/1411练习:正确区分标识符练习:正确区分标识符l l正正确确区区分分哪哪些些是是合合法法标标识识符符,哪哪些些是是不不合合法法标标识识符符。其其中中合合法法标标识识符符中中哪哪些些是是关关键键字字,哪哪些些是是预预定定义义标标识识符符,哪哪些些是是用用户户定定义标识符。义标识符。Abc define 2x double studentm+y a#b-4 _1 Whileint let x%y name do w tm Ctrl swicth include 2024/7/14122.2 C语言的数据类型语言的数据类型 C数据类型数据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型整型整型整型整型 字符型字符型字符型字符型 实实实实型型型型(浮浮浮浮点点点点型型型型)空类型空类型空类型空类型单精度型单精度型单精度型单精度型 双精度型双精度型双精度型双精度型 基本类型基本类型基本类型基本类型指针类型指针类型构造类型构造类型本章讨论本章讨论本章讨论本章讨论基本类型数据基本类型数据基本类型数据基本类型数据2024/7/14132.2.1 整型数据整型数据 1整型数据的整型数据的类型(型(VC 6.0)基本整型数据基本整型数据 int,分配分配 4 Byte 短整型数据短整型数据 short int,分配分配 2 Byte 长整型数据长整型数据 long int,分配分配 4 Byte整型数据均以整型数据均以二进制补码二进制补码形式存储形式存储问题:问题:为什么要采用补码?为什么要采用补码?如何表示?如何表示?2024/7/1414计算机中正、负数的表示计算机中正、负数的表示 例如:例如:109(1101101)2要区要区别:109 和和 109 方法是:方法是:将符号也数将符号也数码化化即:即:正的符号正的符号 用用 0 表示表示 负的符号的符号 用用 1 表示表示 计算机中的数表示方法是:计算机中的数表示方法是:符号位符号位二进制数值二进制数值(以以 8bit 为例为例)109 110 1101 0110 1101109 110 1101 1110 11012024/7/1415问题:计算机计算复杂化问题:计算机计算复杂化例如例如计算:算:(-19)+(+22)1001 0011+0001 0110解决的方法是:解决的方法是:使用使用反码反码或或补码补码的表示方法(按前述的表示方法(按前述表示的编码称为表示的编码称为原码原码),即能将减法一律),即能将减法一律转换为加法。转换为加法。需要判断符号是否相同:需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进行绝对值相减行绝对值相减行绝对值相减行绝对值相减2024/7/1416原码、反码和补码原码、反码和补码l l正数正数:原原码、反、反码、补码相同相同 符号位为符号位为0,数值为对应的二进制数。,数值为对应的二进制数。109 01101101原原=01101101反反=01101101补补l l负数负数:原码原码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数。数。10911101101原原反码反码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反。数各位变反。10910010010反反 补码补码符号位为符号位为1 1,数值为绝对值的二进制,数值为绝对值的二进制数各位变反加数各位变反加1 1。10910010011补补2024/7/14172.有符号和无符号整型数据有符号和无符号整型数据 有符号的整型数据有符号的整型数据 signed int 无符号的整型数据无符号的整型数据 unsigned int区区别是将是将最高位最高位看作符号位看作符号位还是数据位是数据位例如:例如:1111 1111 1010 1000作为作为有符号数有符号数使用时,最高为符号位使用时,最高为符号位为负数,值是:为负数,值是:-88(再求一次补)(再求一次补)作为作为无符号数无符号数使用时,最高为数据位使用时,最高为数据位为无符号的数,值是:为无符号的数,值是:654482024/7/1418例如:例如:main()int m;m=-3-3;printf(m=%d%dn,m);printf(m=%u%un,m);输出结果:输出结果:m=-3m=4294967293按有符号数输出按有符号数输出按无符号数输出按无符号数输出2024/7/1419整型数据的类型及规定整型数据的类型及规定l l方括号表示可方括号表示可选项(可不出(可不出现)l lshort 分配分配2 Byte,int、long分配分配4 Byte类型名称类型名称类型名称类型名称类型符类型符类型符类型符bitbit取值范围取值范围取值范围取值范围短整型短整型短整型短整型 signed signed shortshort int int 1616-2-215152 21515-1-1(-32768(-3276832767)32767)整型整型整型整型 signed signed intint3232-2-231312 23131-1-1无符号整型无符号整型无符号整型无符号整型unsignedunsigned int int32320 0 2 23232-1-1长整型长整型长整型长整型 signed signed longlong int int3232-2-231312 23131-1-1无符号长整型无符号长整型无符号长整型无符号长整型 unsigned longunsigned long int int32320 0 2 23232-1-12024/7/14202.2.2 实型数据实型数据 1实型数据的类型实型数据的类型 单精度实型数据单精度实型数据 float,分配分配4 Byte 双精度实型数据双精度实型数据double,分配,分配 8 Byte2实型数据的存储实型数据的存储 单精度实型单精度实型单精度实型单精度实型指数部分指数部分指数部分指数部分小数小数小数小数部分部分部分部分11111001110011小数的符号位小数的符号位指数的符号位指数的符号位110.011(B)=1.100112+112024/7/1421实型数据的类型及规定实型数据的类型及规定 l lC C标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。定具体小数和指数部分的位数。定具体小数和指数部分的位数。定具体小数和指数部分的位数。l l一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。精度就高;而指数部分位数多,则表示的数据范围更大。l l实际应用中数据位数超过了这个范围,则后面的部分就实际应用中数据位数超过了这个范围,则后面的部分就实际应用中数据位数超过了这个范围,则后面的部分就实际应用中数据位数超过了这个范围,则后面的部分就不准确了。不准确了。不准确了。不准确了。类型类型类型类型类型符类型符类型符类型符ByteByte绝对值的范围绝对值的范围绝对值的范围绝对值的范围有效数字有效数字有效数字有效数字单精度型单精度型单精度型单精度型 floatfloat4 41010-37 -37 10 1038387 78 8 位位位位双精度型双精度型双精度型双精度型 doubledouble8 81010-307-307 101030830815151616位位位位2024/7/14222.2.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通常与指针或函数结合使用通常与指针或函数结合使用 2024/7/14232.3 常量常量 l l在运行程序的过程中值保持不变的量在运行程序的过程中值保持不变的量1整型常量整型常量 十进制十进制十进制十进制:0909 八进制八进制八进制八进制:0707,以,以,以,以 0 0开头开头开头开头 十六进制十六进制十六进制十六进制:0909,AF/afAF/af,以以以以 0 0X X或或或或 0 0 x x开头开头开头开头例如:例如: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 x0a2024/7/14241.整型常量整型常量l l整型常量的类型:整型常量的类型:根据值大小默认类型。根据值大小默认类型。整型常量后面加整型常量后面加l或或L,则认为是则认为是long int型型 例如:例如:123L、0L、432l、0 x100l注意:注意:l l十六进制常量中可以使用大写字母十六进制常量中可以使用大写字母AF,也可以使用小写字母也可以使用小写字母af。l l八进制常量中不能出现数字八进制常量中不能出现数字 8 或或 9例如:例如:018、0921非法非法2024/7/14252.实型常量实型常量 十进制形式十进制形式十进制形式十进制形式 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指数只能是整数,而尾数则可以是整数也可以是指数只能是整数,而尾数则可以是整数也可以是小数小数,无论指数或尾数均不能省略,无论指数或尾数均不能省略例如:例如:1 1e e、E.5E.5、E-3E-3 非法非法实型常量的类型:默认为实型常量的类型:默认为doubledouble型,后面加型,后面加F F(或或f f),),则强调表示该数是则强调表示该数是float类型类型例如:例如:3.5f f、1e2F F 2024/7/14263.字符型常量字符型常量 l l可视字符常量可视字符常量可视字符常量可视字符常量 单引号括起来的单个可视字符单引号括起来的单个可视字符单引号括起来的单个可视字符单引号括起来的单个可视字符例如:例如:例如:例如:aa、A A、+、33、等等等等 l l转义字符常量转义字符常量转义字符常量转义字符常量 单引号括起来的单引号括起来的单引号括起来的单引号括起来的 与与与与可视字符可视字符可视字符可视字符组合,例如:组合,例如:组合,例如:组合,例如:00字符串结束标志字符串结束标志字符串结束标志字符串结束标志 n n回车换行回车换行回车换行回车换行 t t跳到下一个输出位置跳到下一个输出位置跳到下一个输出位置跳到下一个输出位置 双引号字符双引号字符双引号字符双引号字符 dddddd dddddd为为为为1 1到到到到3 3位八进制数所代表的字符位八进制数所代表的字符位八进制数所代表的字符位八进制数所代表的字符 xhhxhh hhhh为为为为1 1到到到到2 2位十六进制数所代表的字符位十六进制数所代表的字符位十六进制数所代表的字符位十六进制数所代表的字符2024/7/14274.字符串常量字符串常量 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所占存储单元数:所占存储单元数:串长度串长度1例如:例如:字符串字符串结束标记结束标记2024/7/14285.符号常量符号常量 l l以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量以标识符来代表的常量l l事先编译预处理命令事先编译预处理命令事先编译预处理命令事先编译预处理命令definedefine定义定义定义定义l l编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译编译编译编译例如:例如:例如:例如:#define define LENLEN 2.52.5main()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);定义符号常量定义符号常量定义符号常量定义符号常量使用符号常量使用符号常量使用符号常量使用符号常量编译前系统进行替换编译前系统进行替换编译前系统进行替换编译前系统进行替换2024/7/14295.符号常量符号常量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是编译预处理命令,必须以是编译预处理命令,必须以“#”开开头头编译预处理命令在第编译预处理命令在第7章讨论。章讨论。将将将将“LEN”LEN”替换为替换为替换为替换为“2.5”2.5”2024/7/14302.4 变量变量 1.变量的有关概念量的有关概念l l在程序运行在程序运行过程中,其程中,其值改改变的数据,称的数据,称为变量,量,变量用量用标识符表示,称符表示,称为变量名量名。l l变量必量必须“先定先定义后使用后使用”l l系系统为变量分配存量分配存储单元,存元,存储变量的量的值。l l编写程序写程序时通通过变量名来存、取量名来存、取变量量值。a a510510变量值变量值变量值变量值为变量分配的为变量分配的为变量分配的为变量分配的存储单元存储单元存储单元存储单元变量名变量名变量名变量名例如:例如:有有变量变量a a它的值是它的值是5 510102024/7/14312.变量定义变量定义变量定量定义的一般格式:的一般格式:数据数据类型型说明符明符 变量列表量列表;例如:例如:int i,j;long k,m;float x,y;char ch1,ch2;必须使用必须使用合法的标识符合法的标识符作变量名作变量名不能使用关键字不能使用关键字为变量命名为变量命名2024/7/14323.变量的初始化:变量的初始化:允允许在在说明明变量的量的时候候对变量量赋初初值。例如:例如: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;单独赋值:单独赋值:int a;a=14;2024/7/14332.5 运算符和表达式运算符和表达式l l主要内容:主要内容:算术运算符和算术表达式算术运算符和算术表达式 赋值运算符和赋值表达式赋值运算符和赋值表达式 关系运算符和关系表达式关系运算符和关系表达式 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 位运算符和位运算表达式位运算符和位运算表达式 条件运算符和条件表达式条件运算符和条件表达式 逗号运算符和逗号表达式逗号运算符和逗号表达式 其他运算符及其运算其他运算符及其运算2024/7/1434运算符的有关概念运算符的有关概念l l作用:作用:对运算对象完成规定的操作运算对运算对象完成规定的操作运算l l类型:型:按运算对象分:按运算对象分:l l单目、双目、三目单目、双目、三目单目、双目、三目单目、双目、三目 按功能分:按功能分:l l算术、赋值、关系、逻辑算术、赋值、关系、逻辑算术、赋值、关系、逻辑算术、赋值、关系、逻辑l l条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他条件、逗号、位、其他2024/7/1435运算符的优先级和结合性运算符的优先级和结合性l l优先先级 指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序例如:例如:例如:例如:算术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算算术运算优先于关系运算 算术运算中先算术运算中先算术运算中先算术运算中先*/*/*/*/后后后后+-+-+-+-l l结合性结合性 指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向 分为:从左向右分为:从左向右分为:从左向右分为:从左向右(左结合左结合左结合左结合)和从右向左和从右向左和从右向左和从右向左(右结合右结合右结合右结合)例如:例如:例如:例如:算术运算符为算术运算符为算术运算符为算术运算符为左结合左结合左结合左结合 a-ba-b+4 4 赋值运算符为赋值运算符为赋值运算符为赋值运算符为右结合右结合右结合右结合 a=b=5a=b=5(C C语言规定见教材语言规定见教材语言规定见教材语言规定见教材 P350P350附录附录附录附录II II)2024/7/1436本章涉及的运算符本章涉及的运算符+-*/%+-*/%+-*/%+-*/%+-+-+-+-+-+-+-+-=+=-=*=/=%=+=-=*=/=%=+=-=*=/=%=+=-=*=/=%=&=|=!=&|&|&|&|!&|&|&|&|?:?:?:?:,&sizeof sizeof sizeof sizeof (数据数据数据数据类类型型型型标识标识符符符符)类型类型类型类型种类种类种类种类算术运算符算术运算符算术运算符算术运算符赋值运算符赋值运算符赋值运算符赋值运算符关系运算符关系运算符关系运算符关系运算符逻辑运算符逻辑运算符逻辑运算符逻辑运算符位运算符位运算符位运算符位运算符条件运算符条件运算符条件运算符条件运算符逗号运算符逗号运算符逗号运算符逗号运算符其他运算符其他运算符其他运算符其他运算符2024/7/1437表达式的有关概念表达式的有关概念l l什么是表达式什么是表达式由由运算符运算符将运算对象连接成的式子,它将运算对象连接成的式子,它描述了一个具体的求值运算过程。描述了一个具体的求值运算过程。l l计算表达式的算表达式的值按照运算符的按照运算符的运算规则运算规则求值求值求值时注意运算符的求值时注意运算符的优先级优先级和和结合性结合性l l表达式表达式值的的类型型自动转换自动转换强制转换强制转换 2024/7/1438例如:例如: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 2024/7/1439算术运算算术运算l l算术运算符的优先级算术运算符的优先级()+-+-*/%+-同级 同级 同级 单目单目 双目双目 高高高高 低低低低l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*a a*a*a 的连乘,的连乘,的连乘,的连乘,或用标准库函数或用标准库函数或用标准库函数或用标准库函数 pow(a,3)pow(a,3)l l“/”的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据整型数据相除时,运算结果也是整型数据整型数据相除时,运算结果也是整型数据整型数据相除时,运算结果也是整型数据 l l“%”要求运算对象要求运算对象要求运算对象要求运算对象必须必须必须必须是是是是整型整型整型整型数据,功能是求两数数据,功能是求两数数据,功能是求两数数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。相除的余数,余数的符号与被除数的符号相同。相除的余数,余数的符号与被除数的符号相同。相除的余数,余数的符号与被除数的符号相同。5/35/3值为值为1 1,-5/3-5/3值为值为-1-1;(多数机器采用(多数机器采用“向零取整向零取整”的方法)的方法)7%47%4值为值为3 3,-7%4-7%4值为值为-3-32024/7/1440自增自减运算自增自减运算l l+-是是单目运算符目运算符l 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表达式的值会不同表达式的值会不同2024/7/1441例如:例如:当当 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 2024/7/1442说明:说明:l l+和和和和 -的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是的运算对象只能是变量(或运算结果是变量的表达式)变量的表达式)变量的表达式)变量的表达式),不能是常量(或运算结果是数不能是常量(或运算结果是数不能是常量(或运算结果是数不能是常量(或运算结果是数值的表达式)。值的表达式)。值的表达式)。值的表达式)。例如:例如:例如:例如:5+5+、(a+2)+a+2)+不合法。不合法。不合法。不合法。l l具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。例如:例如:例如:例如:a+a+等价于等价于等价于等价于 -(-(a+)a+)l l如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,C C系统尽可能多系统尽可能多系统尽可能多系统尽可能多的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符例如:例如:例如:例如:i+ji+j 等价于等价于等价于等价于 (i+)+ji+)+j -i+-j-i+-j 等价于等价于等价于等价于 -(-(i+)+(-j)i+)+(-j)2024/7/1443赋值运算赋值运算l l赋值运算符运算符(右右结合)合)=+=-=*=/=%=&=|=l l赋值表达式表达式 将将表达式的值表达式的值存入存入变量变量对应的内存单元中对应的内存单元中m=12b=(+a)-2 m%=3+n 等价于等价于 m=m%(3+n)x*=(x=5)2024/7/1444说明:说明:l l赋值号左号左边必必须是是变量,右量,右边可以是可以是C语言言任意合法的表达式任意合法的表达式例如:例如:n=t+210 等价于:等价于:a=(b=(b*c)10)l l赋值号与数学中的等号含号与数学中的等号含义不同不同例如:例如:数学中数学中 a=b 等价于等价于 b=a C语言中语言中 a=b 不等价于不等价于 b=a2024/7/1445关系运算关系运算l l关系运算符关系运算符关系运算符关系运算符 (左左左左结结合)合)合)合)=!=!=较高较高较高较高 较低较低较低较低l l关系表达式关系表达式关系表达式关系表达式 用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子 例如:例如:例如:例如:1212=c c 等价于等价于等价于等价于 a=(b=c)a=(b=c)与与与与 (a=b)=c a=b)=c 不等价不等价不等价不等价l l关系运算符关系运算符关系运算符关系运算符优优先于先于先于先于赋值赋值,低于算,低于算,低于算,低于算术术2024/7/1446说明:说明:l l关系运算的关系运算的结果果应该是是逻辑值。C语言用言用数数值用用 1 表示表示逻辑真真,0 表示表示逻辑假假例如:例如:75 的值是的值是 1,57 的值是的值是 0 ab的值是的值是 0,a=z l l逻辑运算符的运算符的优先先级 和和结合性:合性:!是单目运算符,是单目运算符,右结合右结合,高于算术,高于算术&和和|是双目运算符,是双目运算符,左结合左结合,高于,高于赋值运算符,低于关系运算符赋值运算符,低于关系运算符2024/7/1449逻辑运算规则逻辑运算规则l l从左到右依次从左到右依次进行行逻辑计算算运算对象为运算对象为非非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 结果为结果为12024/7/1450逻辑运算规则(续)逻辑运算规则(续)l l运算按照运算按照从左至右从左至右的的顺序序进行,一旦能行,一旦能够确定确定逻辑表达式的表达式的值,就立即,就立即结束运算束运算逻辑运算的短路性质逻辑运算的短路性质例如例如设:设:a=1,b=0,c=-2a&b&c(a+)|+b&-c为为 0,运算终止,表达式,运算终止,表达式值值为为 0为非为非0,运算终止,表达式值为,运算终止,表达式值为 1且且a为为2,b为为0,c为为-2(b,c保持原值保持原值)2024/7/1451关系与逻辑运算符的应用关系与逻辑运算符的应用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&bc2024/7/1452条件表达式运算条件表达式运算l l条件运算符:条件运算符:?:l l条件表达式的一般形式条件表达式的一般形式 表达式表达式1?表达式表达式2:表达式表达式3例如:例如:m=10&b-20?a:b x=3+a5?100:200 l lC语言中唯一的语言中唯一的三目运算符三目运算符,要正确区分用,要正确区分用?和和:分隔的表达式分隔的表达式l l涉及条件运算符的优先级与结合性涉及条件运算符的优先级与结合性2024/7/1453条件运算符优先级条件运算符优先级l l条件运算符条件运算符优先先级高于高于赋值、逗号运算符,、逗号运算符,低于其他运算符低于其他运算符 例如:例如:m=10&b-20?a:b x=3+a5?100:200等价于:等价于:(m=10&b-20)?a:b等价于:等价于:x=(3+a5)?100:200)2024/7/1454条件运算符的结合性条件运算符的结合性 l l条件运算符具有条件运算符具有右右结合性合性l l当一个表达式中出当一个表达式中出现多个条件运算符多个条件运算符时,应该将位于最右将位于最右边的的问号与离它最近的冒号与离它最近的冒号号配配对,并按,并按这一原一原则正确区分各条件运正确区分各条件运算符的运算算符的运算对象。象。例如:例如:wx?x+w:xy?x:y 与与 wx?x+w:(xy?x:y)等价等价 与与(wx?x+w:xy)?x:y 不等价不等价 2024/7/1455逗号表达式运算逗号表达式运算l l逗号表达式的一般形式逗号表达式的一般形式 表达式表达式1,表达式,表达式2,表达式,表达式nl l 逗号表达式的逗号表达式的值 从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到从左向右,依次对表达式求值,最后得到表表表表达式达式达式达式n n 的值就是逗号表达式的值的值就是逗号表达式的值的值就是逗号表达式的值的值就是逗号表达式的值例如:例如:例如:例如:a=5,a+,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=152024/7/1456取地址运算符取地址运算符&为单目运算符为单目运算符 运算对象只能是变量运算对象只能是变量 运算结果是变量的存储地址运算结果是变量的存储地址 例如有定例如有定义:int a,student;char ch;可以可以对变量量a、ch、student 进行行&运算:运算:&a&ch&student2024/7/1457长度运算符长度运算符 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(floatfloat),sizeof(charchar);输出结果:输出结果:4 4 4 4 8 88 8 4 4 1 12024/7/14582.4 运算中数据类型的转换运算中数据类型的转换2.4.1 数据类型的自动转换(数据类型的自动转换(隐式转换隐式转换)l l转换原则:转换原则:自动将精度低、表示范围小的自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算运算对象类型向精度高、表示范围大的运算对象类型转换对象类型转换 char,shortchar,shortdoubledoublelonglongfloatfloatunsignedunsignedintint高精度高精度高精度高精度低精度低精度低精度低精度例如有定义:例如有定义:int a;char ch;表达式:表达式:a-ch*2+35La-ch*2+35横向箭头表示必定转换;横向箭头表示必定转换;纵向箭头表示转换趋势。纵向箭头表示转换趋势。纵向箭头表示转换趋势。纵向箭头表示转换趋势。2024/7/14592.赋值运算中的类型转换赋值运算中的类型转换 l l=小数部分自动补小数部分自动补小数部分自动补小数部分自动补0 0 l l=自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(自动舍去实型表达式的小数部分(注意不进行注意不进行注意不进行注意不进行四舍五入四舍五入四舍五入四舍五入)l l=l l=自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节自动截取表达式值的低字节赋值,舍去高字节l l=(见下页例)(见下页例)(见下页例)(见下页例)l l=自动给高字节补自动给高字节补自动给高字节补自动给高字节补0 0 或或或或补补补补1 12024/7/1460例如:例如:例如:例如:C=3761111111011111111 111111101111111011111111 11111110值为(值为(值为(值为(6553465534)10 10 值为(值为(值为(值为(2 2)1010unsigned shortunsigned shortshortshort2024/7/14612.4.2 数据类型的强制转换(数据类型的强制转换(显式转换显式转换)l l强制制转换的一般形式的一般形式 (类型名类型名类型名类型名)表达式表达式表达式表达式作用:作用:作用:作用:强制把该表达式的类型转为指定的类型。强制把该表达式的类型转为指定的类型。强制把该表达式的类型转为指定的类型。强制把该表达式的类型转为指定的类型。例如:例如:例如:例如:(long)2 =2Llong)2 =2L、(int)4.2 =4(int)4.2 =4 1/(1/(float)a+6float)a+6l l注意:注意:(float)22/5 与与 (float)(22/5)不同不同l l错误的类型转换:错误的类型转换:(int)b=a+5 b=int(3*a)2024/7/1462综合举例综合举例 1int a=1,b=2,c,d;c=(-a+)+(+b);d=(b-)+(+a)-a;运行结果:运行结果:a=3;b=2;c=2;d=32024/7/1463综合举例综合举例 2int a=1,b=2,c,d,e;c=(-a+)+(+b);d=(b-)+(+a)-a;e=(a/(+b)-(b/(-a);运行结果:运行结果:a=2;b=3;c=2;d=3;e=02024/7/1464综合举例综合举例3int a=2,b=3,c,d,e,f;c=(a+=-b);d=(a=+b);e=(a-!=b);f=(+a b-);c=1 a=3 b=2d=1 a=3 b=3e=0 a=2 b=3f=0 a=3 b=2运行结果运行结果a=3;b=2;c=1;d=1;e=0;f=02024/7/1465综合举例综合举例4 int x=4,y=25,z=2;z=(-y/+x)*z-;运行结果:运行结果:z=72024/7/1466综合举例综合举例5int x=y=z=0;+x|+y&+z;int x=y=z=0;+x&+y|+z;int x=y=z=0;+x&+y&+z;运行后运行后x,y,z的值分别为:的值分别为:1 0 0 1 1 0 1 1 12024/7/1467综合举例综合举例6 int a=2;char c=a;float f=3.0;a+a*6/f+c%a (a2)?3:2 (a=2)*f (1,2,3)-a=float(2)+float(4.0)+float(1)=7.0f=float(2)+float(4.0)+float(1)=7.0f=6=6=3.0f=3.0f=2=2=6.0f=6.0f=1=12024/7/1468
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!