第二章 数据类型、运算符与表达式
标识符
概念:在程序中用来标识变量名、符号常量名、函数名、类型名、文件名等有效字符序列。
1)标识符只能由字母(A - Z,a - z)、数字(0 - 9)和下划线( _ )三种字符组成,且首个字符必须为字母或下划线。
2)在C语言中,大小写字母不等效。Sum和sum,i和I分别是两个不同的标识符。
3)用户自定义的标识符不能与关键字同名。
2.2.1 常量和变量
1)常量
常量又叫常数,在程序运行中其数值不能改变的量。例如:整型常量、实型常量、字符常量、字符串常量。
2)符号常量
在C语言中,用标识符表示一个常量数据称为符号常量。在程序执行过程中不能再给它赋值。
#define 标识符 常量数据
习惯上,符号常量名使用大写,变量名使用小写,以示区别。
3)变量
在程序运行中其值可以被改变的量。变量代表计算机内存中的某一处存储空间,该存储空间中存放的数据就是变量的值。
使用变量时必须先定义后使用。
2.2.2 整型数据
1.整型常量的表示方法
1)十进制形式:与数学上的整数表示相同。
2)八进制形式:在八进制整数前加数字0。
3)十六进制形式:在十六进制整数前加0x(数字0和字母X,大小写均可)。
注意:
1)八进制的数码范围为0 - 7
2)十六进制的数码范围为0 - 9和英文字母a - f(或A - F)表示10 - 15
2.整型变量分类
基本型,以 int 表示。
短整型,以 short int 表示,或以 short 表示。
长整型,以 long int 表示,或以 long 表示。
无符号型,其中无符号型又可以分为无符号整型,无符号短整型和无符号长整型,分别以 unsigned int ,unsigned short ,unsigned long表示。有符号会用一个二进制位表示正负,0为正,1为负。
| 类型 | 数的范围 |
字节数 | |
| char | 0 -- 127 | 0 -- 27 - 1 | 1 |
| signed char | -128 -- 127 | -27 -- 27- 1 | 1 |
| unsigned char | 0 -- 255 | 0 -- 28 - 1 | 1 |
| int | -32768 -- 32767 | 即 -215 -- (215 - 1) | 2 |
| unsigned int | 0 -- 65535 | 即 0 --(216 - 1) | 2 |
| short | -32768 -- 32767 | 即 -215 -- (215 - 1) | 2 |
| unsigned short | 0 -- 65535 | 即 0 -- (216 - 1) | 2 |
| long | -2147483648 -- 2147483647 | 即 -231 ---(-231 - 1) | 4 |
| unsigned long | 0 -- 4294967295 | 即 0 -- (232 - 1) | 4 |
注意:
1)int型变量保存数据范围与编译系统为int型变量分配的字节大小直接相关。32位系统以上long与int等价 为4字节大小。32位系统以下int与short等价为2字节大小。
2)长整型至少应该和整型一样长,而整型至少应该和短整型一样长。
3)short int 至少为16位,long int 至少为32位。
4)缺省的char 要么是signed char 要么是unsigned char这取决于编译器。
unsigned MAX + 1 == 0 unsigned MIN - 1 == MAX signed MIN - 1 == MAX signed MAX + 1 == MIN
sizeof()不是函数,是运算符。sizeof( x )作用是计算x在内存中所占字节数。x可以是常量、变量、表达式、标识符等。
2.2.3 实型数据
1.实型常量的表示方法
1)十进制形式:由数字(0 - 9)、正负号和小数点组成,且允许省略小数点前后的数字。例如:3.4, 4. , .3。
2)指数形式:由十进制小数 + e(或E) + 十进制整数三部分组成。例如:3.14e-7表示 3.14 * 10-7。
注意:e或E的两边必须有数,且后面必须为整数,前后数字间不得插入空格。
2.实型变量分类
实型变量分为单精度浮点型(float)和双精度浮点型(double)
1. scanf: 格式字符串“%f”需要类型“float *”的参数 。 scanf: 格式字符串“%lf”需要类型“double *”的参数 。
2. scanf: 格式字符串“%ld”需要类型“long *”的参数 。 scanf: 格式字符串“%d”需要类型“int *”的参数 。
数字后面不加L,默认的类型是int(整型)加L即表示长整型。
2.2.4字符型变量
1.字符常量的两种表示形式:
1)用单引号括起来的一个字符。例如:'A','*'等。
2)用单引号括起来的由反斜杠( \ )引导的转义字符。例如:'\n','\t'等。
| 转义字符 | 含义 | ASCII代码 |
| \n | 换行 | 10 |
| \t | 横向跳到下一制表位置(水平制表符) | 9 |
| \v | 垂直制表符 | 11 |
| \a | 响铃 | 7 |
| \b | 退格 | 8 |
| \r | 回车 | 13 |
| \f | 换页(进纸符) | 12 |
| \\ |
反斜线符''\'' |
92 |
| \' | 单引号符 | 9 |
| \'' | 双引号符 | 34 |
2.字符变量
字符变量用来存放字符常量,注意一个字符变量只能存放一个字符。
char c1,c2; 表示c1和c2为字符变量,各存放一个字符。
一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。
将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放在内存单元中去而是将字符对应的ASCII码放到存储单元中。
字符数据参与算术运算,实际上是将它们的ASCII码进行算术运算。
0 、A、a的ASCII码十进制分别为48、65、97。可以看出每一个小写字母比它相应的大写字母的ASCII码大32。
3.字符串变量
用一对双引号括起来的零个或多个字符序列称为字符串。字符串常量在机器内存储时系统会自动在字符串的末尾加一个“字符串结束符”它是转义字符"\0",该结束标志在内存中占一个字节,但不计入字符串长度。
例如:"Hello",在内存中占据6个字节空间,按顺序分别为H、e、l、l、o和NUL
字符串的长度是指该字符串中字符个数,不包括双引号。此字符串长度为5
NUL是字符串终止符,它本身并不看作是字符串的一部分。
变量初始化时指分配存储空间的同时存入数据。
2.3.2算术运算符和算术表达式
1.算术运算符
+ 表示加法。
- 表示减法。
* 表示乘法。
/ 表示除法。两个整数相除的结果是整数,5 / 3 == 1,舍去小数部分。取整
% 表示取余或模。两侧必须为整型数据,8 / 6 == 2 。取余/模。正负号与被除数一致。7 % -4 == 3 -7 % 4 == -3
不用求余运算符,求出余数: x - x / y * y
2.算术表达式和运算符优先级
乘除模加减
结合性是指同级运算时运算符的结合方向。从左往右的运算规则,称为左结合性。从右往左的运算规则,称为右结合性。
3.自增与自减
++i,--i //先增减1 再使用i
i++,i-- /*先使用i 再增减1*/
2.3.3赋值运算符和赋值表达式
1.赋值运算符
赋值符号 “ = ”的作用是将一个数据赋给一个变量。默认将赋值符号右边的数据转换成左边的变量类型。
2.赋值表达式
用赋值运算符将变量和表达式链接起来的式子。求值规则:先求赋值运算符右侧“表达式”的值,然后赋给赋值运算符左侧的变量。
3.复合赋值运算符
在赋值符“ = ”之前加上其它运算赋可以构成复合赋值运算符。
复合赋值运算符由赋值赋值运算符与算术、移位运算符、逻辑运算符组成。C语言规定可以用10种复合赋值运算符,即:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。 复合运算符是一个运算符,但功能上是两个运算符功能的组合。 a += b 相当于a = a + b
2.3.4逗号运算符和逗号表达式
在C语言程序中逗号" , "也是一种运算符。主要用于将若干表达式连接起来,逗号运算符又称顺序运算符。逗号表达式一般形式:
表达式1,表达式2,表达式3,……,表达式n。
逗号表达式的求解过程:自左向右,求解表达式1,求解表达式2,……,求解表达式n。整个表达式的值是表达式n的指。
逗号运算符是所有运算符中级别最低的。 例如:(a,b,c)是一个逗号表达式,它的值为c的值。
2.3.5条件运算符和条件表达式
条件运算符( ?:)是C语言中唯一的三目运算符。条件表达式的应用举例: int a,b,max; max = a > b ? a : b;
条件表达式一般形式:
表达式1?表达式2:表达式3。如果表达式1结果为真(非零)则条件表达式最终结果为为表达式2的值,否则条件表达式最终结果为表达式3的值。
说明:条件运算符的结合性:自右向左。
例如:a > b ? a : c > d ? c :d; 应理解为 a > b ? a : (c > d ? c : d);

浙公网安备 33010602011771号