资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1 1第三章 数据类型和运算规则 基本数据类型与特点基本数据类型与特点 各种数据类型表示范围各种数据类型表示范围 常量的表示方法常量的表示方法 变量说明语句变量说明语句 运算符与基本运算规则运算符与基本运算规则本本 章章 要要 点点2 2第三章 数据类型和运算规则第一节 数据与数据类型第二节 常量与常量定义第三节 变量与变量说明第四节 基本运算第五节 运算符的优先级与结合性第六节 数据类型转换3 33-1 数据与数据类型 数据数据 程序加工处理的对象及其结果。 数据类型数据类型 按数据的性质、在计算机内部的存储形式(占用的内存单元数量、编码方式、取值范围等)、构造特点来对数据进行分类。基本概念基本概念4 4例:求三数的平均值main()int a,b,c;int ave;a=10;b=20;c=30;ave=(a+b+c)/3;printf(%d,%d,%dn,a,b,c);printf(ave=%dn,ave);5 52-1 数据与数据类型(续)C C语言的数据类型语言的数据类型基本类型基本类型整型整型 intint实型实型( (浮点型浮点型) )字符型字符型 charchar单精度单精度 floatfloat双精度双精度 doubledouble指针类型指针类型派生类型派生类型数组数组结构结构 structstruct共用体共用体 unionunion空类型空类型枚举类型枚举类型6 63-2 常量与常量定义 常量常量 在程序运行过程中,其值不能被改变的量称为常量。 变量变量 在程序运行过程中,其值可以被改变的量称为变量。一个变量有一个名字,在内存中占据一定的存储单元;在该存储单元中存放变量的值。变量名是一个符号地址,在对程序编译连接进由系统给每个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。一、基本概念一、基本概念7 73-2 常量与常量定义-整型常量实例整型常量的不同表示方法:整型常量的不同表示方法: 1010进制:进制: 100 -8 0 +123100 -8 0 +123 8 8进制:进制: 010 024 0100010 024 0100 16 16进制:进制: 0 0x38 0x10 0X10 0XFF 0xax38 0x10 0X10 0XFF 0xa错误错误: :091091、15a15a、0x5fg0x5fg二、整型常量二、整型常量常量常量:整形、实型、字符型、字符串常量、符号常量8 83-2 常量与常量定义-实型常量实例实型常量的不同表示方法:实型常量的不同表示方法: 当整数或小数部分为当整数或小数部分为0 0时,可以省略,但小数点不能时,可以省略,但小数点不能省。省。 1010进制形式进制形式:1.0 1. +12.0 -12.0 0.01.0 1. +12.0 -12.0 0.0 指数形式:指数形式:一般形式为:一般形式为:a E n a E n (a(a为十进制数,为十进制数,n n为十进为十进制整数)制整数) 指数:指数:1 1e3 1.8e-3 -123e-6e3 1.8e-3 -123e-6 等价于:等价于:1000 1.8*101000 1.8*10-3 -3 -123*10 -123*10-6-6 指数:指数:-.1-.1e-3 .1E-10 e-3 .1E-10 等价于:等价于:-0.1*10-0.1*10-3-3 0.1*10 0.1*10-10-10 以下为不合法浮点数:以下为不合法浮点数:e5(e5(阶码标志阶码标志e e前无数字前无数字) )、-5(-5(无阶码标志无阶码标志) )、 5.0-e3( 5.0-e3(负号位置不对负号位置不对) )、1.5e(1.5e(无阶码无阶码) )三、实型常量三、实型常量9 93-2 常量与常量定义-字符常量字符型常量:用字符型常量:用单引号单引号括起来的括起来的单个单个字符字符 实例:实例:A A g g # # 0 0 2 2 + + , , ; ; ( ( ) )字符定界符:字符定界符:单引号单引号 字符型数据的存储格式:字符型数据的存储格式:ASCIIASCII码码(见书附录)(见书附录) 65 103 35 48 50 65 103 35 48 50如何表示不可显示字符?如何表示不可显示字符?回车回车/退格退格/TAB?如何表示定界符?如何表示定界符? 产生歧异产生歧异转义符转义符 :将:将 后面的字符转换为其它含义后面的字符转换为其它含义三、字符型常量三、字符型常量10103-2 常量与常量定义-转义符常量字符形式字符形式 功能功能 使用举例使用举例 0 0 字符串结束标志字符串结束标志 n n 换行换行( (ASCIIASCII码为码为10)10) printf(printf(”nn”);); t t 横向跳格横向跳格 printf(printf(”tt”);); b b 退格退格 r r 回车回车( (ASCIIASCII码为码为13) 13) f f 走纸换页走纸换页 字符字符(ASCIIASCII码为码为92) 92) 表示字符表示字符 单引号单引号 表示字符表示字符 ” ” 双引号双引号 ” ” 表示字符表示字符 ” ” ddd ddd 用用8 8进制表示字符进制表示字符 a a= =141141 A A=101101 换行符换行符 1212 x xhh hh 用用1616进制表示字符进制表示字符 a a= = x x6161 A A= x x4141 换行符换行符 xaxa11113-2 常量与常量定义-字符串常量字符串常量:用双引号括起来的字符序列 实例:”This is C string.” ”a” ” ” (1个空格) ” (不含空格) 串定界符:双引号 ”字符串长度:字符串中包含的字符数量。串长串长=17串长串长=1串长串长=1串长串长=0tNameAddressntNameAddressn串长串长=15空串空串实例:实例:C is very easy.C is very easy.串长串长=17注意:注意: 字符串字符串 a a 与与 字符字符a a 的区别的区别 He saidHe said ok.ok. nn串长串长=1312123-2 常量与常量定义符号常量符号常量符号常量定义形式#define 标识符 常量 用定义的一个标识符来代表一个常量,称为符号常量 例: #define PI 3.14159# 宏命令专用定义符号define 命令 标识符宏替换名(一般采用大写字符) 注意:注意:符号常量符号常量与与变量变量不同,它的值在程序运不同,它的值在程序运行过程中行过程中不能改变不能改变,也,也不能重新赋值不能重新赋值。1313#define PI 3.14159#define PI 3.14159#define R 2#define R 2main()main() float s; float s; s=PI*R*R; s=PI*R*R; printf(“s=%fn”,s)printf(“s=%fn”,s);14143-3 变量与变量的定义 一、一、 变量的数据类型变量的数据类型基本类型基本类型整型整型 intint实型实型( (浮点型浮点型) )字符型字符型 charchar单精度单精度 floatfloat双精度双精度 doubledouble指针类型指针类型派生类型派生类型数组数组结构结构 structstruct共用体共用体 unionunion空类型空类型枚举类型枚举类型1515charchar型数的内存占用空间:二进制型数的内存占用空间:二进制 8 8bit (bit (1 1Byte)Byte)0 0 0 0 0 0 0 00 0 0 0 0 0 1 01 1 1 1 1 1 1 1= =0 0= =2 20=0=1 1= =2552550 0 0 0 0 0 0 1= =2 21 1=2=20 0 0 0 0 0 1 1= =2 21 1+2+20 0=3=33-3 变量与变量的定义-字符型1616Main()Int a=35;Printf(“the number is %c”,a);输出结果为#17171.分类 根据占用内存字节数的不同,整型变量又分为类:(1)基本整型(类型关键字为int)。(2)短整型(类型关键字为short int)。(3)长整型(类型关键字为long int)。(4)无符号整型。无符号型又分为无符号基本整型(unsigned int)、无符号短整型(unsigned short)和无符号长整型(unsigned long)三种,只能用来存储无符号整数。3-3 变量与变量的定义-int1818占用内存字节数与值域下表列出ANSI标准定义的整数类型和有关数据。Turbo C的规定与之完全一致。 3-3 变量与变量的定义-int1919intint型数占用的内存空间为:二进制型数占用的内存空间为:二进制 16 16bit (2Byte)bit (2Byte)0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=1=1=3=3intintintint型整数的最型整数的最型整数的最型整数的最大大值值值值int型表示数的范围型表示数的范围:- 32768 - 32768 32767327671 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1注意:使用中要防止数据溢出注意:使用中要防止数据溢出注意:使用中要防止数据溢出注意:使用中要防止数据溢出=-1=-1intintintint型整数的最型整数的最型整数的最型整数的最小小值值值值1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0=2=21515-1=32767-1=32767=-2=-21515=-32768=-327683-3 变量与变量的定义-int2020 二进制二进制二进制二进制 7 7 7 7位位位位 二进制二进制二进制二进制 23 23 23 23位位位位单精度实型单精度实型单精度实型单精度实型尾数尾数尾数尾数阶码阶码阶码阶码尾数的符号位尾数的符号位阶码的符号位阶码的符号位3-3 变量与变量的定义-实型基本数据类型的基本数据类型的数据存储格式数据存储格式和取值范围:和取值范围: 类型 占用内存单元 取值范围 数据存储格式 float 4(32位) 3.4*10-383.4*1038 6位有效数字 double 8(64位) 10-308 10308 15位有效数字21213-3 变量与变量说明变量的说明格式:类型修饰符 类型说明符 变量列表;例如:int i; char ch, str; long k=1, m=0x12345678; double x, y=1;变量说明意味着确定了:该变量 占用内存单元的数量, 数据在内存的表示方式, 数据的取值范围。二、变量说明的基本概念二、变量说明的基本概念main()main() float s,r; float s,r; scanf(“%f”,&r); scanf(“%f”,&r); s=3.1415926*r*r; s=3.1415926*r*r; printf(“s=%fn”,printf(“s=%fn”,s);s);22223-3 变量与变量说明 变量在说明之后,没有固定的初始值,要先赋值(给定一个初始值),后使用。变量赋初值 将变量说明与赋初值合一,在说明变量时同时完成。实例char cc = a, dd = n ;int x = 10, y = -10, z; double try = 28.5, w = 1e10;二、变量赋初值二、变量赋初值23232-4 运算符一、运算符简介一、运算符简介按运算类型分类 1. 1. 算术运算符算术运算符 2.2. 关系运算符关系运算符 3. 3. 逻辑运算符逻辑运算符 4.4. 位位运算符运算符 5. 5. 赋值与赋值组合运算符赋值与赋值组合运算符 6.6. 自增自减运算符自增自减运算符 7. 7. 条件运算 8. 8. 指针运算 9. 9. 其它运算符其它运算符按运算对象的数目分类 单目运算单目运算 双目运算双目运算 三目运算三目运算目目:进行运算时需:进行运算时需要的要的操作数的数量操作数的数量24242-4 运算符-算术运算一、算术运算符一、算术运算符运算符(双目运算符/单目运算符) + 加法运算 12 正值运算 14 - 减法运算 12 负值运算 14 * 乘法运算 13 / 除法运算 13 % 求余运算 13 10%3=1优先级:* / % 同级(高),+ - 同级(低) 例:2+3*4=2+(3*4)=14结合性:相同优先级运算符进行运算时的次序 自左向右(标记为(标记为 )25252-4 运算符-算术运算实例1.参加运算的对象都是int型,结果截取为int型 10/3 10/311/311/31010. .0/3 0/3 11/311/3. .0 01/21/21 1. .0/20/210/5*310/5*310/(5*3)10/(5*3)2.2.求余运算的对象必须是整型求余运算的对象必须是整型 9%31%310%310%-3-10%3-10%-3= 3= 3= 3.333333= 3.666667= 0= 0.5= 6= 0= 0= 1 1= 1= = 1 1= = -1-1= = -1-1注意:运算对象的数据类型对运算结果的影响注意:运算对象的数据类型对运算结果的影响 a+b如何表示数学表达式 - c+d (a+b)/(c+d)26262-4 运算符-关系运算二、关系运算符二、关系运算符运算符(双目运算符 ) 大于大于 1010= = 大于等于大于等于 1010 小于小于 1010 = = 575 的值是的值是 1 1,57 57 的值是的值是 0 0。 已知:int a=13, b=2, c=1;abab)=cab=ca-b=c成立成立, 结果为结果为 1不成立不成立,结果为结果为 0成立成立, 结果为结果为 1不成立不成立,结果为,结果为 0结果为结果为 1与上面与上面等价等价,结果为结果为 1等价等价于于( (a-b)a-b)=1 1,结果为结果为 0 如何判断数学中的逻辑关系:0a9? 0=a=9等价于等价于(0=(0=a)=9a)=9 结果恒为结果恒为128282-4 运算符-逻辑运算三、逻辑运算符三、逻辑运算符运算符 & 逻辑与(双目) 5 5 () 逻辑或(双目) 4 4 () ! 逻辑非(单目) 14 14 ()逻辑运算真值表逻辑运算真值表逻辑运算真值表逻辑运算真值表a b !a !b a&b a|ba b !a !b a&b a|b1 1 1 1 0 0 1 1 0 0 1 11 0 1 0 0 1 0 1 0 1 0 10 1 0 1 1 0 0 1 1 0 0 10 0 0 0 1 1 0 0 1 1 0 0逻辑运算关系逻辑运算关系29292-4 运算符-逻辑运算式式2 2 ( ( y y b b ) & ( ) & ( y y a a ) ) 1 结果结果2 结果结果例:要判断例:要判断 0 0 x x 9 9 是否是否成立:成立: ( ( 0 0 = = x x ) & ( ) & ( x x = = 9 9 ) ) 如果没有括号:如果没有括号:0 0 = = x x & & x x = 按位右移按位右移(双目) 11 11 () 按位左移按位左移(双目) 11 11 () & & 按位与按位与 (双目) 8 8 () 按位异或按位异或(双目) 7 7 () 按位或按位或 (双目) 6 6 () 按位反按位反 (单目) 1414 ()真值表真值表真值表真值表a b aa b ab b a a b b0 0 00 0 0 1 1 1 10 0 1 1 1 1 1 1 0 01 1 0 0 1 1 0 0 1 11 1 1 0 0 01 0 0 03131实例:已知:int x=7,y=10,z=1; 设字长为8位 x&y = x&z = x y = y z = x y = x = x = x2 = x2 = 2 (0000 0111 & 0000 1010 = 0010) 1 (0000 0111 & 0000 0001 = 0001) 15 (0000 0111 0000 1010 = 1111) 11 (0000 1010 0000 0001 = 1011) 13 (0000 0111 0000 1010 = 1101) 8 ( 0000 0111 ) = 1111 1000 7 28 (0000 0111 2 = 0000 0010) 1 (0000 0111 2 = 0000 0001)2-4 运算符-位运算3232说明 关于:右移一位 = 缩小 1/2 关于:左移一位 = 扩大 2 倍 关于: 因为: x = 按位求反 = 求反运算 求负 = 求补 = 求反 + 1 所以:求反 = 求负 1 x = -x -1 7 = 8 (8) = 7注意:注意: 1. 1.位运算是位运算是对二进制对二进制的的位位进行运算进行运算 2. 2.只能只能对对intint型、型、charchar型和型和longlong型进行型进行位位运算运算2-4 运算符-位运算33332-4 运算符-自增自减运算五、自增自减运算符五、自增自减运算符运算符(单单目目 ) + 自增自增 1414 自减自减 1414+和 为单目运算,只能作用于变量只能对int、char、long和指针变量进行运算功能:+x x=x+1 x x=x1 (前缀) x+ x=x+1 x x=x1 (后缀)34342-4 运算符-自增自减运算自增自增( (自减自减) )有有前缀前缀和和后缀后缀之分。之分。 前缀前缀形式形式: : 先先自增自增( (自减自减) )再再引用引用 后缀后缀形式形式: : 先先引用引用再再自增自增( (自减自减) )前缀与后缀的区别: y=+x; x=x+1; y=x; x先加1再赋值 y=x+; y=x; x=x+1; x先赋值再加135352-4 运算符-自增自减运算实例实例实例( (1 1) ) +i; i; i+;i+; 因为在表达式中没有其它运算,结果一样。因为在表达式中没有其它运算,结果一样。( (2 2) ) x=1; x=1; y=+x; y=+x; 结果结果: : x=2,y=2x=2,y=2 y=+x;y=+x; x=x+1; y=x;x=x+1; y=x; 在做在做赋值运算之赋值运算之前,前,x x先加先加1 1,然后将,然后将x x赋给赋给y y( (3 3) ) x=1; y=x+;x=1; y=x+; 结果结果: : x=2,y=1 x=2,y=1 y=x+;y=x+; y=x; x=x+1;y=x; x=x+1; 先将先将 x x 赋值给赋值给 y ,y ,然后然后 x x 再加再加1 136362-4 运算符-自增自减运算实例实例实例( (4 4) ) main()main()int i=8;int i=8;printf(%dn,+i);printf(%dn,+i);printf(%dn,-i);printf(%dn,-i);printf(%dn,i+);printf(%dn,i+);printf(%dn,i-);printf(%dn,i-); 37372-4 运算符-赋值与赋值组合运算六、赋值与复合赋值运算符六、赋值与复合赋值运算符运算符(双目(双目 自右向左结合)自右向左结合) 赋值运算: = (不是等号) 2 例:a=b+c a=b=c=2+3凡是表达式可以出现的地方都可以出现赋值号 例:x=(a=1)+(b=2) 赋值表达式加上;即为赋值语句 注意变量赋值语句与变量说明语句的区别 变量说明语句中赋初值的变量与其它变量之间用逗号分隔,而赋值语句必须以分号结尾。 例:int a=2,b=3,c; a=2;b=5; 在变量说明中,不允许给多个连续的变量赋初值 例: int a=b=c=4;把变量把变量b和变量和变量c的值取出来相的值取出来相加后送到变量加后送到变量a中中a=(b=(c=(2+3)38382-4 运算符-赋值与赋值组合运算六、赋值与复合赋值运算符六、赋值与复合赋值运算符运算符(双目(双目 ) 复合赋值运算:e1 op= e2 2 等于:e1 = e1 op (e2)其中:op为下列10个运算符之一+ * / % | & e1为可以进行赋制操作的变量e2为合法的表达式例:x += 2; x = x + 2; x *= y+1; x = x * ( y+1); 不等价 x = x * y+1; x = 2; x = x 2;39392-4 运算符-条件运算七、条件运算符七、条件运算符运算符(三三目目 )e1 ? e2 : e3功能:如果表达式功能:如果表达式e e1 1成立成立(e e1 1值为非值为非0 0),则执行表),则执行表达式达式e e2 2;否则否则(表达式表达式e e1 1不成立),不成立),执行执行表达式表达式e e3 3例:max = (ab) ? a : b; 求变量a与b的最大值 min = (a 通过指针取结构/联合的成员 15 ( ) 改变表达式中的优先级关系 15 数组下标 15 , 逗号,表达式从左向右顺序计算 1 (type) e 将e的数据类型强制转换为type 14 sizeof (opr) 求opr所占用的内存的字节数 14结构结构数组数组42422-5 运算符的优先级与结合性按运算符的优先级分为15级按运算符的结合性分为2种自左向右结合 自右向左结合优先级不同时:运算符优先级的高低决定了进行运算的先后次序。优先级相同时:同优先级运算符的运算次序由结合性决定。例如:四则运算中的“先乘除,后加减”反映了运算符的优先级;“同级运算从左至右”反映了乘/除(加/减运算)的结合性。44442-5 运算符的优先级与结合性优先级运算符结合性优先级运算符结合性15( ) 8&. -714+ - ! + - * &(type) sizeof6|5&13* / %4|12+ -3? :11 2= += -= *= /= &= = |= =10 = 9= !=1,运算符优先级表45452-6 数据类型转换不同数据类型的数据/变量进行混合运算时,需要进行数据类型转换转换方式有两种:“显式的”类型转换“隐式的”类型转换“显式的”类型转换采用强制类型转换运算符(type) 如:float a; (int) a+15;“隐式的”类型转换是语言按照一定的类型转换规则自动进行的转换46462-6 数据类型转换“隐式的”类型转换规则 1、运算中将所有char型数据都转换成int型,float型转换成double型。 2、低级类型服从高级类型,并进行相应的转换double floatlongunsignedint char 3 3、赋值赋值运算以赋值运算符运算以赋值运算符左边左边变量的类型为准,变量的类型为准,即赋值运算符右端值的类型向左边变量的类即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应的转换。型看齐,并进行相应的转换。4747
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号