杨辉三角实验报告

合集下载

最新显示杨辉三角实验报告

最新显示杨辉三角实验报告

最新显示杨辉三角实验报告实验目的:探究杨辉三角的生成规律及其在现代数学和计算机科学中的应用。

实验工具与环境:- 计算机一台,配备Python编程环境。

- Python编程语言及其库NumPy和Matplotlib用于数据处理和图形展示。

- Jupyter Notebook作为实验报告的编写和展示平台。

实验步骤:1. 利用Python编写函数,通过数学公式直接计算杨辉三角的第n行元素。

2. 使用循环结构,编程生成杨辉三角的前10行。

3. 观察并验证杨辉三角中的各项性质,如每行数字的和为2的幂次方。

4. 利用NumPy库进行矩阵乘法,探索杨辉三角与二项式系数的关系。

5. 通过Matplotlib库将生成的杨辉三角可视化展示,并分析其图形特征。

6. 探讨杨辉三角在组合数学、概率论等领域的应用实例。

实验结果:1. 成功编写并运行了生成杨辉三角的Python程序,正确输出了前10行的数据。

2. 通过观察和计算,验证了杨辉三角的每一行数字之和确实为2的幂次方。

3. 在NumPy的帮助下,确认了杨辉三角的每一行与二项式系数的对应关系。

4. 利用Matplotlib库生成的杨辉三角图形清晰地展示了其对称性和数字分布规律。

5. 通过实例分析,了解了杨辉三角在解决组合问题和计算概率时的实际应用。

实验结论:杨辉三角不仅是一种有趣的数学现象,而且在现代科学和工程领域有着广泛的应用。

通过本次实验,我们不仅掌握了杨辉三角的生成方法,还深入理解了其背后的数学原理和实际应用价值。

此外,实验过程中的编程实践也加强了我们运用计算机工具解决数学问题的能力。

杨辉三角探究

杨辉三角探究

r
n2
n1
n1
n1
n1
n1
第n行
1 C1 C 2 ···
n
n
Cr n
···Cnn2
C n1 n
1
······
基本性质
C r C r1 C r ,C r C nr .
n
n1
n1
n
n
试用数学归纳法证明二项式定理:
(a b)n C 0an C1a b n1 C a b r nr r C nbn
(C 0ak C1ak b1 C rakrbr C kbk )(a b)
k
k
k
k
C a0 k1 C1akb C a b r1 kr r1 C k abk C 0akb
k
k
k
k
k
C r akrbr1 C k ab 1 k C bk k1
13 3 1
14 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
············
杨辉三角之探究2
在杨辉三角的5行中, 除去两端的数字1以外, 行数5整除其余的所有数, 你能找出具有类似性质 的三行吗?这时 行数P是什么样的数?
第0行 第1行 第2行 第3行 第4行 第5行 第6行 第7行
k
k
k
k
k
C r akrbr1 C k ab 1 k C kbk1
k
k
k
(2)假设当n=k时等式成立, 即
(a b)k C 0ak C1ak b1 C rakrbr C kbk

杨辉三角与路径问题探究内容

杨辉三角与路径问题探究内容

杨辉三角与路径问题探究内容标题建议:《杨辉三角与路径问题:从数学到生活的探究》一、引言在中国的数学史上,杨辉三角是一个不可或缺的篇章。

这一三角形的规律性和特性,不仅在数学领域有着广泛的应用,还与现实生活中的路径问题有着密切的联系。

本文旨在深入探究杨辉三角的奥秘,并探讨其与路径问题的关联。

二、杨辉三角的特性与规律杨辉三角是一个二项式系数表,它以其独特的排列方式展示了二项式系数之间的内在联系。

杨辉三角的每一行数字都与上一行相邻两个数字有关,具体规律如下:1. 每行的第一个数字和最后一个数字都是1。

2. 每行的中间数字等于上一行相邻两个数字之和。

3. 每行的数字都是上一行的两个相邻数字的差值的一半的绝对值依次加1。

这些规律不仅使得杨辉三角的每一行数字都具有高度的逻辑性和规律性,还为解决一系列复杂的数学问题提供了有力工具。

三、杨辉三角与路径问题的联系当我们从数学角度深入研究杨辉三角时,不难发现其与路径问题的紧密联系。

例如,我们可以使用杨辉三角来解决图论中的最短路径问题、网络流问题等。

这主要归功于杨辉三角中的数字规律,这些规律在解决路径问题时能够提供有效的算法和优化策略。

以最短路径问题为例,我们可以通过杨辉三角中的数字规律,找到从起点到终点的最短路径。

