一,概述

主要讲解如何保证编程的正确性。在程序中加入断言(assert(断言内容) //如果错误,则终止程序。否则正常执行)。

typdef   //声明自定义类型

typedef int size; //声明int 型整数的别名

size array[4];

[html] view plaincopy
  1. typedef struct tagNode
  2. {
  3. char *pItem;
  4.  pNode  *pNext;
  5. } *pNode;

测试结构题大小的程序

[html] view plaincopy
  1. #include "stdio.h"
  2. typedef struct tagNode
  3. {
  4. char *pItem; //32位
  5. struct tagNode  *pNext;//32位
  6. } *pNode;
  7. int main()
  8. {
  9. printf("%d\n",sizeof(struct tagNode));
  10. return 0;
  11. }

二,习题

5)测试、断言优化过程

[html] view plaincopy
  1. for (i = 0; i < n - 1; ++i)
  2. assert(a[i] < a[i+1]);

如何利用二分的性质来进行处理还是一个问题。

一种办法是:

[html] view plaincopy
  1. int bs(int *a, int b, int e, int v)
  2. {
  3. int *begin = a + b, *end = a + e, *mid;
  4. if (!a || b >= e) return -1;
  5. while (begin < end)
  6. {
  7. mid = begin + ((end - begin) >> 1);
  8. assert(*begin <= *mid && *mid <= *end);
  9. if (*mid > v) end = mid;
  10. else if (*mid < v) begin = mid + 1;
  11. else return mid - a;
  12. }
  13. return -1;
  14. }

但是这个方法需要多次使用才能检测出来,也就是可能在查找某两个数的时候不会报错,可能在查找别的几个数的时候就报错了。很多时候,这不是一种好选择。

根据第五题的题意,可以写如下代码来减少每次检测的量。

[html] view plaincopy
  1. int bs(int *a, int b, int e, int v)
  2. {
  3. int *begin = a + b, *end = a + e, *mid, i = b;
  4. static int *record = 0;
  5. if (!a || b >= e) return -1;
  6. if (!record || record != a)
  7. {
  8. while (i < e && a[i] < a[i+1])       ++i;
  9. assert(i == e);
  10. }
  11. while (begin < end)
  12. {
  13. mid = begin + ((end - begin) >> 1);
  14. assert(*begin <= *mid && *mid <= *end);
  15. if (*mid > v) end = mid;
  16. else if (*mid < v) begin = mid + 1;
  17. else return mid - a;
  18. }
  19. return -1;
  20. }

加一个static变量来记录这个数组是否经过检测,来决定以后的检测还需要进行。

当然对于多个数组的检测,可以利用hash来处理,因为一般来说,数组的下标地址都是不一样的。

编程珠玑第五章习题五——C++实现二分搜索时进行错误检测相关推荐

  1. 编程珠玑之第二章习题5

    问题描述: n元一维向量旋转问题数将向量ab变为ba.如何将向量abc变为cba? (这对交换非相邻内存块问题进行了建模) 问题解析: 1.这里需要用到一个重要的性质:CBA=(ArBrCr)r    ...

  2. 编程珠玑第12章习题

    内容来自互联网,做了一些修改 参考: http://blog.csdn.net/tianshuai1111/article/details/7583297 http://blog.csdn.net/t ...

  3. 编程珠玑第三章习题答案

    1 税收问题 .if-else语句的每个分支的形式都差不多,我们可以用数组来使循环简单一点.数组中每个点表明一个阶段,用level[i]表示阶段i的起始点,tax[i]表示阶段i的税率.然后就是输入一 ...

  4. 编程珠玑第六章习题二——C++实现一个数的因子分解

    引申为一道题目: 将大于1的自然数N进行因式分解,满足N=a1*a2*a3-am 编一程序,对任意的自然数N, 求N的所有形式不同的因式分解方案总数. 如N=12,共有8种分解方案,它们分别是: 12 ...

  5. 编程珠玑第四章习题答案

    主要内容来自于互联网,自己做了一定的修改 1.为了保证范围不超过范围,我们需要在初始化的时候,让变量不超出范围.这样每次循环得到的新的范围是慢慢缩小的,不会越界. 2 返回t在数组x中第一次出现的位置 ...

  6. 编程珠玑之第二章习题10

    问题描述: 10.某一天,一个新研究员向托马斯·爱迪生报到.爱迪生要求他计算出一个空灯泡盒的容积.在使用测径仪和微积分进行数小时的计算后,这个新员工给出了一个答案--150立方厘米.而爱迪生在几秒钟之 ...

  7. java第5版的课后答案_java第五章习题及答案.doc

    java第五章习题及答案 第五章习题 填空题: 1.小应用程序是存储于----上的java程序,它是在--端运行的. 2.小应用程序的生命期中包括如下几个阶段:--.--.--.--. 3.程序包ja ...

  8. 《学习Opencv》第五章 习题6

    这是第五章 习题5.6的结合版,其中实现了摄像头抓拍功能,能够成功运行. #include "stdafx.h" #include "cv.h" #includ ...

  9. 工程伦理第五章习题答案

    工程伦理 第五章习题 工程伦理 1 选择题 2 讨论题 1 选择题 1-5 BDCBB 6 ABC 7 ACD 8 AB 9 BCD 10 ABCD 11 × × √ √ √ 2 讨论题 1.结合自己 ...

最新文章

  1. oracle修改备库状态,Oracle-CRSCTL命令显示备库状态不正确
  2. 四面体的表面积_JACS:武汉大学汪成课题组利用从平面至四面体的扭曲单体来合成COFs材料...
  3. 【转】ABAP BASE64编码与解码练习
  4. seaborn pairplot ax_强者致胜 AX电竞叛客RTX3070显卡发布_
  5. 用好这个数据分析工具,BI平台建设少费一半力
  6. 遍历mysql大表的小技巧
  7. mysql建表影响效率_关于MySQL建表对DML的影响【转】
  8. 【论文阅读】Abdominal multi-organ segmentation with organ-attention networks and statistical fusion
  9. radius认证服务器无响应,squid radius认证“RADIUS服务器没有响应”
  10. matlab函数句柄介绍
  11. linux在线汇编编译器,Linux 汇编 Hello World
  12. 使用pyspider爬取巨量淘宝MM图片 1
  13. php 科学计数法 运算,php弱语言特性-计算科学计数法
  14. 余秋雨大师描写我的家乡
  15. 海量向量搜索引擎 Milvus 开源啦
  16. 播音计算机论文,播音主持论文的题目或论文内容
  17. python爬虫爬取京东_python爬取京东价格
  18. 55.【Java 线程】
  19. Word中如何从中间的某一页开始编页码
  20. signature=e9c3e111e2374143dfad8bd5f3d2024c,XFA: Faster Signature Matching with Extended Automata

热门文章

  1. 组装肩部带有减速器双轴机械臂组装与调试
  2. 一款蓝牙音频无线传输设备上拆下的光电管
  3. 关于2020年第十五届全国大学生智能汽车竞赛山东赛区技术答辩的相关规则
  4. 聊聊那些令人惋惜的车模
  5. 浅谈python语言_浅谈Python语言基础知识点!
  6. cmd文件打开闪退_批处理闪退、运行中断等问题的处理
  7. css实现提示信息,单纯使用CSS实现动态提示信息
  8. php5.6 64位配置,centos(64位) 安装PHP5.6,配置LNMP
  9. mapreduce将key相同的value结合在一起_个人理解Hadoop中MapReduce
  10. java final 接口_Java自学-接口与继承 final