《第二章 基本数据类型运算符和表达式PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第二章 基本数据类型运算符和表达式PPT讲稿.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章 基本数据类型运算符和表达式第1页,共44页,编辑于2022年,星期二2.1 C2.1 C语言的数据类型语言的数据类型2.1.1 2.1.1 概述概述 程序设计主要解决两个问题:一个是动作,即怎样程序设计主要解决两个问题:一个是动作,即怎样做的问题,这由语句来实现;另一个是动作的对象,即数做的问题,这由语句来实现;另一个是动作的对象,即数据的存放问题,这由数据类型来决定。据的存放问题,这由数据类型来决定。世界上著名的计算机科学家沃斯(世界上著名的计算机科学家沃斯(N.WirthN.Wirth)提出这)提出这样一个公式:程序样一个公式:程序=数据结构数据结构+算法算法为什么要规定数据类型呢
2、?为什么要规定数据类型呢?(1)(1)不同数据类型的数据在内存中占据不同长度的存储区不同数据类型的数据在内存中占据不同长度的存储区(2)(2)一种数据类型对应着一个值的范围。一种数据类型对应着一个值的范围。(3)(3)一种数据类型对应着一个运算集。一种数据类型对应着一个运算集。第2页,共44页,编辑于2022年,星期二2.1.2 2.1.2 数据类型数据类型数据类型数据类型基本类型基本类型整型整型(有符号、无符号的短、基、长)(有符号、无符号的短、基、长)字符型字符型单精度单精度双精度双精度构造类型构造类型指针类型指针类型空类型空类型数组类型数组类型结构体类型结构体类型联合体类型联合体类型实型
3、实型(浮点型浮点型)枚举类型枚举类型1第3页,共44页,编辑于2022年,星期二2.2 2.2 常量常量 (2)常量:程序运行过程中其值不发生变化的量。常量:程序运行过程中其值不发生变化的量。三类常量:数值、字符和字符串。三类常量:数值、字符和字符串。2.2.1 2.2.1 数值常量数值常量一、一、整数常量的表示整数常量的表示1、计数制的通用表示方法、计数制的通用表示方法A=an-1bn-1an-2bn-2.a1b1a0b0a-1b-1a-2b-2.a-mb-m基数(基数(b):所含数码的个数所含数码的个数权(权(bx):表明数码所在的位置):表明数码所在的位置数码:数码:0b-1整数常量整数
4、常量实数常量实数常量数值常量数值常量第4页,共44页,编辑于2022年,星期二二进制数:二进制数:基数:基数:2权:权:2x数码:数码:01例如:例如:1010.11=12302212102012-112-2=10.75二进制数权值:二进制数权值:1286432168421注:计算机中使用二进制编码表示数据,且只存在二进制。注:计算机中使用二进制编码表示数据,且只存在二进制。2、十进制表示、十进制表示基数:基数:10权:权:10 x数码:数码:09例如例如:123.45=110221013100410-1510-2第5页,共44页,编辑于2022年,星期二3、八进制表示、八进制表示基数:基数:
5、8权:权:8x数码:数码:07例如:例如:023=281380=19注:八进制是二进制的短格式计数法,一位对三位。注:八进制是二进制的短格式计数法,一位对三位。例如:例如:023对应的二进制数为对应的二进制数为010011注:注:C语言中八进制数第一个数字必须为语言中八进制数第一个数字必须为0(八进制标志)(八进制标志)例如:例如:0213-030+056-01234、十六进制表示、十六进制表示基数:基数:16权:权:16X数码:数码:09,A,B,C,D,E,F例如:例如:0XBF3C=1116315162316112160=48956第6页,共44页,编辑于2022年,星期二注:十六进制是
6、二进制的短格式计数法,一位对四位。注:十六进制是二进制的短格式计数法,一位对四位。例如例如:0XBF3C对应的二进制数为对应的二进制数为1011111100111100注:十六进制数前两个数字必须为注:十六进制数前两个数字必须为0X(十六进制标志)(十六进制标志)例如:例如:0X213-0X30+0X56-0X12A二、二、整数常量的几种表示方式之间的转换整数常量的几种表示方式之间的转换红色:连续除基数,取余数直到商为零浅蓝:按权值位展开。黄色:借助二进制数转换。第7页,共44页,编辑于2022年,星期二1、十进制变八进制或十六进制、十进制变八进制或十六进制(红色红色)(1)将将139变为八进
7、制数(变为八进制数(0213)8139817余余382余余10余余2(2)将将3158变为十六进制数(变为十六进制数(0XC56)2、八进制或十六进制变十进制、八进制或十六进制变十进制(浅蓝浅蓝)(1)将将0213变为十进制数(变为十进制数(139)0213=282+181+380=139(2)将将0XC56变为十进制数(变为十进制数(3158)3、八进制与十六进制变换、八进制与十六进制变换(黄色黄色)(1)将将0X1A3变成八进制数(变成八进制数(0643)P19(2)将将0334变为十六进制数(变为十六进制数(0XDC)P19第8页,共44页,编辑于2022年,星期二三、三、整数常量的取值
8、范围整数常量的取值范围短整型数:短整型数:基本整型数:基本整型数:长整型数:长整型数:四、溢出四、溢出整数的值超出了所能表示的范围整数的值超出了所能表示的范围有符号短整型(有符号短整型(16位):位):-32768+32767无符号短整型(无符号短整型(16位)位):065535有符号整型(有符号整型(16位):位):-32768+32767无符号整型(无符号整型(16位)位):065535有符号长整型(有符号长整型(32位):位):-2147483648+2147483647无符号长整型(无符号长整型(32位):位):04294967295第9页,共44页,编辑于2022年,星期二五、实数五
9、、实数实数只使用十进制形式表示实数只使用十进制形式表示两种表示方法:两种表示方法:小数形式小数形式与与指数形式指数形式1、小数形式:由整数部分、小数点、小数部分组成、小数形式:由整数部分、小数点、小数部分组成2.7180.123123.0.123 123.0.02、指数形式:、指数形式:+整数部分整数部分.小数部分小数部分+e前部分称为尾数,表示实数的有效值,符号表示整体的正前部分称为尾数,表示实数的有效值,符号表示整体的正负。负。e后部分称为阶码,表示小数点在尾数基础上的移动位数,符后部分称为阶码,表示小数点在尾数基础上的移动位数,符号表示移动的方向号表示移动的方向例如:例如:-3.14e2
10、,3.14e-2实数的分类实数的分类单精度单精度,例如:例如:3.1415f双精度双精度,例如:例如:3.1415长双精度长双精度,例如:例如:3.1415L第10页,共44页,编辑于2022年,星期二 实实数数取取其其值值的的绝绝对对值值范范围围。当当实实数数超超出出它它的的类类型型所所能能表表示示的的范范围围时时产产生生溢溢出。如果实数的绝对值小于所能表示的最小值则产生下溢,出。如果实数的绝对值小于所能表示的最小值则产生下溢,例如:实数例如:实数1.7e-3091.7e-309和和-1.7e-309-1.7e-309均产生下溢,均产生下溢,因因为为|1.7e-309|1.7e-309|1.
11、7e+308|1.7e+308|。上溢时将产生错误的结果。上溢时将产生错误的结果。实实数数又又分分为为单单精精度度(floatfloat)、双双精精度度(doubledouble)和和长长双双精精度度(long long doubledouble)三类。)三类。实数的缺省类型为双精度数(实数的缺省类型为双精度数(doubledouble型);型);在在实实数数后后面面加加后后缀缀字字母母f f或或F F表表示示单单精精度度数数(floatfloat型型),例例如如3.14159F3.14159F;在在实实数数后后面面加加后后缀缀字字母母l l或或L L表表示示长长双双精精度度数数(long l
12、ong doubledouble型型),例如例如1.7e+309L.1.7e+309L.第11页,共44页,编辑于2022年,星期二 单精度实数具有单精度实数具有6 67 7位十进制有效数字;位十进制有效数字;双精度实数具有双精度实数具有15151616位十进制有效数字;位十进制有效数字;长双精度数具有长双精度数具有18181919位十进制有效数字位十进制有效数字。第12页,共44页,编辑于2022年,星期二2.2.2 字符常量 一对单引号括起来的单一字符。一对单引号括起来的单一字符。例如:例如:A,2,+字符常量在内存中占一个字节存放,存放的值为该字字符常量在内存中占一个字节存放,存放的值为
13、该字符的符的ASCII码值。码值。美国标准信息交换码美国标准信息交换码ASCIIASCII码码(American Standard Code forAmerican Standard Code for Information Interchange Information Interchange)前前3232个个,0 x0,0 x00 x1f0 x1f为为控制字符控制字符 是空格,编码为是空格,编码为OX20OX203 3编码为编码为OX33OX339 9编码为编码为OX39OX39A A编码为编码为OX41OX41Z Z编码为编码为OX5AOX5Aa a编码为编码为OX61OX61z z编码
14、为编码为OX7AOX7A第13页,共44页,编辑于2022年,星期二2.2.3 2.2.3 转义字符转义字符用于表示一些没法表示的字符,例如控制字符、单引号等用于表示一些没法表示的字符,例如控制字符、单引号等两种表示形式:两种表示形式:1、反斜杠后面跟一个字符、反斜杠后面跟一个字符例如:例如:0空字符空字符 n换行换行t横向跳格横向跳格b退格退格r回车回车字符字符单引号单引号双引号双引号 2、反斜杠后面跟一个字符的、反斜杠后面跟一个字符的ASCII码(两位十六进制数码(两位十六进制数xhh或三位八进制数或三位八进制数ddd)例如:例如:换行字符可以表示为换行字符可以表示为:n、012、12、X
15、A第14页,共44页,编辑于2022年,星期二2.2.4 2.2.4 字符串常量字符串常量一对一对双引号双引号括起来的零个或多个的字符序列,字符序括起来的零个或多个的字符序列,字符序列中的字符个数称为字符串的长度。列中的字符个数称为字符串的长度。例如:例如:thisisastringnthisisacprogram长度为长度为0的字符串(即一个字符都没有的字符串)称的字符串(即一个字符都没有的字符串)称为空串,表示为为空串,表示为(一对紧连的双引号)。(一对紧连的双引号)。在存储字符串常量时,由系统在字符串的末尾自动加在存储字符串常量时,由系统在字符串的末尾自动加个空字符个空字符0作为字符串的
16、结束标志作为字符串的结束标志例如:例如:有一个字符串有一个字符串“CHINA”,它在内存中的实际,它在内存中的实际存储如下所示。存储如下所示。字符串如果有字符串如果有n个字符,则占用个字符,则占用n+1个内个内存空间。存空间。CHINA0第15页,共44页,编辑于2022年,星期二 字符串必须写成一行,如下写法是错误的:字符串必须写成一行,如下写法是错误的:printf(Hello,printf(Hello,how are you?);how are you?);字符串常数必须写成一行。如果一行写不下,则有两字符串常数必须写成一行。如果一行写不下,则有两种方法可以将行扩展到下一行种方法可以将行
17、扩展到下一行。printf(hello,printf(hello,how are you?);how are you?);两个字符串中间只有空白字符两个字符串中间只有空白字符(分隔符分隔符),认为这是一个字符串。,认为这是一个字符串。2、续行符、续行符 printf(hello,printf(hello,how are you?);how are you?);2.2.5 2.2.5 符号常量符号常量 将一个常量定义为一个标识符,这个标识符可以代替对应的常量,称为符号常量。例如例如:#define PI 3.1415926(符号常量名使用大写字母)第16页,共44页,编辑于2022年,星期二使用
18、符号常量的优点:使用符号常量的优点:1、输入很长的常量可以避免出错,简化输入。、输入很长的常量可以避免出错,简化输入。2、含义直观。、含义直观。3、修改容易、修改容易例如:计算相同半径下的圆周长、圆面积和圆球体积。例如:计算相同半径下的圆周长、圆面积和圆球体积。#definePI3.14159main()main()floatl,s,v,r;floatl,s,v,r;printf(inputr:);printf(inputr:);scanf(%f,&r);scanf(%f,&r);l=2*3.14159*r;l=2*PI*r;s=3.14159*r*r;s=PI*r*r;v=4/3*(3.14
19、159*r*r*r);v=4/3*(PI*r*r*r);printf(l=%f,s=%f,v=%fn,l,s,v);printf(l=%f,s=%f,v=%fn,l,s,v);第17页,共44页,编辑于2022年,星期二2.3 2.3 变量及数据类型变量及数据类型2.3.1 2.3.1 变量和变量的地址变量和变量的地址变量:程序运行中可以改变的量。变量:程序运行中可以改变的量。本质是内存中的一块存储区,本质是内存中的一块存储区,变量名:是这块存储区的变量名:是这块存储区的首地址的符号标识首地址的符号标识(通过变量名(通过变量名找到这块存储区在内存中的位置,找到该块存储找到这块存储区在内存中的位
20、置,找到该块存储区内存储的内容)区内存储的内容)注:使用注:使用变量名变量名表示存储的数据。表示存储的数据。使用使用&变量名变量名表示地址。表示地址。变量类型:表明这块存储区的大小,以及施加在这块存储变量类型:表明这块存储区的大小,以及施加在这块存储区内存储的内容上的操作范围区内存储的内容上的操作范围第18页,共44页,编辑于2022年,星期二 在在程程序序运运行行时时,变变量量的的值值存存储储在在一一定定的的存存储储单单元元中中,为为此此,须须弄弄清清楚楚变变量量名名和和变变量量值值这这两两个个不不同同的的概概念念,如如左左图图所所示示。存存储储某某变变量量值值的的存存储储单单元元的的首首地
21、地址址称称为为变变量量的的地地址址。如如右右图图所所示示的的单单精精度度实实型型变变量量average,是是具具有有4个个字字节节的的存存储储单单元元,它它们们分分别别是是单单元元40004003,而而4000就就称称为为变变量量average的的首首地地址址。在在C语语言言中中,变变量量的的地地址址用用变变量量名名前前加加&符符号号表表示示,即即&average,或或者者说说&average的的值值就就是是4000。变量名变量名floataverage&average4000sum变量值变量值400140024003存储单元存储单元30第19页,共44页,编辑于2022年,星期二2.3.2
22、2.3.2 基本数据类型变量基本数据类型变量一、整型变量一、整型变量包括基本整型、短整型和长整型。包括基本整型、短整型和长整型。ANSIC规定规定long不短于不短于int,short不长于不长于int。具体实现取决于计算机系统。具体实现取决于计算机系统。1、整型变量的类型标识符、整型变量的类型标识符有符号短整型:有符号短整型:signedshortint无符号短整型:无符号短整型:unsignedshortint有符号基本整型有符号基本整型:signedint无符号基本整型无符号基本整型:unsignedint有符号长整型:有符号长整型:signedlongint无符号长整型:无符号长整型:
23、unsignedlongint例如:例如:inta;取值范围为取值范围为-3276832767unsignedintb;取值范围为取值范围为065535第20页,共44页,编辑于2022年,星期二二、计算机中数的表示二、计算机中数的表示无符号数表示无符号数表示 00000000=0 00000000=00000000000000000=00000000000000000=0 11111111=255 11111111=2551111111111111111=655351111111111111111=65535 表示有符号数表示有符号数加正负号加正负号用用0和和1代表正负代表正负用某种用某种编
24、码方式使符号位也直接参与运算编码方式使符号位也直接参与运算,不用特殊处理并得到不用特殊处理并得到正确结果正确结果 机器数:符号数值化了的数(最高位为符号位,机器数:符号数值化了的数(最高位为符号位,1 1表示负表示负号,号,0 0表示正号,其余为真值)表示正号,其余为真值)原码表示法:符号原码表示法:符号+绝对值绝对值例如:例如:+3原码原码=00000011=03H-3原码原码=10000011=83H+0原码原码=00000000=00H-0原码原码=10000000=80H八位十六位第21页,共44页,编辑于2022年,星期二补码表示法:计算机中有符号数用补码表示补码表示法:计算机中有符
25、号数用补码表示正数的补码正数的补码=正数的原码正数的原码负数的补码负数的补码=该负数相对应的正数的补码按位取反再加一该负数相对应的正数的补码按位取反再加一例如:例如:-46-46补码补码 =?46 46补码补码 =0010 1110=0010 1110 1101 0001 1101 0001(按位取反)(按位取反)1101 0010=D2H 1101 0010=D2H(加一)(加一)n n位补码的表数范围:位补码的表数范围:-2 -2n-1n-1 N N 2 2n-1n-1-1-1n=8 -128 n=8 -128 N N 127 127n=16 -32768 n=16 -32768 N N
26、32767 32767第22页,共44页,编辑于2022年,星期二三、实型变量三、实型变量实型变量为:单精度型、双精度型和长双精度型。实型变量为:单精度型、双精度型和长双精度型。单精度:单精度:float(四个字节存储)(四个字节存储)双精度:双精度:double(八个字节存储)(八个字节存储)长双精度:长双精度:longdouble(字节数字节数8,取决于计算机系统取决于计算机系统)取值范围:取值范围:单精度型单精度型:有有67位有效数字,范围约为位有效数字,范围约为|3.4e-38|3.4e+38|双精度型双精度型:有有1516位有效数字位有效数字,范围约为范围约为|1.7e-308|1.
27、7e+308|长双精度型:如长双精度型:如TurboC中的长双精度型变量的值在内存中的长双精度型变量的值在内存中占中占10个字节)。个字节)。四、字符变量四、字符变量用于存放字符常量,存放的是字符的用于存放字符常量,存放的是字符的ASCII码。类型码。类型标识符为标识符为char。第23页,共44页,编辑于2022年,星期二2.3.3 2.3.3 变量说明变量说明变量遵循先定义变量遵循先定义(说明说明)后使用的原则,变量说明的目的:后使用的原则,变量说明的目的:(1)(1)在编译时便于发现未经定义的变量名。在编译时便于发现未经定义的变量名。(2)(2)根据类型信息来检查对变量施加的运算是否合理
28、。根据类型信息来检查对变量施加的运算是否合理。(3)(3)编译时根据类型为变量分配固定长度的存储单元,并编译时根据类型为变量分配固定长度的存储单元,并 确定数据在内存中的表示方法。确定数据在内存中的表示方法。变量说明形式变量说明形式:存储类别存储类别存储类别决定变量的存储位置,同时也决定变量的生存存储类别决定变量的存储位置,同时也决定变量的生存期和作用域。期和作用域。数据类型用于指明变量名表中所列变量的数据类型。数据类型用于指明变量名表中所列变量的数据类型。例如:例如:int number,score;int number,score;unsigned long distance;unsign
29、ed long distance;第24页,共44页,编辑于2022年,星期二【例【例2.1】不同整型变量的混合运算。不同整型变量的混合运算。main()inta,b,c,d,x,y;unsignedinte;a=20;b=-15;c=50;d=-10;e=25;x=a+b+e;y=c+d+e;printf(na+b+e=%d,c+d+e=%dn,x,y);运行结果为:运行结果为:a+b+e=30,c+d+e=65第25页,共44页,编辑于2022年,星期二【例【例2.2】整型数据的溢出问题。整型数据的溢出问题。main()inta,x;unsignedintb,y;a=3;b=65532;x
30、=a+b;y=a+b;printf(x=%d,y=%un,x,y);运行结果为:x=-1,y=65535 0000000000000011 3 a (+)1111111111111100 65532 b 1111111111111111第26页,共44页,编辑于2022年,星期二【例【例2.3】字符型数据和整型数的混合运算。字符型数据和整型数的混合运算。main()charc1,c2,c3;c1=A+3;c2=65;c3=A;printf(%c,%c,%cn,c1,c2,c3);printf(%d,%d,%dn,c1,c2,c3);运行结果如下:D,A,A68,65,65第27页,共44页,编
31、辑于2022年,星期二2.3.4 2.3.4 变量的初始化变量的初始化 变量说明只是指定了变量的名字和数据类型,并没变量说明只是指定了变量的名字和数据类型,并没有给它们赋初值。但程序中有些变量在使用前必须赋初值有给它们赋初值。但程序中有些变量在使用前必须赋初值例如例如,作为计数器作为计数器(n=n+1)(n=n+1)使用的整型变量使用的整型变量n n通常要置初值通常要置初值0 0 在在C C语言程序中,没有赋初值的变量并不意味着该变语言程序中,没有赋初值的变量并不意味着该变量中就没有数值,因为该变量所标识的存储单元中还保留量中就没有数值,因为该变量所标识的存储单元中还保留着以前使用该单元时留下
32、的内容,只是尚未对该变量定义着以前使用该单元时留下的内容,只是尚未对该变量定义特定值。于是,直接引用该变量就会产生莫名其妙的结果。特定值。于是,直接引用该变量就会产生莫名其妙的结果。(没有赋值的变量内存单元会有随机值存在)(没有赋值的变量内存单元会有随机值存在)变量赋初值的一般形式:变量赋初值的一般形式:=,.例如:例如:int n=0,s=1;int n=0,s=1;double price=35.5 double price=35.5;int x,y=10,z;int x,y=10,z;第28页,共44页,编辑于2022年,星期二2.4 2.4 运算符和表达式运算符和表达式2.4.1 2.
33、4.1 概述概述运算符:运算符:C C语言中用于描述数据运算的特殊符号。语言中用于描述数据运算的特殊符号。操作数:运算符的运算对象(常量、变量、函数等)。操作数:运算符的运算对象(常量、变量、函数等)。表达式:用运算符将表达式:用运算符将C C语言的各种运算对象连接起来,组成符合语言的各种运算对象连接起来,组成符合C C语语 言语法要求的式子(一个常量或变量也可称为表达式)。言语法要求的式子(一个常量或变量也可称为表达式)。目:对一个运算符而言,参加运算的操作数的个数(单、双、三)目:对一个运算符而言,参加运算的操作数的个数(单、双、三)例如例如:(a+b)*sin(x)+2(a+b)*sin
34、(x)+2优先级:运算符的优先级。规定表达式中不同运算符相邻出现时,优先级:运算符的优先级。规定表达式中不同运算符相邻出现时,运运算符的计算顺序。优先级高的运算符先进行计算。算符的计算顺序。优先级高的运算符先进行计算。结结合合性性:C C语语言言特特有有的的、用用来来规规定定同同样样优优先先级级的的运运算算符符相相邻邻出出现现时时 表达式的计算方式(表达式的计算方式(计算方向计算方向)。)。例如例如:a+b*c-d a+b*c-d (a+(b*c)-d(a+(b*c)-d -i+-i+-(i+)-(i+)注注:括号可以用来改变表达式的优先级和结合方式括号可以用来改变表达式的优先级和结合方式第2
35、9页,共44页,编辑于2022年,星期二2.4.2 2.4.2 算术运算符和算术表达式算术运算符和算术表达式1.1.基本算术运算符基本算术运算符 +加法或正值运算符加法或正值运算符 -减法或负值运算符减法或负值运算符 *乘法运算符乘法运算符 /除法运算符除法运算符%求余数运算符求余数运算符 (1 1)整数除法和实数除法)整数除法和实数除法整数除:两个操作数全是整数,商为整数,小数部分被舍弃整数除:两个操作数全是整数,商为整数,小数部分被舍弃。例如:例如:5/2 5/2 2 2-10/3-10/3 -3-3实数除:两个操作数只要有一个是实数,商为实数。实数除:两个操作数只要有一个是实数,商为实数
36、。例如:例如:3.0/5.0 3.0/5.0 0.6 0.63/5.0 3/5.0 0.6 0.6(2 2)关于求余数运算)关于求余数运算两个操作数必须全为两个操作数必须全为整数,结果为整数,符号与被除数相同整数,结果为整数,符号与被除数相同例如:例如:53%753%7 4 453%-753%-7 4 4 -53%-7-53%-7 -4-4第30页,共44页,编辑于2022年,星期二(3 3)混合运算)混合运算运算符两侧的数据类型可以不同,系统先将两个运算对象转换成相同的数运算符两侧的数据类型可以不同,系统先将两个运算对象转换成相同的数据类型,再进行实际计算。这种由混合运算引起的类型转换是自动
37、进行的。据类型,再进行实际计算。这种由混合运算引起的类型转换是自动进行的。例如:例如:a a+2.718*+2.718*b b+10-5%2*(a+b)/*+10-5%2*(a+b)/*设设a a和和b b是实型变量是实型变量*/*/转换原则:表示范围小的类型转换为表示范围大的类型转换原则:表示范围小的类型转换为表示范围大的类型2.2.自增、自减运算符自增、自减运算符 “+”和和“-”功能:将一个变量加功能:将一个变量加1 1或减或减1,1,常用来修改计数次数常用来修改计数次数、下标或指针。下标或指针。i+i+i +i i-i-i -i例如:例如:int x,a=5;int x,a=5;x=a
38、+x=a+x=a,a=a+1 x=a,a=a+1 x=a-x=a-x=a,a=a-1 x=a,a=a-1x=+a x=+a a=a+1,x=a a=a+1,x=a x=-a x=-a a=a-1,x=a a=a-1,x=a (1 1)操作数必须是变量)操作数必须是变量“+”和和 “-”运算符的操作数只能是变运算符的操作数只能是变 量,而不能是常量或表达式,例如:量,而不能是常量或表达式,例如:25+25+/*/*是不合法的是不合法的*/*/(i+j)+/*(i+j)+/*是不合法的是不合法的*/*/第31页,共44页,编辑于2022年,星期二(2 2)单目运算符,优先级与取负数运算符)单目运算
39、符,优先级与取负数运算符“-”相同,结合方向是相同,结合方向是 从右至左。从右至左。例如:例如:int i=4;int i=4;printf(printf(“%d%d”,-i+);,-i+);输出输出-4-4,i i最终等于最终等于5 5。相当于。相当于printf(printf(“%d%d”,-(i+);,-(i+);注意:注意:(1 1)优先级和结合性)优先级和结合性(+、-、-)(*、/、%)(+、-)单目运算符单目运算符+、-和和-是从右至左结合的,是从右至左结合的,+、-、*、/和和%是从左至右结合的。是从左至右结合的。(2 2)书写表达式要使用括号使表述清晰)书写表达式要使用括号使
40、表述清晰例如例如:i+ji+j写成(写成(i+)+ji+)+j第32页,共44页,编辑于2022年,星期二2.4.3 2.4.3 赋值运算符和赋值表达式赋值运算符和赋值表达式赋值:把表达式的值存入变量所对应的存储空间赋值:把表达式的值存入变量所对应的存储空间1 1、简单赋值运算符、简单赋值运算符 “=”格式:格式:变量名变量名=表达式表达式(*)如果)如果“=”两边的类型不一致,系统会将右边的数据转换为左边两边的类型不一致,系统会将右边的数据转换为左边 变量的类型(截取或扩展)。变量的类型(截取或扩展)。例如:例如:int i,j;int i,j;double d=2.6;double d=2
41、.6;char c1=char c1=a a,c2;,c2;j=c1;j=c1;c2=c2=102102;i=d+3;i=d+3;(*)结合性为从右至左。)结合性为从右至左。例如:例如:x=y=5 x=y=5 x=(y=5)x=(y=5)第33页,共44页,编辑于2022年,星期二2 2、算术复合赋值运算符、算术复合赋值运算符 (3)(3)+=+=、-=-=、*=*=、/=/=、%=%=、=、&=&=、=、|=|=变量名变量名 op=op=表达式表达式 变量名变量名=变量名变量名 op(op(表达式表达式)例如:例如:x+=2;x+=2;x=x+2;x=x+2;x*=y+1;x*=y+1;x=
42、x*(y+1);x=x*(y+1);a+=b+=c*c;a+=b+=c*c;a=a+(b=b+c*c);a=a+(b=b+c*c);2.4.4 2.4.4 关系运算符和关系表达式关系运算符和关系表达式关系运算:对两个操作数进行比较的运算,由关系运算关系运算:对两个操作数进行比较的运算,由关系运算 符实现。符实现。大于大于 =大于等于大于等于 小于小于 =c+dxy!=za=xyz例如:例如:int x=2,y=3;int x=2,y=3;求求z1z1和和z2z2的值的值z1=0=x=9 z1=0=x=9 z2=3-1!=x+1=y+2 z2=3-1!=x+1(c+d)(xy)!=za=(xy)
43、z)z1=(0=x)=9)z2=(3-1)!=(x+1)y&a=a&c=z d9注意:(*)在计算逻辑表达式时,并不是所有的表达式都要被求解。逻辑与:如果第一个操作数被判定为“假”,系统不再判定或 求解第二操作数。逻辑或:如果第一个操作数被判定为“真”,系统不再判定或 求解第二操作数。例如:假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1,则求解表达式(x=n1n2)&(y=n3n4)后x和y的值(*)条件或逻辑表达式用整数“”表示结果“逻辑真”、用“”表示 结果“逻辑假”。(*)在判断一个数据的“真”或“假”时,却以和非为根据:如果 为,则判定为“逻辑假”;如果为非,则判定
44、为“逻辑真”第37页,共44页,编辑于2022年,星期二例如:例如:x=10 x=10、y=5y=5、z=z=a a求下列表达式的值求下列表达式的值!x!xy&zy&z!x|0!x|010&0|310&0|32.4.6 2.4.6 条件运算符条件运算符(1)格式:格式:表达式表达式1 1?表达式?表达式2 2:表达式:表达式3 3(2)运算规则:运算规则:如果如果“表达式表达式1 1”的值为非的值为非0(0(即逻辑真即逻辑真),则运算结果等于则运算结果等于“表达式表达式2 2”的值;否则,运算结果等于的值;否则,运算结果等于“表达式表达式3 3”的值的值(3)优先级与结合性优先级与结合性仅高于
45、赋值运算符、逗号运算符,右结合性仅高于赋值运算符、逗号运算符,右结合性第38页,共44页,编辑于2022年,星期二例如:从键盘上输入一个字符,如果它是大写字母,则把 它转换成小写字母输出;否则,直接输出。main()char ch;printf(Input a character:);scanf(%c,&ch);ch=(ch=A&ch0?1:x0?1:(x0?-1:0)第39页,共44页,编辑于2022年,星期二2.4.7 2.4.7 其它运算符其它运算符1 1、逗号运算符、逗号运算符 “,”(1)(1)格式格式表达式表达式1 1,表达式,表达式2 2,.(2)(2)功能功能 依次计算表达式,
46、以最后一个表达式的值作为逗号表达式的值。依次计算表达式,以最后一个表达式的值作为逗号表达式的值。该表达式用于只允许出现一个表达式的地方计算多个表达式的该表达式用于只允许出现一个表达式的地方计算多个表达式的值,主要用于循环语句的控制部分。值,主要用于循环语句的控制部分。2 2、求字节运算符、求字节运算符 “sizeofsizeof”(1)(1)格式格式 sizeof(sizeof(数据类型数据类型)sizeof(sizeof(表达式表达式)功能是求表达式的结果或数据类型所占的字节数功能是求表达式的结果或数据类型所占的字节数。第40页,共44页,编辑于2022年,星期二x=1.25,x*4,3*6
47、结果为整型值结果为整型值1818z z=(x=6,y=x*2,y+x+10)=(x=6,y=x*2,y+x+10)(x x、y y、z z均为均为intint类型类型)结果结果z z为整型(为整型(intint)值)值2828max(a,b),c,d)max(a,b),c,d)是一个函数调用表达式。这个函数调是一个函数调用表达式。这个函数调 用表达式用了三个实参用表达式用了三个实参(a,b)(a,b)、c c、d d。例如:例如:sizeof(float)的值为的值为4,表明单精度实型占,表明单精度实型占4个字节个字节。sizeof(2*3)的值为的值为2,表明整型占,表明整型占2个字节个字节
48、。2.5 2.5 运算符的优先级和结合性运算符的优先级和结合性 运算符的运算符的优先级和结合性优先级和结合性见见P P4848表表2-92-9 第41页,共44页,编辑于2022年,星期二2.6 2.6 数据类型转换数据类型转换 不同数据类型的数据或变量进行混合运算时,需要进行数据不同数据类型的数据或变量进行混合运算时,需要进行数据类型转换类型转换转换方式有两种:转换方式有两种:隐式隐式类型转换类型转换显式显式类型转换类型转换2.6.12.6.1隐式类型转换隐式类型转换语言按照一定的类型转换规则自动进行的转换语言按照一定的类型转换规则自动进行的转换转换规则:转换规则:第42页,共44页,编辑于
49、2022年,星期二1 1、运算中将所有、运算中将所有charchar型和型和shortshort数据都转换成数据都转换成intint型,型,floatfloat型转换型转换 成成doubledouble型(提高运算精度)。型(提高运算精度)。2 2、低级类型向高级类型(占存储空间大)进行转换。、低级类型向高级类型(占存储空间大)进行转换。3 3、赋值运算符右端值的类型向左边变量的类型进行转换、赋值运算符右端值的类型向左边变量的类型进行转换intintunsignedunsignedlonglongunsigned longunsigned longdoubledoublelong doublelong doublefloatfloatchar shortchar short第43页,共44页,编辑于2022年,星期二2.6.2 2.6.2 显式(强制)类型转换显式(强制)类型转换转换方法转换方法(类型标识符)表达式(类型标识符)表达式例如:例如:x x为为intint型,型,y y为为floatfloat型,型,z z为为charchar型;型;求出下表达式的类型求出下表达式的类型 x+y x+y x+(int)y x+(int)y (char)(x+z)(char)(x+z)(char)x+z (char)x+z第44页,共44页,编辑于2022年,星期二
限制150内