当前位置: 网站首页>小程序开发>网站制作

馆陶小程序制作【馆陶企业邮箱】馆陶网站外包、馆陶微信商城开发、馆陶网店美工、馆陶淘宝设计

发表日期: 2021-04-14 15:11:25 浏览次数:112

馆陶小程序制作【馆陶企业邮箱】馆陶网站外包、馆陶微信商城开发、馆陶网店美工、馆陶淘宝设计

馆陶县,河北省邯郸市下辖县 [1]  ,地处河北省东南部,以卫运河为界与山东省冠县、临清市毗邻。全县辖4镇4乡277个行政村,总面积456平方公里,其中耕地面积48万亩,总人口36万人。馆陶是千年古县,赵王“在城(今冠县东古城)西北七里陶丘侧置馆,故名馆陶”,自西汉初置县,已有2200多年历史。

馆陶县先后荣获中国蛋鸡之乡、中国黑陶艺术之乡 、中国粮画之乡、中国轻工轴承之乡、中国黄瓜之乡、中国漆画艺术之乡、全国休闲农业和乡村旅游示范县、全国电子商务进农村示范县、全国义务教育发展基本均衡县、全国中医工作先进县、全国群众体育工作先进县等等30余项国家级殊荣。

近年来,馆陶县着力打造了五张名片。一是“最大”,禽蛋交易市场金凤市场,单体全国最大,鸡蛋远销广东、广西等地,2016年交易额达到110亿元;二是“最优”,馆陶是中国著名的黑陶艺术之乡,现代黑陶艺术经过馆陶人的继承和创新,达1000多个品种;三是“最好”,馆陶是中国唯一的黄瓜之乡,馆青牌黄瓜,连续四年荣获中国绿色博览会金奖;四是“最佳”,馆陶有独一无二的富含三价有机铬的黑小麦,可应用于抑制血糖和抗肿瘤等医学领域;五是“最美”,粮画小镇被评为“中国十大最美乡村”,即将由3A级景区升级成为国家4A级旅游景区。 [2-6] 

2020年4月,被河北省体育局评选为“2019年度体育工作最佳县(市、区)”。

          void computeHt(pNODE n)
           {
               pNODE c;(1)            n->height = 0;(2)            c = n->leftmostChild;(3)            while (c != NULL) {(4)                computeHt(c);(5)                if (c->height >= n->height)(6)                    n->height = 1+c->height;(7)                c = c->rightSibling;
               }
           }复制代码

图 5-22 计算树中所有节点高度的例程

在第(1)行,我们会将n 的高度初始化为0。如果n 是叶子节点,计算就算完成了,因为第(3)行的测试将会立即失败,所以算出的任何叶子节点的高度都为0。第(2)行会将c 置为(指向)n 的最左子节点(的指针)。随着不断进行第(3)行至第(7)行的循环,c 依次成为n 的每个子节点。第(4)行会递归地计算c 的高度。随着计算的进行,n->height中的值会比目前最高的子节点高度大1,不过如果没有子节点,这个值就是0。因此,第(5)行和第(6)行在发现比之前的子节点更高的子节点后会增加n 的高度。此外,对第一个子节点,第(5)行的测试是肯定会被满足的,而且我们会将n->height置为比第一个子节点的高度大1。在因为处理完所有子节点而跳出循环后,n->height就会被置为比n 子节点中的最大高度大1。

程序设计还要更具防御性

图5-19中的程序有若干方面表现出了一种粗心的编程风格,这是应该避免的。具体来说,我们在没有首先检查指针是否为NULL的情况下就一路前进了。因此,在第(1)行,n是可能为NULL的。我们真应该将程序以如下形式开头。

if (n != NULL) /* then do lines (1) to (9) */else /* print an error message */复制代码

即便n不是NULL,在第(3)行还是可能看到它的leftmostChild字段是NULL,因此应该检测一下n->leftmostChild是否为NULL,如果是,就打印出错误消息,而且不去调用eval。同样,即便n的最左子节点存在,该子节点也可能没有右兄弟节点,所以在第(4)行之前还需要检查

n->leftmostChild->rightSibling != NULL复制代码

而且该程序还依赖于树中节点所含信息是正确的这一假设。例如,如果某个节点是内部节点,它的标号为二元运算符,而且我们已经假设它具有两个子节点,并且第(3)行和第(4)行的指针不可能为NULL。不过,运算符标号有可能是不正确的。要正确处理这种情形,就应该在switch语句中加入default情况,以检测意料之外的运算符标号。

作为一般规则,对程序的输入永远正确这一假设的依赖过分简单了;在现实中,“只要有可能出错,就肯定会出错。”如果某个程序要使用多次,势必会遇到那些形式不符合程序员预想的数据。在实践中多么小心都不为过。盲目地接受NULL指针,或假设输入数据总是正确的,都是常见的编程错误。

习题

1. 编写递归程序,计算用最左节点指针和右兄弟节点指针表示的树的节点数量。

2. 编写递归程序,找到树中具有最大标号的节点。假设该树节点的标号都为整数,而且是用最左子节点右兄弟节点指针表示的。

