资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第二章 数据类型、运算符与表达式nC语言的数据类型n常量与变量n运算符与表达式n数据类型转换2.1 C语言的数据类型n数据类型总表:C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整 型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作2.2 常量与变量2.2.1 常量n在程序运行过程中,其值不能改变的量。n常量有两种存在形式:n直接常量:如: 1,5,34,-234 等都是整型常量 5.2,3.14,-34.5 等都是实型常量 A,a,b,! 字符型常量在下面程序中:main( ) int a,b,c; a=23; b=87; c=a+b; printf(“%dn”,c); 23和87都是以直接常量形式出现的n符号常量:用一个标识符来代表一个常量。n标识符:n程序设计中用到的变量、符号常量、函数等,都要给他们取个名字,这些变量名、符号常量名、函数名等统称为标识符。n标识符命名规则:(1)只能由字母、数字、下划线组成,并且,名字的第一个字符只能是字母或下划线(即不能是数字)。(2)大小写敏感(3)不能使用关键字(关键字指c语言中有特定含义的标识符,如 printf,scanf,main,int 等)(4)长度一般不超过32个字符例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123n符号常量的定义形式:#define 符号常量名 常量n说明:(1)习惯上,符号常量名用大些英文字母,以区分于后面将要介绍的变量名。(2)用#define语句定义符号常量时,语句结尾不需要“;”,加上分号会出错。符号常量的使用: 程序运行时,一旦遇见符号常量,就以定义时符号常li量名后面的常量值去替代该符号常量.例 符号常量举例(ch2_1.c)#define PRICE 30main( ) int num,total; num=10; total=PRICE*num; printf(total=%d,total); 程序运行时,该条语句变成total=30*num;程序运行结果:total=300n 若将上例的符号常量定义语句改为:#define PRICE 30; ,运行时, total= PRICE *num; 语句将变成为: total=30;*num; 程序出错!(3)符号常量定义语句不能写在main函数内部,应写在程序顶部,main函数外面。看程序,写结果:#define A 2#define B 3main( ) int c; c=A*B; printf(“c=%dn”,c); c=c+A+B; printf(“c=%dn”,c);c=6c=112.2.2 变量n程序运行过程中,值可以改变的量。n变量不同于常量的是,它一般不直接表示为某一个特定数值,而是对应于内存中的某个存储空间,所以,一个完整的变量包含变量名和变量值两方面含义。main( ) int a; a=21; 定义变量a,实质上是在内存中分配两个字节的空间,并将这两个字节的空间取名为a往a空间中存入数值21,21就是a变量此时的值n说明:(1)变量必须先定义再使用。如果使用一个未定义的变量,编译时会出现诸如“undefined symbol ”此类的错误提示。(2)变量定义格式:类型 变量名; 如:int a,b,c; float x,y,z; 等(3)变量命名应符合标识符命名规则2.3 整型数据2.3.1 整型常量的表示方法n十进制形式:如:123,-456,76 等n八进制形式:以0开头的八进制数字串。如:010,026看程序,写结果:main() int a,b; a=10; b=010; printf(“%d,%dn”,a,b);10,8看程序,写结果:main( ) int a,b; a=10; b=018; printf(“%d,%dn”,a,b);n十六进制形式:以0x或0X开头的十六进制数字串。如:0x24, 0x2f 等。结果是多少?程序出错,018不是正确的八进制整数常量形式2.3.2 整型变量n整型数值在内存中的存放:n众所周知,数据在内存中是以二进制形式存储的。n数据存储可分为有符号数存储和无符号数存储。n有符号数:可以表示正数和负数,有符号数存储时,存储单元的最高位为符号位,最高位为0,表示正数;最高位为1,表示负数,其余位为数值位。如:int a; a=37; 在turbo c中,对于int 型变量,系统会为它分配两个字节的存储空间(1byte=8bit)0 0 0 0 0 0 0 00 0 1 0 0 1 0 1符号位n若有:int a; a= -37; 又是如何存储的呢? 在大多数计算机系统中,有符号数存储采用补码形式。数值存储形式:原码、补码。原码:+37:00000000 00100101 -37:10000000 00100101 即:最高位表示符号,其余位表示数值本身的绝对值。补码:正数的补码和原码一样。所以:+37:00000000 00100101 负数的补码存储形式: 假设x0, 求x的补码存储方式: 求|x| |x| 的二进制形式 按位取反 末位加1问题:已知整数x的二进制存储形式,求x对应的十进制整数是多少?n无符号数:只能表示0和正数,没有符号位,所有数位都表示数值。n整型变量的分类:n 基本整型:intn 短整型:shortn 长整型:long n以上三种类型都是有符号数类型n无符号基本整型:unsigned int n无符号短整型:unsigned shortn无符号长整型:unsigned long 变量的数据类型不同,系统为变量所分配的存储空间的字节数会有所不同,变量的取值范围也会不同。n整型变量的定义与使用nC语言规定,在程序中要用到的变量必须先定义,变量定义部分一般都放在函数体开始的声明部分。n整型变量的初始化n定义变量的同时给它赋值,如:int a=2; 相当于:int a; a=2; n整型数据的溢出基本整型变量的取值范围是:-32768 32767有程序:main( ) int a=32767, b= -32768,c,d; c=a+1; d=b-1; printf(“c=%d,d=%dn”,c,d);结果输出:c=-32768,d=32767why?2.4 实型数据2.4.1 实型常量的表示方法n十进制小数形式:由数字和小数点组成(必须要小数点) 如:34.1,0.345,34. ,.23 ;但不能只有小数点:. 不代表0.0,是错误形式。n指数形式: 如:12.3e3 代表12.3*103,123e-3 说明:e后面的指数部分必须为整常数,不能是小数;e前面的尾数部分数值可以是整常数,也可以是实型常数;尾数部分和指数部分均不可省略。e10,1.23e2.5,0.5e 都是不合法的浮点数表示。2.4.2 实型变量n实型变量的分类:n单精度型(float): 4byten双精度型(double): 8byten长双精度型(long double): 16byte(一般的turbo c 2.0版本不支持此类型)n单精度类型和双精度类型的区别,除了体现在数据分配的字节数上,还体现在描述数值的精确度上。n实型数据在存储时,通常都有一定的误差。所以,要判断两个实型数据是否相等,一般不能直接用等于号判断。例如:main( )float a=0.2;if (a=0.2) printf(“yesn”);else printf(“non”);程序运行结果:non那如何判断呢?我们可以将上面的程序改为: main( ) float a=0.2; if (fabs(a-0.2)3?100:200 表达式值为多少?n已知变量x的初始值为2,y的初始值为3,求条件表达式的值以及该语句执行后x和y变量的值xy?x+=y:y2?y+=x:y-=x2.7 不同类型数据间的混合运算n在计算表达式时,不但要考虑到运算符的优先级和结合性,还要分析运算对象的数据类型。不同类型的数据在一起运算时,需要转换成相同的数据类型。n两种转换方式:n自动转换:编译系统自动完成n转换规则:课本p38 图2.7n解释:横向箭头表示必定的转换,纵向箭头表示运算对象类型不同时所作的转换。n赋值类型的自动转换:表达式计算完以后赋值给一个变量是进行的数据类型的转换。P3839n强制类型转换n形式: (类型名) (表达式)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号