文档库 最新最全的文档下载
当前位置:文档库 › 割圆术实现

割圆术实现

割圆术实现
割圆术实现

小议割圆术及其动态实现

第一章 前 言

《九章算术》中提出了圆田术: 半周半径相乘得积步[1]。这就是著名的圆面积公式:

12

S L R =

(1)

其中S , L , R 分别是圆面积、周长和半径。它是正确的。然而,刘徽之前人们以

圆内接正六边形的周长代替圆周长L ,以圆内接正十二边形的面积代替圆面积S ,用出入相补原理将正十二边形拼补成一个以正六边形周长的一半作为长,以圆半径作为宽的长方形来推证上述公式。刘徽说此方法“合径率一而外周率三也”,其证明极不严格。为了真正证明圆面积公式,刘徽创造了著名的割圆术。刘徽借割圆术方法,凭借其高超的对无限问题的理解和致用的处理方式,以“不可分量可积”、“夹逼准则”等知识证明了圆的面积公式。在其运算中同时也包含着微积分思想。最后,他利用证明圆面积公式所设计出的机械性的算法程序,求出了圆周率的近似值——徽率(

15750

)。

第二章 割 圆 术

2.1 什么是割圆术

为了真正证明圆面积公式,刘徽创造了著名的割圆术。他说: “为图,以六觚之一面乘一弧半径,三之,得十二觚之幂。若又割之,次以十二觚之一面乘一弧之半径,六之,则得二十四觚之幂。 割之弥细,所失弥少。割之又割,以至于不可割,则与圆周合体而无所失矣。觚面之外,犹有余径。以面乘余径,则幂出弧表。若夫觚之细者,与圆合体,则表无余径。表无余径,则幂不外出矣,以一面乘半径,觚而裁之,每辄自倍。故以半周乘半径而为圆幂。此以周、径,谓至然之数,非周三径一之率。”[1]

这段文字包括三个互相衔接步骤:

首先,刘徽从圆内接正六边形开始割圆,依次得到圆内接正62?,262?,……边形。设圆内接正62n ?边形的面积为n S ,0,1,2,3,...n

=则

n S S

< (2)

而随着分割次数越来越多,n

S

S -越来越小,到不可再割时,n S 与S 重合,亦即

lim

n n S S

→∞

=

其次,圆内接正62n ?边形的每边和圆周之间有一段距离n r ,称为余径。将

62

n

?边形的每边长n a 乘余径n r ,其总和是()12n n S S +-(这在下图1中可以很显然

的得到)。将它加到n S 上,则有

()12n n n S

S S S +<+- (3)

然而当n 无限大,62n ?边形与圆周合体时,则

lim 0n n r →∞

=

即得 l i m 0n n n r a →∞

=

因此

()1lim

2n n n n S S S S

+→∞

+-=????

这就证明了圆的上界序列与下界序列的极限都是圆面积。

最后,刘徽把与圆周合体的正多边形分割成无穷多个以圆心为顶点,以每边长为底的小等腰三角形,以圆半径乘这个多边形的边长是每个小等腰三角形面积的2 倍,所谓“觚而裁之,每辄自倍”。显然,所有这些小等腰三角形的底边之和就是圆周长,并且所有这些小等腰三角形面积的总和, 就是圆的面积。那么,圆半径乘圆周长,就是圆面积的2 倍:

2L r S

=

这就完成了(1)式的证明。

在证明了(1)式后,刘徽随即创造了求“周径至然之数”即求圆周率的科 学程序。 他仍从直径2

d

=尺的圆内接正六边形开始割圆,依次割成,62?,262?……

边形,反复运用勾股术[2]和开方术,以及开方不尽“求微数”(即以十进分数逼近无理根)的方法,依次求出圆内接正62?,262?,362?的边心距,余径和边长,进而计算出正462?即正96边形的边长6分5厘4毫3秒8忽,面积

2

4584313

625

S =寸

;正562?即正192 边形的面积2

5

64314

625

S =寸

,由(2)式,

2

64314625

S

<寸

2

5464584105314

313625

625

625

S S -=-=寸

()2

4545841051692313

2314

625

625

625

S S S +-=+?

=寸

由(3)式,有:

2

169314

625

S

<寸

因此刘徽取正192 边形面积的整数部分314 寸2 作为圆面积的近似值: 2

314S

=寸

刘徽说:“以半径一尺除圆幂,倍所得,六尺二寸八分,即周数。” 就是说,将圆面积(即圆幂)代回公式(1),反求出圆周长L 的近似值6 尺2 寸8 分。刘徽接着说:“又令径二尺与周六尺二寸八分相约,周得一百五十七,径得五十,则其相与之率也。周率犹为微少也。” [3] 这就得出

628157200

50

L d π

===

刘徽还算出圆内接正3072 边形的面积2

9

4314

25S =寸

作为圆面积的近似值,仍利

用(1) 式,求出圆周长的近似值:“以半径一尺除圆幂三百一十四寸二十五分寸之四,倍所得, 六尺二寸八分二十五分之八, 即周数也。全径二尺与周数通相约,径得一千二百五十周得三千九百二十七,即其相与之率。”[4] 这就是

8

6283927252001250

L d

π

==

=

下面我们给出刘徽用来计算圆内接正n 边形的边长的递推公式及其证明。

图1

如图,AB 为圆内接正n 边形的一边长,其长度记为n a 。AC ,CB 为内接正2n 边形的边长,其长度记为2n a 。设圆半径为R ,有 ()C D O D

R A D D B

?+=?

()2

12n C D R C D R a ??

?-+= ?

??

2

2

120

4

n C D R C D a -+

=

解得2C D

=

,故

2

2

22

2

24

4

n a A C

A D C D

R =+=+

=-

故2n

a =

由内接正六边形的边长为R ,利用上式就可依次计算出正62n ?边形的边长了。

2.2 割圆术中体现的数学思想

由以上对割圆术的分析可以看出,其中主要体现了如下的数学思想:

2.2.1 极限思想

刘徽可以说是世界上第一个在数学中运用极限思想的人[5]。他通过不断割圆,用圆内接正62n ?边形的面积来逼近圆的面积:“以六觚之一面乘一弧半径,三之,得十二觚之幂。若又割之,次以十二觚之一面乘一弧之半径,六之,则得二十四觚之幂。 割之弥细,所失弥少。割之又割,以至于不可割,则与圆周合体而无所失矣。” 刘徽根据这种思想求出圆内接正192 边形的面积,进而求得了

