- 1、本文档共51页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计实习2007 程序设计实习第七讲 递归 主讲教师:田永鸿 yhtian@ /cpp2008/tyh/tyh.htm /jiaoxue-CPP/cpp08.htm 2008年3月17日 内容提要 关于作业中的若干问题 递归的基本思想 例题 练习 栈与递归 作业 关于作业提交 1、从作业布置之日起,下一周的周日24:00前提交的,起评分为10分 如3月10日布置的作业,3月23日24:00前提交 2、从作业布置之日起,下下一周的周日24:00前提交的,起评分为5分 如3月10日布置的作业,3月30日24:00前提交 3、之后提交的作业,不得分 例2 #include iostream.h #include stdio.h void main( ){ char test1[1001], test2[1001],test3[1001]; cin.getline(test1,1000,a); scanf(%s,test2); cin.getline(test3,1000,a); cout test1: test1endl; cout test2: test2; cout endl; cout test3: test3endl; } 例2 输出 Visual Studio .Net/GCC/部分Visual C++ 6.0环境输出 test1: qwe test2: bg test3: dfd d Press any key to continue 部分Visual C++ 6.0环境输出 test1: qwe test2: dfd test3: bg d Press any key to continue 例3 #include stdio.h #include iostream.h void main( ){ char test1[10001], test2[1001],test3[1001]; cin.getline(test1,10,a); scanf(%c,(test2[0])); cin.getline(test3,1000,a); cout test1: test1; printf(test2: %c,test2[0]); cout endl; cout test3: test3 endl; } 例3 输出 Visual Studio .Net/GCC/部分Visual C++ 6.0环境输出 test1: qwert test2: b test3: bb cccc Press any key to continue 部分Visual C++ 6.0环境输出 test2: ctest1: qwert ??? test3: bbb ? Press any key to continue 二维数组的动态分配问题 数组动态分配P = new T[N]; 如何动态分配二维数组? 分配? int ? **ptr=new ? int*[num1]; ? ? for(int i=0; i num1; i++) ? ? ? ? ? ? ptr[i]=new ?int[num2]; 清除时反着来: ? ? for(int ? i=0;inum1;i++) ? ? ? ? ? ? delete ? []ptr[i]; ? ? delete ? []ptr; ? 其他常见问题 对于不好的编程习惯导致格式不清,最后使逻辑混乱的问题,逻辑混乱后出问题往往难以发现。建议仔细想好了程序的思路,在纸上画下流程图后再动手编写。 由于功能代码过长过于复杂导致错误难以发现。建议尽量分而治之的解决问题。多使用函数,做到每个独立功能的代码段不超过50行,并写上注释。 对输入数据的多样性估计不足,当数据不对时候,发生a[-1]越界这样的问题,有些越界后程序并没有run time error 错误非常隐蔽,对于每一个数组都应该检查分析它是否有可能出现越界错误。 在代码中尽量减少精度误差 如:result=a*b/c在计算机中和 temp=b/c; result=a*temp;运行结果并不是都是相同的。代码中做得先乘后除非常必要。如果不能做得先乘后除,那么务必在运算中使用double类型的变量保存中间结果。 其他常见问题 直接使用整数表达式的值作为if()的内容,如if(n%4)…,功力不够这样写的代码容易出错。而且一时间错误难以发现。建议取缔这样的编程风格,一律使用布尔表达式的值作为if()的内容,如if(n%4==0),使得逻辑尽量清晰。另外杜绝复杂的if条件,当情况复杂,建议多写几个判断分支
文档评论(0)