9月26日第四次上课记录
1,运算符和表达式
逻辑运算符:!,&&,||
位运算符:<<,>>,~,^,&,|
进行表达式的值的运算时,要考虑以下几点:
- 运算符连接的运算对象个数。有几个运算对象就叫几目运算符。
- 运算符的优先级。算术运算符的优先级和数学一样,c语言共有15个运算级,其中括号的运算及最高。
- 运算符的结合性。左结合和右结合。
除法运算时,如果要对小数部分进行舍弃,大多数编译器采用向零取整的方法。
求余运算时,运算结果的符号和被除数(即第一个运算对象)相同,例如-7%5=-2。
自增运算符(++)和自减运算符(–)运算速度比+1或者-1快,代码效率高,因为它和实际机器语言指令类似,但是随着编译器越来越智能,这一优势正在消失。++(–)i速度要比i++(–)快,因为后者要创造一个临时变量,把值赋给临时变量,然后自增,返回临时变量,前者增加后直接返回值。
- ++i先递增后运算
- i++先运算后递增
C语言采用“=”作为复制运算符,赋值表达式的语法:
- 变量=表达式
表达式把右值赋给左值。“=”不能用来判断,如要判断需要用“==”,并且如果右值为表达式,还要注意精度问题。整数可以直接用 ==来比较,浮点数因为精度问题,只可以用|a-b|<x来比较。
复合赋值运算时的规则是:x(符号)=y即x=x(符号)y。
复合赋值运算的执行效率相比算术运算更高,因为复合赋值运算中的变量值计算一次,不像算数运算中要运算一次,再赋值一次。
sizeof运算符用于获得运算对象所占空间的字节数,返回整型。
2,数据混合运算和数据类型转换
1,自动类型转换(隐式类型转换),自动想表达数据能力更强的数据类型转换。转换顺序:long double>double>float>unsigned long>long>unsigned int>int
2,强制类型转换,其转换语法是:(数据类型关键字)表达式。
3,把一个数据从较低类型转换成较高类型称为类型扩展,反之称为类型压缩,类型压缩可能导致精度缺失。无论是自动还是强制转换类型都不会改变原来表达式的值和类型。
3,位运算
位运算是对二进制的位进行的运算,只能用于整型操作数,即带符号或不带符号的char,short,int,long。
运算符 | 名称 | 功能说明 |
---|---|---|
~ | 取反 | 单目,操作数每个二进制位都取反 |
& | 按位与 | 双目,两个操作数对应二进制位都是1时,结果为1 |
| | 按位或 | 双目,两个操作数对应二进制位其一是1时,结果为1 |
^ | 按位异或 | 双目,两个操作数对应二进制位相同结果为0,不同为1 |
<< | 左移 | 双目,操作数的二进制位全部左移 |
>> | 右移 | 双目,操作数的二进制位全部右移 |
左移n位即把原数乘以2的n次方,右移反之,移位即把对应位溢出。
4,C语句
C语句可大致分为两类,一类是描述计算机操作和运算的操作运算语句,一类是用于控制操作执行顺序的流程控制语句。
-
表达式语句有:
1,赋值语句
2,函数调用语句
3,空语句 -
流程控制语句有:
1,选择结构控制语句
2,循环结构控制语句
3,结束本次循环语句
4,终止循环和多分支语句
5,无条件转移语句
6,函数返回语句 -
复合语句由花括号{}形成,称为一个语句块。
除了花括号和各别语句不需要分号结束语句之外,所有的语句都需要分号作为结尾。
5,数据的输入和输出
使用输入设备向计算机程序提供数据的过程称为数据输入。
计算机程序将数据通过输出设备展示出来的过程称为数据输出。
C语言中所有数据输入和输出操作都是通过对标准I/O库函数调用完成,头文件stdio.h中声明了这些输入和输出库函数。
- printf函数
printf(格式控制字符串,输出列表)。格式控制字符串包括两部分,格式说明符和普通字符。
格式说明符:%[附加格式字符]格式字符,其中附加格式字符位可选,对输出数据的现实方式进行修饰,不能单独使用。
格式字符 | 含义 |
---|---|
d | 以十进制输出整数 |
o | 以八进制输出整数 |
x,X | 以十六进制输出整数,x大小写控制十六进制大小写 |
u | 以无符号十进制输出整数 |
f | 以小数形式输出实数,保留6位 |
e,E | 以指数形式输出实数,位数部分保留6位小数,大小写对应指数e,E |
g,G | 以f或e格式符中输出宽度较短的实数 |
c | 以字符形式输出一个字符 |
s | 输出一个字符串 |
附加格式字符 | 含义 |
---|---|
l | 指定输出long(d,o,x,u)或者double(e,f,g) |
h | 用于d,o,x,u前输出short精度 |
m | m为正整数常量。实际数据宽度小于m时,输出数据在宽度m的区域右对齐,左边补空格;实际数据宽度大于m时,按实际位数输出 |
.n | n为正整数常量,用于f,e前表示输出n位小数;用于s前表示输出n个字符;用于整型前补n-1个0 |
- | 用于m前,使数据宽度范围内左对齐 |
+ | 用于d,f,e前,输出正数带符号 |
0 | 用于m前,输出区域左边的空白补0 |
# | 用于o,x前,表示输出八进制和十六进制的前导(0,0x) |
* | 作为占位符,不打印输出列表某一项 |
- scanf函数
scanf(格式控制字符串,地址列表)。scanf函数的格式字符串包括两部分:格式说明符和普通字符。
地址列表:地址列表有多个地址组成,由逗号分开,变量的地址可以使用&来获取。
格式字符 | 含义 |
---|---|
d | 输入十进制整数 |
o | 输入八进制整数 |
x | 输入十六进制整数 |
u | 输入无符号十进制整数 |
f,e,g | 输入实数,输入double型时,必须使用附加格式字符l |
c | 输入一个字符 |
s | 输入一个字符串 |
附加格式字符 | 含义 |
---|---|
l | 用于d,o,x,u前,制定输入精度为long;用于e,f,g前,制定输入精度为double |
h | 用于d,o,x前,制定输入精度为short |
m | m为正整数常量,表示输入数据的宽度为m |
* | 表示输入的数据不存放到地址列表的地址 |
scanf输入字符时,输入内容要与格式控制字符串要求一致。