15750

L d π=

=。他继续求到圆内接正3072 边形的面积,进而求得了

3927 3.1416

1250

L d π=

==。

2.2.2 数列极限的夹逼准则。[6] 由(2)(3)两式得 ()12n

n n n S S S S S +<<+-

随着分割次数越来越多,n s s -

越来越小,到不可再割时,n s 与s

重合,亦lim n n s s

→∞

=

另外当n 无限大,62n ?边形与圆周合体时, ()1lim 0

n n n S S +→∞

-=,得到

()1lim 2n n n n S S S S

+→∞

+-=,即在n 趋于无穷大时,圆内接正多边形的面积就是圆面

积。

2.2.3 不可分量可积的思想

在证明圆面积公式的第三步中,刘徽通过对无限分割的独特理解,和夹逼准则的使用,认为极限状态下考虑与圆合体的正无穷多形,它们是由以圆心为顶点,以每边为底的无穷多个小等腰三角形,这些小等腰三角形是不可分量。此时,设圆周长为L ,每个小等腰三角形的底边长为n a ,面积为A ,刘徽以“不可分量可积”为前提容易得到所有等腰三角形的底边可积为圆的周长L :n a L

=∑

。于是,

222n

n ra

r a L r A A S

=====∑∑∑∑

2.2.4 数形结合的思想[7]

“出入相补原理”,又称“以盈补虚法”,是刘徽发展并系统化了的一种独特的数学方法,发展了古代的数形结合思想。用现代语言来说,就是指这样一个明显事实:“一个平面图形从一处移置他处,面积不变;又若把图形分割成若干块,那么各部分面积的和等于原来图形的面积,因而图形移置前后诸面积间的和、差有简单的相等关系;立体的情形也是这样”。刘徽在“方田”章第26 题注中,把等腰三角形田变换成等积的矩形田(直田) ,再利用“方田术”求面积。在“勾股术”注中,论述到:“勾自乘为朱方,股自乘为青方,令出入相补,各从其类,因就其余不移动也;合成弦方之幂,开方除之,即弦也”。在“少广”章的开平方术中,把数的开平方归结为求一个已知面积的正方形的一边长。

“出入相补原理”可以说贯穿在刘徽的整个《九章算术注》中,它反映了当时人们已具有较高的抽象概括能力,抽象概括出解决实际问题的一般原理,而这种一般原理又具有简明性和较强的直观性,用它能帮助人们把许多算法联系起来并得出更多的有效算法。“出入相补原理”的提出,反映了刘徽对中国古代传统的数学思想做了大的发展。

2.2.5 直观性思想[8]

刘徽也非常注意数学的直观性,他主张“析理以辞,解题用图”。理论与图形只管并用,只有这样,才能更好地使人理解数学内容,达到“庶亦约而能周,通而不黩,览之者思过半矣”的目的。因此他在数学研究中很注意使用图形、立体模型、剪纸和涂抹颜色。

第三章 用割圆术计算π的一种快速逼近算法

在割圆术中刘徽指出L d

π

=,他求出圆内接正192 边形的面积,进而求得的π只

有两位有效数字,求出圆内接正3072 边形的面积,进而求得的π也只有三位有效数字,可见逼近速度相当慢。现在我们给出一种逼近速度较快的方法。

由L d

π

=,则:单位圆的半周长π可用内接正n 边形的半周长n π来逼近。

因 2sin

sin

2

2n n

n a n n n

n

πππ==??=

用泰勒公式展开,即有

2

4

6

3

5

7

1113!5!7!n

n n n π

ππππ??

????=-+-+ ? ? ???????

(4)

n π的逼近阶为2

1n ??

?

??

,带有系数

3

6

π,且n π是π的下界。

边数减倍和加倍后有: 2

4

6

3

5

7

2

2223!5!7!n

n n n ππ

πππ??

??

??=-+-+ ? ? ???????

(5)

2

4

6

3

5

7

21113!25!27!2n

n n n ππ

πππ??

????=-+-+ ? ? ???????

(6)

2

4

6

3

5

7

41113!45!47!4n

n n n ππ

πππ??

??

??=-+-+ ? ? ???????

(7)

用(4)式乘以4减去(5)式,再除以3后,记为()n p π: ()

2

143n n n p πππ?

?=- ??

?

可以消去主要部分2

1n ??

?

??

,剩下的项从4

1n ??

?

??

开始,即:

()

4

6

5

7

114205!7!n p n n π

πππ??

??=-?+?+ ? ?????

(8)

()

4

6

5

7

2115145!167!n p n n ππππ????

=-?+?+ ? ?????

(9)

()

4

6

5

7

41

1151645!64167!n p n n π

πππ??

??=-?++ ? ?????

(10)

()n p π的逼近阶为4

1n ??

?

??

,带有系数5

45!

π

?

,且()n p π仍是π的下界。

用(9)式乘以16再减去(8)式,再除以15后,记为()22n p π: ()()()22211615

n n n p p p πππ=

-????

可以消去主要部分4

1n ??

?

??

,剩下的项从6

1n ??

?

??

开始,即:

()

6

7

2

217!n p n π

ππ??

=-+ ???

(11)

()

6

7

2411647!n p n π

ππ??

=-+ ???

(12)

()2

2n p π的逼近阶为6

1n ?? ?

??

,带有系数

7

7!

π

,且()22n p π仍是π的下界。

用(12)式乘以64再减去(11)式,再除以63后,记为()44n p π: ()()()42

2

4421

6463n n n p p p

πππ??=

-

?

? (13)

可以消去主要部分6

1n ??

?

??

,剩下的项从8

1n ??

?

??

开始,()4

4n p π的逼近阶为8

1n ?? ?

??

计算结果如下表:

算到48边形时,近似值3.141592654有8位小数精确。

第四章 割圆术的动态实现

下面我们用MATLAB 来动态演示割圆的过程,并且计算π的值。 割圆过程如下:

N=192时, 计算得π=3.141452472285344 N=3072时, 计算得π=3.141592106043048

N=25

62?时,计算得π=3.141592653589793(这已经就是MATLAB 中PI 的真值了)

