《【教学课件】第三章数据类型运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第三章数据类型运算符与表达式.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章数据类型运算符与表达式信息管理系3.0、C语言中标识符的概念在程序中,由程序设计者使用的名字成为标识符。标识符用以标志区分不同的东西。它可以用作函数的名字、变量、常量的名字,以及文件的名字等等。一、C语言中的标识符分类用户标识符关键字(语句标识及类型标识)(P375附录II)例如:real,main,char,int,float,double,long,if,for,switch,default,break等。预定义标识符(函数名字等)例如:define,include,printf,scanf,sin等。二、用户自定义标识符的命名规则1、标识符只能由字母、数字和下划线(_)组成。2、开
2、头字符不能是数字;3、不能与关键字重名;(关键字是C语言中规定好的,具有特定意义的一串字符,关键字都是小写字母的)4、最好不要与预定义的标识符重名;5、区分大小写。即A与a是不同的名字,一般要求都用小写字母。6、一般不要超过8个字符。例如:判断下面哪些是C语言中合法的标识符的是:aa int INT a2_ 2a a-b a_b b_2 2b abc a#b ab?A_a 3.1、C程序中的数据类型C语言的数据类型基本类型构造类型指针类型空类型(void)短整型(short)整型(int)长整型(long)整型字符型实型(浮点型)枚举类型单精度(float)双精度(double)数组结构体(s
3、truct)共用体(union)文件(file)一、C语言中的基本数据类型类型标识符占用空间(字节)表示范围整型有符号标准int2(-3276832767)-215215-1有符号短short2(-3276832767)-215215-1有符号长long4(-21474836482147483647)-231231-1无符号标准unsignedint2(065535)0216-1无符号短unsignedshort2(065535)0216-1无符号长unsignedlong4(04294967295)0232-1字符型char1实型单精度float4双精度double8二、常量常量:在程序运行
4、中,其值不能被改变的量称为常量常量有五种类型:整型常量、实型常量、字符常量、字符串常量和符号常量1、整型常量:用十进制表示:如123,123u,123L,123l,-123L。用八进制表示(以0开头):如012,013L,-013u等。用十六进制表示(以0 x)开头:如0 x12,0 xAB,-0 xAL,0 xBu等。注:其中L(或l)表示该数为长整型,U(或u)表示该数为无符号的整数二、常量2、实型常量实型常量有两种表示形式:小数形式:45.3,0.2,-623.00,.2,2.,2指数形式:45.3e0,45.3e-2,0.45E+2,3.2e3,.5e32注意:v小数部分为0的实型常量
5、,可以写为453.0,也可以依照日常习惯写成453v数字之间不能出现空格;v用指数形式时,e(或E)的左右两端必须有数,且指数部分必须为整数。二、常量判断下列那些是合法的C常数:-0.32-0 x2al0 x7g012-018123u0 x7L0 x7u003e33.e-57ff9e+2.3.3e-32340 x2A0 xAU二、常量3、字符常量C语言中规定字符常数在书写的时候要放到中间。如,a,#,1等。字符在计算机中存放的是他们的ASCII。但在中不能放和。即是不对的。(见P374附录I)除了形式上的字符常量外,C语言还有特殊的字符常量,如转义字符常量。字符形式功能字符形式功能n换行f走纸
6、换页t横向跳格字符v竖向跳格字符b退格ddd13位8进制代表的字符r回车xhh12位16进制代表的字符也就是说符号在C程序中可用三种方法表示:如A(ASCII码为65)A 101 x41如:已知的ASCII码为001,那么符号在C程序中可写为001。二、常量4、字符串常量字符串常量是用双引号括起来的一个或一串字符。如:“China”“Howareyou.”“”等字符串在存储的时候会自动在末尾加上0,表示结束。字符串中字符的个数成为字符串的长度。如“china”在内存存储如下:思考:“A”与A有什么不同?下列那些是合法的C常数:n 261 28 x21 “ABC29 BG”ab 0 x2.5b
7、7ff 8L?5、符号常量符号常量是由宏定义“#define”来定义的常量,在C语言中可用标识符代表一个常量。如:#definePI3.1415901100011011010000110100101101110011000010三、变量在程序的运行过程中,其值可以改变的量称为变量。变量要有变量名,在内存中占据一定的存储单元,存储单元里存放的是变量的值。不同类型的变量所占存储单元大小不同,变量在使用前必须先定义。1、变量的定义变量的定义格式:数据类型变量名;如:inta,b;/*定义两个整型变量这两个变量可以分别存放一个int型的数据*/floatf;/*定义一个实型变量f,可以存放一个单精度类
8、型的实数*/charc;/*定义一个字符类型的变量c,可以存放一个字符*/注:变量的名字必须满足用户标识符的命名规则。若同时定义多个同类型的变量,则中间用逗号(,)隔开。三、变量2、变量的赋值变量被定义以后,就可以存放相应类型的数据了。给变量一个值,我们称之为给变量赋值,用操作符=来实现。我们还可以在定义变量的同时给变量一个值,称为变量初始化。如:int i=3,b=5,c;char c=a;float f=3.1415;c=b;在给变量赋值的时候,我们要把一个相同类型的常数赋给一个变量。三、变量3、变量值的存储变量被定义以后,系统在运行时会为该变量分配一个相应大小的存储空间,称为存储单元。给
9、变量赋值后,该变量对应的存储单元中会存放该值,这个值称为变量的值。那么变量的值在变量的存储单元中是如何表示的呢?(1)整数是以补码的形式存放的。(正数的补码是其本身,负数的补码为原码按位取反加1)如:inta=2,b;b=-2;00000000 000000101111111111111110ab2的原码表示:0000000000000010-2的补码表示:1111111111111101+1=1111111111111110三、变量(2)、特殊情况:最大、最小和0的存储最大值:2151(32767)最小值:-215(-32768)0的存储如下:011111111111111116159811
10、000000000000000161598100000000000000001615981三、变量(3)、超出范围的情况(溢出):如:、阅读下面的程序段,程序段的输出结果是()int i=65536;printf(“%d”,i);A)65536 B)0 C)有语法错误,无输出结果 D)1 说明:65536216、若有下面的程序段,则输出结果为()int a=32768;printf(“%d”,a);说明:32768215、若有下面的程序段,则输出结果为()int a=65549;printf(“%d”,a);B (13)int b=131069;printf(“%d”,a);B (-3)3.8
11、运算符与表达式(一)、算术运算符和算术表达式说明:1、优先级:5+2*32、结合性:5*2%3用算术运算符和小括号将数值连接起来的式子叫算术表达式。如:1+2*(3-1)%2操作符作用运算对象运算结果优先级结合性*乘整型或实型整型或实型1自左向右/除%求余整型整型+加整型或实型整型或实型2-减(一)、算术运算符和算术表达式写出下列算式的C语言表达式:(求平方根的函数为sqrt)如:以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子 的C语言表达式的是()A)x/y*z B)x*(1/(y*z)C)x/y*1/z D)x/y/zb/(a+b/a)(x-y*z)/(a+b+c
12、)sqrt(a+b)*(b+c)*(c+a)(一)算术运算符和算术表达式表达式的值:表达式运算得到的最终结果为表达式的值。也就是整个式子代表的值如a=5,b=2;a+b 7(二)赋值运算符和赋值表达式赋值运算符:=格式:变量=表达式 如:int a,b;下面都是正确的赋值表达式 a=5;b=3;a=2+3;a=a+2;b=a*a;赋值运算为“从右向左”结合的。如x=y=z=3 它等价于:x=(y=(z=3)(三)自反运算赋值运算中有如下的特殊形式:变量在原先的基础上做一些运算后的结果,作为新的变量的值。这些表达式又可写为后面的形式。这些运算符、*、/=、%=叫做自反运算符。分别称为自反加、自反
13、减、自反乘、自反除和自反取余(自反取模)。这样的运算称为自反运算。a=a+b;a+=b;a=a-b;a-=b;a=a*b;a*=b;a=a/b;a/=b;a=a%b;a%=b;由于该运算可看作是一种特殊的赋值运算,故其结合性仍然是“自右向左”的。如:a=b*=a+2 等价于b=b*(a+2);a=b;如:设k=2,i=2,m=(k+=i*=k)则m=i=(6,4)(四)自加、自减运算自加、自减运算符的作用是使变量的值增1或减1。运算符为:、。如:+a,a+,-a,a-自加与自减运算是一种特殊的赋值运算。、在前表示变量的值先加1,再作为整个表达式的值。、在后表示先将变量的值作为表达式的值,然后变
14、量的值再加1。如:设a=5;b=a+;则b=5,a=6;b=+a;则a=6,b=6;b=a-;则b=5,a=4;b=-a;则a=4,b=4;自加、自减运算也是赋值运算,故运算的对象只能是变量,不能是常数或表达式。即:5 (x+y)+都是错误的。复习巩固练习:复习巩固练习:1、已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则字符常量101指的是()A)字符A B)字符a C)字符e D)非法的常量2、以下选项中合法的实型常数是()A)5E2.0 B)E-3 C).2E0 D)1.3E3、在C语言中,合法的长整型常数是()A)0L B)4962710 C)324562&D)1
15、6D4、以下选项中,不属于C语言的数据类型的是()A)signed short int B)unsigned long int C)unsigned int D)long short5、以下选项中,与k=n+完全等价的表达式是()A)k=n,n=n+1 B)n=n+1,k=n C)k=+n D)k+=n+16、以下程序段的输出结果是()int x=10,y=10;printf(“%d%d”,x-,+y)7、设int a=2,则执行完语句a+=a-=a*a后,a的值为()1011-4复习巩固练习:复习巩固练习:8、C语言中int型变量所占字节数是()9、与数学式子 对应的C语言表达式是()A)3
16、*xn/(2*x-1)B)3*x*n/(2*x-1)C)3*pow(x,n)(1/(2*x-1)D)3*pow(n,x)/(2*x-1)10、C语言提供的合法的数据类型标识符是()A)Double B)short C)interger D)Char11、C语言中运算对象必须是整型的运算符是()A)B)/C)D)12、下面合法的C语言字符常量是()A)t B)”a”C)65 D)A13、若有int a=5;则表达式a+的值是()14、以下程序的输出结果是()main()int a=0;a+=(a=8);printf(“%d”,a);2216复习巩固练习:复习巩固练习:15、以下程序的输出结果是(
17、)main()int x=023;printf(“%d”,-x);16、下列选项中,不能用作标识符的是()A)_1234_ B)_1_2 C)int_2_ D)2_int_17、有以下程序main()char a=a,b;printf(“%c,”,+a);printf(“%cn”,b=a+);程序运行后的输出结果是()A)b,b B)b,c C)a,b D)a,c18、以下程序运行后的输出结果是()main()int a,b,c;a=25;b=025;c=0 x25;printf(“%d%d%dn”,a,b,c);18252137五、关于算术运算与赋值注意事项1、*、/运算,运算对象是整型、实
18、型均可。(、*、/=同)整型(、*、/)整型整型 如:3+25 9/51实型(、*、/)实型实型 如:3.02.05.0 9.0/5.01.8若两个操作数一个为整型、一个为实型,则结果为实型。如:32.05.0 9.0/51.82、关于运算对象只能为整型数据。同样的运算对象也只能为整型数据。如:3.52是不对的。五、关于算术运算与赋值注意事项3、关于字符数据与整型数据由于字符数据在运行时是以ASCII码的形式存储的,故字符数据与整型数据之间存在天然的联系。可以将整型数据赋值给一个字符变量。则这个字符变量的值为该整型数据对应的字符。如:char ch;ch=65;printf(“%c”,ch);
19、则会输出A可以将一个字符赋值给一个整型变量,整型变量的值为该字符的ASCII码值。如:int a=A;printf(“%d”,a);则输出65。若将一个字符变量按整型方式输出,则输出其ASCII码。如:char ch=A;printf(“%d”,ch);则输出65。若字符型数据与整型数据产生混合运算,则字符型数据将自动转换成对应的ASCII码值后,再参与运算。如:int i=5,b;char ch=A;则i+ch的结果为70。六、数据类型转换1、算术运算符转换:C语言中,整型、实型、字符型数据之间可以混合运算。再进行运算时,不同类型的数据要先转换成同一类型的数据,然后再进行运算。转换规则如下:
20、doublefloatlongunsignedintchar,short低低高高六、数据类型转换当一个算术运算符两端的运算量不一致时,按“向高看齐”的原则,对较低的类型进行提升。如:charch;inti,result;floatf;doubled;result=ch/i+f*d(f+i)doubledoubledoubledoubleintdoubleintdoubledoubleintdouble六、数据类型转换2、赋值转换C语言允许通过赋值使赋值号右边表达式值的类型转换为其左边变量的类型。如上图1中,右边表达式的值为double类型,但经过赋值运算却转换为int类型。即result中的最
21、终结果为一个整数。即:赋值转换具有强制性,赋值号右边的表达式要强制转换成左边变量的形式。又如:int a;a=5.8;printf(“%d”,a);则输出5。六、数据类型转换3、不同类型数据的显式转换在C语言中,有一种“强制类型转换运算符”,它能将某以类型的变量强制转换为另一种类型,它的一般形式为:(类型标识符)表达式如:printf(“%c”,(char)(67-1.2);会输出A。如:float x=4.5;int i;i=(int)x;printf(“%d%f“,i,x);则会输出4 4.5000 即:x的值仍为4.5,i的值为x值的整数部分。又如:(int)(x+y)不能写为 int(
22、x+y)六、数据类型转换4、输出转换在输出语句中,也会发生隐式转换。如:float f=5.8;printf(“%d”,f);则输出5。如果是int a=5.8;printf(“%f”,a);在编译时不用出错,但不会输出结果。再如:int i=-1;printf(“%u”,i);则会输出()。1的原码:000000000000001,补码为:111 1111 1111 1111 存储形式为16个1。故当作为无符号数输出时,应输出65535(216-1)。巩固练习1、变量a是int 类型,并执行了语句:a=A+1.6;则正确的叙述是()A)a的值是字符C B)不允许字符型和浮点型相加 C)a的值
23、是浮点型 D)a的值是字符A的ASCII码加上1。2、设a、b均为double型变量,且a=5.5;b=2.5,则表达式(int)a+b/b的值是()A)6.500000 B)6 C)5.500000 D)6.0000003、已知int m=3,n=4,x;则x=-m+;x=x+8/+m;后,x=(),m()。-25七、关系运算符和关系表达式七、关系运算符和关系表达式关系运算符:关系运算符作用优先级运算对象运算结果结合性大于1整型实型或字符型关系成立则为真,结果为1关系不成立则为假,结果为0自左向右=大于等于3-1 等价于:a=(1+2)(3-1)关系成立,a的值为1。又如:2=3 表达式值为
24、0,10!9 表达式值为1,2=3 表达式值为0。又如:23=5 等价于 2(3=5)表达式值为0。又如:z=3+1=2+31=5+6*2 先做算术运算(先乘除取余,后加减,相同级别的从左向右做):z=3+1=2+3-1=5+12 z=4=4、=、算术运算符 关系运算符 逻辑与(&)逻辑非(|)赋值运算符。4 4、注注意意:若&的第一个操作数为0,则第二个操作数不再计算;若|的第一个操作符为非0,则第二个操作数不再计算。如例3。如:5&2 3&0 0&0 1&5 1&0 0&.2 5|2 3|0 0|0 1|5 1|0 0|.2!5 !0 !1 !.!.5八、逻辑运算和逻辑表达式八、逻辑运算和
25、逻辑表达式例1:已有定义:int x=3,y=4,z=5;则表达式!(x+y)+z-1&y+z/2 的值是()A)6 B)0 C)2 D)1例2、语句printf(“%d”,(a=4)&(b=-3)的输出结果是()【注】例3、设x,y,z 均为int型变量,则执行语句x=y=3;t=+x|+y 后,y的值为()【注】例4、10 x100 或x10&x=100)|(xb)&(n=cd)运算后,n的值为()A)0 B)1 C)2 D)31221xy(x*x+y*y=1&x*x+y*y=4)=11八、逻辑运算和逻辑表达式八、逻辑运算和逻辑表达式练3、若变量c为char类型,能判断出c为小写字母的表达
26、式是()A)a=c=z B)a=c=a)|(c=a)&(cbc);printf(“%d”,d);练5、设y是int 型变量,写出判断y 为奇数的关系表达式()。练6、若已知a=10,b=20,则表达式!ab的值是()练7、若x和y代表整型数,写出表示数学关系|x-y|0&(x-y)2|(x-y)-2九、逗号运算符和逗号表达式C语言提供一种特殊的运算符逗号运算符。用它将两个表达式连接起来,称为逗号表达式。逗号运算符又称为顺序求值运算符。逗号表达式的一般形式为:表达式1,表达式21、逗号表达式的求解过程为:先求解表达式1,再求解表达式2。结合性自左向右。2、整个逗号表达式的值是表达式2的值。3、逗
27、号运算符的优先级是所有运算符中最低的。如:a=(3+5,6+8);则a的值为14。又如:a=3*5,a*4 先求a=3*5,再求a*4,故整个逗号表达式的值为:60。4、逗号表达式可扩展为:表达式1,表达式2,表达式3,表达式n它的运算规则为依次求解表达式1到表达式n的值,整个表达式的值为表达式n的值。如(a=3*5,a+10),a/5,a*2的值为30九、逗号运算符和逗号表达式例1、假定x和y为double类型,则表达式x=2,y=x+3/2的值是()A)3.500000 B)3 C)2.000000 D)3.000000例2、若已定义x,y为int 类型,则表达式:x=2,y=x+3/2.
28、0的值是()B十、条件运算符和条件表达式又叫问号运算符与问号表达式条件运算符有三个操作对象,称三目(元)运算符,条件表达式的一般形式为:表达式1?表达式2:表达式3说明:1、条件运算符的求解顺序是:2、条件运算符的值比关系运算和算术运算都低,但高于赋值运算符。如:max=ab?a:b;就等价于:max=(ab?a:b);3、条件运算符的结合方向是“自右向左”的。如:ab?a:cd?c:d 等价于:ab?a:(cd?c:d)4、表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。如:a b?(a=100):(b=100);a b?printf(“%d”,a):printf(“
29、%d”,b);若值为非0数,则整个表达式的值为表达式2的值若值为0,则整个表达式的值为表达式3的值求表达式1的值十、条件运算符和条件表达式例1、若x=1,y=2,z=3,计算x y?x:(y z?y :z)的值。先计算yz=0,故括号中的部分值为3;剩余部分为:x y?x:3,显然值应为3。例2、x,y,z值为上题所给,计算x=y?(x z?x:z):y 2运算符与表达式总结运算符运算符作用作用操作数个数操作数个数优先级优先级结合性结合性()()括号括号1自内而外自内而外!、!、+、-、+、-、(类型)(类型)逻辑非、正、负、自加、逻辑非、正、负、自加、自减、强制类型转换自减、强制类型转换1(
30、单目运算符)(单目运算符)2自右向左自右向左*、/、%算术乘、除、取余算术乘、除、取余2(双目运算符)(双目运算符)3自左向右自左向右+、-、算术加、减算术加、减4、=、=关系运算关系运算5=、!=关系运算关系运算6&逻辑与逻辑与7|逻辑或逻辑或8?:条件运算符条件运算符3(三目运算符)(三目运算符)9自右向左自右向左=、+=、-=、*=、/=、%=赋值运算符赋值运算符2(双目运算符)(双目运算符)10,逗号运算符逗号运算符多目多目11自左向右自左向右运算符与表达式总结说明:1、不同级别的运算符,其运算顺序是由优先级决定的。2、同一优先级的运算符,其运算顺序是由结合方向决定的。3、不同的运算符要求有不同的运算对象个数。4、各类运算符的优先级可大致归纳为:括号 单目运算符 算术运算符(先乘除,后加减)关系运算符 逻辑运算符(不包括!)条件运算符 赋值运算符 逗号运算符5、要求在书写时,可适当使用(),以免产生不必要的麻烦。