输入----->计算机处理----->输出
三步走:输入数据 处理数据 输出反馈
尽可能的将不同的功能模块分开书写。这利于修改调试,可将部分程序的错误对整体程序 的影响降到最低。
"" () <> {}
保持良好的书写习惯很重要!
char c = 'a' // 这是规范的
char c= 'abc' // 这样只会打印出 'c' ,这是因为char只有一个字节的空间,而根据计算机小 端存储的方式,'c' 被存储在低地址处,仅'c' 已占满char开辟的空间,'ab' 将不会被存储
int c = 'abc' // 这样会打印出 'abc' ,int 有四个字节空间,而字符数据与整型数据是通用 的
int c = 0x616263 // 效果与上式一致
eg: \n // 这是一个字符,不是两个
补充:%% 打印为%
'a'
'\141' // 这是一个字符
'\x61'
+
-
*
/ // 注意: 1.除数不能为0
2.整型数相除 --- 相当于是整除
% 取余 // 注意: 1.浮点型不能做求余运算
2.求余运算 第二操作数 不能是 0
3.求余运算的结果的符号 取决于 左操作数的符号
作用:a. 判断奇数偶数?
a%2 ==?
b. a%N 结果 [0~N-1]
++ // 注意: 1. 浮点数也能自增自减
-- 2. ++,-- 运算数 必须是左值 (变量)
3. 尽量避免printf("%d%d\n",i,++i);不要写出这种不确定的代码
4.op.c: In function ‘main’:
op.c:82:4: error: lvalue required as increment operand
10++;
lvalue (left value) //左值 --- 能放在 = 左边的这些量 (其实就是变量)
另外要注意:
(1)关于左值的新定义
int a;
a = 10;
constant // 常量的意思
const int a = 10; // a 只读变量 ---只能读 不能修改
左值 (lvalue -- locationable) //可定位的 ---能不能被定位到
printf("%p/n",&a) //取地址指令,获得a所在空间的首地址编号(以16进制) 能取到地址就是左值,取不到就是右值(常量是右值)
表达式、匿名变量 //都是右值,无法定位
(2)求余的应用
eg: 100道题 ? //0~99
随机除10道题?
(3)i++,++i 的辨析
单独的i++、++i都相当于i=i+1 // i++
运算中的i++、++i // a = i++
i++ //先用(表达式的结果) ,后加 (后对i加1) 有一个开辟临时空间的动作
++i //先加(先对i加1) ,后用 (表达式的结果) 没有这个动作(效率更高)
(4)贪心原则
从左到右逐个字符的扫描表达式,看这些字符能否尽可能多的结合成c的运算符
不能结合,就还是字符本身
i+++++i //
i ++ ++ + i //
i++ ++ +i //
(((i++)++) + i) //
eg:1+2 //由运算符 和 运算数 构成字符序列
所有的表达式都是有结果的(值),
表达式一定是有数据类型的 (因为其结果必然对应某一种数据类型)
表达式怎么看?
1.有哪些运算符
2.运算符的:优先级
结合性
eg: 10+'a'+1.5 — 8765.1234 *'b'
10 + 'a' + 1.5 - (8765.1234 *'b') //优先级 (优先级越高,越先结合运算数)
(((10 + 'a') + 1.5) - (8765.1234 *'b') ) //结合性
10 + 'a'
int int
(double - double ) //表达式最终值是一个double型数值
eg:char w; int x; float y; double z;
则表达式w*x+z-y所求得值的数据类型为______________。
(((w * x) + z )- y)
char * int
int * int => int
(double - double) //double
规则: 从右向左: 必转 (从C99开始不再要求float必转为double)
从下到上: 低精度类型 与 高精度类型混合运算 此时 低精度 往 高精度转
注意:1.从C99标准开始不再要求float必转为double,运算过程中还是转了,只是最后输 出又转回float
2.对于float必转是为了计算结果更精确 对于char、short必转是为了防止溢出,为其留足空间
(类型)表达式
eg:(int) (123.456) =123
赋值运算: =
赋值运算表达式的的结果,就是左值获得的值的
int a;
a = 10;
(a=(b=(c=1)))
+=
-=
*= //赋值运算
a += 1 // a = (a + 1)
逗号运算: 顺序求值运算符
形式: 表达式1,表达式2, ...,表达式n
逗号表达式的结果: 是最后一个表达式的结果