- 1、本文档共44页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构习题课 马 瑞 Oct. 27 2004 编程技巧与常见问题 关于函数 特殊情况与边界情况 指针 内存管理 代码,从“头”说起 常见错误及解决方法 编程经验 推荐书目 关于作业 关于函数 为什么要写函数? 实现一个逻辑意义上的独立功能 清晰、完整、独立 减少重复代码 代码重复3次以上应该写成函数 例子:有理数格式化打印输出 好的函数具有的特性 通用性:可以用于解决不同问题 独立性:不依赖于上下文代码 例子:有理数格式化打印输出(输出函数的两种形式) 关于函数 选择合适的参数和返回值 形参与实参 形参:函数在声明或定义时,所写出的参数定义 实参:实际调用时,传给函数的实际参数 传值参数和传址参数(值参与变参) 传值参数: 只将实参的值传入函数,函数中的操作不会影响实参本身 传址参数: 将实参本身地址传入函数,函数中的操作会影响实参 关于函数 选择合适的参数和返回值 传值参数和传址参数(值参与变参) pascal: procedure proc1(m: integer; var n: integer); Visual Basic sub sub1(byval m as integer, n as integer) default: byref c void func1(int m, int *pn); 调用:func1(m, n); c++ void func1(int m, int n); 关于函数 选择合适的参数和返回值 向函数内传递的数据 传值参数(或全局变量) 函数传出或改变的数据 返回值、传址参数(或全局变量) 单个数据对象:返回值 多个数据对象:传址参数+返回值(状态值等) 尽量不要使用全局变量 逻辑不清楚,容易被其他操作误改变 特殊情况:过程模型的状态变量 编程技巧与常见问题 关于函数 特殊情况与边界情况 指针 内存管理 代码,从“头”说起 常见错误及解决方法 编程经验 推荐书目 关于作业 特殊情况与边界情况 在各种问题中普遍存在 解决问题时需要预见 特殊情况与边界情况的处理 特殊处理 给出提示信息 多做测试 测试数据考虑边界情况和特殊情况 本门课程的作业:不必故意使用错误数据来测试 特殊情况与边界情况 常见边界情况 数值 0 做除数时:给出错误信息 多项式的项系数为0:消去 多项式的项指数为0:6x^0 ? 6, 1 多项式系数、指数为1:1x^1 ? x 负数 判断大小 特殊情况与边界情况 常见边界情况 指针 NULL 做操作前,先判断指针是否等于NULL 第一个 无头节点时,增加或删除第一个节点 (例子:约瑟夫环问题,m==1) 最后一个: 无头节点时,删除最后一个节点 循环链表,删除最后一个节点 特殊情况与边界情况 常见边界情况 字符串 字符串结尾,’\0’ 空串 文件结尾 feof(FILE *file) 编程技巧与常见问题 关于函数 特殊情况与边界情况 指针 内存管理 代码,从“头”说起 常见错误及解决方法 编程经验 推荐书目 关于作业 指针 指针本身是一个变量 指针变量的值是一个内存地址 区分:指针变量本身和指针指向的空间 char *pc; malloc与free pc=(char *)malloc(sizeof(char)); 先分配空间:malloc(sizeof(char)) 再把空间地址赋值给pc:pc=(char *)… free释放的是指针指向的空间 pc=(char *)malloc(sizeof(char)); free(pc); //pc仍然指向该内存 pc=NULL; // 杜绝“野指针” 指针 分配空间的管理 malloc分配的空间,系统不管,自己负责 void test() { int *pn=(int *)malloc(sizeof(int)); } 函数结束后,pn本身作为局部变量被销毁,但为pn分配的空间不会被销毁,成为“无主之地” 在函数结束之前“接管”为pn分配的空间 make_node函数 指针 char c, *pc; int *pn; c=a; pc=c; c=b; *pc=c; pc=(char *)malloc(sizeof(char)); *pc=d; free(pc); pn=((int *)malloc(sizeof(int)); pc=(char *)malloc(sizeof(char)*2); *pc=e; //pc[0]=e; *(pc+1)=f; //pc[1]=f; free(pc); pc=NULL; 编程技巧与常见问题 关于函数 特殊情况与边界情况 指针 内存管理 代码,从“头”说起 常见错误及解决方法 编程经验 推荐书目 关于作业 内存管理 内存分配方式 从静态存储区域分配。内存在程序编译的时候就已经分配好,
文档评论(0)