第五章 总 结

为了证明圆面积公式12

S L R =,刘徽创立了割圆术,从而得到了较为精确的π

值,即π的近似值

15750

39271250

。从方法论的角度看,这一工作的意义远不止是

得到较为精确的π,更有意义的是采用割圆术使极限思想和极限方法成为数学研

究的重要思想和方法。他那脍炙人口的“割之弥细,所失弥少。割之又割以至于不可割,则与圆合体而无所失矣”,流芳百世,一直影响后人。

主要参考文献

[1] 郭书春.汇校《九章算术》[M]. 辽宁教育出版社&台湾九章出版社.2004

[2] 李文林.《数学史教程》[M].高等教育出版社 &施普林格出版社,2000

[3] 白尚恕.《九章算术》注释[M] . 科学出版社.1983.

[4]吴文俊.《九章算术与刘徽》[M]. 北京师范大学出版社.1982

[5] 郭书春.《中国古代数学》[M].商务印书馆 ,1997

[6] 复旦大学数学系.《数学分析》[M]. 高等教育出版社.1999

[7]王树禾.数学百家[M].国防工业出版社,2005.

[8] 钱宝琮.中国数学史[M].科学出版社,2000

[9] 曾建军,李世航.《面向科学与工程问题的语言MATLAB》.安徽大学出版社.2002

附录

割圆术动态实现程序

clc

clear

close

tic

R=1; %%%半径

N=3072; %%%结点数

pi_=pi

% pi_length=(N*2*R*sin((pi/N)))/(2*R) ;

pi_length=N*sin(pi/N)

r_pi_length=abs(pi-pi_length) %%相对误差

a_pi_length=r_pi_length/pi %%绝对误差%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

t=0:0.01:2*pi;

tx=R*cos(t);

ty=R*sin(t);

plot(tx,ty,'r');

hold on

axis equal

axis([-1.1*R 1.1*R -1.1*R 1.1*R ]);

title(strcat('半径R=',num2str(R),',边数N=',num2str(N)));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:N

x=R*cos(mod(i-1,N)*2*pi/N);

y=R*sin(mod(i-1,N)*2*pi/N);

x1=R*cos(mod(i,N)*2*pi/N);

y1=R*sin(mod(i,N)*2*pi/N);

plot([x,x1],[y,y1]);

pause(0.2);

%pause;

hold on

end

axis equal

axis([-1.1*R 1.1*R -1.1*R 1.1*R ]); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:3072

a(i)=0;

end

i=6;

a(i)=1;

while(i<=1536)

a(2*i)=sqrt(2-sqrt(4-a(i)^2));

i=i*2;

end

pi_192=192*a(192)/2

pi_3072=3072*a(3072)/2

toc

求极限的方法总结

学号:0 学年论文 求极限的方法总结 Method of Limit 学院理学院专业班级 学生指导教师(职称) 完成时间年月日至年月日

摘要 极限的概念是高等数学中最重要、最基本的概念之一。许多重要的概念如连续、导数、定积分、无穷级数的和及广义积分等都是用极限来定义的。因此掌握好求极限的方法对学好高等数学是十分重要的。但求极限的方法因题而异,变化多端,有时甚至感到变幻莫测无从下手,通过通过归纳和总结,我们罗列出一些常用的求法。本文主要对了数学分析中求极限的方法进行一定的总结,以供参考。 关键词:极限洛必达法则泰勒展开式定积分无穷小量微分中值定理

Abstract The concept of limit is the most important mathematics,one of the most basic important concepts such as continuity,derivative,definite integral,infinite series and generalized integrals and are defined by the mater the methods the Limit learn mathematics integrals and are defined by the limit varies by title,varied,anf sometimes even impossible to start very unpredictable,and summarized through the adoption,we set out the requirements of some commonly used this paper,the mathematical analysis of the method of seeking a certain limit a summary for reference. Keyword:Limit Hospital's Rule Taylor expansion Definite integral Infinitesimal Mean Value Theorem

刘徽和割圆术

刘徽和割圆术 中国向来以文明古国自称,谈到中国古代文明,我们一定会说起以“经世致用”为信条,以筹算为主的中国古代数学史。在这段曲折发展的历史中,我们的古代数学跟其他古文明一样,在一定程度上获得了发展,特别是在算法的深度和广度上有着卓越的发展。但我们不得不提及,在中国古代长达2000多年的封建制度统治下,数学研究一直停留在计算层面,理论的严谨和系统却不尽如人意,这同时也导致了一些错误的结果的出现。在这样的数学背景下,刘徽可谓是中国数学史上的一朵奇葩,他有着“为数学而数学”的价值观,曾令中国古代数学的严谨与系统达到前所未有的高度。下面我将主要介绍刘徽及其最耐人寻味的一段成就——割圆术。 刘徽,生于公元250年左右,是魏晋时人。他的一生为数学刻苦探求,虽然地位低下,但人格高尚。他所撰的《九章算术注》是中国最宝贵的数学遗产。刘徽思想敏捷,方法灵活,既提倡推理又主张直观,是中国最早明确主张用逻辑推理的方式来论证数学命题的人。他不是沽名钓誉的庸人,而是学而不厌的伟人。由于篇幅有限,对刘徽卓越的成就不能一一介绍,只能介绍其最耐人寻味的割圆术。割圆术可谓是中国古代数学的奇迹,在后面与阿基米德求圆面积方法的比较中,您将发现割圆术的精妙与美丽。 在《九章算术》中曾提到“圆田术”---半周半径相乘得积步。这就是著名的圆面积公式: (1) 其中S 表示圆面积,C 表示周长,R 表示半径。我们今天可以得出这个公式是正 12S CR

