资源描述
2020/4/25,1,第三章数据类型、运算符与表达式,李书涛list37,2020/4/25,2,目录,1基本数据类型2运算符和表达式3常用数学函数4变量初始化5本章小节,第三章数据类型、运算符与表达式,2020/4/25,3,1基本数据类型,1基本数据类型2.1.1C语言的数据类型,2020/4/25,4,数据的描述数据的操作,程序,类型,运算符,数据结构算法,程序的任务是对数据进行处理,数据是程序处理的对象,而运算符是施加给这些数据的操作,数据和运算符是表达式的基本元素。,1.程序与数据类型,1基本数据类型,2020/4/25,5,1.不同类型数据采取不同的存储形式;2.不同类型数据在内存中占有不同的存储空间;3.不同类型数据对应不同的取值范围;4.不同类型数据确定了允许对其进行不同的操作类型。,2.数据类型的含义,1基本数据类型,2020/4/25,6,按照数据在程序中的取值分为两类:值保持不变-常量x=2+y值随程序运行变化-变量,3.C语言的基本数据类型,1基本数据类型,2020/4/25,7,1.在程序运行中,其值保持不变2.表示方法:,整型100,125,-100实型3.14,0.125字符型a,b字符串常量“string”,3.符号常量:#definePI3.14159,宏定义:给常量定义一个标识符,称宏名,大写。,2.1.2常量与变量一、常量,2020/4/25,8,3.变量通过变量名来标识。,1.在程序运行中,值发生变化;,2.必须先定义,再使用;,inta,b;,类型变量名表,256,3,变量名和内存中的存储单元相对应。编写程序时通过变量名来存、取存储单元。,二、变量,变量,2020/4/25,9,(1)以字母或下划线开头,(2)不能用系统中的关键字作为变量名,inta,b,A123,_b;,inta;.A=5;,(3)变量名中的字母是区分大小写的。sum、stu_name、_age、Lts_1_2、a232c、x.y、start+9、c2.0非法NAMEname表示两个不同的标识符。,4.有关变量名的规定,2020/4/25,10,有三种表示形式,十进制八进制十六进制,1234,加前导001234,0125,加前导0 x如0 x123,0 xffff,整型数据包括整型常量和整型变量,整型数据以二进制补码形式存储。,例,100、-8、0;010、024;0 x38、0X1F,2.1.3整型数据一、整型常量,2020/4/25,11,掌握要点1.有几种定义形式;2.每种形式占存储空间的大小不同;3.取值范围不同;4.输入输出格式不同。,二、整型变量,2020/4/25,12,六种形式,基本整型短整型长整型无符号整型无符号短整型无符号长整型,intshortintlongintunsignedint,占存储空间,一个变量,2242,字节,unsignedshortunsignedlong,24,1.定义形式,2020/4/25,13,类型说明符长度数的范围基本型int2字节-3276832767短整型short2字节-215215-1长整型long4字节-231231-1无符号整型unsigned2字节065535无符号短整型unsignedshort2字节065535无符号长整型unsignedlong4字节0232-1,2.整型变量的取值范围,类型说明符长度数的范围基本型int2字节-3276832767无符号整型unsigned2字节065535,有符号与无符号整型数的区别,int最高位为符号位1为负数补码unsigned最高位为数值位=215=32768,则:unsigneda=216-1=65535,而inta=-1,则:unsigneda=215=32768,而inta=-32768,2020/4/25,15,int型数存储长度为16位二进制(2Byte),0000000000000001,=215-1=32767,0000000000000011,0111111111111111,1000000000000000,=1,=3,上面的数再加1是多少?,=-215=-32768,例,补码表示,int型表示数的范围:-3276832767,3.输入输出形式:%d,%ld,%x,%o,%u,?,int型数的表示范围,2020/4/25,16,1.求法:正数的补码与原码相同;负数的补码对原码除符号位外,按位变反,末位加1,即得补码。或者由反码加1也可求得补码。,+0补=-0补=0,数的补码表示,2.补码的表示范围当n=8时,补码的表示范围是:,+最大数补=01111111-最大数补=10000000,-128+127,由此可得补码表示范围的公式是,2n1(2n11),2020/4/25,17,数的补码举例,已知:a=4,b=16,设n=8计算4-16,根据a补+b补=a+b补有:a+b补=+4补+16补,11110100,结果为负时得到负数的补码,需再求补得原码:10001100,16原=10010000,连同符号一起运算,解答,4补=00000100,16反=11101111,16补=11110000,-12,2020/4/25,18,包括实型常量和实型变量,两种表示形式,小数指数,0.123123e-3,实型常量只能用十进制形式表示,不能用八进制和十六进制,1e3、1.8e-3、-123e-6、-.1e-3e5、1e-3.2、e、.e-03,2.1.4实型数据一、实型常量,指数格式:,数符尾数e阶符阶码,2020/4/25,19,1.定义形式,三种形式,单精度双精度长双精度,floatdoublelongdouble,2.占存储空间,一个变量,4816,字节,实型常量不区分单精度和双精度,二、实型变量,2020/4/25,20,4.输入输出形式%f,%lf,3.变量的取值范围,实型数据在计算机中以指数形式存储,单精度float变量占四个字节。一个字节存放指数部分,三个字节存数值部分。,2-23100,X=a+b*c,a+b-c572a=b=5,结果?,单目运算符的优先级高于双目运算符单目运算符从右向左结合双目运算符从左向右结合,运算符的优先级与结合性,2020/4/25,38,1.共有5个:+,-,*,/,%,2.“-”作为负号时为单目,单目:-,双目:*,/,%,双目:+,-,5.优先级:,6.结合性:从左向右,3.%运算只适用于整型数,算术运算的结果为什么类型,取模(求余数)a=10%4a的值为2,?,2.2.2算术运算符和算术表达式,4./运算用于整型和实型时不同,2020/4/25,39,1.模(求余数)%运算,令:a=10;b=4;求a%b与b%a;,结果:a/b=2,令:a=10;b=4;x=10.0;y=4.0;求a/b与x/y;,结果:x/y=2.5,结果:a%b=2,b%a=4,算术运算符举例,2./运算用于整型时称整除;用于实型时称实除。,2020/4/25,40,2.2.3关系运算符与关系表达式,关系运算和逻辑运算经常作为条件语句和循环语句中的条件,其结果为一逻辑值。,A和B中至少有一个大于C,如何用C语言描述,A和B全部大于C,A为不大于100的偶数,关系运算是一种比较运算,将两个值(表达式)进行比较,判断比较的结果是否符合给定的条件:符合结果为1;否则结果为0。,关系运算逻辑运算,2020/4/25,41,大于,大于等于=,小于c,一、关系运算符,关系表达式的结果是一个逻辑值,根据关系是否满足,分别取值,1.关系运算符与运算分量构成关系表达式,inti=1,j=7,a;a=i+(j%4!=0)a的值?,结果:a=2,3.使用关系表达式注意事项,!,(1)数学上,判断x是否在区间a,b时,习惯上写成a=x=b,但在C中,必须写成a7,逻辑0,d的值为0,使用关系表达式注意事项,2020/4/25,44,1.有三个,3.条件运算符的优先级:高于赋值,低于其他,4.结合性:从右向左,z=(ab)?a:(ad)?c:d;,5.数据类型可以不同:,xy?a:b,执行:intx=10,y=9;inta,b,c;a=(-x=y+)?-x:+y;b=x+;c=y;后a,b,c?,a,b,cA)9,9,9B)8,8,10C)8,10,9D)1,11,10,X为9y为10,X为8,条件运算的特点,2020/4/25,68,若w,x,y,z,m均为int型变量,则执行下面语句后的m值为:w=1;x=2;y=3;z=4;m=(wx)?w:x;m=(my)?m:y;m=(mz)?m:z;A)1B)2C)3D)4,若w=1,x=2,y=3,z=4,则表达式wz);printf(“%d,”,wA)0,1,1,1B)1,1,1,1C)0,1,0,1D)0,1,0,0,算术运算关系运算逻辑运算条件运算,综合举例,2020/4/25,70,一、逗号运算符,(表达式1,表达式2,表达式n),用于连接几个表达式,二、求解过程,顺序求解几个表达式,三、优先级,逗号运算符的优先级最低,四、结合性,从左向右,五、逗号表达式,逗号表达式的值为最后一个表达式的值(表达式n的值),X=(a=4*5,a*2),a+6),a为?,20,x为?,26,2.2.9逗号运算符,结构体类型中引用结构体成员分量,结构体变量名.结构成员名结构体指针名-结构成员名,structcharname20;intage;charsex;stud1,stud2;,stud1.age=22;,二.“()”和“”运算符,()运算符:改变表达式的执行次序,类型转换运算,函数的参数表等。运算符:下标运算符,数组定义和数组元素的引用。,在C语言所有的运算符中,“.”,“-”,(),的优先级最高,2.2.10其它运算一.“.”和“-”运算符,2020/4/25,72,“*”是指针运算符,间接访问指针所指对象的内容“floatb=3.5;charstr;int*pa;float*pb;,pa=,printf(“%d,%d,%f,%fn”,a,*pa,b,*pb);,四.type运算符,type为某种类型标识符,(类型标识符)表达式,将表达式的结果强制转换为括号中指定的类型,单目运算符,三.“*”和“,五.sizeof运算符,结果:2,1,求:printf(%d,sizeof(ASTn01212);,结果:10,2020/4/25,74,运算符小结,算术运算符:+,-,*,/,%赋值运算符:=关系运算符:,=,sizeof(),(type),,不同数据类型需先转换成同一类型,然后进行运算,方式,自动进行-隐式转换强制进行-显式转换,一、隐式转换(算术转换),优先级低的向优先级高的转换,inti;floatf;doubled;longe;表达式:10+a+i*f-d/e的结果为:double,2.2.11混合运算及数据类型转换,2020/4/25,76,格式:(类型)表达式,(int)(10+a+i*f-d/e),将该结果强制转换为整型,例:inti;floatf;求:(int)f%i,取模运算要求运算分量是整数,所以先将f转换为整型,再做%运算,三、赋值转换,赋值符号右边的类型向左边的转换,intx;floaty=5.3;x=y;,intx=5;floaty;y=x;,二、显式转换(强制转换),结果:x=5,结果:y=5.000000,2020/4/25,77,1.优先级:分为115级,不同级别混合运算时,按优先级先高后低。,2.结合性,相同级别进行运算时,按结合性处理。,单目、条件、赋值运算符的结合性是自右向左。,其它运算符的结合性是自左向右。,四、优先级与结合性,2020/4/25,78,1.(83)结果,11110111311111110取00000001,a=8;b=5;c=2;求ba?a*c:a%c结果5-9160,3.a=8;b=5;c=2;求a/b*b结果,优先级相同,按结合性自左向右。,综合举例,1,16,5,课堂作业,2020/4/25,79,一、C中的基本数据类型,要掌握每一种类型的定义方式(关键字),在存储空间中所占的字节数,存储形式,取值范围。,二、C中的运算符的几个要点(功能、与运算分量的关系、优先级、结合性、运算结果的类型)。,三、算术运算符中的%只使用在int类型。,四、自增,自减运算的特点,灵活使用k+,+k。,数据类型与运算符总结,数据类型与运算符总结,2020/4/25,80,数据类型与运算符总结,数据类型与运算符总结,五、复合的赋值运算规则。,六、逗号运算表达式的值是最后一个表达式的值。,七、不同类型数据转换时的优先顺序。,八、算术运算、关系运算、赋值运算、逗号运算的优先级。,九、常用转义字符的特点ddd、xhhh等只占一个字节。,2020/4/25,81,数据类型与运算符总结,数据类型与运算符总结,十、常用的常量表示方法十进制100;整数八进制0123;十六进制0 xf3d;实数的小数,指数形式;字符常量a;字符串常量“a”。,十一、单目运算,双目运算的优先级和结合性特点,熟记基本概念和规则!,运算符的优先级和结合方向1,运算符的优先级和结合方向2,值得注意的几个问题1.取模(求余数),求:10%3=10%-3=-10%3=-10%-3=,计算结果如右:,11-1-1,结论:结果符号与被除数一致,2.自反赋值变量双目操作=表达式,功能,变量=变量双目操作表达式,inta=10,b=5;求:a*=b+1;printf(“a=%dn”,a);,a=60,计算结果如下:,结论:表达式作为整体参加运算,课堂作业,2020/4/25,85,自反赋值,intx=5;求:x+=x-=x*x;,结果:x=-40,intx=3;求:x+=x-=x*x;,结果:x=-12,课堂作业,运算符的优先级,2020/4/25,87,3常用数学函数,3常用数学函数,1.使用数学函数必须include命令引入math.h文件,它通常放在程序的开始,即如下面的格式:#include2.常用数学函数abs()求绝对值,用法:intabs(intx);labs()求绝对值,用法:longlabs(longx);fabs()求绝对值,用法:doublefabs(doublex);sin()计算sin(x)值,用法:doublesin(doublex);cos()计算cos(x)值,用法:doublecos(doublex);,2020/4/25,88,4变量初始化,4变量初始化,1.在C语言程序设计中,可以在定义变量的同时给变量赋初值,称为变量初始化,如:inti=6;floatf=3.12;charc=a;2.定义时也可以使被定义的变量的一部分赋初值,如:inta,b,c=8;,2020/4/25,89,5本章小结,5本章小结,本章是C语言程序设计的基础,内容涉及到编程使用的基本概念和基础知识,使读者对C语言的数据类型、运算符、表达式、不同数据类型之间的转换等有了初步的了解,为进一步学习C语言打下了良好的基础。本章的知识点在于掌握C语言数据类型的定义和赋值方法,学会使用有关运算符及表达式。只有很好的掌握了C的数据类型、表达式运算,才能恰当的运用于C语言的程序设计之中。,2020/4/25,90,综合练习,综合练习一.单项选择,1.字符串ABC在内存中占用的字节数是。34682.设inta,b,c均为2,表达式a+b+c+的结果是。698表达式出错3.如下程序的执行结果是。main()intn=1;printf(%d%d%dn,n,+n,n-);111122123121,2020/4/25,91,二.填空,1.设a=3,b=2,c=1,则ab的值为(),abc的值为()。2.设整型变量x,y,z均为5:执行“x-=y-z”后x=(),执行“x%=y+z”后x=(),执行“x=(yz)?x+2:x-2,3,2”x=()。3.求以下程序的执行结果:#includemain()intx=5,y=2;printf(1:%dn,!(y=x/2);printf(2:%dn,y!=x%3);printf(3:%dn,x0,1,0,5,5,3,结果是(1:0),结果是(2:0),结果是(3:0),结果是(4:1),2020/4/25,92,END,三.问答,完,为什么应避免对两个实数表达式作“相等”或“不相等”的判别?2.关系表达式能否视为一种整型表达式?为什么?,在判定两个浮点数是否相等时,由于计算机存储上出现的误差,会出现错误的结果。例如:1.0/3.0*3.0=1.0在数学上显然应该是一个恒等式,但由于1.0/3.0得到的值的有效位数是有限的,并不等于0.3.,因此上面关系表达式的值为0(假),而不为(真)。故应避免对两个实数表达式作“相等”或“不相等”的判别。,由于关系表达式的值是整型数0或1,故也可以将其看成是一种整型表达式。,2020/4/25,93,思考练习题,一、思考题二、选择题三、填空题四、编程题P64页,2020/4/25,94,第三章详细内容,1常量与变量2整型数据类型3实型数据类型4字符型数据类型5不同类型数据间的混合运算6运算符与表达式7算术运算符与算术表达式8关系运算符与关系表达式9逻辑运算符与逻辑表达式10赋值运算符与赋值表达式11逗号运算符和逗号表达式12常用数学函数13变量初始化14本章小节,
展开阅读全文