3.第三章:数据类型运算符与表达式
3.1常量和变量
3.1.1常量
常量有以下几类:整型常量,实型常量,字符常量,字符串常量,符号常量。
其中符号常量的定义:
#define 标识符 常量
#define PI 3.1415926
3.1.2变量
#变量的定义:
int c1, c2, c3;
#变量的赋值
c1 = 10
3.2数据类型
类型 | 说明 | 空间 (字节) |
---|---|---|
char | 字符型 | 1 |
int | 整型 | 4 |
short/long int | 短整形 / 长整形 | 2 / 4 |
float | 单精度实型 | 4 |
double | 双精度实型 | 8 |
修饰符 | 说明 |
---|---|
signed | 有符号 |
unsigned | 无符号 |
3.3整型
3.3.1整型常量
1.十进制:由0-9组成:100 , -200
2.八进制:由0开头,数字0-7组成,如0111 (=71), 010007 (=4103)
3.十六进制:由0X或0x开头,由0-9, a-f (或A-F)组成,如0x16 (=22), 0xA3 (=163)
3.3.2整型变量
见3.1.2
3.4实型数据
3.4.1实型常量
1.小数形式: 数字0-9和小数点组成,小数点必须有: 0.3 .23 23. 都合法
2.指数形式: 3.14E-2 (=0.0314)
3.5字符常量
3.5.1字符常量
由单引号括起作为定界符
1.普通字符常量:值由ASCII码确定
2.转义字符常量:
字符 | 功能 | ASCII码 |
---|---|---|
\0 | 表示字符串结束 | 0 |
\n | 换行到下一行行首 | 10 |
\t | 横向跳格到下一个输出区 | 9 |
\v | 竖向跳格 | 11 |
\b | 退格 | 8 |
\r | 回车 | 13 |
\f | 换页到下页开头 | 12 |
\' | 单引号字符 | 39 |
\" | 双引号字符 | 34 |
\\ | 反斜杠字符 | 92 |
\ddd | 1~3位8进制数表示的字符 | 0-255 |
\xhh | 1~2位16进制数表示的字符 | 0-255 |
#举例:
printf("This\tisn\b\ta\t\'book\'\n")
输出:
This_ _ _ _is_ _ _ _ _ _a_ _ _ _ _ _ _'book'
3.5.2字符变量
字符变量 | ASCII码 |
'A' | 65 |
'a' | 97 |
'1' | 49 |
' ' | 32 |
'%' | 37 |
'\n' | 10 |
3.5.3字符串常量
由双引号括起的字符序列,自动以\0作为结束标志
存储格式 | C | h | i | n | a | \0 |
实际以ASCII存储 | 67 | 104 | 105 | 110 | 97 | 0 |
注:字符常量与字符串常量不同
常量 | 'A' | "A" |
---|---|---|
类型 | 字符常量 | 字符串常量 |
存储方法 | 65 | 65 0 |
3.6运算符
3.6.1运算符
1.1算术运算符: + - * / %
1.2自增减运算符
结合方向由右到左
注:在只需对变量本身进行加减的情况下前后缀运算效果相同,但表达式的结果可能不同
#后缀运算:先把I的值赋给X然后I的值加1
x=i++
#前置运算:先把I的值加1再将I的值赋给Y
y=++i
int a=3,b=5,c,d;
c=(++a)*b;
#结果为a=4,c=20
int a=3,b=5,c,d;
c=(a++)*b;
#结果为a=4,c=15
2.赋值运算符
如:
a+=b 等价于 a=a+b
a%=b 等价于 a=a%b
...
3.逻辑运算符
! | 非 |
&& | 与 |
|| | 或 |
(1) !的结合方向由右到左且优先级高于算术运算符, &&,|| 的结合方向由左到右,优先级低于算术运算符和关系运算符但高于赋值运算符
(2) 优先级:! > && > ||
(3) !15 = 0 , !1 = 0, !0 = 1
(4)&&前表达式不为0才会执行后侧, ||前表达式为0才会执行后侧
4.条件运算符
由?和:组成,连接三个对象,唯一的三目运算符
优先级高于赋值运算符和逗号运算符但低于其他运算符结合性方向为自R至L
表达式1 ? 表达式2 : 表达式 3
先计算表达式1,若为非零值则整个表达式的值为表达式2,若为0则整个表达式的值表达式三
5.逗号运算符
用于连接若干个表达式
依次计算被逗号分隔的表达式,并将最后一个表达式的值作为整个逗号表达式的值
6.圆括号运算符
优先级最高. 将某些运算符和运算对象括起来后,他们应被优先运算
3.6.3表达式数据类型转换
1.自动转换
char,short→int→unsighed→long→double←float
2.强制转换
(类型标识符)表达式
(float)10/4
#10转换后计算除法
(float)(10/4)
#先计算除法,将结果转换
#无小数的除法运算直接删除小数点后数位
#int 10/ int 4 = 2
强制转换时,得到一个转换后的中间变量,原变量类型未改变
4.第四章:基本输入输出
4.2数据输出
4.2.1字符输出函数putchar(c)
在屏幕上输出一个字符
使光标移至下一行:
putchar('\n')
4.2.2格式输出函数printf(格式控制,参数2,参数3,...,参数n)
格式说明符:
格式说明符 | 说明 |
---|---|
%d 或 %i | 有符号10进制输出整数 |
%o | 无符号八进制输出整型数(无0) |
%x 或 %X | 无符号16进制输出整型数(无0x) |
%u | 无符号十进制输出整型数 |
格式说明符 | 说明 |
---|---|
%f | 以小数形式输出的实型数 |
%e 或 %E | 以指数形式输出的实型数 |
%g 或 %G | 以数值宽度最小的形式输出的实型数 |
格式说明符 | 说明 |
---|---|
%c | 输出一个字符 |
%s | 输出一个字符串(不包含结尾标识 \0 ) |
格式说明符 | 说明 |
---|---|
%% | 输出%本身 |
符号 | 说明 |
---|---|
l | 输出长整型数(只可与d,o,x,u结合使用) |
M | 指定数据输出的宽度,不足则空格补齐,超出则按实际宽度输出 |
.n | 对于%f或%e输出的实型数据,输出n位小数,若小数位超出则四舍五入 对于%s输出的字符串则表示从字符串左端截取N个字符 |
+ | 使输出的数值数据无论正负都带符号输出 |
- | 使数据按左对齐方式输出(没有则右对齐) |