第三章 简单的算术运算和表达式
算数运算符:一元、二元、三元(条件运算符)
1/2是整型除法,1.0/2是浮点数除法
求余运算(%)限定参与运算的两个操作数必须为整数,不能对两个实型数据进行求余运算
余数的符号与被除数的符号相同
C语言中没有幂运算符!
//L3-1
复合的赋值运算符
- +=:a+=b; 等价于 a=a+b;
- -=
- *=
- /=
- %=
增1和减1运算符(一元运算符)
- ++x:前缀运算符,在变量使用之前对其执行加1操作
- m=++n; 等价于 n=n+1;m=n;
- x++:后缀运算符,先使用变量的当前值,然后对其进行加1操作
- m=n++; 等价于 m=n;n=n+1;
良好的程序设计风格提倡在一行语句中一个变量最多只出现一次增1或者减1运算
不建议在程序中使用复杂的增1和减1运算符,过多的增1和减1运算符会导致程序的可读性变差
宏常量和宏替换
//L3-2
//L3-3
幻数:在程序中直接使用的常数
- 导致程序的可读性变差
- 容易发生书写错误
- 难以修改
把幻数定义为宏常量或const常量,用一个简单易懂的名字来代替一个长字符串
能提高程序的可读性
//L3-4
宏定义中的标识符被称为宏名
习惯上用字母全部大写的单词来命名宏常量
将程序中出现的宏名替换为字符串的过程称为宏替换
宏定义的宏名与字符串之间可有多个空白符,无需加等号
字符串后不以分号结尾
宏定义不是C语句,而是一种编译预处理命令
宏常量没有数据类型,const常量可以声明数据类型
//L3-5
表达式中的自动类型转换:
- C编译器在对操作数进行运算之前将所有操作数都转换为取值范围较大的操作数类型,称为类型提升。
- 类型提升可以避免数据信息丢失的情况发生。
在一个赋值语句中,若赋值运算符左侧的变量的类型与右侧的表达式的类型不一致,则赋值时会发生自动类型转换
类型转换的规则是:将右侧表达式的值转换为左侧变量的类型
//L3-6
将取值范围小的类型转换为取值范围大的类型是安全的,而反之则是不安全的
尽量避免使用这种自动的类型转换,建议使用强制类型转换运算符
强制类型转换就是明确地表明程序打算执行哪种类型转换,有助于消除因隐式的自动转换而导致的程序隐患
//L3-7
常用的标准数学函数
//L3-8
常用的标准数学函数
sqrt(x) | 平方根 |
fabs(x) | 绝对值 |
log(x) | 自然对数 |
log10(x) | 以10为底的对数 |
exp(x) | 指数 |
pow(x,y) | x的y次方 |
sin(x) | 正弦 |
cos(x) | 余弦 |