【教学课件】第二章数据类型、运算符和表达式.ppt
1,第二章 数据类型、运算符和表达式,2,2.1 C语言数据类型,2.1.1 C语言数据类型 整型 字符型 单精度型 算术类型 实型(浮点型)基本类型 枚举类型 双精度型 指针类型数据类型 数组 构造类型 结构体类型 共用体类型,3,2.2 常量与变量,常量1.定义:在程序执行期间,其值不可改变的量称为常量2.类型:数值常量 例如:10,3,2.68等符号常量 即用一个符号代表一个常量 例如:#define PI 3.1415926 main()float r,l,s;r=2;l=2*PI*r;s=PI*r*r;printf(“l=%d,s=%d”,l,s);,4,说明:,符号常量必须先定义后才能用它表示一个数值。符号常量的值在其作用域内不能改变,也不能再被赋值。符号常量名习惯用大写字母表示。,5,变量,1.定义:程序执行期间值可以改变的量。2.命名规则:变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:下列标识符中,不合法的变量名有:M.D.John 12%gf 1add _ce36 age,6,*选变量名时,要做到“见其名,知其意”例如:name st_age xm nl class sum*大小写字母是两个不同的字符,C变量名习惯用小写字母表示。,7,2.3整型数据,整型常量*十进制整数:由数字(0-9)和正负号表示 例如:123、-456、0 等*八进制整数:以0开头数是八进制数 例如:0123 即(123)8=(83)10(123)8=182+2 81+3 80=(83)10*十六进制整数:以0 x或0X开头 例如:0 x123 即(123)16=(291)10-0 x12 即(-12)16=(-18)10 0 x2F 即(2F)16=(47)10,8,整型变量,基本型:以 int 表示 短整型:以 short int 或 short 表示 1.类型 长整型:以 long int 或 long 表示 无符号基本型(unsigned int)无符号型 无符号短整型(unsigned short)无符号长整型(unsigned long),说明:一个无符号整型变量中可以存放的数的范围扩大一倍。整型变量一般在内存中占2个字节(16位).,9,2.4实型数据,实型常量表示形式有如下两种:十进制数形式:由数字和小数点及正负号组成。(注意:必须有小数点)例如:23.678.678 23.指数形式:由数字、小数点、字母e或E及正负号组成。(注:e或E之前必须有数字,且后指数必须为整数)例如:3.5E-5 2e3 E2 3.6e3.5.e6 e,10,2.4.2 实型变量实型变量可分为:单精度(float型)如:float x,y;双精度型(double型)如:double a,b,c;说明:1.float 型变量在内存中占4个字节;double 型变量在内存中占8个字节。2.单精度实数提供7位有效数字;双精度实数提供1516位有效数字。3.一个实型常量不分float 和 double 型,一个实型常量可以赋给一个float 型或 double 型变量,并根据变量的类型截取实型常量中相应的有效位数字。例如:float a;double b;a=123456.789;b=123456.789;,11,2.5字符型数据,2.5.1 字符常量1.字符常量:用单引号括起来的一个字符。例如:a A$!注:a与A是 的字符常量。,不同,2.转义字符:以一个开头的字符序列 例如:n 换行 t 横向跳格(水平制表)b 退格 v 竖向跳格(垂直制表)f 走纸换页 r 回车,移到本行开头 a 报警 0 空字符,12,说明:,“ddd”与“xhh”分别表示用八进制数或十六进制数表示一个字符。例如:123 x65 129由于”在C语言中都有了特殊的意义,故要想在字符串中使用它们,须在其前面再加上一个反斜线。例如:反斜线 单引号”双引号若反斜线出现在以上未提到的字符前,则反斜线被忽略,而该字符就是它的字面表示。例如:c 表示字符 c,例:main()printf(“ctlanguagsberCn”);printf(“istusef165x6e”);,屏幕输出:C languageIs useful,13,2.5.2 字符串常量,1.定义:括在一对双引号之内的字符序列或转义字符序列称为字符串常量。例如:“How are you!”“a”“*abcnt”2.存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符 0自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。b 与B是否相同?b 与“b”是否相同?,b为98,B为66b是字符常量,“b是字符串常量,14,2.5.3 字符变量(存放字符常量的变量),定义形式:char 标识符1,标识符2,标识符n 例如:char c1,c2,c3,ch;c1=a;c2=b;c3=c;ch=d;说明:1.字符变量在内存中占一个字节。2.在内存中,是把字符对应的ASCII码值放到存储单元中.3.字符型数据与整型数据之间可以通用.练习:1.以下不合法的变量名为:(A)_123(B)IF(C)e4(D)float2.判断下列字符串的长度:“054”“x56”cta”“ntbab”,3 输出,输出V”c a,6 输出 ab,15,2.6变量赋初值,1.初始化:在定义变量的同时为变量赋初值2.形式:类型标识符 变量名=常量或常量表达式 例如:int x=10;char ch=a;变量赋初值允许使用符号常量例如:#define PI 3.1415926.float x=PI;.可对被定义的变量的一部分赋初值 例如:int a,b,c=1,d=2;float r=2,l,s;可对几个变量赋以同一个初值 例如:int a=6,b=6,c=6;不要写为:int a=b=c=6;,16,2.7算术运算符和算术表达式,2.7.1 基本的算术运算符:+-*/%说明:()上述运算符均为双目运算符(即有两个操作数)()“”“”作单目运算符时分别为正值、负值运算符。()在“”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3=()“”要求两侧均为整数,“”运算不能用于float 和 double型数据例如:2,17,2.7.2 算术表达式和运算符的优先级与结合性,1.算术表达式:用算术运算符和括号将操作数连接起来的,符合语法规则的式子。例如:a+b+a*b/c+2.82.优先级:高于3.结合性:“左结合性”或称为“自左至右的结合方向”即运算对象先与左边的运算符结合。例如:a-b+c,18,2.8 不同数据类型的数据间的混合运算,形式:隐式转换(由系统自动进行)显式转换(强制类型转换)2.8.1 隐式转换 隐式转换的转换规则:int unsigned int long int unsigned long int double short,char float,(1)float 型数据一律转换成double 型数据。(2)char 和short int 型数据一律转换成 int 型数据 以上两条转换原则说明:即使两个操作数类型相同,但只要它们同属 char,short int 或 float 类型,则转换一定发生。,19,若两个操作数类型不同,则按下列顺序选取第一个适用的规则:(3)两个操作数之一为double 型数据,则另一个转换成 double 型(4)两个操作数之一为 unsigned long int 型数据,则另一个转换成unsigned long int 型数据(5)两个操作数之一为 long int 型数据,则另一个转换成 long int 型数据(6)两个操作数之一为 unsigned int 型数据,则另一个转换成 unsigned int 型数据例:若有:int i;float f;double d;long e;试判断表达式 3+b+i*f-d/e 的类型,int unsigned int long int unsigned long int doubleshort,char float,double型,20,2.8.2 显式转换形式:(类型名)(表达式)例如:(double)(a+b),说明:()表达式应用括号括起例如:(int)(x+y);若要得到x/2的小数形式,应写为:(float)x/2 还是(float)(x/2)?()在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。例如:float x=8.6;int y;y=(int)x;,21,2.9 自增、自减运算(、),作用:使变量的值增或减,如:i,i(使用之前,先使i的值加(减)1)i,i(使用之后,使i的值加(减)1)+i 先执行i=i+1,再使用i的值 i+先使用i的值,再执行i=i+1例如:int a=1,b;b=+a;b=a+;,说明:(1)为单目运算符(2)+、只能用于变量,而不能用于常量或表达式。例如:,(x+y)+,+a,b+中合法的为:(3)自增、自减运算符为右结合性(即自右至左)。例如:a+(a+),22,练习题,1.设a=2,则执行语句 k=+a+a+后的 k值为多少?,k=6,均为6,(1)k=6 a=5,(2)k=15 a=5,2.设a=2,b=9,则表达式 a+b+/a+的值为多少?表达式a+(+b/+a)的值为多少?,3.设a=2,若执行语句k=(a+)+(a+)+(a+)后的k值为多少?若执行语句k=(+a)+(+a)+(+a)后的 k值为多少?,23,2.10 位运算C语言中提供的位运算符:、&、1.按位取反运算符形式:A功能:把A的各位都取反,(即0变1,1变0)例如:int A=179,24,2.按位与运算符&形式:A&B功能:对A的各位与B的对应位进行比较,如果两者都为1,A&B对应位上的值为1,否则为0。例如:int A=179(二进制10110011)int B=169(二进制10101001),25,3.按位或运算符|形式:A|B功能:对A的各位与B的对应位进行比较,如果两者中有一个 为1,A|B对应位上的值为1,否则为0。例如:int A=179(二进制10110011)int B=169(二进制10101001),26,4.按位异或运算符 形式:AB功能:对A的各位与B的对应位进行比较,如果两者不同,AB对应位上的值为1,否则为0。例如:int A=179(二进制10110011)int B=169(二进制10101001),27,5.左移运算符 形式:An(其中 n为一个大于0的整型表达式)功能:把A的值向左移动n位,右边空出的n位用0填补。当左移时移走的高位中全都是0时,相当于对A作n 次乘 以2的运算。例如:int A=27(二进制00011011),28,6.右移运算符形式:An n(其中 n为一个大于0的整型表达式)功能:把A的值向右移动n位,左边空出的n位用0填补。相当于对A作n 次除以2的运算。例如:int A=179(二进制10110011),29,2.11 赋值运算符和赋值表达式,2.11.1 赋值运算符(=)形式:变量名=常量或表达式作用:将右边常量或表达式的值赋给左边的变量例如:a=3;b=c+d;2.11.2 复合赋值运算符复合赋值运算符:在赋值符“=”之前加上其它运算符共有10种复合赋值运算符+=,=,&,=,|=,30,例如:a+=3 a=a+3 x*=y+3 x=x*(y+3)2.11.3 赋值表达式定义:由赋值运算符将一个变量和一个表达式连接起来的式子。形式:变量=表达式说明:赋值表达式的值为被赋值的变量的值。例如:a=b=c=6 a=(b=4)+(c=6)a=(b=4)*(c=6),31,练习:写出顺序执行下列表达式运算后的x值:1.x=a=b=10 2.x=25%(c=3)3.x/=x(a%2)其中(a=5)4.x*=x+=x-=x,X=10,X=1,1,0,赋值表达式中可以包含复合赋值运算符 例如:若a=12,计算表达式a+=a=a*a运算后a的值 第一步:aa*a a=a-a*a=12-12*12=-132 第二步:a+=-132 a=a+(-132)=-264,32,2.12 逗号运算符和逗号表达式,1.逗号运算符:即“,”优先级:为所有运算符中级别最低的。2.逗号表达式 形式:表达式1,表达式2,表达式n 求解过程:顺次求解表达式1,表达式2 最后求解表达式n。逗号表达式的值为表达式n的值。例如:a=3*5,a*4 a=3*5,a*4,a+5 x=(a=4%3,a+1,a*10),60,20,10,