《《高级语言程序设计教学课件》第5章.ppt》由会员分享,可在线阅读,更多相关《《高级语言程序设计教学课件》第5章.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5章章 数据类型和表达式数据类型和表达式2 2C的数据类型的数据类型C数数据据类类型型指针类型指针类型空类型空类型 void基本类型基本类型字符类型字符类型 char数值类型数值类型整整 型型短整型短整型 short长整型长整型 long整型整型 int浮点型浮点型单精度型单精度型float双精度型双精度型double构造类型构造类型枚举类型枚举类型 enum数组数组结构体结构体 struct共用体共用体 union3 35.1 数据的存储格式数据的存储格式n数据在计算机内存中以数据在计算机内存中以【】形式存储形式存储A、二进制、二进制B、十六进制、十六进制C、十进制、十进制D、八进制、八
2、进制n整型数据在内存中以整型数据在内存中以【】存储存储A、原码、原码B、反码、反码C、补码、补码D、ASCII码码 4 4符号常量符号常量n符号常量定义:用标识符代表一个常量符号常量定义:用标识符代表一个常量n使用符号常量的优点使用符号常量的优点含义清楚含义清楚一改全改一改全改|注意注意注意注意:符号常量名通常用大写,变量名用小写:符号常量名通常用大写,变量名用小写5 5#include#include#define PI 5.1415927#define PI 5.1415927 main()main()float r1,r2,len1,len2,s1,s2;float r1,r2,len1
3、,len2,s1,s2;r1=10;r1=10;r2=20;r2=20;len1=2*len1=2*PIPI*r1;*r1;s1=s1=PIPI*r1*r1;*r1*r1;printf(len1=%f s1=%fn,len1,s1);printf(len1=%f s1=%fn,len1,s1);len2=2*len2=2*PIPI*r2;*r2;s2=s2=PIPI*r2*r2;*r2*r2;printf(len2=%f s2=%fn,len2,s2);printf(len2=%f s2=%fn,len2,s2);符号常量定义符号常量定义符号常量定义符号常量定义符号常量使用符号常量使用符号常量
4、使用符号常量使用6 65.2基本数据类型基本数据类型n整型整型n实型实型n字符型字符型7 7整型整型n基本类型:基本类型:int类型类型比特数比特数取值范围取值范围signed int32-231 (231-1)unsigned int320 (232-1)signed short int16-215 (215-1)unsigned short int160 (216-1)signed long int32-231 (231-1)unsinged long int320 (232-1)8 81、整型常量表示方式、整型常量表示方式十进制十进制如:如:12,-123,0八进制(以八进制(以0 0开
5、头)开头)如:如:012 表示表示10十六进制(以十六进制(以0 x0 x开头)开头)如:如:0 x12 表示表示18 长整型需在数值后面加上一个字母L或l:123L、0123L。无符号常量后面加上字母U或u:123U、0 x123U。9 95.2.2 实型数据实型数据n1、实型数据的存储、实型数据的存储实型数据一般占实型数据一般占4个字节(个字节(float型)型)举例:举例:(3.14159)10=0.110 0100 1000 0111 1110 0111 110*10100000001001100100 10000111 11100111阶符阶符 阶码阶码数符数符尾尾数数1010n2、
6、实型常量表示方式、实型常量表示方式十进制小数形式十进制小数形式.123 123.456 -123.0.0指数形式指数形式123.4e4 -123E3 .123e-101111n3、实型变量、实型变量说明:说明:ANSI C并没有具体规定每种类型的长并没有具体规定每种类型的长度、精度和数值范围。下面是常用的度、精度和数值范围。下面是常用的C编译系编译系统的情况统的情况类型类型类型类型字节数字节数字节数字节数有效数字有效数字有效数字有效数字最小取值范围最小取值范围最小取值范围最小取值范围float46767-3.4*10-38 3.4*1038double815161516-1.7*10-308
7、1.7*103081212实型数据的舍入误差实型数据的舍入误差从上面的表中可以看出,实型数据的有效数据是有从上面的表中可以看出,实型数据的有效数据是有限的,有效数据以外的数字将被舍去。因此会产生限的,有效数据以外的数字将被舍去。因此会产生误差误差1313n4、实型常量的类型、实型常量的类型系统默认为系统默认为double类型类型若希望指定为若希望指定为float类型在后面加类型在后面加f或或F2.3f -0.123F 2e-3f14145.2.3 字符型数据字符型数据n1、字符数据的存储、字符数据的存储一个字节存储一个字符数据一个字节存储一个字符数据字节中存储的是字符的字节中存储的是字符的AS
8、CII码码如:字符如:字符A0 1 0 0 0 0 0 1A651515n2、字符常量、字符常量以单撇号括起来的一个字符。如以单撇号括起来的一个字符。如a、C、#以一个以一个开头的字符序列。开头的字符序列。字符形式字符形式含含 义义ASCIIASCII码码 n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头10 t水平制表(跳到下一个水平制表(跳到下一个tab位置)位置)9 b退格,将当前位置移到前一列退格,将当前位置移到前一列8 r回车,将当前位置移到本行开头回车,将当前位置移到本行开头13 f换页,将当前位置移到下一页开头换页,将当前位置移到下一页开头12字符形式字符形式含含
9、义义ASCIIASCII码码 反斜杠字符反斜杠字符92 单撇号字符单撇号字符39 双撇号字符双撇号字符34 ddd1到到3位位8进制数所代表的字符进制数所代表的字符 xhh1到到2位位16进制数所代表的字符进制数所代表的字符1616 问题:已知换行的问题:已知换行的ASCII码值为码值为10,则下列正确,则下列正确表示换行符的方法是表示换行符的方法是:(:(ch是字符型变量是字符型变量)(A)ch=n;(B)ch=10;(C)ch=12;(D)ch=x10;(E)ch=xa;(F)ch=10;(G)ch=10;1717n字符变量字符变量一个字符变量只能存放一个字符一个字符变量只能存放一个字符字
10、符变量的定义形式,如:字符变量的定义形式,如:char c1,c2;字符变量的使用方式,如:字符变量的使用方式,如:c1=a;c2=b;char c1,c2;c1=a;c2=b;0 1 1 0 0 0 0 1ch1970 1 1 0 0 0 1 0ch2981818问题:若有说明语句:问题:若有说明语句:char c72;则变量;则变量c(A)包含包含1个字符个字符(B)包含包含2个字符个字符(C)包含包含3个字符个字符(D)说明不合法,说明不合法,c的值不确定的值不确定以以单撇号单撇号单撇号单撇号括起来的一个字母括起来的一个字母以以一个一个一个一个开头的字符序列开头的字符序列19195.3运
11、算符及表达式运算符及表达式nC运算符简介运算符简介算术运算符算术运算符+-*/%+-+-*/%+-关系运算符关系运算符 =!=!=逻辑运算符逻辑运算符!&|&|位运算符位运算符|&|&赋值运算符赋值运算符=及其扩展(及其扩展(+=-=+=-=等)等)逗号运算符逗号运算符,强制类型转换强制类型转换(类型)类型)条件运算符条件运算符?:?:分量运算符分量运算符.-.-指针运算符指针运算符*&*&下标运算符下标运算符求字节数求字节数sizeofsizeof其它其它()-()-2020算术运算符算术运算符n基本的算术运算符基本的算术运算符+-*/%+-优先级:优先级:-(-(负负负负)+-+-*/%*
12、/%+-+-(减)(减)(减)(减)结合方向结合方向+-*/%+-*/%从左向右从左向右从左向右从左向右-(-(负负负负)从右向左从右向左从右向左从右向左n功能功能n n运算量运算量运算量运算量n n优先级别优先级别优先级别优先级别n n结合方向结合方向结合方向结合方向n结果的类型结果的类型2121说明:说明:%只能进行只能进行整数整数整数整数的取模运算的取模运算,且且余数与被除数余数与被除数余数与被除数余数与被除数的符号相同的符号相同的符号相同的符号相同整数的算术运算结果仍为整数整数的算术运算结果仍为整数如果算术运算中有如果算术运算中有一个数是实数,则结果为一个数是实数,则结果为一个数是实数
13、,则结果为一个数是实数,则结果为doubledouble型型型型-5%2 =5%-2 =1%10 =5%1 =5.5%2=例例例例 5/2=-5/2.0=例例例例 2 -2.5 -1 1 1 0 ()2222 自增、自减运算符自增、自减运算符 +-n作用作用使使变量值变量值变量值变量值加加1或减或减1n种类种类前置前置 +i,-i先执行先执行先执行先执行i=i+1或或i=i-1,再使用再使用再使用再使用i值值后置后置 i+,i-先使用先使用先使用先使用i值值,再执行再执行再执行再执行i=i+1或或i=i-1 5+(a+b)+2323说明:说明:优先级:优先级:-+-*/%+-+-结合方向:结合
14、方向:自右向左自右向左自右向左自右向左例例 i=3;printf(“%d”,-i+);例例 j=2;k=3;printf(“%d”,j+k);-(i+)printf(“%d”,-i);i=i+1;结果:结果:-3,i=4(j+)+kprintf(“%d”,j+k);j=j+1;/结果结果 5,j=32424【例例例例3-23-2】逻辑运算举例逻辑运算举例逻辑运算举例逻辑运算举例#include#include voidvoid main(main(voidvoid)intint c,x=0,y=-5;c,x=0,y=-5;printf(%d,%dn,!x*y,x&y);printf(%d,%d
15、n,!x*y,x&y);x=1;x=1;y=1;y=1;c=x+|y+;c=x+|y+;printf(%d,%d,%dn,x,y,c);printf(%d,%d,%dn,x,y,c);x=0;x=0;y=0;y=0;c=x+&y+;c=x+&y+;printf(%d,%d,%dn,x,y,c);printf(%d,%d,%dn,x,y,c);-5,02,1,11,0,0c=x|yc=x|yx=x+1x=x+1+x+x:先执行:先执行:先执行:先执行x=x+1x=x+1,再将,再将,再将,再将x x的值作的值作的值作的值作 为表达式为表达式为表达式为表达式+x+x的值。的值。的值。的值。x+x+
16、:先将:先将:先将:先将x x的值作为表达式的值作为表达式的值作为表达式的值作为表达式x+x+的的的的 值,再执行值,再执行值,再执行值,再执行x=x+1x=x+1。c=x&yc=x&yx=x+1x=x+12525赋值运算符赋值运算符n简单赋值运算符简单赋值运算符符号:符号:=格式:格式:变量标识符变量标识符变量标识符变量标识符=表达式表达式作用:将一个数据(常量或表达式)赋给一个作用:将一个数据(常量或表达式)赋给一个变量变量例例例例a=3;b=sqrt(a);c=b+2;2626n复合赋值运算符复合赋值运算符种类种类+=-=*=/=%=+=-=*=/=%=含义含义var var op=op
17、=exp exp var var=var op (=var op (expexp)a+=3 x*=y+8x%=3 a=a+3 x=x*(y+8)x=x%32727n说明说明:优先级优先级:优先级很低优先级很低优先级很低优先级很低结合方向:结合方向:自右向左自右向左自右向左自右向左左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值转换赋值转换赋值转换赋值转换规则规则:使赋值号右边表达式值使赋值号右边表达式值自动自动自动自动转换转换成其左边变量的类型成其左边变量的类型赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套3=x-2*y;a+b=3;例例例例 a
18、=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)/表达式值表达式值5;a,b,c值为值为5/表表达达式值式值5;b=5,a=5/表达式值表达式值11;c=6,a=11/表达式值表达式值10;a=10,b=4,c=6/表达式值表达式值5;a=5,b=10,c=22828逗号运算符逗号运算符n逗号运算符逗号运算符形式:形式:表达式表达式表达式表达式1 1,表达式表达式表达式表达式2 2,表达式表达式表达式表达式n n优先级优先级:最低最低结合性结合性:从左向右从左向右逗号表达式逗号表达式的值:等于表达式的值:等于表达式n的值的值main()mai
19、n()int x,y=7;int x,y=7;float z=4.0;float z=4.0;x=(y=y+6,y/z);x=(y=y+6,y/z);printf(x=%d,y=%d,z=%f,x,y,z);printf(x=%d,y=%d,z=%f,x,y,z);x=3,y=13,z=4.000000 2929位运算符位运算符运算符运算符运算符运算符功能功能功能功能按位取反按位取反右移右移2 00000000 000001015i2 00000000 0101010084i&j 00000000 0001000016ij 00000000 0010110145i|j 00000000 001
20、111016130305.4 类型转换类型转换n混合运算的规则混合运算的规则不同类型数据混合运算,先转化为同一类型不同类型数据混合运算,先转化为同一类型转化规则转化规则float型一律转化为型一律转化为double型型char,short型转化为型转化为int型型精度低类型转化为精度高类型精度低类型转化为精度高类型floatchar,shortdoublelongunsignedint3131int a=3;float f=5.14;char c=a;10+c+a*f10+c+a*f的结果是?的结果是?的结果是?的结果是?10+c c转化为转化为int型型,c的值为的值为97,则结果为,则结果
21、为107a*f a和和f转化都为转化都为double型型,结果为结果为9.42000010+c+a*f 将将10+c的结果转化为的结果转化为double型与型与a*f的结果相加的结果相加结果为结果为116.4200003232强制类型转换运算符强制类型转换运算符n作用:将一个表达式的值转换成所需类型作用:将一个表达式的值转换成所需类型n一般形式:一般形式:(类型名类型名)(表达式表达式)n说明:说明:表达式必须用括号括起来表达式必须用括号括起来在进行强制转换时,得到一个所需类型的中间在进行强制转换时,得到一个所需类型的中间变量,原来变量的类型并没有发生变化变量,原来变量的类型并没有发生变化(double)a(int)(x+y)(float)(5%3)(int)x+y (int)(x+y)main()main()float x;int i;float x;int i;x=5.6;x=5.6;i=(int)x;i=(int)x;printf(x=%f,i=%d,x,i);printf(x=%f,i=%d,x,i);结果:结果:结果:结果:x=5.600000,i=5x=5.600000,i=5