《第2章数据类型运算符和表达式PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第2章数据类型运算符和表达式PPT讲稿.ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2章数据类型运算符和表达式第1页,共60页,编辑于2022年,星期一2.1 C语言的数据类型2.2 标识符2.3 常量2.4 变量2.5 变量赋初值2.6 各种数值型数据间的混合运算2.7 几种基本运算符及其表达式2第2页,共60页,编辑于2022年,星期一2.1 语言的数据类型数据类型是指数据的内在表现形式(代码、存储、运算)的数据类型如下:指针类型指针类型数据类型数据类型基本类型基本类型构造类型构造类型空类型空类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型实型(浮点型)实型(浮点型)整型整型字符型字符型单精度型单精度型双精度型双精度型2022/9/193第3
2、页,共60页,编辑于2022年,星期一1、基本类型基本类型最主要的特点是,其值不可以再分解为其他类型。也就是说,基本类型是自我说明的。在C语言中,构造类型有以下几种:(1)整型;(2)字符型;(3)实型;(4)枚举类型。2.1 语言的数据类型2022/9/194第4页,共60页,编辑于2022年,星期一2、构造类型构造类型是根据已定义的一个或多个数据类型,用构造的方法来定义的。在C语言中,构造类型有以下几种(1)数组类型;(2)结构体类型;(3)共用体(联合)类型。2.1 语言的数据类型2022/9/195第5页,共60页,编辑于2022年,星期一3、指针类型指针是一种特殊的,同时又具有重要作
3、用的数据类型,其值用来表示某个变量在内存储器中的地址。2.1 语言的数据类型2022/9/196第6页,共60页,编辑于2022年,星期一4、空类型C程序是由函数构成的。在调用函数值时,通常应向调用者返回一个函数值。有一类函数,调用后并不需要向调用者返回函数值,这种函数的返回值数据类型可以被定义为“空类型”。其类型说明符为void。2.1 语言的数据类型2022/9/197第7页,共60页,编辑于2022年,星期一2.2标识符1、标识符的定义用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。简单地说,标识符就是一个名字。C语言规定标识符只能由字母、数字和下画线
4、三种字符组成,且第一个字符必须为字母或下画线。2022/9/198第8页,共60页,编辑于2022年,星期一下面列出的是合法的标识符,也是合法的变量Sum,average,_total,Class,day,monthStudent_name,tan,lotus_1_2_3,BASICli_ling下面是不合法的标识符和变量名:LBJames,¥8236,#56,9D37,xy注意:大写字母和小写字母被认为是两个不同的字符。因此sum和SUM,Class和class是两个不同的变量名。通常,变量名用小写字母表示,与人们日常习惯一致,以增加可读性。2.2标识符 2022/9/199第9页,共60页
5、,编辑于2022年,星期一2.3常量一、整型常量1、十进制整数没有前缀,其数码为09。如:532、-156、65535、13672、八进制整数由07数字组成;最高位必须用0作引导符如:015(十进制为13)、0101(十进制为65)、0177777(十进制为65535)3、十六进制整数前缀为0X或0 x,其数码取值为09,AF或af。如:0X2A(十进制为42)、0XA0(十进制为160)、0XFFFF(十进制为65535)。2022/9/1910第10页,共60页,编辑于2022年,星期一 2.3常量二、实型常量实型也称为浮点型。实型常量也称为实数或者浮点数。在语言中,实数只采用十进制。它有
6、两种形式:十进制小数形式和指数形式。1、十进制小数形式由数码09和小数点组成。如:0.01,25.03,35.536,1.24,6.35,278.,-435.450小数点不能省略,也不能只有一个小数点2、指数形式:由十进制数,加上阶码标志“e”或“E”及阶码(只能为整数,可以带符号)组成:aEn(a为十进制数,n为十进制整数)如:3.2E5等于3.21054.7E-2等于4.710-22022/9/1911第11页,共60页,编辑于2022年,星期一2.3 常量三、字符常量1、字符常量是用单引号括起来的一个字符。例如:A、B、=、+、?2、转义字符特殊形式的字符常量,以反斜线“”开头,后跟一个
7、或几个字符的字符序列。字符常量有以下特点:(1)字符常量只能用单引号括起来,不能用双引号或括号。(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是字符集中任意字符,但数字被定义为字符型之后就不能参与数值运算。2022/9/1912第12页,共60页,编辑于2022年,星期一2.3 常量例:转义字符的使用main()printf(mnct*#rftgn);printf(wtibbjk);结果:fg*#wjk2022/9/1913第13页,共60页,编辑于2022年,星期一2.3常量四、字符串常量字符串常量是由一对双引号括起的字符序列。例如,Beijing2008,Chinafighti
8、ng注意:c与c比较c在内存中占一个字节,表示为:c在内存中占两个字节,表示为:c0c2022/9/1914第14页,共60页,编辑于2022年,星期一2.3常量五、符号常量1、符号常量的定义用一个标识符来表示一个常量,称为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量2022/9/1915第15页,共60页,编辑于2022年,星期一例:求任意圆的周长和面积main()floatr,c,s;scanf(“%f”,&r);c=2*3.14*r;s=3.14*r*r;printf(“c=%f,s=%fn”,c,s);#definePI3.14main()floatr
9、,c,s;c=2*PI*r;scanf(“%f”,&r);s=PI*r*r;printf(“c=%f,s=%fn”,c,s);2.3 常量2022/9/1916第16页,共60页,编辑于2022年,星期一注意:1、使用之前必须先定义;2、符号常量名用大写,变量用小写;3、符号常量的值在其作用域内不能改变;4、凡是以“#”开头的都为预处理命令,不是语句,故后面无符号。2.3 常量2022/9/1917第17页,共60页,编辑于2022年,星期一2.4变量变量的定义在程序执行过程中可以改变和赋值的量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量的存储形式:2022/9/1918第18页
10、,共60页,编辑于2022年,星期一2.4 变量一、整型变量1、整型数据在内存中的存放形式数据在内存中以二进制形式存放的如:inti;i=10;0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 010i数据存放示意图数据在内存中实际存放示意图2022/9/1919第19页,共60页,编辑于2022年,星期一2.4 变量2、整型变量的分类短整型:以shortint或short说明,2字节。如:shorts,sum基本型(整型):以int说明2字节。如:inti,sum长整型:以longint或long说明4字节。如:longl,sum无符号整型:用unsignedint或unsig
11、ned说明无符号短整型:用unsignedshort说明无符号长整型:用unsignedlong说明如:unsignedintc,d;2022/9/1920第20页,共60页,编辑于2022年,星期一2.4 变量3、整型变量的定义格式类型说明符变量名标识符,变量名标识符;例如:intx,z,y;/*x,z,y为整型变量*/longn,m;/*n,m为长整型变量*/unsigneda,b;/*a,b为无符号整型变量*/2022/9/1921第21页,共60页,编辑于2022年,星期一2.4变量二、实型变量1、实型数据在内存中的存放形式实型数据一般占4个字节(32位)的内存空间,按指数形式存储。2
12、、实型变量的分类实型变量分为单精度(float型)、双精度(double型)和长双精度(longdouble型)三类。注意:float型的有效位数为67位,double型的有效位数为1516位,所以要避免一个很大的float型数与一个很小的数相加或相减,否则会丢数。2022/9/1922第22页,共60页,编辑于2022年,星期一 2.4变量例:实型数据的舍入误差main()floata,b;a=123456.789e5;b=a+20;printf(%f,b);程序运行结果如下:12345678848.0000002022/9/1923第23页,共60页,编辑于2022年,星期一2.4变量一、
13、字符变量字符变量:用来存储字符常量,即用来存储单个字符。格式:char变量名表列如:charx,y;2022/9/1924第24页,共60页,编辑于2022年,星期一2.4变量例:向字符变量赋以整数。main()charm,n;m=120;n=121;printf(%c,%cn,m,n);printf(%d,%dn,m,n);程序运行结果如下:x,y120,121说明:字符型数据和整型数据是通用的2022/9/1925第25页,共60页,编辑于2022年,星期一2.5变量赋初值变量初始化的方法:1、先定义变量,后赋值inta,b;a=123;b=456;2、定义变量,部分赋值floata,b=
14、0.5,c;3、定义变量赋初值同步floata=0.1,b=0.5,c=4.3;注意:变量赋初值时不允许连等inta=b=c=4;inta,b,c;a=b=c=1;2022/9/1926第26页,共60页,编辑于2022年,星期一2.6 混合运算 整型、实型(单、双精度)、字符型数据间可以混合运算。如:a+2*3.5+6.7*2 规则:不同类型先转换成同一类型,再进行计算Float型数据在运算时一律先转换成double型不同类型进行混合运算时,按照类型级别由低到高的顺序转换字符型和short型在运算时自动转换成int型doublelongintunsignet高低Char,shortfloat
15、2022/9/1927第27页,共60页,编辑于2022年,星期一2.7运算符和表达式一、C运算符简介1、算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种。2、关系运算符:用于比较运算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六种。3、逻辑运算符:用于逻辑运算。包括与(&)、或(|)、非(!)三种。4、位操作运算符:参与运算的量按二进制位进行运算。包括位与(&)、位或(|)、位非()、位异或()、左移()六种。2022/9/1928第28页,共60页,编辑于2022年,星期一5、赋值运算符:用于赋值运
16、算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种。6、条件运算符:这是一个三目运算符,用于条件求值(?:)。7、逗号运算符:用于把若干表达式组合成一个表达式(,)。8、指针运算符:用于取内容(*)和取地址(&)二种运算。9、求字节数运算符:用于计算数据类型所占的字节数(sizeof)。10、特殊运算符:有括号(),下标,成员(,.)等几种。2.7运算符和表达式2022/9/1929第29页,共60页,编辑于2022年,星期一2.7运算符和表达式二、算术运算符和算术表达式1、基本算术运算符和算术表达式 +/%运算对象:常量
17、、变量、函数等运算级别:低/%高整/整整整/实实实/整实%两边为整数不能为实数。结果的符号与被除数的符号相同15%4315%43-15%4=-3-15%-4=-32022/9/1930第30页,共60页,编辑于2022年,星期一2.7运算符和表达式2、运算符的优先级和结合性算数运算符的优先级:先*、/、%后+、-算术运算符的结合性:左结合型。即表达式从左向右进行计算说明:当一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。2022/9/1931第31页,共60页,编辑于2022年,星期一2.7 2.7 运算符和表达式3、强制类型转换运算符强制类型转换是通过类型转换运算
18、来实现的。其一般形式为:(类型说明符)(表达式)例如:(float)z/*把z转换为实型*/(int)(a+b)/*把a+b的结果转换为整型*/2022/9/1932第32页,共60页,编辑于2022年,星期一2.7运算符和表达式、自增、自减运算符自增1运算符记为“+”,其功能是使变量的值自增1;自减1运算符记为“-”,其功能是使变量的值自减1可有以下几种形式:(1)+i:i自增1后再参与其他运算。(2)-i:i自减1后再参与其他运算。(3)i+:i参与运算后,i的值再自增1。(4)i-:i参与运算后,i的值再自减1。2022/9/1933第33页,共60页,编辑于2022年,星期一说明:1、
19、自增、自减运算符为单目运算符2、只能用于变量,不能用于常量x5+a-3、优先级别高于算术运算符,结合方向“自右向左”-i+-(i+)2.7运算符和表达式2022/9/1934第34页,共60页,编辑于2022年,星期一例:自增、自减运算。main()int i;i=6;printf(%dn,+i);printf(%dn,-i);printf(%dn,i+);printf(%dn,i-);printf(%dn,-i+);printf(%dn,-i-);printf(%dn,i);程序运行结果:7667-6-762.7运算符和表达式2022/9/1935第35页,共60页,编辑于2022年,星期一
20、2.7运算符和表达式三、赋值运算符和赋值表达式1、赋值运算符简单赋值运算符记为“=”,由“=”连接的式子称为赋值表达式,其一般形式为:变量=表达式例如:x=m+nw=sin(m)+sin(n)y=i+-j注意:与数学中的等式不同2022/9/1936第36页,共60页,编辑于2022年,星期一2、赋值结果类型转换如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:(1)实型数据赋予整型变量,舍去小数部分,前面的例子已经说明了这种情况。(2)整型数据赋予实型变量,数值不变,但以浮点形式存放,即增加小数部分(补0)。(3)字符型数据赋予整型
21、变量,由于字符型为1个字节,而整型为2个字节,故将字符的ASCII码值存放到整型量的低八位中,高八位为0。当整型数据赋予字符型变量时,只把低八位赋予字符量。2.7运算符和表达式2022/9/1937第37页,共60页,编辑于2022年,星期一例:数据类型转换。main()int a,b,c=322;float x,y=8.88;char c1=k,c2;a=y;x=c;b=c1;c2=c;printf(%d,%f,%d,%c,a,x,b,c2);程序运行结果:8,322.000000,107,B2.7运算符和表达式2022/9/1938第38页,共60页,编辑于2022年,星期一3、复合的赋值
22、运算符在赋值符“=”之前加上其它运算符,构成复合运算符+=,-=,*=,/=,%=,=,&=,=,|=如:x+=5/*等价于x=x+5*/a*=b+7/*等价于a=a*(b+7)*/m%=n/*等价于m=m%n*/2.7运算符和表达式2022/9/1939第39页,共60页,编辑于2022年,星期一 2.7运算符和表达式四、关系运算运算符和表达式1、关系运算符及其优先次序、关系运算符及其优先次序在C语言中有以下几种关系运算符:(1)小于(2)大于(4)=大于等于(5)=等于(6)!=不等于关系运算符均为左结合,优先级低于算术运算符,高于赋值运算符。在6个关系运算符中,、=的优先级相同,高于=和
23、!=。=和!=的优先级相同。2022/9/1940第40页,共60页,编辑于2022年,星期一 2、关系表达式关系表达式的一般形式为:表达式关系运算符表达式例如:a+bc-dx3/2a+1c-i-5*j=k+12.7运算符和表达式2022/9/1941第41页,共60页,编辑于2022年,星期一2.7运算符和表达式五、逻辑运算符和表达式1、逻辑运算符C语言中提供了3种逻辑运算符:(1)&与运算(2)|或运算(3)!非运算2022/9/1942第42页,共60页,编辑于2022年,星期一优先级:结合性:与运算符“&”和或运算符“|”均为双目运算符,具有左结合性。非运算符“!”为单目运算符,具有右
24、结合性。2.7运算符和表达式2022/9/1943第43页,共60页,编辑于2022年,星期一2、逻辑运算的值逻辑运算的值也为“真”和“假”两种,用“1”和“0”表示。其求值规则如下:(1)与运算&:参与运算的两个量都为真时,结果才为真,否则为假。(2)或运算|:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。(3)非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。2.7运算符和表达式2022/9/1944第44页,共60页,编辑于2022年,星期一3、逻辑表达式逻辑表达式的一般形式为:表达式逻辑运算符表达式其中的表达式又可以是逻辑表达式,从而组成了嵌套的
25、情形。例如:(a&b)&c2.7运算符和表达式2022/9/1945第45页,共60页,编辑于2022年,星期一例:逻辑运算main()char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;printf(%d,%dn,!x*!y,!x);printf(%d,%dn,x|i&j-3,ij&xb?a:cd?c:d等价于:ab?a:(cd?c:d)2.7运算符和表达式2022/9/1948第48页,共60页,编辑于2022年,星期一例:条件运算main()int a,b,max;printf(n input two numbers:);scanf(%d%d,&a,
26、&b);printf(max=%d,ab?a:b);程序运行结果:input two numbers:8 5max=82.7运算符和表达式2022/9/1949第49页,共60页,编辑于2022年,星期一2.7运算符和表达式七、逗号运算符和逗号表达式格式:表达式1,表达式2,表达式n作用:用于连接表达式优先级和结合性:级别最低,左结合如:a=3,3+a,a+计算过程:求解表达式1再求解表达式2,表达式I整个逗号表达式的值是表达式i的值。2022/9/1950第50页,共60页,编辑于2022年,星期一例:逗号运算main()int m=5,n=6,w=8,x,y;y=(x=m+n),(n+w)
27、;printf(y=%d,x=%dn,y,x);程序运行结果:y=14,x=112.7运算符和表达式2022/9/1951第51页,共60页,编辑于2022年,星期一语言提供了6种位运算符:&按位与|按位或 按位异或 取反 右移2.8位运算位运算2022/9/1952第52页,共60页,编辑于2022年,星期一一、按位与运算按位与运算符&是双目运算符,其功能是参与运算的两数各对应的二进制位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。例如,9&5可写算式如下:00001001(9的二进制补码)&00000101(5的二进制补码)00000001(1的二
28、进制补码)可见,9&5=1。2.8位运算位运算2022/9/1953第53页,共60页,编辑于2022年,星期一二、按位或运算按位或运算符“|”是双目运算符,其功能是参与运算的两数各对应的二进制位相或。只要对应的两个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。例如,9|5可写算式如下:00001001|0000010100001101(十进制为13)可见,9|5=13。2.8位运算位运算2022/9/1954第54页,共60页,编辑于2022年,星期一三、按位异或运算按位异或运算符“”是双目运算符,其功能是参与运算的两数各对应的二进制位相异或。当对应的两个二进位相异时,结果
29、为1。参与运算数仍以补码出现,如95可写成算式如下:000010010000010100001100(十进制为12)2.8位运算位运算2022/9/1955第55页,共60页,编辑于2022年,星期一四、求反运算求反运算符“”是单目运算符,具有右结合性。其功能是对参与运算的数各个二进制位按位求反。例如,9(0000000000001001)的运算为1111111111110110。2.8位运算位运算2022/9/1956第56页,共60页,编辑于2022年,星期一五、左移运算左移运算符“”是双目运算符,其功能把“”左边的运算数的各个二进制位全部左移若干位,由“”右边的数指定移动的位数,高位丢弃
30、,低位补0。例如:a”是双目运算符,其功能是把“”左边的运算数的各个二进制位全部右移若干位,“”右边的数指定移动的位数。例如:a2;表示把a=15(000001111)右移为00000011(十进制3)。2.8位运算位运算2022/9/1958第58页,共60页,编辑于2022年,星期一七、位域(位段)1、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:struct位域结构名位域列表;其中位域列表的形式为:类型说明符位域名:位域长度2.8位运算位运算2022/9/1959第59页,共60页,编辑于2022年,星期一2、位域的使用位域的使用和结构成员的使用相同,其一般形式为:位域变量名位域名位域允许用各种格式输出。2.8位运算位运算2022/9/1960第60页,共60页,编辑于2022年,星期一