c语言个人笔记
E.menos
代码规范性!!!
- 如何看懂一个程序?
- 流程
- 每个语句的功能
- 试数
三. 运算符
3.1 分类
算数运算符
+ - * /(除) %(取余)
关系运算符
> >= < <= !=(不等于) ==(等于)
-
逻辑运算符
!(非) &&(并且) ||(或) -
赋值运算符
= += *= /= -=
a += 3 ;a = a + 3;
优先级别:算数>关系>逻辑>赋值
3.2 除法与取模运算符
1.除法 / 的运算结果和运算对象的数据类型有关,两个数都是int则商就是int,若商有小数,则截取小数部分; 被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分。
如: 16/5==3 16/5.0==3.20000 -13/4==-3 -13/-3==4 3/5==0 5/3==1
最典型的例题就是求s=1+1/2+1/3+1/4+1/5···+1/100的值。
2.取余 % 的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同。
如: 13%3==1 13%-3==1 -13%3==-1 -13%23 ==-13 3%5==3
3.3 逻辑运算符
!(非) &&(并且) ||(或)
!真 假
!假 真
真&&真 真
真&&假 假
假&&真 假
假&&假 假
真||真 真
真||假 真
假||真 真
假||假 假
C语言对真假的处理:
非零是真(1)
零是假(0)
&&左边的表达式为假,右边的表达式肯定不会执行
||左边的表达式为真,右边的表达式肯定不会执行
#include <stdio.h>
int main(void)
{
int i = 10;
int k = 20;
int m;
m = (1>2) || (k=5); //不含有分号的是表达式,含有分号的是语句
printf ("m = %d, k = %d\n",m,k);
return 0;
}
3.4 其他小知识
-
自增
-
分类:
- 前自增 – ++i
- 后自增 – i++
-
异同:
- 相同: 最终都使i的值加一
- 不同: 前自增整体表达式的值是i加1后的值
后自增整体表达式的值是i加1前的值
#include <stdio.h> int main(void) { int i; int j; int k; int m; i = j = 3; k = i++; m = ++j; printf("i=%d,j=%d,k=%d,m=%d\n",i,j,k,m); return 0; //输出结果 i = 4, j = 4, k = 3, m = 4 }
-
为什么会出现自增?
代码更精炼;自增效果更快 -
自增几个问题:
- 编程时尽量屏蔽前自增与后自增的差别
- 自增表达式最好不要作为一个更大的表达式的一部分来使用
(最好单独成一个语句,不要作为完整复合语句的一部分来使用)
如:int m = i++ + ++i + i + i++;
这样写不但是不规范的代码,而且是不可移植的代码(在不同设备上执行结果不同【顺序点的问题】)
顺序点:三个“,”“;”“()”
-
-
自减
(同自增)略 -
三目运算符
格式:
A ? B ; C
等价于if(A) B; else C;
-
逗号表达式
格式:
(A, B, C, D)
功能:
从左到右执行;
最终表达式的值是最后一项的值;