确的,但在《九章算术》中只是提到了这一结论,却未给出严谨的证明。在刘徽之前人们以圆内接正六边形的周长代替圆周长C ,以圆内接正十二边形的面积代替圆面积S ,用出入相补原理将正十二边形拼补成一个以正六边形的周长的一半作为长,以圆半径作为宽的长方形来推证上述公式。在今天,我们可以看出用圆内接正六边形和圆内接正十二边形来近似代替圆是相当粗糙的,但在当时很少有人能指出这一算法的不严谨性,而刘徽却说此方法“合径率一而外周率三也”,一针见血的指出了这一方法的不严格性。为了给出这一公式的严格证明方法,刘徽发明了割圆术。所谓割圆术其实就是现代微积分中的极限的思想,即用圆内接正多边形的面积来逼近圆的面积。正如他在《九章算术注》中所说“割之弥细,所失弥少。割之又割以至于不可割则与圆合体而无所失矣”。在利用这一方法证明这一公式的过程中,刘徽还计算出了当时最精确的圆周率近似值---徽率( ), 这一结果要早西方很多年。同时,我们了解割圆术后会发现利用这种方法我们可 以将圆周率计算到任意精确程度,但当时计算能力有限,只能依靠手工验算,所 以刘徽能算到 ,已是很了不起了。 下面我们看一下刘徽割圆术的具体做法。 首先,刘徽从圆内接正六边形出发,开始割圆。利用迭代的计算方法依次得到圆内接正62?,262?,……边形。我们记圆内接正62n ?边形的面积为n S ,0,1,2,3,...n =,记圆的面积为S ,则有 n S S < 而随着分割次数的增多,n S S -越来越小,到不可再割时,n S 与S 重合,也就有了 l i m n n S S →∞ = 然后,圆内接正62n ?边形的每边和圆周之间有一段距离n r ,如下图CD ,称 15750

关于计算极限的几种方法

目录 摘要 (1) 引言 (2) 一.利用导数定义求极限 (2) 二.利用中值定理求极限 (2) 三.利用定积分定义求极限 (3) 四.利用施笃兹公式 (4)

五.利用泰勒公式 (5) 六.级数法 (5) 七.结论 (6) 参考文献 (6)

内容摘要

引言: 极限是分析数学中最基本的概念之一,用以描述变量在一定的变化过程中的终极状态。早在中国古代,极限的朴素思想和应用就已在文献中有记载。例如,3世纪中国数学家刘徽的割圆术,就是用圆内接正多边形周长的极限是圆周长这一思想来近似地计算圆周率 的。随着微积分学的诞生,极限作为数学中的一个概念也就明确提出。但最初提出的这一概念是含糊不清的,因此在数学界引起不少争论甚至怀疑。直到19世纪,由A.-L.柯西、K. (T.W.)外尔斯特拉斯等人的工作,才将其置于严密的理论基础之上,从而得到举世一致的公认。 数学分析中的基本概念的表述,都可以用极限来描述。如函数()x f y =在 0x x =处导数的定义,定积分的定义,偏导数的定义,二重积分,三重积分的定义,无穷级数收敛的定义,都是用极限来定义的。极限是研究数学分析的基本公具。极限是贯穿数学分析的一条主线。 一.利用导数定义求极限 据文[]1定理1导数的定义:函数)(x f 在0x 附近有定义,对于任意的x ?, 则)()(00x f x x f y -?+=? 如果x x f x x f x x ?-?+=→?→? ) ()(lim lim 000 0存在,则此极限值就 称函数)(x f 在点0x 的导数记为 )('0x f .即x x f x x f x f x ?-?+=→?) ()(lim )('0000在这 种方法的运用过程中。首先要选好)(x f ,然后把所求极限。表示成)(x f 在定点0x 的导数。 例1:求a x x a a x x a a a a x --→lim 解:原式0)(lim lim 1lim 0---?=---=-→→→a x x a a x a a x a x x a a a x x a a a a x a a a a a x x a x x ,令a x x a y -=, 当a x →时,0→y ,故原式a a a a a a a y y a ln |)'(0=?== 一般地,能直接运用导数定义求的极限就直接用导数定义来求,值得注意的是许

数据结构C语言实现二叉树三种遍历

实验课题一:将下图中得二叉树用二叉链表表示: 1用三种遍历算法遍历该二叉树,给出对应得输出结果; 2写一个函数对二叉树搜索,若给出一个结点,根据其就是否属于该树,输出true或者f alse。 3写函数完成习题4、31(C++版)或4、28(C版教科书)。 #include "stdio、h" #include”malloc、h" typedefstruct BiTNode { char data; structBiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create(BiTreeT) { char ch; ch=getchar(); if(ch=='#’) T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode)); T-〉data=ch; T->lchild=Create(T—〉lchild); T—〉rchild=Create(T-〉rchild); } return T; } int node(BiTree T) { int sum1=0,a,b; ?if(T) { if(T!=NULL) ??sum1++;

