//编程原则:高内聚 低耦合
算数运算符和算术表达式
运算符 表达式:
算术运算
+
-
*
/
% 取余
++ 自加
-- 自减
运算符
表达式 由 运算符 和 运算数 构成的 字符序列
1+2 //所有的表达式都是有结果的(值)
//表达式一定是有数据类型的
隐式类型转换:
double <-- float
^
|
long
^
|
unsigned
^
|
int <-- char/short
规则:
从右向左:必转
从下向上:由低精度向高精度转换 //低精度直接转为目标高精度 不需要经过中间值
表达式怎么看?
1.有哪些运算符?
2.运算符的
优先级? //查表(运算符和结合性)
结合性? //查看要求运算对象的个数
除法
注意: 1.除数不能为0
2.整型数相除 --- 相当于整除
强制类型转换
(类型)表达式 eg:(double)a/b //强制类型转换仅在本行生效
123.456
番外:linux下的两类错误:
1.编译时的问题
错误 --- 语法错误 //error
警告 --- 语法不合适 //warning
2.运行时的问题
逻辑问题 --- 调整思维
取余
注意
1.浮点型不能做求余运算
2.求余运算第二个操作数不能是0
3.有符号数求余运算结果的 符号 只取决于 左操作数 的符号
求余算法的作用
a.判断奇数偶数
a%2 == ?
b.随机出题
a%N 结果 [0~N-1]
随机出十道题?
随机数的产生
工具:
函数
随机数产生的函数
伪 <---> 假
int rand(void);
srand(int seed);
time(NULL);
++ //自加
-- //自减
参与另一种运算才可讨论“先加后用”或“先用后加”
i++ //先用(表达式的结果)后加(i)
++i //先加后用
i++ //表达式的结果?
i++ 需要开一片内存储存结果再给i赋值
++i 直接加,后用结果 效率比i++高(不需要独立开空间存储)
注意:
1.浮点数也能自增自减
2.++ -- 运算数 必须是左值(变量)
3.运算数必须不为只读变量
4.注意尽量避免
printf("%d%d\n",i,++i);
这种不确定的代码
左值(lvalue -- locationable):能被定位到地址的变量
表达式与匿名变量都是右值
“贪心原则” :从左到右逐个字符的扫描表达式,看这些字符能否尽可能多的结合成c的运算符不能结合,就还是字符本身
赋值运算:
=
赋值运算表达式的结果,就是左值获得的值
int a;
a = 10;
(a = (b = (c = 1)))
a += 1 // a = ( a + 1 )
逗号运算:顺序求值运算符
形式:
表达式1,表达式2,...,表达式n;
逗号表达式的结果是最后一个式子的结果
总结:
1.数据类型
整型
浮点型
字符型
a.常量
b.变量
c.长度
d.考点
2.运算符 & 表达式
隐式类型转换
强制类型转换
运算
算术>赋值>逗号
+-*
/
%
++
--