《数据类型运算符》PPT课件.ppt_第1页
《数据类型运算符》PPT课件.ppt_第2页
《数据类型运算符》PPT课件.ppt_第3页
《数据类型运算符》PPT课件.ppt_第4页
《数据类型运算符》PPT课件.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章 数据类型、运算符 与表达式,Types, operators and Expressions,31 数据与数据类型,3.1.1 什么是数据和数据类型 数据是程序加工、处理的对象,也是加工的结果。 数据类型是程序语言中具有同样的性质的数据集合.,整型 int (integer的缩写) 字符型 char (character的缩写) 单精度型 float 基本类型 实型(浮点型) 双精度型 double 数组类 数据类型 构造类 结构体 struct 共用体 union 枚举类 enum 指针类 空类型 void,3.2 C语言的基本数据类型及其表示,3.2.1 常量与变量 1常量在程序运行中其值不能被改变的量,常量区分为不同类型。如 123,456: 整型常量 a,A,b,1,0: 字符常量 123.0, 3.5 : 实型常量 “123”,“A”:字符串常量,例3_1 已知圆半径r,求圆面积和周长的值。 #define 3.14159 main( ) int area,perimeter; int r; r=3; area=*r*r; perimeter=2*r; printf(“area=%dn”,area); printf(“perimeter =%dn”, perimeter); ,符号PI代替常量3.14159 , 称为符号常量 符号常量的定义是在编译预处理语句里进行的,称为宏定义 符号常量一般用大写 符号常量在其作用域内值不能改变(不能被赋值) PI =35; 符号常量在编译时被常量替换,2.符号常量用一个标识符代表一个常量,提高程序 的可修改性和灵活性。,定义格式: #define 标识符 常量,3. 变量,(1) 变量:其值可以改变的量。 在内存中占据存储单元,在该单元中存放变量的值,必须先定义,后使用。,程序里的一个变量可以看成是个存储数据的容器,它的功能 就是可以存储数据。,变量的定义格式: 类型说明符 变量名表; 定义的变量名称最好和存放数据的意义对应。,例: int a,b,c; /*说明a,b,c为整型变量*/ char cc; /*说明cc为字符变量*/ double x,y; /*说明x,y为双精度实型变量*/,#define PRICE 30 main( ) int num,total; num=3; total=num*PRICE; printf(“total=%dn”,total); num=4; total=num*PRICE; printf(“total=%dn”,total); ,90,num,total,对变量的基本操作有两个: 1.“赋值”:向变量中存人数据值。 2.“取值”:取得变量当前值、以便在程序运行过程中使用。,3,4,120,*同一个变量一旦重新赋值,原来的值就不再存在。,3.2.2 整型数据及其表示,1. 整型类型,取值范围:,2. 整型常量,十进制:123,-456,0 八进制:以0开头(零),01, 012 0123=(123)8=(83)10 十六进制:以0x开头,0x123=(123)16=(291)10 0xF=( f )16 = (15)10 长整型常量:123L,-456l,二进制位(bit):计算机中最小的存储信息单位 字节(Byte):八个二进制位组成的存储单元,是 计算机中最小存取信息单位 机器字(word):计算机中存取信息的基本单位,不 同的计算机系统它的长度是不同的,补充:数的存放形式补码,1. 正数不变 2. 负数各位取反后+1,符号位置1 (34)10 = (0 0100010)2 (- 34)10 = ( 1011101)2 + 1 (1 1011110) 2, 4 bytes 数据 x补码 4294967295x+1 (- 34)10补码: (4294967295341)10 (4294967262)10 =(ffffffdf)16 =(1111 1111 1111 1111 1111 1111 1101 1110)2, 2 bytes 数据 x补码65535x+1 (- 34)10补码: (65535341)10=(65502)10=(ffdf)16 =(1111 1111 1101 1110)2,变量的定义格式: 类型说明符 变量名表;,3. 整型变量,问题1:c没有定义便使用;,int c;,问题2:c应为 32770,但实际 为 32766,发生溢出;,问题3:c应为long int 类型;,long int c;,3.2.3 实型数据及其表示,1. 实型类型,实型数据是以浮点数形式存储的,在计算机中按指数 形式。如图例:0.12345610-2,(float),(double),(long double),2. 实型常量 十进制形式:由数字和小数点组成; 如: 0.123,0.0,-54.0 指数形式:由十进制小数形式指数; 如:123e3,123E-2 注:e或E的前后面须有数字 不合法的指数形式:e3,2.1e3.5,.e3,e 在实数常量尾部用后缀符 f(F)代表单精度实数(7位有效位), l(L)代表双精度实数(1819位有效位); 例:2.3f,-0.123f,2e-3f,-1.5e4f 为单精度实常量 1256.34L,-0.123l,2e3L 为双精度实常量,3. 实型变量,4. 实型数据应用中的误差问题,由于机器存储限制,会使实数产生误差,理想输出:a=12345.6789,b=0.1234567891234567899e15,实际输出:a=12345.678711,b=123456789123456.797000,3.2.3 字符型数据及其表示,1.字符型数据 字符型数据在计算机中存储的是ASCII码,占用1 byte。,字符“A”的存储形式实际上就是一个整型数65; 它可以直接与整型数据进行算术运算、混合运算,与整型变量相互赋值, 字符型数据以字符或整数两种形式输出。 以字符形式:先将ASCII码值转换为相应的字符,再输出; 以整数形式:直接将ASCII的值作为整数输出。,n 换行(LF) t 横向跳格 (HT) b 退格 (BS) v 竖向跳格 f 走纸换页(FF) r 回车(CR) 单引号() 反斜杠字符() ” 双引号(“) 0,空(不是0) 101 字符A(八进制) x41 字符A(十六进制),2.字符型常量:用单引号括起来的一个字符: 普通字符:a,A ,1等 ( 大小写不同 ) 转义序列:将反斜杠()后面的字符转变为另外的含义。是一种特殊的字符常量。,3. 字符型变量:类型名称char:,*错误的字符常量表示:,015,n,”A”, ab,“How do you do.” “CHINA” “$123.45” “a”,4. 字符串常量:一对双引号括起来的字符序列,注意: C规定:每个字符串结尾加一“字符串结束”(0) 系统自动加上的; “CHINA” :,字符串如果需要存放在变量中,需用字符数组来存放(第7章),a与“a”不同,5. 字符数据的应用举例,main() int i; char c; i=a; c=97; printf( “%c,%dn”, c, c) ; printf( “%c,%dn”, i, i) ; ,输出结果: a , 97 a , 97,注意:在一定范围内通用(0-127),3.2.5 指针型数据及其表示,变量与地址的概念,程序中: int i=12; float k;,内存中每个字节有一个编号-地址,内存,编译或函数调用时为其分配内存单元,变量是对程序中数据 存储空间的抽象,变量的地址,12,指针型数据:是一个变量在内存中所对应的存储单元的地址值。 如2000,2002等, 指针变量:用来存放另一存储单元的地址值。,2. 指针变量的定义,合法标识符,指针的目标变量的数据类型,表示定义指针变量 不是*运算符,例 int *p1,*p2; float *q ; static char *name;,注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值,格式: 类型说明符 *变量名;,3.6.1 &与*运算符,含义: *取指针变量所指向单元的内容 &取内存变量的地址 互为逆运算,特性:单目运算符 优先级为 2 自右向左结合,int i; int *pc;,pc-指针变量,它的内容是地址量 *pc-指针的目标变量,它的内容是数据 &pc-指针变量占用内存的地址,3.2.6 变量的初始化 通常一个变量是先说明,然后再赋值给它。 例:int x,y; x=10;b=20; C规定:可以在定义变量的同时使变量初始化,例: float x123.45; /*说明x为实型量且赋初值为123.45 */ int a,c=10; /*说明整型变量a,c,并仅给c赋初值10*/ int a1=10,b1=6;/*说明整型变量a1,b1;分别赋不同初值*/ double Pai=3.14;/*说明Pai为双精度实型变量为赋初值为3.14*/ char cha; /*说明字符变量ch,并赋初值为a*/ 注意:对几个变量赋同一个值,必须分别赋值 例:int a=b=c=3 ; error int a=3; b=3; c=3; ok 说明:变量初始化不是在编译阶段完成的而是在程序执行阶段执行 本函数时赋以初值的 例:int a=3 ; int a ;a=3 ; 例:int a,b,c=5 ; int a,b,c ; c=5 ;,变量初始化的应用举例,main() int a; int b; b=a+2; printf( “%d,%dn”, a,b) ; ,注意:定义的变量在没有初始化之前有一个不确 定值。,a=3;,3.3 算术运算与赋值语句,3.3.1 c语言中的运算规则 1、运算符 分类(按操作数个数分): 单目运算:一个运算符连接一个运算对象; (a ; !a ; +a) 双目运算:一个运算符连接两个运算对象; (2312) 三目运算:一个运算符连接三个运算对象; ab?a=1:a=-1,分类 (作用):,算术运算符 + - * / % 自增自减运算符 + - 赋值与赋值组合运算符 = += -= *= /= %= = |= &= = 关系运算符 = 条件运算符 ? : 逗号运算符 , 指针运算符 * & 求字节数运算符 size of 强制类型转换运算符 (类型) 分量运算符 . - 下标运算符 其它 ( ),2、 表达式,算术表达式 a+b -c 自增自减表达式 i+ -i 关系表达式 a !=b (a+b)(a-b) 逻辑表达式 a & (b=c) ! a 字位表达式 a 2 a&b 赋值表达式 a=3 a *= 2 a=b=6 逗号表达式 (a+b , a-b),3、优先级和结合性 (附录A) 优先级: 同一表达式中不同运算符进行计算时的先后次序 结合性: 针对同一优先级的多个运算符而言,指同一表达式 中相同优先级的多个运算应遵循的运算次序。,表达式运算时的关键问题:,(1) 算符优先极问题(不同级别算符的计算次序) (2) 算符结合次序(优先级平级时的计算次序) (3) 算符操作数个数(一目或二目算符) (4) 算符对应操作数类型,3.3.2 算术运算符和算术表达式 1、算术运算符,说明: “+”,“-”运算符单目运算:取正、负值运算;优先级高 双目运算:加、减运算;优先级低 除法运算“/” 整数(字符)相除结果是整型(商),小数部分全部舍去 实数相除,所得的商也为实数。 例如:1/3=0 只取结果的整数部分0 ,舍去0.333333 15/43 只取结果的整数部分3,舍去0.75 1.0/30.333333 13/4.03.250000 整数相除时,若不能整除将造成误差,要避免整数直接相除。 模运算“%“也称为求余运算。要求两个运算对象都为整型,其结果是整数除法的余数。例如: 5%10=5 10%3=1 -10%3-1,算术运算符的优先级及结合性如下:,例如表达式 x/(67-(12+y)*a) 的运算顺序是:,2、算术表达式 c语言的算术表达式由算术运算符、常数、变量、函数和园括号组成,其基本形式与数学上的算术表达式类似。例如: 3十5 12.3423.65*2 -5*(18%4+6) x/(67-(12+y)*a),带函数调用的算术表达式。以数学函数的调用为例,c语言把数学计算中常用的计算公式(或算法)抽象定义为一个个的函数,这些函数的集合构成了C语言的数学库(见附录c),在程序中用到相应的函数时只要直接调用即可。 例如,数学表达式:sin(x)+cos(y/2) c语言算术表达式:sin(x)+cos(y/2) 函数库:(#include ),3.3.3 自增、自减运算符(+、),(1) +i和i+ 最后都使i=i+1,但顺序不同,意义不同 例:int i=3,j; 对于j=+i;相当于 i+; j=i; 对于j=i+;相当于 j=i; i+;,(2) +,-只能用于变量(不能用于常量和表达式) +3, +(a+b), (x+5)+ ,+i(-i):先将i的值加(减)1,然后使用i i+(i-):先使用i,然后将i的值加(减)1,开始,结果,(3)用于+,-运算的可以是有序类型的变量 (4) +,-的结合性是自右向左的。,例题1:int i=3,k; k=(i+)+(i+)+(i+) ; 则:k=? i=? 相当于 k=i+i+i; k=9 i+;i+;i+; i=6,例题2:int i=3,k; k=(+i)+(+i)+(+i) ; 则:k=? i=? 相当于 i+;i+;i+; i=6 k=i+i+i; k=18,例题3:若i=3 则printf(“%d”, i+); 则:打印?; i=? 输出: -3 (然后,i增值为4),例题4:若i=3 则printf(“%d”,i+ + +i);则:打印?; i=? 1.i+ + +i - 取i的地址 2.i+ + +i - i值加1为4 3.i+ + +i - 1的值(4)+2的值(4)得3的值8。输出:8 4.表达式计算完成后,求1.i+的i自加1。i增值为:5 一般写为: (i+)+(+i)。,3.3.4 赋值运算符和赋值表达式,1、 赋值运算符 (=) 计算赋值运算符“”右边表达式的值,并将计算结果赋给“”左边的变量。,2、赋值表达式:变量 = 表达式 计算赋值运算符右边“表达式”的值, 将计算结果赋值给赋值运算符左边的“变量” , 赋值表达式的值就是赋值运算符左边“变量”的值,3、赋值运算符按自右至左结合顺序(右结合),例1:int a=2,b=3,c=4; a=b=c=5 1. a=b=c=5 :c=5,表达式 c=5值为5 2. a=b=c=5 :b=5,表达式 b=c=5值为5 3. a=b=c=5 :a=5,表达式 a= b=c=5值为5 例2:a=b=4+(c=5) 1. a=b=4+(c=5) :c=5,表达式 c= 5值为5 2. a=b=4+(c=5) :表达式 4+(c=5)值为9 3. a=b= 4+(c=5) :b=9,表达式 b= 4+(c=5)值为9 4. a=b= 4+(c=5) :a=9,表达式 a=b= 4+(c=5)值为9,4、赋值时的类型转换 当赋值运算符两侧类型不一致,赋值时要进行类型转换。其转换工作由c编译自动完成。转换原则是以“”左边的变量类型为准,即将“”右边的值转换为与“”左边的变量类型致(类型转换)。 例 int b=32769; int i=256; float a=3.5,a1; char c=A; a1=i;i=a;c=i;,则 i=3 a=3.500000 b=-32767 a1=256.000000 c=0, floatint 直接舍去浮点数地小数部分(存储空间缩小) intfloat 按浮点数相应有效位数补小数点后地有效0(扩大) doublefloat 截取前7位double数据给float变量(缩小) intchar 截取int数据地低8位给char变量 (缩小),3.3.5 组合赋值运算符和组合赋值表达式,1、组合赋值运算符 在赋值符(=)之前加上其它运算符构成组合运算符: 运算符 10种:+ = , -= , *= , /= , %= = , &=, = , |= 2、 组合赋值表达式 格式:变量名 组合赋值运算符 表达式 功能:变量名 = 变量名 运算符 表达 例:a += 3 a = a + 3 x *= y+8 x = x * (y+8),右边为一整体,而不等于x=x*y+8,5 a=5 5 c=5,b=c(5),a=b(5) 11 c=6, a=11(5+6) 10 b=4,c=6,a=b+c=4+6=10 24 -12 a-=a*a (a=3-3*3=-6) a+=-6 (a=a+a=-12),3、 赋值运算符按自右至左结合顺序,表达式 表达式值 各变量值求解过程,a=5 a=b=c=5 a=5+(c=6) a=(b=4)+(c=6) a*=3+5 a+=a-=a*a,int a=3,b,c;,a= b= d= x= y= a= c=,*课后作业 例:int a=3,b,d=012; char c; float x,y;,表达式 各变量的值,1)a=2.8 2)b=3+d+ 3)x=3.6+3/5 4)y=(d=4,d+2,d-) 5)a+=a-=a*=a 6)c=d-2,7)数学表达式 , 用C语言表达式表达正确的是: (1)a/(b+c)*d (2)a/(b+c)*1/d (3)a/(c+b)/d (4)a/d/(b+c),a,(b+c).d,3.4.1 关系运算符与关系表达式 1 关系运算符,3.4 关系运算符和关系表达式, 大于 = 大于等于 = 等于 != 不等于,关系表达式 格式:表达式1 关系运算符 表达式2 例:34 5=4 xx+1 关系表达式的值:“真”条件满足,用1表示 “假”条件不满足,用0表示,例:若a=3,b=2,c=1 ab (ab)= = c b+cb f=abc cd,值 “真” 1 “真” 1 “假” 0 d=1 f=0 “假” 0,例: ca+b c(a+b) ab!=c (ab)!=c a=bc a=(bc),如何表示: 0=x=20?,3.4.2 逻辑运算符和逻辑表达式,1 逻辑运算符和逻辑表达式,& 逻辑与:双目运算符 例:(ab)&(xy) | 逻辑或:双目运算符 例:(ab)|(xy) ! 逻辑非 :一目运算符 例:! (ab),逻辑运算“真值表”,a和b可以是一个变量、常量或运算表达式,运算符种类 优先次序,!非 算术运算符 关系运算符 & | 赋值运算符,1,1,1,1,1,0,(ab)&(xy) ab & xy (y|b) & (y|b) y|b & y|b !a|ab a=10&b&x+ a=10|b|x+ +a|y & +x,例:int a=3,b=1,x=2,y=0; 逻辑表达式 值,1,1,(2) 逻辑表达式中的运算对象(操作数)可以是0 (“假”)或任何非零的数值(“真”),例: 5 3 & 2 | 84 - !0,(3) 逻辑表达式求解并非一定要所有的逻辑运算符都被执行,会出现“短路”现象,例: 设 a=1,b=2,c=3,d=4,m=1,n=1 (m =ab)&(n=cd),例: int a=2,b=3,c=0,d=4; a+ ,a=3 b=4 0 c=1 d=4,例: int a=2,b=3,c=0,d=4; a+ | b+; c+ | d+;,a=3 b=3 1 c=1 d=5,(4) 逻辑表达式的应用 例1:判别某一年year是否闰年。 能被4整除,但不能被100整除: 或 能被400整除: 闰年条件:,例2:写出判断变量C的值是否为的 条件表达式 小写字母 数字字符 被3除余2且被5除余1 奇数 偶数,c=a&c=0&c=9 c%3=2&c%5=1 c%2=1 或 c%2 c%2=0 或 !(c%2),year%4 = 0 且 year%100 != 0,year%400 = 0,(year%4=0 & year%100!=0)|year%400=0,例3、写出判断点在图形内的条件表达式,答案:x=-1 & x=-1 & y=1,答案: x-4,答案:x4,例4、把下面的数学表达式转化成C语言表达式,|x| 4,|x| 4,0= x=20,答案:x=0 & x=20,3.4.3 条件运算符与条件表达式,2、 执行顺序:先计算条件表达式的值,若值为非0,则计算表达式1的值,并将表达式1的值作为整个条件表达式的结果;若条件表达式的值为0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果,max=(ab) ? a : b (ab) ? a+b : a-b,4、结合方向:自右至左 ab?a:cd?c:d 等同于 ab?a:(cd?c:d) 若a=1,b=2,c=3,d=4,有:,4,例:求一个数的绝对值:,例:将小写字母转换成大写:,x=x=0 ? x:x;,c= (c=a,3.5 位 运 算,应用:许多计算机硬件设备的状态信息通常是用二进制串表示的, 则对硬件设备进行操作,也要送出一个二进制位串的方式 发出的命令。 3.5.1 位运算符 一个二进制位只能取值为0或者1; 位运算的运算对象只能是整型(int)或字符型(char)的整数; 位运算是对运算量的每一个二进制位分别进行操作的; 操作符和优先级:,同级左结合, 按位求反 按位右移 & 按位与 按位异或 | 按位或,3.5.2 按位逻辑运算,1按位与& (1)格式:x&y (2)规则:对应位均为1时才为1,否则为0:3&9=1。 例:c=a & b a:1010 1001 0101 0111 & b:0000 0000 1111 1011 c:0000 0000 0101 0011 (3)用途:将指定位&0,实现清0以屏蔽原先的数据;(例311) 将指定位&1,保留原数据对应位 (例312) 2按位或| (1)格式:x|y (2)规则:对应位均为0时才为0,否则为1:3|9=11。 例: c=a | b a:1010 1001 0101 0111 | b:1111 1111 1111 1011 c:1111 1111 1111 1111 (3)用途:将指定位|1,实现置1; (例313),3按位异或 (1)格式:xy (2)规则:对应位相同时为0不同时为1: 00=0, 01=1, 10=1, 11=1 例:c=ab a:1010 1001 0101 0111 b:0110 0000 1111 1011 c:1100 1001 1010 1100 (3)用途:将指定位1,实现使特定位翻转其余位不变;(例314) 4按位取反 (1)格式:x (2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1; 例:c= a a:0000 0000 0000 0111 7 c:1111 1111 1111 1000 -8的补码,特点:按位求反整数求负1 注意:对 c= -a 有 对 c= !a 有,c = -7 c =0,3.5.3 移位运算 1. 按位左移 (1)格式:x 位数 (2)规则:使操作数的各位左移,低位补0,高位溢出: 例: 52=20 即: 00000101 左移2位: 0000010100,2按位右移 (1)格式:x位数 (2)规则:使操作数的各位右移,移出的低位舍弃; 高位:1)对无符号数和有符号中的正数,补0; 2)有符号数中的负数,补1。 例: 52=1 即:00000101 右移2位: 0000000101 例: -52=-2 即:11111011 右移2位: 1111111010,3.5.4 位运算赋值运算符 除按位取反运算外,其余5个位运算符均可与赋值运算符一起,构成复合赋值运算符: &=、|+、=、= 如:x &= y 相当于:x = x&y x = 3 x = x3 x = 5 x = x5,例1 a=3*5,a*4 a=3*5,a*4,a+5 例2 x=(a=3,6*3) y=(x=123,x+x,x+=100-x) 例3 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/表达式值100,y=100,/1,2,3,/3,2,3,3.6.1逗号运算符和表达式 形式:表达式1,表达式2,表达式n 计算:先求解表达式1,再求解表达式2, 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中,3.6 其他运算,3.6.5 强制类型转换运算符(type),表达式用括号括起来,类型转换方式: 自动转换: 2+3.5+a 强制转换:其作用是进行数据类型的强制转换。 (type)是单目算符。 强制转换形式: (类型名)(表达式) 注意:若为表达式,应该用括号括起来,例: (doubl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论