?a=node(T->lchild); sum1+=a; b=node(T—>rchild); sum1+=b; ?} return sum1; } int mnode(BiTree T) { ?int sum2=0,e,f; if(T) { ?if((T->lchild!=NULL)&&(T-〉rchild!=NULL))?sum2++; ?e=mnode(T-〉lchild); sum2+=e; f=mnode(T-〉rchild); sum2+=f; ?} return sum2; } void Preorder(BiTree T) { if(T) { printf("%c”,T->data); Preorder(T—>lchild); Preorder(T-〉rchild); } } int Sumleaf(BiTree T) { int sum=0,m,n; if(T) { if((!T-〉lchild)&&(!T-〉rchild)) sum++; m=Sumleaf(T->lchild); sum+=m; n=Sumleaf(T—>rchild); sum+=n; } return sum; }

数学视野:经典算法割圆术

数学视野 经典算法----割圆术 根据刘徽的记载,在刘徽之前,人们求证圆面积公式时,是用圆内接正十二边形的面积来代替圆面积.应用出入相补原理,将圆内接正十二边形拼补成一个长方形,借用长方形的面积公式来论证《九章算术》的圆面积公式.刘徽指出,这个长方形是以圆内接正六边形周长的一半作为长,以圆半径作为高的长方形,它的面积是圆内接正十二边形的面积.这种论证“合径率一而弧周率三也”,即后来常说的“周三径一”,当然不严密.他认为,圆内接正多边形的面积与圆面积都有一个差,用有限次数的分割、拼补,是无法证明《九章算术》的圆面积公式的.因此刘徽大胆地将极限思想和无穷小分割引入了数学证明.他从圆内接正六边形开始割圆,“割之弥细,所失弥少,割之又割,以至不可割,则与圆周合体,而无所失矣.”也就是说将圆内接正多边形的边数不断加倍,则它们与圆面积的差就越来越小,而当边数不能再加的时候,圆内接正多边形的面积的极限就是圆面积.刘徽考察了内接多边形的面积,也就是它的“幂”,同时提出了“差幂”的概念.“差幂” 是后一次与前一次割圆的差值.刘徽指出,在用圆内接正多边形逼近圆面积的过程中,圆半径在正多边形与圆之间有一段余径.以余径乘正多边形的边长,即2倍的“差幂”,加到这个正多边形上,其面积则大于圆面积.这是圆面积的一个上界序列.刘徽认为,当圆内接正多边形与圆是合体的极限状态时,“则表无余径.表无余径,则幂不外出矣.”就是说,余径消失了,余径的长方形也就不存在了.因而,圆面积的这个上界序列的极限也是圆面积.于是内外两侧序列都趋向于同一数值,即,圆面积. 利用圆内接或外切正多边形,求圆周率近似值的方法,其原理是当正多边形的边数增加时,它的边长和逐渐逼近圆周.早在公元前5世纪,古希腊学者安蒂丰为了研究化圆为方问题就设计一种方法:先作一个圆内接正四边形,以此为基础作一个圆内接正八边形,再逐次加倍其边数,得到正16边形、正32边形等等,直至正多边形的边长小到恰与它们各自所在的圆周部分重合,他认为就可以完成化圆为方问题.到公元前3世纪,古希腊科学家阿基米德在《论球和圆柱》一书中利用穷竭法建立起这样的命题:只要边数足够多,圆外切正多边形的面积与内接正多边形的面积之差可以任意小.阿基米德又在《圆的度量》一书中利用正多边形割圆的方法得到圆周率的值小于三又七分之一而大于三又七十分之十,还说圆面积与外切正方形面积之比为11:14,即取圆周率等于22/7.公元263年,中国数学家刘徽在《九章算术注》中提出“割圆”之说,他从圆内接正六边形开始,每次把边数加倍,直至圆内接正96边形,算得圆周率为3.14或157/50,后人称之为徽率.书中还记载了圆周率更精确的值3927/1250(等于3.1416).刘徽断言“割之弥细,所失弥少,割之又割,以至于不可割,则与圆合体,而无所失矣”.其思想与古希腊穷竭法不谋而合.割圆术在圆周率计算史上曾长期使用.1610年德国数学家柯伦用2^62边形将圆周率计算到小

C语言实现二叉树的前序遍历(递归)

C语言实现二叉树的前序遍历算法实现一: #include #include typedef struct BiTNode//定义结构体 { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree &T) //前序创建树 { char ch; scanf("%c",&ch); if(ch==' ') T=NULL; else { T=(struct BiTNode *)malloc(sizeof(struct BiTNode)); T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } int print(BiTree T)//前序遍历(输出二叉树) { if(T==NULL)return 0; else if(T->lchild==NULL && T->rchild==NULL)return 1; else return print(T->lchild)+print(T->rchild); } void main()//主函数 { BiTree T; CreateBiTree(T); printf("%d\n",print(T)); } 算法实现二: #include

#include struct BiTNode//定义结构体 { char data; struct BiTNode *lchild,*rchild; }; int num=0; void CreatBiTree(struct BiTNode *&p) //前序创建树 { char ch; scanf("%c",&ch); if(ch==' ') p=NULL; else { p=(struct BiTNode *)malloc(sizeof(struct BiTNode)); p->data=ch; CreatBiTree(p->lchild); CreatBiTree(p->rchild); } } void print(struct BiTNode *p) //前序遍历(输出二叉树){ if(p!=NULL) { if(p->lchild==NULL&&p->rchild==NULL) else { print(p->lchild); print(p->rchild); } } } void main()//主函数 { struct BiTNode *p; CreatBiTree(p); print(p); printf("%d\n",num); } 供测试使用的数据

关于用割圆术推导圆周率的计算公式的方法

关于用割圆术推导 圆周率的计算公式的方法 周家军 (家庭地址:广西陆川县良田镇冯杏村22队,邮编:537717) (目前所在地:广西柳州市,电子邮箱:zhoujiajun198204@https://www.wendangku.net/doc/7f13413356.html,) 摘要:圆周率的计算是有据可依的,它的计算公式在数学上可以推导出来。利用割圆术,可以推导出圆周率的计算公式。 关键词:割圆术;直径分割;半径分割;圆心角。 1、绪言 利用割圆术,可以推导出圆周率的计算公式。 2、用外切圆分割正多边形 假设有一个圆,半径为R,圆心为O,用n根线段(直径)将其均匀分割,如图所示。将各端点连接起来,那么它就是一个有2n个偶数边的正多边形。由此可见,此圆周是正多形的外切圆。

假若组成正多边形的一个三角形为ΔAOB ,圆心角为α ,设AB=S ,正多边形的周长为L ,依题意,有: OA=OB=R 正多边形的周长L 为: L=2*n*S 圆心角α和分割圆的线段(直径)n 的关系为: n n 180 2360== α 根据三角函数,可以列出正多边形的边长S 和圆周半径R 的关系式,为: S 2=R 2+R 2-2*R*R*cos (α) )cos 1(*2*α-=R S 2.1、圆周率以正多边形的割边数n 为变量的计算形式 如果分割圆的线段(直径)n 越多,圆周就被分割得越细,组成的正多边形的边就越多。那么正多边形的周长就越接近于圆周的周长,因此,依此就可推导出圆周率的计算公式,为:

) 180 cos 1(*2*2)cos 1(*22222n n R nR R nS R L -=-= == απ 2.2、圆周率以正多边形的圆心角α为变量的计算形式 若以圆心角α为变量,也可得到圆周率的另一种计算公式。 圆心角α值越小,分割圆的直径数n 就越多,圆就被分割得越细,组成正多边形的边就越多,正多边形的周长就越接近于圆的周长。因此,依题意有: 将n= α 180 代入上式,可得: α αααπ)cos 1(*2*1802) cos 1(*2**180 *2222-= -= == R R R nS R L 3、用外切圆分割正多边形计算圆周率的另一种方式 过O 点作AB 的垂线OD ,如图所示:

c语言实现二叉树的代码

1,2两问的程序代码如下: #include "stdio.h" #include"malloc.h" typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create(BiTree T) { char ch; ch=getchar(); if(ch=='#') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode)); T->data=ch; T->lchild=Create(T->lchild); T->rchild=Create(T->rchild); } return T; } int node(BiTree T) { int sum1=0,a,b;

if(T) { if(T!=NULL) sum1++; a=node(T->lchild); sum1+=a; b=node(T->rchild); sum1+=b; }

return sum1; } int mnode(BiTree T) { int sum2=0,e,f; if(T) { if((T->lchild!=NULL)&&(T->rchild!=NULL)) sum2++; e=mnode(T->lchild); sum2+=e; f=mnode(T->rchild); sum2+=f; } return sum2;

void Preorder(BiTree T) { if(T) { printf("%c",T->data); Preorder(T->lchild); Preorder(T->rchild); } } int Sumleaf(BiTree T) { int sum=0,m,n; if(T) { if((!T->lchild)&&(!T->rchild)) sum++; m=Sumleaf(T->lchild); sum+=m; n=Sumleaf(T->rchild); sum+=n; } return sum; } void zhongxu(BiTree T) {

C语言二叉树运算

#include #include typedef struct bitnode { char data; struct bitnode *lchild; struct bitnode *rchild; }bitnode,*bitree; bitree createbitree(bitree &T){ char ch; printf("输入结点值ch="); scanf("%c",&ch); scanf("%c",&ch); if(ch!='#'){ if(!(T=(bitnode*)malloc(sizeof(bitnode)))) return 0; T->data=ch; T->lchild=NULL; T->rchild=NULL; createbitree(T->lchild); createbitree(T->rchild); } return T; } void preorder(bitree &p) { if(p) { printf("%c",p->data); if(p->lchild!=NULL) preorder(p->lchild); if(p->rchild!=NULL) preorder(p->rchild); }else printf("NULL"); } void inorder(bitree &p) { if(p) {

if(p->lchild!=NULL) inorder(p->lchild); printf("%c",p->data); if(p->rchild!=NULL) inorder(p->rchild); } } void postorder(bitree &p) { if(p) { if(p->lchild!=NULL) postorder(p->lchild); if(p->rchild!=NULL) postorder(p->rchild); printf("%c",p->data); } } int number(bitree &bt){ int n1,n2; if(!bt)return 0; if(!bt->lchild&&!bt->rchild) return 1; n1=number(bt->lchild); n2=number(bt->rchild); return(n1+n2+1); } int leafs(bitree &bt){ int n1,n2; if(!bt) return 0; if(!bt->lchild&&!bt->rchild) return 1; n1=leafs(bt->lchild); n2=leafs(bt->rchild); return n1+n2; } int height(bitree &bt){ int h1,h2; if(!bt) return 0;

从割圆术到微积分

从割圆术到微积分 丹阳市鹤溪中学杨松扣 一. 圆 据神话传说,盘古开天辟地时,他的眼珠化为日月两轮,又圆又大。什么是圆呢?古今中外,文人墨客对它给出了众多的褒贬不一的描述,象光滑、圆滑、圆满等,人们时常把圆作为完满美丽的象征。《墨经》中给圆下了个非常恰当的定义,那就是:“圆,一中同长也。”怎样画圆呢?上古时期的女娲就是手执“规”的神,她教会大家用圆规画圆。 圆,又是由什么样的图形演变而来的呢?《周髀算经》中写道:“数之法出于圆方,圆出于方。”“环矩以为圆,合矩以为方。”“方数为典,以方为圆。”生产实践中经常会遇到求圆的周长的问题,周长的计算涉及到一个圆周率π,古人根据经验一直沿用“周三径一”。实践中发现,周三径一并不是圆周长与直径的关系,而是圆内接六边形的周长与直径的比值。公元三世纪,我国数学家刘徽对这个问题作了深入的研究,运用他的话说:“周三者,从六觚之环耳。”(觚──正多边形的一边;环──周长) 二. 割圆术 刘徽通过长年累月的研究后发现,古代的圆周率π=3实在是不精确,甚至是错误的,然而不能提出可靠的论据,就没有说服力。取得论据是非常艰难的,不过刘徽毕竟从研究方与圆的关系中获得了成功,他在为《九章算术》作注时谈到:“学者踵古,习其谬失。不有明据,辩之斯难。凡物类形象,不圆则方,方圆之率,诚著于近,则虽远可知也。” 刘徽进行长期的追本觅源,刻苦钻研,终于悟出其中的真谛实义,创造出震惊中外数坛的“割圆术”。 何为“割圆术”?刘徽是从正六边形开始运算,令边数一倍一倍地增加,边数变为

12,24,48,96,192,…,逐个算出六边形、十二边形、二十四形、……的边长,然后乘以边数得到周长,逐步地逼近圆的周长,则正多边形的周长与圆的直径的比值就逐渐接近圆周率。刘徽的这种方法是随着边数的增加无限地接近圆周率,但仍然要比圆周率小。 虽然刘徽的割圆术还没有精确地算出圆周率,但它的精髓所在,是寓于其中的一种光辉创见,实际上引出了极限的概念。正是应用割圆术,配合勾股术,才使刘徽之后的祖冲之求出实用而准确的圆周率成为可能,也与后来的“微积分”的基础理论相吻合。 关于方与圆的关系,古数学家赵君卿说过一段话,其大意是说:方形的面积好算,圆形的面积则难算,这是因为计算方形有固定的方法,而圆形变化很大,因此要推导一种计算方法。 割圆术的可贵之处正是刘徽巧妙地运用了“方形好算,圆形难算”这个特点,与赵君卿的想法不谋而合。把圆看成边数是无穷的正多边形,它是待求的,末知的,而边形有限的正多边形则是可求的,已知的。用有限来逼近无限的方法实际上是总结了以下的一段话: “割之弥细,所失弥少,割之又割,以至于不可割,则与圆合体而无所失矣!” 刘徽的割圆术说明:如果圆的内接正多边形的边数无限增加,那么正多边形的周长就无限地接近圆周长。 三. 连续 水的流动,汽车的运行,星球的运转都说明了一个自然现象──连续。事实上,这种连续与数学有着密切的联系。 通俗地说,一个函数的图象在一个区间上是连续不断的,则称这个函数是这个区间上的连续函数。中学中所学的幂函数、指数函数、对数函数、三角函数及反三角函数我们称为初等函数,由这些初等函数和常量经过有限次的初等运算,以及有限次的函数复合步骤构成的初等函数,在其定义的一个区间上都是连续的。

用C语言编写二叉树的建立与遍历

用C语言编写二叉树的建立与遍历 #include "stdio.h" #include "string.h" #define NULL 0 typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create(BiTree T){ char ch; ch=getchar(); if(ch=='#') T=NULL; else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("Error!"); T->data=ch; T->lchild=Create(T->lchild); T->rchild=Create(T->rchild); } return T;

} void Preorder(BiTree T){ if(T){ printf("%c",T->data); Preorder(T->lchild); Preorder(T->rchild); } } int Sumleaf(BiTree T){ int sum=0,m,n; if(T){ if((!T->lchild)&&(!T->rchild)) sum++; m=Sumleaf(T->lchild); sum+=m; n=Sumleaf(T->rchild); sum+=n; } return sum; } void zhongxu(BiTree T){ if(T){

zhongxu(T->lchild); printf("%c",T->data); zhongxu(T->rchild); } } void houxu(BiTree T){ if(T){ houxu(T->lchild); houxu(T->rchild); printf("%c",T->data); } } int Depth(BiTree T){ int dep=0,depl,depr; if(!T) dep=0; else{ depl=Depth(T->lchild); depr=Depth(T->rchild); dep=1+(depl>depr?depl:depr); } return dep; }

C语言二叉树

#include #include #define STACK_MAX_SIZE 30 #define QUEUE_MAX_SIZE 30 #ifndef elemType typedef char elemType; #endif /************************************************************************/ /* 以下是关于二叉树操作的11个简单算法 */ /************************************************************************/ struct BTreeNode{ elemType data; struct BTreeNode *left; struct BTreeNode *right; }; /* 1.初始化二叉树 */ void initBTree(struct BTreeNode* *bt) { *bt = NULL; return; } /* 2.建立二叉树(根据a所指向的二叉树广义表字符串建立) */ void createBTree(struct BTreeNode* *bt, char *a) { struct BTreeNode *p; struct BTreeNode *s[STACK_MAX_SIZE];/* 定义s数组为存储根结点指针的栈使用 */ int top = -1; /* 定义top作为s栈的栈顶指针,初值为-1,表示空栈 */ int k; /* 用k作为处理结点的左子树和右子树,k = 1处理左子树,k = 2处理右子树 * / int i = 0; /* 用i扫描数组a中存储的二叉树广义表字符串,初值为0 */ *bt = NULL; /* 把树根指针置为空,即从空树开始建立二叉树 */ /* 每循环一次处理一个字符,直到扫描到字符串结束符\0为止 */ while(a[i] != '\0'){ switch(a[i]){ case ' ': break; /* 对空格不作任何处理 */ case '(': if(top == STACK_MAX_SIZE - 1){ printf("栈空间太小!\n"); exit(1); }

C语言二叉树家谱管理系统

摘要 本文设计了一个对数据输入,输出,储存,查找的多功能软件,本文需要保存家族的基本信息,包括姓名及它们的关系,但是由于家族信息很巨大而且关系很复杂所以采用二叉树来表示它们的关系。并且具有保存文件的功能,以便下次直接使用先前存入的信息。家谱的功能是查询家族每个人的信息,并且输出它们的信息,还要具有查询输出功能。 本文采用二叉树来存取家族的基本信息,头结点作为父亲节点,他的左孩子为他的妻子,妻子结点的右孩子为他的孩子,依次存储每个家庭的信息。可以查找每个父亲的孩子和每个人的所有祖先。 关键词:二叉树家谱结点

目录 1 系统功能概述 (1) 1.1 系统功能 (1) 图2 成员二叉树功能模块图 (4) 1.2 总体功能模块 (4) 2 系统各功能模块的详细设计 (4) 2.1功能选择 (4) 2.2信息输入 (6) 2.3信息输出 (7) 2.4信息存盘 (7) 2.5信息清盘 (8) 2.6信息查询 (8) 2.7源程序 (10) 3设计结果与分析 (16) 3.1菜单函数功能测试 (16) 4.2输入功能函数测试 (16) 3.3输出功能函数测试 (17) 3.4清盘功能函数测试 (17) 3.5存盘功能函数测试 (17) 3.6查询功能函数测试 (18) 总结 (19) 参考文献 (20)

1 系统功能概述 1.1 系统功能 实现的方法是先定义一个二叉树,该二叉树上的每个结点由三个元素组成:姓名、指向它左孩子的指针、以及指向它右孩子的指针构成。该家谱管理系统将信息用文件的方法进行存储管理,再从文件中将成员信息以递归的方法创建二叉树。该输入成员信息的方法是将父亲结点存上父亲的信息,然后父亲结点的左孩子存上母亲的信息,母亲结点的右孩子存上孩子的信息。 (1)定义结构体 结构体为表示一个对象的不同属性提供了连贯一致的方法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。本文定义了两个结构体,分别是家族成员和二叉树结点的结构体。代码如下:typedef struct fnode { char father[NAMEWIDTH]; char wife[NAMEWIDTH]; char son[NAMEWIDTH]; }FamType; typedef struct tnode { char name[NAMEWIDTH]; struct tnode *lchild,*rchild; }BTree; (2) 二叉树的建立 二叉树的结点有三个域,数据域和两个指针域,数据域用来存放数据,两个指针域分别存放指向该结点左右孩子的指针。并且还有个root结点,称二叉树的根节点。代码如下: BTree *CreatBTree(char *root,FamType fam[],int n)

二叉树在C语言中的实现与应用详解

/************************************************************************/ 二叉树在C语言中的实现与应用 /************************************************************************/ #include #include #define STACK_MAX_SIZE 30 #define QUEUE_MAX_SIZE 30 #ifndef elemType typedef char elemType; #endif /************************************************************************/ /* 以下是关于二叉树操作的11个简单算法 */ /************************************************************************/ struct BTreeNode{ elemType data; struct BTreeNode *left; struct BTreeNode *right; }; /* 1.初始化二叉树 */ void initBTree(struct BTreeNode* *bt) { *bt = NULL; return; } /* 2.建立二叉树(根据a所指向的二叉树广义表字符串建立) */ void createBTree(struct BTreeNode* *bt, char *a) { struct BTreeNode *p; struct BTreeNode *s[STACK_MAX_SIZE];/* 定义s数组为存储根结点指针的栈使用 */ int top = -1; /* 定义top作为s栈的栈顶指针,初值为-1,表示空栈 */ int k; /* 用k作为处理结点的左子树和右子树,k = 1处理左子树,k = 2处理右子树 */ int i = 0; /* 用i扫描数组a中存储的二叉树广义表字符串,初值为0 */ *bt = NULL; /* 把树根指针置为空,即从空树开始建立二叉树 */ /* 每循环一次处理一个字符,直到扫描到字符串结束符\0为止 */ while(a[i] != '\0'){ switch(a[i]){ case ' ': break; /* 对空格不作任何处理 */ case '(': if(top == STACK_MAX_SIZE - 1){ printf("栈空间太小!\n"); exit(1); }

数列极限的几种求法

数列极限的几种求法 摘要本文通过实例,归纳总结了数列极限的若干种求法.学习并掌握这些方法,对于学好数学分析颇有益处. 关键词数列极限;级数;定积分;重要极限;单调有界数列 中图分类号O171 Several Methods of Sequence limit Abstract:Through examples,summarized several series method for finding the limit.Learn and master these methods,mathematical analysis is quite good for studying. Keywords:Sequence limit;Series;Definite integral;Important limit;Monotone bounded sequence 1引言 极限是分析数学中最基本的概念之一,用以描述变量在一定的变化过程中的终极状态. 极限的概念,可追溯到古希腊时代,德谟克里特(Democritus)是古希腊的哲学家,他博学多才,著作多到五六十种,涉及哲学、数学、天文、生物、医学、逻辑、教育与文学艺术等方面.年轻时他花尽了父亲给他的全部财产到埃及、巴比伦、印度等国家游历,获得了大量的科学知识.马克思、恩格斯称他为“经验的自然科学家和希腊人第一百个百科全书式的学者”.谟克里特以探求真理为最大快乐,他有句名言:“宁可找到一个因果的解释,不愿获得一个波斯王位.”在他的著作中有一种原子法,把物体看作是由大量微小部分叠和而成,利用这一理论,求得锥体体积是等于等高柱体体积的三分之一,这是极限思想的萌芽.公元前五世纪,希腊数学家安提丰(Antiphon)在研究化圆为方问题时创立了割圆术,即从一个简单的圆内接正多边形出发,把每边所对的圆弧二等分,连结分点,得到一个边数加倍的圆内接正多边形,当重复这一步骤多次时,所得圆内接正多边形面积之差将小于任何给定的限度.实际上,安提丰认为圆内接正多边形与圆最终将会重合.稍后,另一位希腊数学家布里松(Bryson)考虑了用圆的外切正多边形逼近圆的类似步骤.这种以直线形逼近曲边形的过程表明,当时的希腊数学家已经产生了初步的极限思想.公元前4世纪,欧多克索斯(Eudoxus)将上述过程发展为处理面积、体积等问题的一般方法,称为穷竭法,并发展为较为严格的理论,提出现在分析中通称的“阿基米德公理”.穷竭法成功地运用于面积的计算.这些都可以看作是近代极限理论的雏形. 朴素的、直观的极限思想在我国古代的文献中也有记载.如,中国古代的《墨

数据结构C语言实现二叉树三种遍历(考试类别)

实验课题一:将下图中的二叉树用二叉链表表示: A B C D E F G H 1 用三种遍历算法遍历该二叉树,给出对应的输出结果; 2 写一个函数对二叉树搜索,若给出一个结点,根据其是否属于该树,输出true或者false。 3 写函数完成习题4.31(C++版)或4.28(C版教科书)。 #include "stdio.h" #include"malloc.h" typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create(BiTree T) { char ch; ch=getchar(); if(ch=='#') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode)); T->data=ch; T->lchild=Create(T->lchild); T->rchild=Create(T->rchild); } return T; } int node(BiTree T) { int sum1=0,a,b; if(T) {

if(T!=NULL) sum1++; a=node(T->lchild); sum1+=a; b=node(T->rchild); sum1+=b; } return sum1; } int mnode(BiTree T) { int sum2=0,e,f; if(T) { if((T->lchild!=NULL)&&(T->rchild!=NULL)) sum2++; e=mnode(T->lchild); sum2+=e; f=mnode(T->rchild); sum2+=f; } return sum2; } void Preorder(BiTree T) { if(T) { printf("%c",T->data); Preorder(T->lchild); Preorder(T->rchild); } } int Sumleaf(BiTree T) { int sum=0,m,n; if(T) { if((!T->lchild)&&(!T->rchild)) sum++; m=Sumleaf(T->lchild); sum+=m; n=Sumleaf(T->rchild); sum+=n;

数据结构C语言实现二叉树三种遍历

冲刺拼搏,在前进中寻找乐趣。 实验课题一:将下图中的二叉树用二叉链表表示: 1 用三种遍历算法遍历该二叉树 给出对应的输出结果; 2 写一个函数对二叉树搜索 若给出一个结点 根据其是否属于该树 输出true或者false 3 写函数完成习题4.31(C++版)或4.28(C版教科书) #include "stdio.h" #include"malloc.h" typedef struct BiTNode { char data; struct BiTNode *lchild *rchild; }BiTNode *BiTree; BiTree Create(BiTree T) { char ch; ch=getchar(); if(ch=='#') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode)); T->data=ch; T->lchild=Create(T->lchild); T->rchild=Create(T->rchild); } return T; } int node(BiTree T) { int sum1=0 a b; if(T)

if(T!=NULL) sum1++; a=node(T->lchild); sum1+=a; b=node(T->rchild); sum1+=b; } return sum1; } int mnode(BiTree T) { int sum2=0 e f; if(T) { if((T->lchild!=NULL)&&(T->rchild!=NULL)) sum2++; e=mnode(T->lchild); sum2+=e; f=mnode(T->rchild); sum2+=f; } return sum2; } void Preorder(BiTree T) { if(T) { printf("%c" T->data); Preorder(T->lchild); Preorder(T->rchild); } } int Sumleaf(BiTree T) { int sum=0 m n; if(T) { if((!T->lchild)&&(!T->rchild))

相关文档
相关文档 最新文档