经验总结 (YC)
来源:互联网 发布:兼职美工一个月多少钱 编辑:程序博客网 时间:2024/05/16 05:26
1、编程习惯1(在一个.C文件中编程):
a.先考虑功能模块划分(需求分析),每个模块大致什么功能,接口类型与功用
b.再按需求写模块函数声明,变量声明与定义等;或者也可以(需求分析)先给出注释标记,划分出要做的模块区域(代码区域)
c.在划分好的代码区域里,根据需求分析,填写代码。
d.代码编写风格:注意在代码字符间留有一定空格,便于代码阅读。
如:int a = 0;
char *str = "black sheep wall";
e.在编写函数时,最好先把函数的返回值,先写好,或先标注好。
如:int foo()
{
return ??; //或写成exit(0);
}
2、编程习惯2(关于循环内的判断条件的重复)
以快速排序算法中一趟分割的片段代码为例
int partition(int *p,int low,int high){
int pivot = p[low];
while(low<high){
while(low<high && p[high]>=pivot) --high;//之所以在这里还要加入判断low<high,是因为--high后,有可n=high;
p[low] = p[high]; //由此可以总结出一个经验:最外层大循环判断条件(如:while(low<high))判断成立后,
while(low<high && p[low]<=pivot) ++low; //如果,大循环内会修改变量值,
p[high] = p[low]; //则必须在内部加上同样的判断条件(如:while(low<high && p[high]>=pivot))
}
p[low]=pivot;
return low;
}
如上代码最外层循环:
while(low<high)
判断成立后,进入主循环体,主循环体默认要求所有low<high,但当:
while(low<high && p[high]>=pivot) --high;
成立,并执行一次 --high之后,有可能high=low,此时如果只判断p[high]>=pivot,会出现逻辑错误,所以在子循环体中也必须也加上判断条件:low<high。如果不加,编译器显然不会报错,因为语法没错。而如果写完代码,编译通过,运行结果出错;此时,回头在一堆代码中找逻辑错误的话,是一件令人头痛的事,
所以,总结一下不难发现:如果“主循环”体对某个变量有约束,而“子循环体“对此变量有操作,则子循环体中必须“考虑”重复主循环体的“主判断条件”。这是一个很容易忽视的漏洞,针对具体物理过程,在逻辑上当然可以分析出这一做法的必要性与实际意义,但此总结可以帮助我们快速高效的进行代码写作,避免出现某些因数学逻辑错误而导致的程序错误结果。
在此不得不提一句:严老的《数据结构》,不愧为经典著作,其严谨的治学态度,带给我们的不仅仅是高质量的代码,更是一种对良好思维的训练与养成。感悟这条经验总结,花了不少时间精力,才有这一点点体会,如果有时间能亲聆她老的教诲,想必将是一大宝贵的经历。
a.先考虑功能模块划分(需求分析),每个模块大致什么功能,接口类型与功用
b.再按需求写模块函数声明,变量声明与定义等;或者也可以(需求分析)先给出注释标记,划分出要做的模块区域(代码区域)
c.在划分好的代码区域里,根据需求分析,填写代码。
d.代码编写风格:注意在代码字符间留有一定空格,便于代码阅读。
如:int a = 0;
char *str = "black sheep wall";
e.在编写函数时,最好先把函数的返回值,先写好,或先标注好。
如:int foo()
{
return ??; //或写成exit(0);
}
2、编程习惯2(关于循环内的判断条件的重复)
以快速排序算法中一趟分割的片段代码为例
int partition(int *p,int low,int high){
int pivot = p[low];
while(low<high){
while(low<high && p[high]>=pivot) --high;//之所以在这里还要加入判断low<high,是因为--high后,有可n=high;
p[low] = p[high]; //由此可以总结出一个经验:最外层大循环判断条件(如:while(low<high))判断成立后,
while(low<high && p[low]<=pivot) ++low; //如果,大循环内会修改变量值,
p[high] = p[low]; //则必须在内部加上同样的判断条件(如:while(low<high && p[high]>=pivot))
}
p[low]=pivot;
return low;
}
如上代码最外层循环:
while(low<high)
判断成立后,进入主循环体,主循环体默认要求所有low<high,但当:
while(low<high && p[high]>=pivot) --high;
成立,并执行一次 --high之后,有可能high=low,此时如果只判断p[high]>=pivot,会出现逻辑错误,所以在子循环体中也必须也加上判断条件:low<high。如果不加,编译器显然不会报错,因为语法没错。而如果写完代码,编译通过,运行结果出错;此时,回头在一堆代码中找逻辑错误的话,是一件令人头痛的事,
所以,总结一下不难发现:如果“主循环”体对某个变量有约束,而“子循环体“对此变量有操作,则子循环体中必须“考虑”重复主循环体的“主判断条件”。这是一个很容易忽视的漏洞,针对具体物理过程,在逻辑上当然可以分析出这一做法的必要性与实际意义,但此总结可以帮助我们快速高效的进行代码写作,避免出现某些因数学逻辑错误而导致的程序错误结果。
在此不得不提一句:严老的《数据结构》,不愧为经典著作,其严谨的治学态度,带给我们的不仅仅是高质量的代码,更是一种对良好思维的训练与养成。感悟这条经验总结,花了不少时间精力,才有这一点点体会,如果有时间能亲聆她老的教诲,想必将是一大宝贵的经历。
- 经验总结 (YC)
- yc
- 习羽日记(yc)
- YC创始合伙人七年经验总结:创业路上如何避开这八只拦路虎
- 打靶递归--10枪90环(YC)
- 与皇后的凌晨之约(YC)
- yC 逆着看
- GUI经验总结(待续)
- iText经验总结(转)
- 实习经验总结(1)
- Richfaces经验总结(推荐)
- [ACM] 经验总结(一)
- 项目经验总结(一)
- 项目经验总结(二)
- 项目经验总结(三)
- 项目经验总结(1)
- 项目经验总结(2)
- 项目经验总结(3)
- Linux Programming的学习重点
- C语言中操作字符串的一些函数源代码(zz)
- ALV GRID参考文档(II)
- SQLServer不同行列相减实例解析
- C语言中String库详释(zz)
- 经验总结 (YC)
- Struts中DispatchAction的使用.
- 在Emacs下用C/C++编程(zz)
- Spring AOP
- 生活在Emacs中(zz)
- Tomcat5.5数据源的配置
- hippie-expand(zz)
- Gcc的编译流程分为了四个步骤:
- 绕过Hibernate API,直接通过JDBC API批量更新和插入数据