教主的经典书,做个简单的小结
如果没有足够的时间用来实践,那么学得快,忘得也快。
提示1-1 整数用%d输出,实数用%lf输出
提示1-2 整数 / 整数 = 整数, 浮点数 / 浮点数 = 浮点数
提示1-3 scanf中的占位符和变量的数据类型应该一一对应,每个变量前需要&符号
提示1-6 每行输出均以回车符结束,包括最后一行,除非特别说明,每行的行首不应该有空格,
每两个数和字符串之间应该用单个空格隔开。
提示1-7 尽量用const关键字声明常数
提示1-9 printf的格式字符串可以包含其他可打印符号,打印时原样输出
提示1-16 C语言中的逻辑运算符都是短路运算符。一旦能够确定整个表达式的值,就不再继续计算
提示2-6 浮点运算可能存在误差,在进行浮点数比较的时候,应考虑到浮点误差
提示2-10 在观察无法找到错误时,可以用“输出中间结果”的方法查错
提示2-16 变量在未赋值之前的值是不确定的,特别的,它不一定等于0
提示3-2 常常难以精确计算出需要的数组大小,数组一般会声明的稍大一些,在空间够用的情况下,浪费一些不要紧
提示3-3 比较大的数组应尽量声明在main函数之外
提示3-6 在很多情况下,最好是在做一件事之前检查是不是可以做,而不要做完后悔,“悔棋”往往比较麻烦
提示3-7 C语言中的字符型关键字用char表示,它实际存储的是字符的ASC码,字符常量可以用单引号表示,在
语法上可以把字符当int型使用
提示3-9 可以用sprintf把信息输出到字符串,用法和printf,fprintf类似。但你应当保证字符串足够大
提示3-11 字符的本质是数组,它也不是“一等公民”,只能用strcpy,strcmp,strcat等执行赋值,比较,连接
,而不能用=,==,<=,+等运算符,上述函数位于string.h
提示3-12 滥用++,--可能带来隐蔽的错误,建议每条语句只用一次这种运算符
提示3-17 C语言不禁止程序读写“非法内存”。
提示3-18 C语言gets(s)存在缓冲区溢出漏洞,不推荐使用
提示3-19 当任务比较复杂时,可以用预处理的方式简化输入,并提供更多的数据供使用。复杂的
字符串处理题目往往可以通过合理的预处理简化任务,便于调试。
提示3-21 在程序比较复杂的时候,除了设计阶段可以用伪代码理清思路外,编码阶段可以采用迭代
开发--每次只实现一点小功能,但要充分测试,确保它正常工作
顺便说一句C++中还有一种“字符串流”,可以实现类似sscanf,sprintf的功能 <sstream>
如果按照自己的方式处理字符串,千万要保证它以'\0'结尾
提示4-7 即使最终答案在我们选择的数据类型范围以内,计算的中间结果仍然可能溢出
提示4-8 建议把谓词命名为is_xxx的形式,int值,0表示假,非0表示真
提示4-10 编程时合理使用assert宏,将给调试带来很大的方便
提示4-19 在运行时,程序会动态创建一个堆栈段,里面存放着调用栈,因此保存着函数的调用关系和局部变量