资源预览内容
第1页 / 共74页
第2页 / 共74页
第3页 / 共74页
第4页 / 共74页
第5页 / 共74页
第6页 / 共74页
第7页 / 共74页
第8页 / 共74页
第9页 / 共74页
第10页 / 共74页
亲,该文档总共74页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 数据类型 、运算符、表达式,数据结构 + 算法 = 程序,C语言提供的数据类型:,C语言中,数据有常量和变量之分,它们分别属于以上这些类型。 在程序中对用到的所有数据都必须指定其数据类型,3.2 常量与变量,3.2.1 常量(Constant)与符号常量,常量: 在程序运行过程中,其值不能被改变的量。 如: 12、3、0、-3为整型常量, 4.6、-1.23为实型常量 a,d为字符常量 这种常量也称为字面常量或直接常量,符号常量:代表常量的标识符(符号),一个标识符代表一个常量。 例3.1 #define PRICE 30 /*PRICE即为符号常量,代表30*/ main() int num, total; num = 10; total = num * PRICE; printf(“total = %d“, total); ,3.2.2 变量(Variable),变量:在程序运行过程中,其值可以被改变的量。,说明:,1、在源程序中,变量用标识符表示(标识符只能由字母、数字、下划线组成,且第一个字符必须为字母或下划线)。在C语言中,大写字母和小写字母是两个不同的字符,一般变量名用小写字母表示。 2、变量在内存中占据一定的存储单元。不同类型的变量,所占据的内存单元数不同。,3、变量名的类型表明存储单元的数量(例如,整型变量int,占2字节存储单元。单精度实数float占4字节); 4、变量名是一个符号地址,可以用运算符&取得存储单元的地址。,5、程序设计中变量的命名:,(1)必须满足C语言的语法规定。(以字母、下划线开始,只能由字母、数字、下划线构成)。 (2)应该“见名知意”。 (3)变量名的长度:C语言中未统一规定,随不同开发系统而变。Turbo C 2.0缺省允许的变量名长度为8。,例如:合法变量名:,sum average class day month Student_name _above lotus_1_2_3 basic,不合法的变量名: M.D.Jhon $123 #33 3D64 ab,6、C语言对变量的要求:“先定义、后使用”,3.3 整型数据,3.3.1 整型常量 C语言中数值常量的表达方式:,3.3.2 整型变量,一、整型变量的分类:,二、整型数据在内存中以补码形式存放 例如: int i; i=10; 数据在内存中实际存放的情况如图所示:,i,若i=-10;因为-10的补码为1111111111110110,则在内存中的存放形式为:,i,ANSI标准定义的整数类型 (方括号中的signed可省略),三、整型变量的定义,例如: int a,b; /* 指定变量a、b为整型 */ unsigned short c, d; /*指定变量c、d为无符号短整型 */ long e,f; /* 指定变量e、f为长整型*/ 程序在函数的开头部分定义变量。,例3.2,main() int a,b,c,d; /* 指定变量a、b、c、d为整型 */ unsigned u; / * 指定变量u为无符号整型 */ a = 12; b = -24; u = 10; c = a + u; d = b+u; printf(“a+u = %d, b+u = %dn“, c,d); 程序运行显示:a+u = 22, b+u = -14,三、整型常量的类型,1、整型常量的值在-32768+32767范围内,编译器认为是int类型。 2、整型常量的值超过上述范围,而在 -2147483648+2147483647范围内,编译器认为是long类型。 3、在整型常量的值后面加字母L(大写L或小写l),则告诉编译器,把该整型常量作为long类型处理。例:123L、0L。 4、一个整型常量后面加一个字母u,认为是unsigned 型。如-12345u,则将其转换成补码53191,然后按无符号数存储。,例3.3,main() int a,b; a=32767; b=a+1; printf(“%d,%d”,a,b); 运行结果:32767,-32768 出现问题的原因:溢出 解决办法:将b定义为long int,即得结果32768,3.4 实型数据,实数(real number)又称为浮点数(float),有两种表达方式: 1、十进制小数形式。由数字和小数点组成。(必须有小数点) 如:0.123、 .123、 123.0、 123.、 0.0 2、指数形式。字母e(或E)之前必须有数字,且e后面的指数必须为整数。 如123e3或123E3、123E-2 规范化的指数形式:在字母e或E之前的小数部分中,小数点左边应有一位且只能有一位非零的数字。,3.4.2 实型变量,1、实型数据在内存中的存放形式 实型数据在内存中占4个字节,按指数形式存储。如实数3.14159在内存中的存放形式: 一般编译系统以24位表示小数部分(包括符号),8位表示指数部分。,2、实型变量的分类:,例:,float x,y; /* 指定x、y为单精度实型变量 */ double z; /* 指定z为双精度实型变量 */ long double t; /*指定t为长双精度实数*/ 实型常量不分float和double。一个实型常量可以赋给予一个float型、double型或long double变量。,3、实型数据的舍入误差,例如: Main() float a,b; a=123456.789e5; b=a+20; printf(“%f”,b); 结果:b 的结果和a相等。,3.5 字符型数据,3.5.1 字符常量 用单引号(撇号)括起来的一个字符。如:a、x、D、?、$。注意,a和A是不同的字符常量。 以“开头的字符序列,称为“转义序列”,“”使其后面的字符变为另外的意义。见下表。,转义序列主要用来控制打印机和屏幕输出。 例:printf(“n sum is %dnn“,sum); 012代表换行 0或000代表“空操作”字符。,例3.5,main() printf(“ ab ct derftgn”); printf(“htibbj k”); 打印机上程序运行结果: fab c gde h jik,3.5.2 字符变量,char c1,c2; /* 定义c1、c2为字符变量 */ c1 = a; c2 = b; 字符变量在内存中占1字节。,3.5.3 字符数据在内存中的存储形式及其使用方法,字符在内存中以ASCII码存放。,例3.4,main() char c1,c2; c1 = 97; c2 = 98; printf(“%c %c“,c1,c2); 该例的输出是:a b,字符以ASCII码存储,其存储方式与整数类似。从而,C语言允许字符和整数之间进行运算。,main() char c1,c2; c1 = a; c2 = b; c1 = c1 - 32; c2 = c2 - 32; printf(“%c %c“,c1,c2); ,3.5.4 字符串常量,字符常量:单引号括起来的一个字符。 字符串常量:双引号括起来的字符序列(0N个字符)。如: “How do you do.“, “CHINA“, “a“, “$123.45“ 字符串常量在内存中的存放:每一个字符均以其ASCII码存放,且最后添加一个“0”。,例:字符串常量“CHINA”存放在内存中的情况是:(6字节存储,不是5字节),因此,字符a和字符串“a“的区别是: 字符a :1字节(a) 字符串“a”:2字节(a和0),3.6 变量赋初值,在定义变量的同时指定其初值。例、 int a = 3; float f = 3.56; char c = a; int a,b, c = 5; /* 指定c的初值为5,未指定ab的初值 */ 注意:多个变量指定相同的初值。 int a = b = c = 3; int a = 3, b = 3, c = 3;,指定初值是在程序运行时完成的(不是在编译时完成)。,3.7 各类数据混合运算,整型、实型(包括单、双精度)、字符型数据可以混合运算。例、 10 + a + 1.5 - 8765.1234 * b 混合运算时,先转换成同一种类型,然后进行运算。转换规则如下:,例:,int数据可以转换为unsigned数据; float数据可以转换为double数据; int数据可以转换为double数据,(直接转换,不需先转换为unsigned,long,再转换为double)。,例:,int i; float f; double d; long e; 10 + a + i*f - d/e,3.8 算术运算符和算术表达式,3.8.1 C运算符简介,3.8.2 算术运算符和算术表达式,一、基本的算术运算符,注:-5/3 = -1(余-2) 或 -2(余+1), Turbo C 取-1结果(“向零取整”)。,二、算术表达式和运算符的优先级与结合性,算术表达式:用算术运算符和括号将运算对象连接起来式子。如:a*b/c - 1.5 + a 优先级:先乘除、后加减;先括号。 结合性:左结合。,例:a - b + c,由于算术运算符为左结合,故先执行a-b,再执行加c的运算。,赋值运算符=为右结合。,例: a = b + c 由于赋值运算符=为右结合,先执行右边的b+c,再赋值给a。,三、强制类型转换,运算符两侧的数据类型不同时,先自动进行类型转换,再运算。程序员可以强制进行某种转换。强制类型转换的一般形式是: (类型名)(表达式) 例: (double)a; /* 将a转换为double类型 */ (int)(x+y); /* 将x+y的值转换为int类型 */ (float)(5 % 3);/* 将5%3的值转换为float类型 */,区别:,四、自增、自减运算符 自增:使变量的值加1; 自减:使变量的值减1。,例:,j = 3; j = +i; /* 先使i加1,再赋给j。执行后j=4, i=4 */ j = 3; j = i+; /* 先把i赋给j,再使i加1。执行后:j=3,i=4 */,注意: (1)+和-只能用于变量,不能用于常量和表达式。 例: 5+; (a+b)+; #define ONE 1; ONE+;,(2) +和-的结合方向为“右结合”。 例:,五、有关表达式使用中的问题说明,1. 在表达式中使用+或-,容易出错。,2. 出现多个运算符时,编译器在处理时尽可能多的(从左到右)将若干个字符组合成一个运算符。例:,3. Turbo C中,调用函数时,实际参数的处理顺序是从右到左(称为C调用约定。)例:,3.9 赋值运算符和赋值表达式,一、赋值运算符:= 作用:将一个表达式的值赋给变量。 例 a = 3; /*常数3赋给变量a。常数是特殊的表达式 */ a = b + c + 1;,二、赋值时的类型转换,当赋值运算符两侧的类型不同,但都是数值型或字符型时,在赋值前进行类型转换。 1、float 、double int:舍弃小数(截断)。 2、int float、double:值不变。 3、char(1字节) int(2字节),三、复合的赋值运算符,四、赋值表达式,一般形式: 例: 赋值表达式: a = 5 赋值语句: a = 5;,赋值表达式中的“表达式”也可以是赋值表达式。,例: a = (b = 5) /* b的值等于5,表达式b=5的值等于5,因此a的值等于5 */ a = b = 5 /* 与上述表达式的意义相同 */ 例: a = 5 + (c = 6) /* c=6, a=11 */ a = (b = 4) + (c
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号