《数据类型运算符表达式chap》由会员分享,可在线阅读,更多相关《数据类型运算符表达式chap(42页珍藏版)》请在金锄头文库上搜索。
1、第第3章章 数据类型、运算符和表达式数据类型、运算符和表达式标识符与关键字标识符与关键字C的数据类型的数据类型常量与变量常量与变量整型数据整型数据实型数据实型数据字符型数据字符型数据变量赋初值变量赋初值各类数值型数据间的混合运算各类数值型数据间的混合运算算术运算符和算术表达式算术运算符和算术表达式赋值运算符和赋值表达式赋值运算符和赋值表达式逗号运算符和逗号表达式逗号运算符和逗号表达式1. 标识符与关键字标识符与关键字自然语言:文字、数字、标点符号等。自然语言:文字、数字、标点符号等。C语言的字符语言的字符( (字符集字符集) )包括:包括: 26个小写字母个小写字母az 26个大写字母个大写字
2、母AZ 10个数字个数字09 其它可以显示的字符其它可以显示的字符 + - * / = , . _ : ; ? ” | ! # % & ( ) 空白字符空白字符空格、制表、换行、回车等等空格、制表、换行、回车等等1. 标识符与关键字标识符与关键字(1 1)标识符)标识符)标识符)标识符:用来标识变量名、符号常量名、函数名、数组用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。名、类型名、文件名的有效字符序列。 命名标识符所遵循的规则:命名标识符所遵循的规则:o 必须以字母或者下划线开始;必须以字母或者下划线开始;o 名称的其余部分必须由字母、数字和下划线组成;名称的其余
3、部分必须由字母、数字和下划线组成;o 不能是不能是C语言的关键字;语言的关键字;o C语言区分大小写;语言区分大小写;o 不要太长,一般不超过不要太长,一般不超过31个字符;个字符;o 不要与不要与C语言中的库函数名和常量名相同。语言中的库函数名和常量名相同。举例:举例:way_cool, RightOn, Bits32, _iPtr, myCar /合法合法case, 52Select, A Lot, -VV/非法非法sin, Case, string/不合适不合适 1. 标识符与关键字标识符与关键字(2 2)关键字)关键字)关键字)关键字:具有特定意义的单词具有特定意义的单词 。2. C的
4、数据类型的数据类型2. C的数据类型的数据类型当声明一个对象(变量或常量)时,必须说明是什么数据当声明一个对象(变量或常量)时,必须说明是什么数据类型(简称类型(简称“类型类型“););对象类型的描述确定了其内存所占空间大小,也确定了其对象类型的描述确定了其内存所占空间大小,也确定了其表示范围;表示范围;对象类型的描述确定了其所能进行的操作;对象类型的描述确定了其所能进行的操作;在不同的计算机上,每个对象类型所占用的内存空间的长在不同的计算机上,每个对象类型所占用的内存空间的长度不一定相同。度不一定相同。2. C的数据类型的数据类型qq 基本数据类型基本数据类型基本数据类型基本数据类型:基本数
5、据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。 qq 结构数据类型结构数据类型结构数据类型结构数据类型:结构数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个结构类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个结构类型。在C语言中,结构类型有以下几种: 数组类型 结构体类型 共用体(联合)类型qq 指针类型指针类型指针类型指针类型:指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个变量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为
6、一谈。qq 空类型空类型空类型空类型 voidvoid3. 常量与变量常量与变量对对于于基基本本数数据据类类型型量量,按按其其取取值值是是否否可可改改变变又又分分为为常量和变量两种。常量和变量两种。在在程程序序执执行行过过程程中中,其其值值不不发发生生改改变变的的量量称称为为常常量量,其其值值可可变变的的量量称称为为变变量量。它它们们可可与与数数据据类类型型结结合合起起来来分分类类。例例如如,可可分分为为整整型型常常量量、整整型型变变量量、浮浮点点常常量量、浮浮点点变变量量、字字符符常常量量、字字符符变变量量、枚枚举举常常量量、枚枚举举变变量量。在在程程序序中中,常常量量是是可可以以不不经经说
7、明而直接引用的,而变量则必须说明而直接引用的,而变量则必须先定义后使用先定义后使用。 整型量包括整型常量、整型变量。整型量包括整型常量、整型变量。3. 常量与变量常量与变量(1) 常量常量 在程序执行过程中,其值不发生改变的量称为常量。在程序执行过程中,其值不发生改变的量称为常量。 q 直接常量直接常量(字面常量字面常量):v 整型常量:整型常量:12、0、-3;v 实型常量:实型常量:4.6、-1.23;v 字符常量:字符常量:a、b。q 符号常量:用标示符代表一个常量。在语言中,可以用符号常量:用标示符代表一个常量。在语言中,可以用一个标识符来表示一个常量,称之为符号常量。一个标识符来表示
8、一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:符号常量在使用之前必须先定义,其一般形式为:#define 标识符标识符 常量常量3. 常量与变量常量与变量其中其中#define也是一条预处理命令(预处理命令都以也是一条预处理命令(预处理命令都以“#”开开头),称为宏定义命令(在后面预处理程序中将进一步介绍)头),称为宏定义命令(在后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定义,以,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符
9、号常量的标识符用大写字母,变量标识符用小写字母,惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。以示区别。【例3.1】符号常量的使用。#define PRICE 30main() int num,total;num=10;total=num* PRICE;printf(“total=%d”,total);用标识符代表一个常量,称为符号常量。用标识符代表一个常量,称为符号常量。符号常量与变量不同,它的值在其作用域符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。内不能改变,也不能再被赋值。使用符号常量的好处是:使用符号常量的好处是: 含义清楚;含义清楚; 能做到能做
10、到“一改全改一改全改”。 3. 常量与变量常量与变量(2)变量)变量其值可以改变的量称为变量。一个变量应该有一个名字,在其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。两个不同的概念。变量的命名变量的命名:标识符原则避免与关键字同名,大小写有区分4. 整型数据整型数据(1)整型常量整型常量(2)整型变量)整型变量 十进制:123, 1024, -12, 0, -1,1
11、八进制: 067, 0123, 01234, 01, -0456 十六进制: 0x123, 0x1024, 0xff, 0x8aq 整型数据在内存中的存放形式整型数据在内存中的存放形式q 整型变量的分类整型变量的分类 q 整型变量的定义整型变量的定义q 整型变量的溢出整型变量的溢出补码形式v 正数的补码和原码相同 v 负数的补码:将该数的绝对值的二进制形式按位取反再加110的补码与原码:0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0-10的补码: 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0
12、基本型:int 4短整型:short 2长整型:long 4无符号型:unsigned4. 整型数据整型数据1234L =赋值给 长整型与书上不同4. 整型数据整型数据整型变量的定义整型变量的定义整型变量的定义整型变量的定义:例如: int a,b,c; (a,b,c为整型变量) long x,y; (x,y为长整型变量)unsigned p,q; (p,q为无符号整型变量)unsigned long i, j;在书写变量定义时,应注意以下几点:允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。最后一个变量名之后必须以“;”号结尾
13、。变量定义必须放在变量使用之前。一般放在函数体的开头部分。unsigned4. 整型数据整型数据整型变量的溢出整型变量的溢出整型变量的溢出整型变量的溢出:超过最大、最小范围。整型数据的溢出。main() short a,b; a=32767; b=a+1; printf(%d,%dn,a,b); main() short a; unsigned short b; a=32767; b=a+1; printf(%d,%dn,a,b); 32767,-3276832767,32768/先按ab为shortint截取16位或32位值,然后将这16位或32位值括成32位的值,按有无符号%d%u打印出#
14、include main() short a,b; unsigned short c; int x,y; unsigned z; a=32767 b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c); a=62767; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c);a=65536; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c); a=-65536; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c);a=429
15、4967295; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c); a=4294967296; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c); a=4294967297; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c);a=65536; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c); a=132767; b=a+1; c=a+1; printf(%d,%d,%u,%u,%dn,a,b,b,c,c);
16、x=2147483647; y=x+1; z=x+1; printf(%d,%d,%u,%u,%dn,x,y,y,z,z); x=2147483648; y=x+1; z=x+1; printf(%d,%d,%u,%u,%dn,x,y,y,z,z); x=4294967296; y=x+1; z=x+1; printf(%d,%d,%u,%u,%dn,x,y,y,z,z); printf(%d,-5/3); printf(%d,sizeof(long int); main()int a,b,c,d;unsigned u; a=12;b=-24;u=10;c=a+u;d=b+u;printf(“
17、a+u=%d,b+u=%dn”,c,d);a+u=22,b+u=-144. 整型数据整型数据整型变量的溢出整型变量的溢出整型变量的溢出整型变量的溢出:超过最大、最小范围。unsigned int u;5. 实型数据实型数据(1)实型常量(2)实型变量十进制: 0.123, 12.88, 3.1415926指数形式: 1.0e15, 1.23E12, 单精度: float 4双精度: double 8实型数据在内存中的存放形式:小数部分与指数部分单独存放实型数据在内存中的存放形式:小数部分与指数部分单独存放如:如:3.14159+.3141591数符小数部分指数部分单精度:数符+小数部分24位,
18、指数部分8位,含符号双精度:数符+小数部分48位,指数部分16位,含符号规范化的指数形式5. 实型数据实型数据实型数据的舍入误差。main() float a,b; double c; a=123456.789e5; b=a+20; c=a+20; printf(%fn,a); printf(%fn,b); printf(%fn,c);?1.0/3.0*3.0 6. 字符型数据字符型数据(1)字符型常量(2)字符型变量(3)存储形式(4)字符串常量a, x, A, X,?, %, char 占1字节unsigned char 占1字节ASCII码存放char c1= a;char c2=A;9
19、765-32C语言的字符型数据和整数数据之间是可以通用;语言的字符型数据和整数数据之间是可以通用;一个字符数据既可以以字符形式输出,也可以以整数形式输出;一个字符数据既可以以字符形式输出,也可以以整数形式输出;可以对字符数据进行算术运算(对他们的可以对字符数据进行算术运算(对他们的ASCII码算术运算)。码算术运算)。6. 字符型数据字符型数据字符形式字符形式功能功能n换行换行t横向跳格,下一个横向跳格,下一个TABTABv竖向跳格竖向跳格b退格退格f走纸换页走纸换页r回车,本行头回车,本行头反斜杠字符反斜杠字符”单引号字符单引号字符ddd1到到3位位8进制数所代表的字符进制数所代表的字符xh
20、h1到到2位位16进制数所代表的字符进制数所代表的字符转义字符转义字符转义字符转义字符如 n ,012代表换行6. 字符型数据字符型数据main() char a,b; a=97; b=98; printf(%c,%cn,a,b); printf(%d,%dn,a,b); a,b97,98main() char a,b,c; unsigned char d; a=a; b=b; a=a-32; b=b-32; c=254; d=254; printf(%c,%cn%d,%dn,a,b,a,b); printf(“%dn,c); printf(“%dn,d); A,B65,66 -2254二版P
21、51 改错6. 字符型数据字符型数据字符串常量字符串常量字符串常量字符串常量是由一对双引号括起的字符序列。例如: “CHINA” , “C program” , “$12.5” 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别:q 字符常量由单引号括起来,字符串常量由双引号括起来。q 字符常量只能是单个字符,字符串常量则可以含一个或多个字符。q 可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在语言中没有相应的字符串变量。这是与BASIC 语言不同的。但是可以用一个字符数组来存放一个字符串。在数组一章内予以介绍。q 字符常量占一个字节的
22、内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符0 (ASCII码为0)。这是字符串结束的标志。例如:例如:字符串字符串 C program 在内存中所占的字节为:在内存中所占的字节为:字符常量字符常量a和字符串常量和字符串常量a虽然都只有一个字符,但在内存虽然都只有一个字符,但在内存中的情况是不同的。中的情况是不同的。a在内存中占一个字节,可表示为:在内存中占一个字节,可表示为:a在内存中占二个字节,可表示为:在内存中占二个字节,可表示为:6. 字符型数据字符型数据Cp r o g r a m 0aa0char c=a;char c=“a”;char c=“
23、china”; 如何表达字符串?字符数组今后介绍char str=“china”;7. 变量赋初值变量赋初值在程序中常常需要对变量赋初值,以便使用变量。语言程序中在程序中常常需要对变量赋初值,以便使用变量。语言程序中可有多种方法为变量提供初值。本小节先介绍在作变量定义的可有多种方法为变量提供初值。本小节先介绍在作变量定义的同时给变量赋以初值的方法。这种方法称为初始化。在变量定同时给变量赋以初值的方法。这种方法称为初始化。在变量定义中赋初值的一般形式为:义中赋初值的一般形式为: 类型说明符类型说明符 变量变量1= 值值1,变量,变量2= 值值2,;例如:int a=3;int b,c=5;flo
24、at x=3.2,y=3f,z=0.75f;char ch1=K,ch2=P;应注意,在定义中不允许连续赋值,如int a=b=c=5是不合法的。int a,b,c;a=b=c=3;main() int a=3,b,c=5; b=a+c; printf(a=%d,b=%d,c=%dn,a,b,c); 8. 各类数值型数据间的混合运算各类数值型数据间的混合运算C遇遇到到两两种种不不同同数数据据类类型型的的数数值值进进行行运运算算时时,会会将将两两个个数数做做适适当当的的类类型型转转换换,然然后后再再进进行行运算。运算。类类型型转转换换的的原原则则:转转换换总总是是朝朝数数据据能能力力更更强强的方
25、向,并且转换总是逐个运算符进行的。的方向,并且转换总是逐个运算符进行的。8. 各类数值型数据间的混合运算各类数值型数据间的混合运算charshortintlong intfloatunsigned longunsigned intunsigned shortunsigned chardoubleLong double高底由底向高直接转换。所有实数按Double型运算8. 各类数值型数据间的混合运算各类数值型数据间的混合运算隐式类型转换:隐式类型转换:5.0/9显示显示 强制强制 类型转换:(类型转换:(float)5/(float)9 int x = 5, y = 9;float z;char
26、 ch=a;z = (float)(x+y);x = (int)z;y = (int)(x+z+a);a = (char)y;z = (int)x+y;2/4 = 0;2/4.0 = 0.5;2.0/4 = 0.5;2.0/4.0 = 0.5;(int)(2.0/4.0)=0;1/(int)2.0 = 0;9. 算术运算符和算术表达式算术运算符和算术表达式语言的运算符可分为以下几类语言的运算符可分为以下几类语言的运算符可分为以下几类语言的运算符可分为以下几类: 算术运算符算术运算符算术运算符算术运算符: +、-、*、/、%自增、自减运算符 +、- 关系运算符: 、=、= 和 != 逻辑运算符:
27、 &、|、! 位操作运算符: &、|、 赋值运算符 简单赋值 = 复合算术赋值 +=、-=、*=、/=、%= 复合位运算赋值 &=、|=、=、=、 b) & (c 0) a = b = c = 5 右结合 a = (b = (c = 5) c = (a = 5)+(b=8)语句:任何表达式在其未尾加上分号就构成为语句。a+b;赋值语句:a=b+c;s = a*b/2.0; 10. 赋值运算符和赋值表达式赋值运算符和赋值表达式(1)赋值运算符与赋值表达式(2)赋值语句(3)类型转换(4)复合的赋值运算符如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型
28、。具体规定如下: 实型赋予整型,舍去小数部分。 整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。 字符型赋予整型,由于字符型为一个字节,而整型为四个字节,故将字符的ASCII码值放到整型量的低八位中,高位为0。 整型赋予字符型,只把低八位赋予字符量(即截断)。i = 12.56;a = 12;j = a;c = 0xff66;10. 赋值运算符和赋值表达式赋值运算符和赋值表达式(1)赋值运算符与赋值表达式(2)赋值语句(3)类型转换(4)复合的赋值运算符如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
29、将非unsigned型数据赋给长度相同的unsigned型变量,原样照赋(连符号位一起传送)main()unsigned short a;Short b=-1;a=b;printf(“%u”,a);i = 12.56;a = 12;j = a;c = 0xff66;ba32767如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下: 实型赋予整型,舍去小数部分。 整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。 字符型赋予整型,由于字符型为一个字节,而整型为四个字节,故将字符的ASCII码值放到整型量的低八
30、位中,高位为0。 整型赋予字符型,只把低八位赋予字符量(即截断)。Page 3810. 赋值运算符和赋值表达式赋值运算符和赋值表达式(1)赋值运算符与赋值表达式(2)赋值语句(3)类型转换(4)复合的赋值运算符在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如 += -= *= /= %= = &= = |= 构成复合赋值表达式的一般形式为: 变量 双目运算符=表达式它等效于 变量=变量 运算符 表达式a += 5; a = a+5;x *= y+7; x = x*(y+7);r %= d; r = r%d;11. 逗号运算符和逗号表达式逗号运算符和逗号表达式在语言中逗号“,”也是一种运
31、算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。其一般形式为:表达式1,表达式2其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。main() int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); printf(y=%d,x=%d,y,x); 逗号表达式中的表达式1和表达式2 也可以是逗号表达式; 程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。11. 逗号运算符和逗号表达式逗号运算符和逗号表达式在语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。其一般形式为:表达式1,表达式2其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。1、x=(a=3,6*3) x值为182、 x=a=3,6*a x值为3 逗号表达式的优先级最底作业作业书面作业:书面作业: 认真阅读第三章!认真阅读第三章!3.43.7 译码译码 3.9 3.11 类型转换类型转换(int 占占4字节)字节) 3.12 表达式求值,优先级表达式求值,优先级+结合性结合性上机作业:(不必上传到平台)上机作业:(不必上传到平台)上机通过上机通过 3.6 3.10