3. 修改图5-19中的程序,使其能处理含有一元减号节点的树。

4. * 编写递归程序,为最左子节点右兄弟节点指针表示的树计算左右对的数量。所谓左右对,就是指节点n 在m 左侧这样的一对节点n 和m。例如,在图5-20中,节点5就在标号为*、-、10、3和2的节点左侧,而节点10在节点3和节点2左侧,节点-在节点2左侧。因此,该树的左右对共有8对。提示:在对节点n 调用编写的递归函数时,要让该函数返回两个部分,以n 为根节点的子树中左右对的数量,还有以n 为根节点的子树中节点的数量。

5. 以(a)前序和(b)后序列出图5-5中(见5.2节的习题)树的节点。

6. 对如下各表达式

(i) (x+y)*(x+z)

(ii) ((x-y)*z+(y-w))*x

(iii) ((((a*x+b)*x+c)*x+d)*x+e)*x+f

完成以下操作:

(a) 构建表达式树;

(b) 写出等价的前缀表达式;

(c) 写出等价的后缀表达式。

7. 将后缀表达式ab+c *de-/f 转换为(a)中缀表达式和(b)前缀表达式。

8. 编写函数,使其可以“环游”树,并在经过节点时打印节点的名称。

9. 图5-17中的后序函数进行的操作A0A1等各是什么?(“操作”就是如图5-13所指的那些。)

5.5 结构归纳法

第2章和第3章已经介绍了不少有关整数属性的归纳证明。可以假设某一命题对n 来说为真,或者假设命题对所有小于等于n 的整数都成立,并使用该归纳假设证明同一命题对n+1也成立。“结构归纳法”与之类似但不尽相同,适用于证明与树有关的属性。结构归纳法模拟了对树的递归算法,而且这种形式的归纳法在想要证明一些与树有关的命题时是最易于使用的。

假设要证明命题S(T )对所有的树T 都为真。作为依据,要证明S(T )对由单一节点组成的树T 为真。而对归纳部分来说,要假设T 是一棵以r 为根节点,并有子节点c1c2、…、ckk≥1)的树。如图5-23所示,设T1T2、…、Tk分别是以c1c2、…、ck为根节点的T 的子树。那么归纳步骤就是假设S(T1)、S(T2)、…、S(Tk)都为真,并证明S(T )。如果完成了这一证明,就可以得出S(T )对所有的树T 都成立的结论。这种形式的论证就叫作结构归纳法。请注意,除了要区分依据部分(1个节点)和归纳步骤(多于1个节点),结构归纳法不会提及树中具体的节点数。

{%}

图 5-23 树及其子树

示例 5.17

一般情况下,在证明对树进行操作的递归程序时会需要用到结构归纳法。举例来说,可以再次看看图5-19所示的eval函数,图5-24重现了该函数的函数体。只要将指向T 根节点的指针赋值给该函数的参数n,就可将该函数应用于树T。然后它就会计算由T 表示的表达式的值。接下来要用结构归纳法证明如下命题。

(1)      if (n->op) == 'i') /* n 指向叶子节点 */(2)          return n->value;
         else {/* n 指向内部节点 */(3)          val1 = eval(n->leftmostChild);(4)          val2 = eval(n->leftmostChild->rightSibling);(5)          switch (n->op) {(6)              case '+': return val1 + val2;(7)              case '-': return val1 - val2;(8)              case '*': return val1 * val2;(9)              case '/': return val1 / val2;
             }
         }复制代码

图 5-24 图5-19中eval(n)函数的函数体

命题S(T )。在对T 的根节点调用eval时,返回的值是T 所表示的算术表达式的值。

依据。作为依据,T 由单个节点组成。也就是说,参数n 是一个(指向)叶子节点(的指针)。因为在该节点表示操作数时,op字段具有值“i”,图5-24中第(1)行的测试会成功,第(2)行会返回操作数的值。

归纳。假设节点n 不是(指向)叶子节点(的指针)。归纳假设就是,S(T' )以n的某个子节点为根节点的每棵树T' 都为真。必须使用这一推理证明S(T )对以n 为根节点的树T 成立。

因为假设运算符都是二元的,所以n有两棵子树。根据归纳假设,第(3)行和第(4)行计算出val1val2的值,分别是左子树和右子树的值。图5-25展示了这两棵子树,val1存放着T1的值,val2存放着T2的值。

图 5-25 调用eval(n)返回T1T2的值的和

如果看看第(5)行到第(9)行的switch语句,就会发现不管根节点n 处出现什么运算符,它都会被应用到val1val2这两个值上。例如,如果根节点处存放着+,如图5-25所示,那么第(5)行返回的值就是val1+val2,正如这应该是树T1T2对应表达式的和。现在就完成了归纳步骤。

因此可以得出S(T )对所有的表达式树T 都成立的结论,eval函数能正确地求出表示表达式的树的值。


馆陶小程序制作馆陶企业邮箱馆陶网站外包、馆陶微信商城开发、馆陶网店美工、馆陶淘宝设计

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: http://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878