具体来说,我们可以利用杨辉三角中的数字来构建一个权重矩阵,然后使用Dijkstra算法或Bellman-Ford算法等路径算法求解最短路径。

这种方法在解决现实生活中的交通规划、物流配送等问题时具有很高的实用价值。

四、结论通过以上探究,我们可以看到杨辉三角不仅在数学领域有着重要的地位,而且在实际生活中也有着广泛的应用。

从路径问题到网络流问题,杨辉三角的规律性和算法都为我们的生活和工作带来了极大的便利。

未来,随着科学技术的不断进步,相信杨辉三角将会在更多领域发挥出更大的作用。

同时,也希望通过本文的探究,能够激发更多人对杨辉三角和路径问题的兴趣,进一步推动数学与实际应用的结合。

指导学生研究杨辉三角的实践及其教育价值

指导学生研究杨辉三角的实践及其教育价值

指导学生研究杨辉三角的实践及其教育价值浙江省宁波市北仑中学安凤吉 315800杨辉三角是现行高中数学教材中少见的数学历史材料之一,它不仅记载了一些中外数学家们一段美好而又动听的故事,而且还科学地揭示了二项展开式的二项式系数的构成规律,更具有许多奇妙的性质.因此,杨辉三角是不可多得的集思想性、科学性、知识性、趣味性于一体的珍贵的历史材料.为了充分发挥杨辉三角的教育功能,笔者指导了学生对杨辉三角的研究,现将研究的过程、成果及体会分述如下.1.实践过程利用二项式定理第二课时的小结时间(约10分钟),向学生简介杨辉三角,并发给每人一份研究提纲,指导、布置研究任务.1.1杨辉三角简介杨辉三角因最早出现在我国宋朝数学家杨辉1261年所著的《详解九章算法》的附录中而被称为“杨辉三角”.其实,在11世纪中叶,我国北宋数学家贾宪就著就了《皇帝九章算法细草》一书,可惜这部书早已失传了.但该书部分内容(包括杨辉三角)因被收入《详解九章算法》一书而幸存.西方把杨辉三角称为“帕斯卡三角”,这是因为“帕斯卡三角”在西方最早出现在法国数学家帕斯卡1665年出版的《算术三角》的著作中,这要比贾宪晚400年左右.1.2杨辉三角的研究提纲(1)阅读《高中代数(下册)》第248页至第249页.(2)如图1-1,一个儿童从A处进入图中的曲经,请计算这个儿童分别到达B、C、D、E、F、G、H、I、J、K、L、M、N、O处的最短路线的条数,并把它填入图1-2的相应的圆圈内.你从中发现有什么规律?按照你计算的结果和发现的规律对照杨辉三角,写出杨辉三角的前8行.(图1-1)(图1-2)(3)请参考《高中代数(下册)》第248页的图,研究杨辉三角中的数字与组合数是否有关系?有怎样的关系?(4)在杨辉三角中,如图2,一些直线连接的数字分别构成了一些数列,请研究这些数列的性质.例如,杨辉三角是一个“等腰三角形”,左腰上的数字构成了常数列1,1,1,…,1…;平行于左腰的直线上的数字依次构成等差数列1,2,3,4,…;二阶等差数列(其一阶差分数列是等差数列)1,3,6,10,…;三阶等差数列(其二阶差分数列是等差数列)1,4,10,20,…;……(5)从“形”上研究杨辉三角的性质,例如奇数的分布,偶数的分布,3的倍数的分布等等.(6)研究杨辉三角其它方面的性质.(7)参考文献(略).1.3研究活动的具体要求(1)自愿为原则,每班组成10个研究小组,每组4至5人,并推选一名组长,负责组织本组的研究及研究成果的整理,写成一篇小论文.(2)对于研究的成果,要进行严格的证明,如果是摘录的结论,请注明出处.(3)三周后进行交流,各研究小组分别委派一名代表宣读论文.(4)评选出优秀研究成果(不超过研究成果总数的三分之一).2.研究成果(如图3)(图2 ) (图3)2.1杨辉三角的数字构成规律是,每行两相邻数字的和等于它们共同对应的下行的数字(如图中),这条性质可由m n m n m n C C C 11+-=+得证.2.2横行(如1—4—6—4—1)与首末两端“等距离”的两个数字相等,这条性质就是二项式系数的性质1.2.3第n 行(如1—4—6—4—1)的所有数字之和为21-n ,这条性质可由组合数的性质1112111012------=++++n n n n n n C C C C 得证. 2.4当n 为奇数时,第n 行有奇数项,中间一项最大;当n 为偶数时,第n行有偶数项,中间两项相等且最大.这条性质就是二项式系数的性质2.2.5第n 行的平方和等于1)1(2--n n C (如12+42+62+42+12=70=4815)15(2C C =--),这条性质可由恒等式1)1(2211221211201)()()()(-------=++++n n n n n n n C C C C C 得证. 2.6平行于杨辉三角的腰的直线(包括腰所在的直线)上各个数字之和等于末项的下一行偏向中央的第一项(如图3中1+2+3+4+5+6=21,1+3 +6+10+15=35),可由恒等式1121++++++=++++m n m m n m m m m m m m C C C C C得证.2.7第2n (-∈Z n )行所有各项都是奇数.证明:第2n 行各项为k nC 12-(k =0,1,2……,12-n ), (1)当k =0,1时,kn C 12-=1,12-n 均为奇数; (2)假设当k =m -1(m ≥2)时命题正确,即112--m n C 为奇数,则 m n C 12-=m m n -2112--m n C ……①,若m 为奇数,由①知mn C 12-=奇数奇数奇数⨯,假设m nC 12-是偶数,则有偶数=奇数奇数奇数⨯,即有偶数⨯奇数=奇数⨯奇数,矛盾,故m n C 12-必为奇数;若m 为偶数,可设m =2p 1m ,其中1m 为正奇数,N p ∈,n p <.①可化为m n C 12-=112m m p n --112--m n C ,同理可证mn C 12-仍为奇数.因而当k =m 时,命题也正确.由(1)、(2)可知第2n 行所有各项都是奇数.2.8中轴线(1,2,6,20……所在的直线)上的各项或平行于中轴的直线上的各项构成的数列,都有这样的性质:每一项与前一项的比构成的新数列的极限均为4.证明:原数列的通项为211kn n C +--(它是杨辉三角中的第n 行,且与中轴线的距离为k 的直线上的数),当k =0时,⎭⎬⎫⎩⎨⎧--211n n C 是中轴线上的数列 (n =1,3,5,…,2m -1,…);当k =1时,⎭⎬⎫⎩⎨⎧-21n n C(n =2,4,6,…,2m ,…)是平行于中轴线且与其相邻(即距离为1)的直线上的数列;当k =2时,⎭⎬⎫⎩⎨⎧+-211n n C(n =3,5,7,…,2m -1,…)是平行于中轴线且与中轴线距离为2的直线上的数列….因为211k n n C +--的前一项是233kn n C +--,故211kn n C +--÷233k n n C +--=])1][()1[()2)(1(4k n k n n n --+---,故有∞→n lim (211k n n C +--÷233k n n C +--) =∞→n lim ])1][()1[()2)(1(4k n k n n n --+---=4. 2.9把每一行各项从左至右分别乘以m 0,m 1,…m r ,…(m C ∈,m ≠-1),再把它们加起来所得到的和数列是公比为(1+m )的等比数列.证明:第n 行各项为11211101,,,,-----n n n n n C C C C ,由题设新数列的通项为n a =11112211101)1(-------+=++++n n n n n n n m m C m C m C C ,故有n a ÷1-n a =(1+m ),得证.2.10英国的《SMP 英国中学数学教科书》中,把帕斯卡三角(即杨辉三角)改写成如图4的形式,并将每一条斜线上的数字分别相加,得到数列1,1,3,5,8,13,21,…,此数列是著名的斐波那契数列.2.11在杨辉三角中(如图3),以第n 行(包括该行)为底边,以第一行的“1”为顶点的三角形是等边三角形.我们称之为边长为n 的杨辉三角.2.12在边长为16的杨辉三角中,把偶数“聚集区”(图5中“0”代表偶数,“1”代表奇数,可称为杨辉三角的0-1三角)看作是“倒等边三角形”,只有一个偶数的“聚集区”,也可看作是一个边长为1的“倒等边三角形”.把这些“倒等边三角形”从杨辉三角中“挖去”,剩余部分就是有趣的西尔平斯基衬垫(如图6).西尔平斯基衬垫是由波兰数学家西尔平斯基(Sierpinski )于1915年发现的,故而得名.使用Gbasic 语言编程:运行结果如图5:(图5)(图6)通过民主评议,同学们一致认为2.7、2.8、2.12是我们依靠自己的聪明才智,并做了很多具有开拓性的工作获得的,因而无可争议地被评为优秀成果.2.10虽然不是学生自己的研究成果,但是,多数同学认为2.10也来之不易,是一个小组的同学费尽周折获得的,并且还有很强的趣味性;另外,“拿来主义”也是学习的一种方法.因此,2.10也被评为优秀成果.3.教育价值3.1德育价值3.1.1培养爱国主义思想的教育价值杨辉三角“是数学史上的重大发现,它在数学的许多领域都有及其重要的应用”[1],这一重大发现比西方要早四百年左右,是我国数学家对数学发展的重要贡献之一.通过向学生介绍杨辉三角的来龙去脉,展示了我国悠久的历史、灿烂的文化和我国古代数学发展的成就,显示了我们中华民族的勤劳和智慧.改革开放的今天,是我国历史上经济发展和社会进步的最好时期,中华古老文化的底蕴与中华民族的聪明才智,必将化作21世纪的民主、富强、文明的社会主义现代化强国,屹立在世界的东方.这是一次生动的爱国主义思想教育,极大地激发了学生实现为社会主义现代化强国而刻苦学习的热情.3.1.2培养献身科学精神的价值通过杨辉三角的介绍和查阅大量的资料,学生还获得了许多科学知识和鲜为人知的关于科学和科学家的故事,从而引起了学生对科学的极大兴趣和热爱.在研究的过程中,学生也体会到了在科学研究中遇到挫折时的困惑和取得成功的喜悦.这些都会使学生萌发和树立爱科学、学科学、用科学、献身科学的思想.而从事科学研究首先要有科学的态度,还要有脚踏实地、知难而上的实干精神,通过这项研究,也有利于磨练学生的意志,培养学生一丝不苟的科学态度、坚忍不拔的毅力和刻苦钻研的精神.3.1.3培养合作意识和精神的价值和平与发展是当今世界的主流,而和平与发展需要合作,没有合作就没有和平,就没有发展.一个人不谋求并善于与他人合作,就很难融入现代社会,就没有发展的空间,甚至难以生存.我国已经进入了独生子女时代,学校教育要重视培养学生与他人合作的意识和精神.这项研究活动是在自愿的基础上组成研究小组,以研究小组为单位,组员之间既有分工又有合作,研究成果是集体智慧的结晶,使学生体会到了合作的快乐和合作的重要性,从而引导学生广泛交流,主动寻求合作,互相帮助共同进步.3.2智育价值3.2.1开发智力培养能力的价值这是一个研究性学习的学习过程.虽然有研究提纲,但也仅限于研究的方向,具有高度的开放性,需要学生自己提出问题,并想方设法解决问题.因此,这是一个锻炼和提高问题解决能力的好机会.有了研究的方向,学生首先对杨辉三角进行观察、分析,通过感性认识进行归纳、抽象、概括提出问题,有利于培养学生思维的灵活性和思维的广阔性;对所提出的问题进行计算、演绎、推理、分析和判断得出结论,然后加以论证或否定,有利于培养学生思维的深刻性和思维的批判性.在这个过程中,学生的思维能力、运算能力、空间想象能力都得到了锻炼和提高,有利于形成和提高分析问题和解决问题的能力,起到了开发智力培养能力的作用.3.2.2培养数学应用的意识和能力的价值使学生学会从事社会主义现代化建设事业或进一步学习所必须的数学知识,培养学生数学应用的意识和能力,是中学数学的教学目的之一.通过对杨辉三角的研究,不仅使学生所学的知识得以巩固和加强,还使学生感到自己的所学有了用武之地,提高了学生学习数学的兴趣以及数学应用的意识和能力.特别是有一组的同学,使用Gbasic 语言编程,运用计算机这一现代化手段,打印出了杨辉三角、杨辉三角的0-1三角和西尔平斯基衬垫,这一“开拓性”的工作,使学生受到了巨大的鼓舞.3.2.3培养科学研究的意识和能力的价值现代教育需要培养创新型的人才,而培养学生科学研究的意识和能力,是培养创新精神的重要方面;现代社会的发展需要人才的知识结构不断更新,因此,学习将伴随人们的终身,学校教育肩负着培养学生终身学习能力的重任,要使学生掌握与现代社会发展相适应的学习方法.指导学生对杨辉三角的研究,使学生了解了科学研究和研究性学习的过程和方法,为进一步培养和提高自学能力、科学研究能力奠定了基础.3.3美育价值杨辉三角中的数字都关于中轴线对称;边长为n2的杨辉三角的0-1三角,关于“三条高线”都对称;西尔平斯基衬垫也具有上述性质; 体现了数学的对称美.杨辉三角的0-1三角还可由下面的作出:先由三个边长为2的杨辉三角(如图7-1),方法拼成边长为4的杨辉。

汇编杨辉三角实验报告

汇编杨辉三角实验报告

汇编杨辉三角实验报告篇一:“杨辉三角”简介“杨辉三角”简介上述三角形数表称为“杨辉三角”,它呈现了二项式展开式各项系数的规律.如表中第三行为二项式的各项的系数:1,2,1.又如表中第四行为二项式的系数:1,3,3,1.“杨辉三角”中数的排列规律是:每一行两端都是1,其余各数都是上一行中与比数最相邻的两数之和,如的各项这个数表是南宋数学家杨辉收录在他的著作里才流传下来的.据他的著作里记载,这个数表早在11世纪由北宋数学家贾宪所发现.因此,后人把“杨辉三角”又称为“贾宪三角”.在西方,称这个数表为“帕斯卡三角形”.帕斯卡在1653年开始应用这个三角形数表,发表则在1665年.这就是说,就发现和应用这个三角形而言,贾宪比帕斯卡早600年左右,杨辉比帕斯卡早400多年.篇二:汇编语言设计题目汇编语言设计题目下面的汇编语言设计题目完全可用汇编语言在PC机上实现,不需在专门的硬件实验板上实现。

题目1 十进制数转换成二进制数。

要求:提示输入一个十进制数;输入任意数字int1,点击Enter结束输入,输出int1 的二进制代码;点击Enter程序退出。

题目 2 十进制数转换成十六进制数。

从键盘输入一个十进制数,转换成十六进制数,显示出来。

要求:需要检测输入一个规范的十进制数。

题目 3 十六进制数转换成十进制数。

从键盘输入一个十六进制数,转换成十进制数,显示出来。

要求:需要检测输入一个规范的十六进制数。

题目 4 字符串大写字母转换为小写。

要求:提示输入字符串;输入任意字符串string,点击Enter 结束输入;将字符串string 中的大写字母转换为小写字母输出;点击Enter 程序退出。

题目 5 字符串小写字母转换为大写。

将键盘输入的小写字母用大写显示出来,若输入的是非字符,显示NON CHAR。

题目6 将用户输入的华氏温度转换为摄氏温度。

要求:提示输入一整数;键盘输入,Enter 键结束输入,并换行显示结果。

数据结构杨辉三角实验报告(c语言)

数据结构杨辉三角实验报告(c语言)

杨辉三角问题描述编写程序,根据输入的行数,屏幕显示杨辉三角。

基本要求(1)行数不大于20行。

(2)基于队列的操作来实现杨辉三角的不断生成过程。

(注:不要用其它的公式计算的方法或者二维数组来实现)(3)基于数组实现队列的物理数据结构。

输入输出输入n= 6输出1 n=01 1 n=11 2 1 n=21 3 3 1 n=31 4 6 4 1 n=41 5 10 10 5 1 n=51 6 15 20 15 6 1 n=6概要设计:基本操作:SeqQueue()操作结果:构造一个空队列QmakeEmpty()初始条件:队列Q已存在操作结果:将Q清为空队列IsEmpty()初始条件:队列Q已存在操作结果:若Q为空队列,则返回TRUE,否则FALSE getSize()初始条件:队列Q已存在操作结果:返回Q的元素个数,即队列长度EnQueue(const T& x)初始条件:队列Q已存在操作结果:若队列不满,则将x进队,否则一处处理DeQueue(T& x);初始条件:Q为非空队列操作结果:删除Q的队头元素,并用x返回其值具体程序#include "stdlib.h"#include "stdio.h"#define OK 1#define error 0#define maxsize 100typedef int Qelemtype;typedef int status;typedef struct{Qelemtype *base;int f;int r;}Squeue;status InitQueue(Squeue & Q){Q.base=(Qelemtype*)malloc(maxsize*sizeof(Qelemtype));Q.base=new(Qelemtype);if(!Q.base)return error;Q.f=Q.r=0;return OK;}int Queuelength(Squeue & Q){return (Q.r-Q.f+maxsize)%maxsize;}status EnQueue(Squeue & Q,Qelemtype e){if((Q.r+1)%maxsize==Q.f){printf("队列已满\n");return error;}Q.base[Q.r]=e;Q.r=(Q.r+1)%maxsize;return OK;}status DeQueue(Squeue & Q,Qelemtype &e){if(Q.f==Q.r){printf("队列已空\n");return error;}e=Q.base[Q.f];Q.f=(Q.f+1)%maxsize;return OK;}void YangHui(int n){Squeue q; //建立队列对象int i=1,j,s=0,t,u; //计算下一行系数时用到的工作单元InitQueue(q);printf("\n 1");EnQueue(q,1);EnQueue(q,1); //预先放入第一行的两个系数for(i=1;i<=n;i++) //逐行处理{printf("\n"); //换一行EnQueue(q,0); //各行间插入一个for(j=1;j<=i+2;j++) //处理第i行的i+2个系数(包括一个){DeQueue(q,t); //读取一个系数u=s+t;EnQueue(q,u); //计算下一行系数,并进队列s=t;if(j!=i+2)printf("%3d",s); //打印一个系数,第i+2个是}}}void main() //主函数{int n;printf("输入n=");scanf("%d",&n);printf("输出:");YangHui (n);printf("\n");system("pause");}运行结果:算法的时空分析时间复杂度为O(N)输入输出格式输入:直接输入想要行数n输出:如果输入小于条件给予的20,则显示如题所要求的杨辉三角。

杨辉三角形研究报告四年级

杨辉三角形研究报告四年级

杨辉三角形研究报告四年级杨辉三角形研究报告一、引言杨辉三角形是中国古代数学家杨辉在13世纪发现和研究的,它具有独特的特点和规律性质。

本报告将介绍杨辉三角形的生成方式、特点以及一些有趣的性质。

二、生成方式杨辉三角形是通过以下方式生成的:1. 第一行只有一个数1;2. 第二行有两个数1;3. 从第三行开始,每一行的行数与列数的数值都为1,其余的数值等于它上面两个数的和。

例如,以下是一个杨辉三角形的示例:```11 11 2 11 3 3 11 4 6 4 1```三、特点和性质1. 对称性:杨辉三角形是对称的,中心轴是竖直的。

即:第n 行的第m个数等于第n行的第n-m+1个数。

2. 二项展开:杨辉三角形的每一行的数值可以用于展开二项式的系数。

例如,(a+b)的n次方展开后,各项的系数就是第n行的数值。

3. 数字规律:杨辉三角形中的数值有许多有趣的规律。

例如,每一行的数值相加得到的和都是2的n次方;每一行的奇数位上的数值都是C(n, k)的结果,其中n是行数,k是从左到右计数的位置。

4. 斐波那契数列:杨辉三角形中的对角线上的数值形成了著名的斐波那契数列。

四、应用1. 组合数学:杨辉三角形可以用于计算组合数C(n, k)的结果,其中n是行数,k是从左到右计数的位置。

2. 概率论:杨辉三角形可以应用于概率论中的二项分布。

3. 编程中的应用:杨辉三角形可以通过编程语言来生成和使用,用于解决一些特定的问题。

五、结论杨辉三角形是一种有趣且有用的数学模型,它具有许多特点和规律。

它不仅可以用于计算组合数和展开二项式,而且还可以应用于概率理论和编程中。

通过研究和理解杨辉三角形,我们可以提高数学思维能力,并拓展数学的应用领域。

输出杨辉三角形设计报告(1)资料

输出杨辉三角形设计报告(1)资料
解法二:
首先定义一个二维数组,长度为21,21,。接着定义三个变量i,j,n。然后输出提示字符,提示输入杨辉三角行数。将每一行第一个数字和最后一个数字的初始化置于双重for循环中,减少一个循环,并计算每一行中间的各个数字。最后用双重for循环输出每一个素质并且换行。
三、详细设计(1)
主要功能模块 1 源程序
1、要熟练掌握相关的C语言知识。
2、要熟练掌握杨辉三角的基本规律。
1杨辉三角第n行中的n个数之和等于2的n-1次幂。
2每个数字都等于它上方的两数之和。
3每行数字左右对称,由1开始逐渐变大。
4第n行的数字有n+1项。
5(a+b)的n次幂的展开式中各项系数依次对应杨辉三角第n+1行中的每一项。并由二项式系数规律推出公式:k=k*(i-j)/j。
开发环境
本程序采用Microsoft Visual C++ 6.0的英文版本进行编译。Visual C++是微软公司推出的基于Windows操作系统的可视化C++编程工具。
二、总体设计(1)
系统功能需求分析
此系统的主要功能是用四种不同的方法输出杨辉三角的前n(1<n<20)行。要实现目标就要完成以下步骤:
1、函数的定义出现错误,遗漏函数的声明。
2、定义精度出现问题。
3、大括号上下括号对应出错,下括号掉了,导致程序无法运行。
4、C语言书写错误,掉了字母或写错字母。
5、C语言知识不熟练,无法使用多种方法输出杨辉三角形。
6、一位数组中的变量出现错误,导致程序崩溃。
问题的解决方法
1、补充函数的声明。
2、重新定义精度。
int i,j,n;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

杨辉三角(一)需求分析1.逐行打印二项展开式(a + b)i 的系数2.要求:输入杨辉三角的阶数n,在屏幕上显示数杨辉三角形。

3.输入的值n以小于12为宜(图形漂亮)。

(二)概要设计1. 首先初始化一个队列,元素为1,然后根据这个队列迭代生成任意行的二项式系数。

2. 判断用户输入的行数,然后决定循环次数。

这些循环中,程序根据杨辉三角的实际构造函数模拟构造过程。

每次形成一个新的二项式系数序列,并将这个序列保持在一个新的队列中。

本次循环结束后,这个心构造的序列将作为下次循环来构造另一个二项式序列的参照序列。

(三)详细设计1.定义队列结点typedef struct QNode{int data;struct QNode *next;}QNode ,*QueuePtr;typedef struct {QueuePtr front;QueuePtr rear;}LinkQueue;2.基本操作函数原型●队列初始化void InitQueue(LinkQueue *Q){Q->front =Q->rear = (QueuePtr)malloc(sizeof(QNode));if(!Q->front) printf("OVERFLOW");Q->front->next= NULL;}●插入元素e为新的队尾元素void EnQueue(LinkQueue *Q,int e){QNode *p;p = (QueuePtr)malloc(sizeof(QNode));if(!p) printf("OVERFLOW");p->data = e;p->next = NULL;Q->rear->next = p;Q->rear = p;}●void DeQueue(LinkQueue *Q){ QNode *p;if(Q->front == Q->rear) printf("ERROR");Q->front->next = Q->front->next->next;}●美化形状for(i = 1;i <= n; i++){printf("\n");c=i;for(b=1;b<=n-c;c++){printf(" ");}}●根据上行系数求下行系数for (j=1;j<=i+2;j++){t = q->front->next->data;DeQueue (q);EnQueue (q,s+t);s = t;if (j!=i+2) printf("%3d ",s);}(四)调试分析1.美化形状时,第一次的输出空格的个数和位置考虑的有瑕疵,导致图像歪歪曲曲的。

2.当输入数字较大时(比如19),阶数太大导致“杨辉三角”的图像没有出来。

(五)用户手册1.本程序的运行环境是win7操作系统,执行文件为:task.exe。

2.进入时界面如下:(六)测试结果1.2.(七)实验总结1. 本次实验历时4个小时(课外时间另算),主要练习线性表中的队列的应用,涉及队列的删除,插入,搜索操作,基本涵盖了队列的应用范围。

2.“%3d”对图形的美化起到了关键作用。

(想同学请教学得)3.实验中还是有些内容需要翻书才能解决,这反映了对书本内容的生疏。

需要加强。

(八)附录程序源代码:#include<stdio.h>#include<malloc.h>#include <stdlib.h>#include <iostream.h>typedef struct QNode{int data;struct QNode *next;}QNode ,*QueuePtr;typedef struct {QueuePtr front;QueuePtr rear;}LinkQueue; //基本操作函数原型void InitQueue(LinkQueue *Q){ //队列初始化Q->front =Q->rear = (QueuePtr)malloc(sizeof(QNode));if(!Q->front) printf("OVERFLOW");Q->front->next= NULL;} void EnQueue(LinkQueue *Q,int e){QNode *p;p = (QueuePtr)malloc(sizeof(QNode));if(!p) printf("OVERFLOW");p->data = e;p->next = NULL;Q->rear->next = p;Q->rear = p; }void DeQueue(LinkQueue *Q){QNode *p;if(Q->front == Q->rear) printf("ERROR");Q->front->next = Q->front->next->next;} void YangHui( int n ) // n为需要输出的杨辉三角形的行数{ int i,j,t,c,b,s = 0;LinkQueue *q;q = (LinkQueue *)malloc(sizeof(LinkQueue));InitQueue(q);EnQueue(q,1);EnQueue(q,1);for(i = 1;i <= n; i++) // 逐行计算{printf("\n");c=i;for(b=1;b<=n-c;c++){printf(" ");}EnQueue(q,0);for (j=1;j<=i+2;j++){t = q->front->next->data;DeQueue (q);EnQueue (q,s+t);s = t;if (j!=i+2) printf("%3d ",s);}}}void main(){ int n;printf("请输入杨辉三角的行数n=");scanf("%d",&n);YangHui(n);printf("\n");}约瑟夫环(一)需求分析1.设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,…,如此反复直到所有的人全部出列为止。

2.程序运行后,首先要求用户指定初始报数上限值,然后读取个人的密码。

(以n=8,s=1,m=4为例,若初始的顺序为1,2,3,4,5,6,7,8。

则问题的解为4,8,5,2,1,3,7,6。

)(二)概要设计1.利用单循环链表存储结构模拟此过程,按照出列顺序打印出各人的编号。

2.设计一个单循环链表保存个人的编号。

(三)详细设计1.链表结点设计typedef int Status;typedef struct Lnode{int data;struct Lnode *next;}Lnode;2.创建链表并编号for(i = k - 1; i >= 1; i--){s = (Lnode*)malloc(sizeof(Lnode));//创建新节点s->data = i;s->next = L->next;L->next = s;}for(i = n; i > k; i--){s = (Lnode*)malloc(sizeof(Lnode));s->data = i;s->next = L->next;L->next = s;}3.用循环模拟报数的过程if (m == 1){printf("%d ", L->data);L = L->next;while (!(L->data == k)){printf("%d ", L->data );L = L->next;}getchar();getchar();return 0;}while(1){if (L->next == L){printf("%d " , L->data);break;}if (i == m -1){i = 0;p = L->next;L->next = p->next;printf("%d ", p->data);free(p);}L = L->next;i++;}4.i是用来控制循环次数的变量,值为总人数n,每完成一次删除操作,即每有一个人出列,I减1.5.循环中设置了中间变量p用来存储要删除的节点的指针,以保证删除操作不会导致链表指针无法找到下一节点。

结束后free掉p。

6.删除节点,即找到出列对象的同时输出这个节点的数据域:编号。

(四)调试分析1.第一次调试时出现了一些语法错误。

最主要的是在头文件中定义节点的struct后没有加分号。

这提醒了我在书写代码时要注意这些细节,struct定义的结尾应当是有分号的。

同样的,定义的函数,类,或者全局变量都应当在后面加上分号。

2.第二次调试的错误比较严重。

由于对流程控制的错误设计,开始以m作为控制循环的变量,而在循环中变量m的值是变化的,这导致循环次数并非预期的人数数,从而循环失去控制,出现了死循环或者输出错误。

(五)用户手册1.本程序的运行环境是win7操作系统,执行文件为:谭鑫.exe。

2.进入时界面如下:3.依次输入游戏总人数m:报数间隔n;和起始人位置s。

(六)测试结果1.2.(七)实验总结1. 本次实验历时4个小时(课外时间另算),主要练习线性表中的链表的应用,涉及链表的删除,插入,搜索操作,基本涵盖了链表的应用范围。

2. 试验中的问题不出在链表的操作上,而主要出现在链表的应用和问题的结合上。

3. 实验中还是有些内容需要翻书才能解决,这反映了对书本内容的生疏。

需要加强。

(八)附录程序源代码:#include"stdio.h"#include"stdlib.h"#define ERROR -1#define OK 1typedef int Status;typedef struct Lnode{int data;struct Lnode *next;}Lnode;void createList(Lnode* L, int k, int n){Lnode* s;//l是头结点,s临时变量,储存新节点int i;L->data = k;L->next = L;for(i = k - 1; i >= 1; i--){s = (Lnode*)malloc(sizeof(Lnode));//创建新节点s->data = i;s->next = L->next;L->next = s;}for(i = n; i > k; i--){s = (Lnode*)malloc(sizeof(Lnode));s->data = i;s->next = L->next;L->next = s;}}int main(){struct Lnode *L, *p;int m,n,k;int i = 1;printf("请输入参与游戏的总人数n:\n");scanf("%d", &n);printf("请输入报数间隔m:\n");scanf("%d", &m);printf("请输入起始人编号's'(s<n)\n");scanf("%d", &k);L = (Lnode*)malloc(sizeof(Lnode));createList(L, k, n);if (m == 1){printf("%d ", L->data);L = L->next;while (!(L->data == k)){printf("%d ", L->data );L = L->next;}getchar();getchar();return 0;}while(1){if (L->next == L){printf("%d " , L->data);break;}if (i == m -1){i = 0;p = L->next;//p:应删除的元素L->next = p->next;printf("%d ", p->data);free(p);}L = L->next;i++;}getchar();getchar();return 0;}数据结构实验报告自动化05谭鑫100541222011/12/27。

相关文档
最新文档