自学金字塔原理
知识点|要点|练习|备注
要解决问题,需要积累处理数据的方式
编程之前先画流程图
1.准备数据
2.处理数据
3.输出数据
编程的一个原则:高内聚,低耦合——减少每个模块之间的关联,尽可能让每个模块独立
成对出现的成对敲
变量:
char
unsigned char
singned char
字符数据存储:存的是编码值 (ASCII值)
ASCII表要熟悉:
转义字符要知道:当做一个字符,对应一个数值
练习:
打印出 abc\tij#k\n
字符常量的形式:
1. 直接写符号 'a' 97
2. 八进制 '\141' 0141
3. 十六进制 '\x61' 0x61
考点:
1. 'abcd' // 多个字符 打印出最后一个
2. 数字字符与数值之间 转换
3. 字符大小写转换
算数运算
运算符:
+
-
*
/
a % [N] 结果 【0~N-1】
练习:
123.4567保留两位小数
注意:
1.浮点型不能做求余运算
2.求余运算,第二操作数不能为0
3.最终运算结果符号取决于左操作数符号
用处:
a.判断奇数偶数?a%2 == ?
b.抽题的程序?
工具:
随机数的产生的函数 rand;伪随机数int rand(void);
++ // 自加
-- // 自减
i++ // 先用(表达式的结果)后加
i++表达式的结果在哪?会在 i 下面开辟临时空间,用完之后销毁掉,几乎看不到它的存在
表达式:由运算符和运算数构成的字符序列
++i //先加后用(表达式的结果)效率高(不用开辟空间)
注意:
1.浮点数也能自加自减
2.++ -- 运算数必须是左值(lvalue -- locationable)— 能被定位到的值(可进行一下取地址运算来确定)
3. 匿名变量、表达式 都是右值
4. 尽量避免printf("%d%d%d\n",i,i++,++i)这样的不确定的代码
5. i+++++i // 贪心原则:从左到右逐个字符的扫描表达式,看这些字符能否尽可能多的结合成c的运算符,否则就还是字符本身。
(((i++) ++) + i) i++为一个表达式,是右值,中间的++需要一个左值,所以会报错
1+2 // 所有的表达式都是有结果(值)的
// 表达式一定是有数据类型的
各类数值型数据之间的混合运算——隐式类型转换
规则:
从右向左—必转;从c99标准之后,不要求float型强制转为double型(也可以理解为中途转换,结构又转换回来)
从下到上—非必转:低精度类型与高精度类型混合运算,此时低精度往高精度转换
运算符的优先级和结合性:
优先级:优先级数字越大,优先级越高,越先结合运算数,通过结合的个数(单目、双目)和结合性进行结合
练习:
10 + ' a ' + 1.5 - 8765.1234 * ' b '
10 + ' a ' + 1.5 - (8765.1234 * ' b ')// 优先级
(((10 + ' a ') + 1.5) - (8765.1234 * ' b '))// 结合性
10 + ' a '
int + char(必转)=int + int = int
(int + 1.5)=(int + double)= double
(double - double = double)
赋值运算表达式的结果,就是左值获得的值
赋值运算符:+= -= *= /=
如:a+=1 ----> a=a+1
形式:
表达式1,表达式2,……,表达式n
逗号表达式的结果是最后一个表达式的结果
编译时的问题
错误——语法问题
警告——语法不合适
运行时的问题
逻辑问题——调整思维
如:
除法1.除数不能为0
2.整型数相除——相当于整除
强制类型转换:
格式: (类型)表达式
1. 数据类型
整型
字符型
浮点型
a. 常量
b. 变量
c. 长度
d. 考点
2. 运算符&表达式
隐式类型转换
强制类型转换(不会改变值,只是个运算)
算数 > 赋值 > 逗号
+ - *
/
%
++
--
贪心原则
1.请编译程序将“China ”译成密码,
用原来字母后面的第4个字母代替原来的字母
流程图:
#include
int main()
{
char c1 = 'C';
char c2 = 'h';
char c3 = 'i';
char c4 = 'n';
char c5 = 'a';
printf("%c%c%c%c%c\n",c1+4,c2+4,c3+4,c4+4,c5+4);
return 0;
}
2.给出两个数
第一个数的个位作为新数的千位,
第一个数的十位作为新数的个位,
第二个数的个位作为新数的百位,
第二个数的十位作为新数的十位,
打印该数
流程图:
#include
int main()
{
int a = 54;
int b = 78;
int c;
c =( (a%10)*1000 + (b%10)*100 + (b/10)*10 + (a/10) )
printf("c = %d\n",c);
return 0;
}