第三章 数据类型、运算符与表达式
本章重点:
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 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或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的浮点数,其小数点前面的零可以省略。如: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).字符数据在内存中的存储形式。
字符在计算机中以其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;
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
例如,
main()
{
float f;
int i=15;
f=i/2;
printf(“f=%f”,f);
}
问f的值为多少?
3.4.2.算术表达式及算术运算符的优先级算术表达式的定义算术运算符的优先级
优先级(算术运算):
() * / % + -
在同一级别中,采取由左至右的结合方向。如:a-b+c相当于(a-b)+c
若一个运算符左右两边数据类型不同,按自动转换在先。
可用强制类型运算符转换一个表达式值的类型。
格式:(类型名)表达式
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后,再将新值赋给x。
3.6 赋值表达式、逗号表达式
3.6.1赋值表达式
1.赋值符号:= 与,= =“的区别。
2.不同数据类型之间可互相赋值,但要进行类型转换。赋值号右边的值向赋值号左边变量的类型转换。
3.复合赋值运算
+=、-=、*=、/=、%=.
a+=3 等价 a=a+3
4.赋值表达式由赋值号把一个变量和一个表达式连接起来的式子。
5赋值表达式与赋值语句的区别
a=1; a=1
3.7逗号表达式逗号运算符号“,”
表达式1,表达式2
先求解表达式1的值,后求解表达式2,整个表达式的值为表达式2的值
3+5,6+8
2.逗号表达式
x=3+5,6+8
3逗号表达式又可以与另一表达式组成一个新的逗号表达式,逗号表达式是所有运算符中级别最低的:
a=3*5,a*4,a+5 的值为多少?