第三章数据类型、运算符与表达式 本章重点 ■1常用的数据类型 整型(-32768~32767)、实型、无符号、字符、字符串 ■2、定义变量使用变量 3、转义符(重点、n,aa) ■4、类型转换 由低向高 系统自动 用户强制 5、自增、自减 6、表达式 7、复合运算 3.1常量、变量,基本数据类型 311基本数据类型: 1在 Turbo C语言中,每个变量在使用之前必须定义其数据类型 整型 基本类型]字符型 单精度 实型(浮点型) 枚举类型 双精度 数据类型 数组类型 构造类型]{[结构体类型 共用体类型 指针类型 空类型 .常量和变量 (1).常量 在程序运行过程中,其值不能被改变的量称为常量。 如:12,0 (2)符号常量 符号常量是在一处程序中指定的用名字代表的常量
第三章 数据类型、运算符与表达式 本章重点: ◼ 1.常用的数据类型 ◼ 整型(-32768~32767)、实型、无符号、字符、字符串 ◼ 2、定义变量,使用变量 ◼ 3、转义符(重点、\n,\aaa) ◼ 4、类型转换 ◼ 由低向高 ◼ 系统自动 ◼ 用户强制 ◼ 5、自增、自减 ◼ 6、表达式 ◼ 7、复合运算 3.1 常量、变量,基本数据类型 3.1.1 基本数据类型: 1.在Turbo C 语言中, 每个变量在使用之前必须定义其数据类型。 2.常量和变量 (1).常量 在程序运行过程中,其值不能被改变的量称为常量。 如:12,0,4.6, ‘a’,’d’ (2)符号常量 符号常量是在一处程序中指定的用名字代表的常量
定义:# define符号名,常量 例: # defin pl3.141592654 definer 2.0 malI double area. circumference p %ofn PF R"R) printf( circumfernce=%f\,, 2.0"PIR) 例3.1 ).变量 其值可以改变的量称为变量。一个变量应有一个名字 变量名 SUIl 100110+变量值 存储单元 变量的名字只能由字母、数字和下划线三种字符组成,且 第一个字符不能为数字。变量名只有前8个字符有效。 系统定义的32个关键字(见P27),不能用作变量名。 变量名区分大小写 变量必须先定义,才能使用, 3.整型数 (1).整型数说明 加上不同的修饰符,整型数有以下几种类型; 整型变量(常用的) 基本型:以int表示 长整型:以long表示 无符号型:只能存放正整数,它的表示是在上述三种类型 之前加上 unsigned,如 例如 Int sum, long distance, unsigned,y 每种类型所占内存空间和表示的数的范围: 数据类型所占位数数的范围 Int 16-32768~32767 long 32-2147483648~2147483647 unsigned int 16 0~65535
定义: #define 符号名,常量 例: #defin PI 3.141592654 #define R 2.0 main() { double area,circumference; printf(“area=%f\n”,PI*R*R); printf(“circumfernce=%f\n”,2.0*PI*R); } 例 3.1 (3).变量 其值可以改变的量称为变量。一个变量应有一个名字。 变量的名字只能由字母、数字和下划线三种字符组成,且 第一个字符不能为数字。变量名只有前 8 个字符有效。 系统定义的 32 个关键字(见 P27),不能用作变量名。 变量名区分大小写。 变量必须先定义,才能使用。 3.整型数 (1).整型数说明 加上不同的修饰符, 整型数有以下几种类型; 整型变量(常用的) 基本型:以 int 表示 长整型:以 long 表示 无符号型:只能存放正整数,它的表示是在上述三种类型 之前加上 unsigned, 如: 例如 int sum,long distance, unsigned x,y; 每种类型所占内存空间和表示的数的范围: 数据类型 所占位数 数的范围 int 16 -32768~32767 long 32 -2147483648~ 2147483647 unsigned int 16 0~65535
unsigned long 32 0~4294967295 (2)、整型变量定义 可以用下列语句定义整型变量 int a b *a、b被定义为有符号短整型变量* unsigned long c /*c被定义为无符号长整型变量* (3)、整型常数表示 按不同的进制区分,整型常数有三种表示方法 十进制数:以非0开始的数 如220,-560,45900 八进制数:以0开始的数 如06:0106 十六进制数:以0X或0开始的数 如:0X0D,OXFF,0x4e 另外,可在整型常数后添加一个"L"或""字母表示该数为长 整型数,如22L,0773L,0Xae4L 例3 4实型(浮点型)数据 (1)、浮点数说明 Turbo c中有以下两种类型的浮点数 float单浮点数。字长为4个字节共32位二进制数,数的范 围是34x10-38-34x10+38。(34E10-38-34E+38) double双浮点数。字长为8个字节共64位二进制数,数的范 围是1.7x10-308-1.7x10+308。(1.7E-308~1.7+308) 说明 浮点数均为有符号浮点数,没有无符号浮点数。 (2)、浮点型变量定义 可以用下列语句定义浮点型变量 float a,f,/a,f被定义为单浮点型变量* double b /*b被定义为双浮点型变量* (3)、浮点常数表示 ①十进制数表示,必须要有小数点,小数点后可以无数字 例如:1.2,1.0,0.0 ②指数形式。E的前面必须有数字,e的后面要整数。 例:5e3,5e-3,5.1e8
unsigned long 32 0~4294967295 (2)、整型变量定义 可以用下列语句定义整型变量 int a, b; /*a、b 被定义为有符号短整型变量*/ unsigned long c; /*c 被定义为无符号长整型变量*/ (3)、整型常数表示 按不同的进制区分, 整型常数有三种表示方法: 十进制数: 以非 0 开始的数 如:220, -560, 45900 八进制数: 以 0 开始的数 如:06; 0106 十六进制数:以 0X 或 0x 开始的数 如:0X0D, 0XFF, 0x4e 另外, 可在整型常数后添加一个"L"或"l"字母表示该数为长 整型数, 如 22L, 0773L, 0Xae4L 例 3.2 4 实型(浮点型)数据 (1)、浮点数说明 Turbo C 中有以下两种类型的浮点数: float 单浮点数。字长为 4 个字节共 32 位二进制数, 数的范 围是 3.4x10-38~3.4x10+38。 (3.4E10-38~3.4E+38) double 双浮点数。字长为 8 个字节共 64 位二进制数, 数的范 围是 1.7x10-308~1.7x10+308。(1.7E-308~1.7+308) 说明: 浮点数均为有符号浮点数, 没有无符号浮点数。 (2)、浮点型变量定义 可以用下列语句定义浮点型变量: float a, f; /*a, f 被定义为单浮点型变量*/ double b; /*b 被定义为双浮点型变量*/ (3)、浮点常数表示 ①十进制数表示,必须要有小数点,小数点后可以无数字。 例如: 1.2 , 1.0 , 0.0 ; ② 指数形式。 E 的前面必须有数字,e 的后面要整数。 例:5e3, 5e-3, 5.1e8
(4)说明 ①浮点常数只有一种进制(十进制) ②单精度浮点型提供7位有效数字,双精度提供15-16位有 效数字。 ③绝对值小于1的浮点数,其小数点前面的零可以省略 如022可写为22,-0.0015E-3可写为-.0015E-3 5字符型数据 (1).字符型常数表示 ①能用符号表示的字符可直接用单引号括起来表示 如a',"9,"Z,也可用该字符的ASCI码值表示.例如十进 制数85表示大写字母U,十六进制数0x55表示什么字符,八进制 数0125表示什么字符。 ②转义字符(殊字符)(不能显示出来的字符表示)p29 些不能用符号表示的控制符,只能用ASCⅡ码值来表示,十 六进制数0x0A表示回车,八进制数012表示回车 也有另外一种表示表示方法,如"\033表示Esc,这里V0y符 号后面的数字表示十六进制的ASCI值当然这种表示方法也适 用于符号表示的字符 常用的字符用以下特殊规定来表示:P29 规定符 等价于 含义 LOC 换页 frtml"" "0D 回车 09 制表键 XOA 换行 X5C 符 "\X27 "X22 符 \ddd Oddd 1-3位八进制数所代表的字符 hhhh 0xhh1-2位十六进制数所代表的字符 (2)字符型变量定义 char a /*a被定义为字符变量*
(4)说明: ① 浮点常数只有一种进制(十进制)。 ② 单精度浮点型提供 7 位有效数字,双精度提供 15-16 位有 效数字。 ③ 绝对值小于 1 的浮点数, 其小数点前面的零可以省略。 如:0.22 可写为.22, -0.0015E-3 可写为-.0015E-3。 5 字符型数据 (1).字符型常数表示 ①能用符号表示的字符,可直接用单引号括起来表示, 如'a', '9', 'Z', 也可用该字符的ASCII码值表示. 例如十进 制数85表示大写字母'U', 十六进制数0x55表示什么字符, 八进制 数 0125 表示什么字符。 ②转义字符(殊字符)(不能显示出来的字符表示)p29 一些不能用符号表示的控制符, 只能用ASCII 码值来表示, 十 六进制数 0x0A 表示回车, 八进制数 012 表示回车。 也有另外一种表示表示方法, 如'\033'表示 Esc, 这里'\0' 符 号后面的数字表示十六进制的 ASCII 值,当然这种表示方法也适 用于符号表示的字符。 常用的字符用以下特殊规定来表示: P29 规定符 等价于 含义 \f '\X0C' 换页 \r '\X0D' 回车 \t '\X09' 制表键 \n '\X0A' 换行 \\ '\X5C' \符 \' '\X27' '符 \" '\X22' "符 \ddd 0ddd 1-3 位八进制数所代表的字符 \xhhh 0xhh 1-2 位十六进制数所代表的字符 (2)字符型变量定义 char a: /*a 被定义为字符变量*/
(3).字符数据在内存中的存储形式 字符在计算机中以其ASCI码方式表示,其长度为1个字 节,字符型数据在操作时将按整型数处理。即字符数据可与整型 数运算 6字符串常量 (1).定义:用一对双引号括起来的字符序列 2).字符串常量在内存中的存储。字符串在内存中以“0 转义字符作结束标记。 例:“ student d t0 该结束标志是系统自动加入的,在字符串输出时,“0不输出 字符串中的字符数称为该字符串的长度。 (3).串常量与字符常量的区别 (4).在C语言中没有字符串变量。但可用字符数组来存放字 符串常量。 3.2.变量赋初始值。 可以在定义变量时同时使变量初始化。形式如下: (1). int float f=3.56 har c=a (2). int a b c=5: (3)inta=3,b=3,c=3; 33基本数据类型之间的混合运算 .整型、实型、字符型数据之间的混合运算 如8+‘a’+1.5是合法的。高 double 在进行运算时,不同类型的数据 要先转换成同一类型,然后进行运 算。转换的规则按下图所示。 long 例:int unsigned 低 int < har short
(3).字符数据在内存中的存储形式。 字符在计算机中以其 ASCII 码方式表示, 其长度为 1 个字 节, 字符型数据在操作时将按整型数处理。即字符数据可与整型 数运算。 6 字符串常量 (1).定义:用一对双引号括起来的字符序列。 (2).字符串常量在内存中的存储。字符串在内存中以‘\0’ 转义字符作结束标记。 例:“student” 字符串中的字符数称为该字符串的长度。 (3).串常量与字符常量的区别。 (4).在 C 语言中没有字符串变量。但可用字符数组来存放字 符串常量。 3.2.变量赋初始值。 可以在定义变量时同时使变量初始化。形式如下: (1). int a=3; float f=3.56; char c=’a’; (2). int a,b,c=5; (3)int a=3,b=3,c=3; 3.3 基本数据类型之间的混合运算 1.整型、实型、字符型数据之间的混合运算。 如 8+‘ a’+1.5 是合法的。 在进行运算时,不同类型的数据 要先转换成同一类型,然后进行运 算。转换的规则按下图所示。 例: int i;
float f double d ong e 式子:10+a+ifde的运算次序。 3.4算术运算符和算术表达式 241.算术运算符 1.算术运算符如下 操作符 作用 加,一目取正 减,一目取负 乘除 %0 取模 + 减加 2、一目和二目操作 目操作是指对一个操作数进行操作。例如:a是对a进行一 目负操作 目操作(或多目操作)是指两个操作数(或多个操作数)进行 操作 需要注意的是除法和取模运算 3.除法(/ (1)若两个数为整数,则运算结果为整数,四舍五入 “向零取整”。 9/2 9/2 15/2是15除以2商的整数部分7 (2)若两个数中有一个为实数,则结果为实数。 9.0/2=4.500000 -9.0/2 4取模(%) 要求两个数都为整数,求两整数相除的余数
float f; double d; long e; 式子:10+’a’+i*f-d/e 的运算次序。 3.4 算术运算符和算术表达式 2.4.1. 算术运算符 1.算术运算符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符 作用 ──────────────────────────── + 加, 一目取正 - 减, 一目取负 * 乘 / 除 % 取模 -- 减 1 ++ 加 1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2、一目和二目操作 一目操作是指对一个操作数进行操作。例如: -a 是对 a 进行一 目负操作。 二目操作(或多目操作)是指两个操作数(或多个操作数)进行 操作。 需要注意的是除法和取模运算。 3.除法(/) (1)若两个数为整数,则运算结果为整数,四舍五入 “向零取整”。 9/2 -9/2 15/2 是 15 除以 2 商的整数部分 7 (2)若两个数中有一个为实数,则结果为实数。 9.0/2 =4.500000 -9.0/2 4.取模(%) 要求两个数都为整数,求两整数相除的余数
15%2是15除以2的余数部分1 例如 maino float f nt 1=15 f( f%of, f) 问f的值为多少? 342.算术表达式及算术运算符的优先级 1.算术表达式的定义 2.算术运算符的优先级 优先级(算术运算) 在同一级别中,采取由左至右的结合方向。如:a-b+c 相当于(a-b)+c 3.若一个运算符左右两边数据类型不同,按自动转换在 先 4.可用强制类型运算符转换一个表达式值的类型 格式:(类型名)表达式 float x=10.20 Inty (int)x+y与(intx+y)的结果 说明:表达式的值类型转换,但原来变量的类型未发 生变化 3.5自增、自减运算 运算符"++"和"-",运算符"艹+"是操作数加1,而"-"则是操 作数减1 例如 可写成x++,或++x 可写成x-,或 x++(或x-)与++x(或-x)在上例中没有什么区别,但x=m++和 x=++m却有很大差别 x=m++表示将m的值赋给x后,m加1
15%2 是 15 除以 2 的余数部分 1 例如: main() { float f; int i=15; f=i/2; printf(“f=%f”,f); } 问 f 的值为多少? 3.4.2.算术表达式及算术运算符的优先级 1. 算术表达式的定义 2. 算术运算符的优先级 优先级(算术运算): () * / % + - 在同一级别中,采取由左至右的结合方向。如:a-b+c 相当于(a-b)+c 3. 若一个运算符左右两边数据类型不同,按自动转换在 先。 4. 可用强制类型运算符转换一个表达式值的类型。 格式:(类型名)表达式 float x=10.20; int y =2; (int)x+y 与 (int)(x+y) 的结果 说明:表达式的值类型转换,但原来变量的类型未发 生变化。 3.5 自增、自减运算 运算符"++"和"--", 运算符"++"是操作数加 1, 而"--" 则是操 作数减 1。 例如: x=x+1 可写成 x++, 或++x x=x-1 可写成 x--, 或--x x++(或x--)与++x(或--x)在上例中没有什么区别, 但x=m++和 x=++m 却有很大差别。 x=m++ 表示将 m 的值赋给 x 后, m 加 1
x=++m表示m先加1后,再将新值赋给ⅹ。 36赋值表达式、逗号表达式 3.6.1赋值表达式 1.赋值符号 与“==“的区别。 2.不同数据类型之间可互相赋值,但要进行类型转换。赋值 号右边的值向赋值号左边变量的类型转换。 3.复合赋值运算 a+=3等价a=a+3 4.赋值表达式 由赋值号把一个变量和一个表达式连接起来的式子 赋值表达式与赋值语句的区别 a=1 37逗号表达式 1.逗号运算符号“ 表达式1,表达式2 先求解表达式1的值,后求解表达式2,整个表达式的值 为表达式2的值 3+5,6+8 2.逗号表达式 6+8 3逗号表达式又可以与另一表达式组成一个新的逗号表达式 逗号表达式是所有运算符中级别最低的: a=3*5a*4a+5的值为多少?
x=++m 表示 m 先加 1 后, 再将新值赋给 x。 3.6 赋值表达式、逗号表达式 3.6.1 赋值表达式 1.赋值符号:= 与 “= =“的区别。 2.不同数据类型之间可互相赋值,但要进行类型转换。赋值 号右边的值向赋值号左边变量的类型转换。 3.复合赋值运算 +=、-=、*=、/=、%=. a+=3 等价 a=a+3 4.赋值表达式 由赋值号把一个变量和一个表达式连接起来的式子。 5 赋值表达式与赋值语句的区别 a=1; a=1 3.7 逗号表达式 1. 逗号运算符号“,” 表达式 1,表达式 2 先求解表达式 1 的值,后求解表达式 2,整个表达式的值 为表达式 2 的值 3+5,6+8 2.逗号表达式 x=3+5,6+8 3 逗号表达式又可以与另一表达式组成一个新的逗号表达式, 逗号表达式是所有运算符中级别最低的: a=3*5,a*4,a+5 的值为多少?