输出杨辉三角形设计报告(1)
- 格式:doc
- 大小:133.50 KB
- 文档页数:15
最新显示杨辉三角实验报告实验目的:探究杨辉三角的生成规律及其在现代数学和计算机科学中的应用。
实验工具与环境:- 计算机一台,配备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. 通过实例分析,了解了杨辉三角在解决组合问题和计算概率时的实际应用。
实验结论:杨辉三角不仅是一种有趣的数学现象,而且在现代科学和工程领域有着广泛的应用。
通过本次实验,我们不仅掌握了杨辉三角的生成方法,还深入理解了其背后的数学原理和实际应用价值。
此外,实验过程中的编程实践也加强了我们运用计算机工具解决数学问题的能力。
杨辉三角(一)需求分析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.美化形状时,第一次的输出空格的个数和位置考虑的有瑕疵,导致图像歪歪曲曲的。
一.实验目的实现杨辉三角和表达式的封装二.实验软件环境本实验是在MyEclipse 9.01M1编写和运行的三.实验内容(一)实验要求1. 输出杨辉三角前N项,N为参数2. 表达式求值:输入一个表达式,输出它的值,其中要用到java.util.Stack (二)实验代码程序代码:1)杨辉三角:/***功能:用二维数组实现杨辉三角*时间:2011-05-01**/package b1;import java.io.*;public class Pascal{public Pascal(){play();}public void play(){BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.print("请输入n值:");int n = 0;try {n = Integer.parseInt(br.readLine());} catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}int array[][] = new int[n][2*n-1];//判断是否为奇数if( n%2 == 1 ){for(int i=1; i<=n; i++){for(int j=1; j<=2*n-1 ;j++){//首先给前5-i个元素赋值0if(j<=n-i)array[i-1][j-1] = 0;//输出第一个“1”和最后一个“1”else if((j==(n-i+1))||(j==n+i-1))array[i-1][j-1] = 1;else if((j < n+i-1)&&(j > n-i+1)){if((j-i)%2 == 1)array[i-1][j-1] = 0;elsearray[i-1][j-1] = array[i-2][j-2] + array[i-2][j];}}}}//为偶数所进行的操作else{for(int i=1; i<=n; i++){for(int j=1; j<=2*n-1; j++){//首先给前5-i个元素赋值0if(j<=n-i)array[i-1][j-1] = 0;//输出第一个“1”和最后一个“1”else if((j==(n-i+1))||(j==n+i-1))array[i-1][j-1] = 1;else if((j < n+i-1)&&(j > n-i+1)){if((j-i)%2 == 0)array[i-1][j-1] = 0;elsearray[i-1][j-1] = array[i-2][j-2] + array[i-2][j];}}}}/*输出数组*/for(int i=1; i<=n; i++){for(int j=1; j<=2*n-1; j++){if(array[i-1][j-1] == 0){System.out.print(" ");}elseSystem.out.print(array[i-1][j-1]);System.out.print(" ");}System.out.println();}}public static void main(String argc[]){Pascal p = new Pascal();}}2)表达式求值,代码如下:1)Stack类:用来存储表达式子元素的类,代码如下:package btwo;public class Stack {private int maxLen;private int size;private char c[];public Stack(int maxLen) {this.maxLen = maxLen;c = new char[maxLen];size = 0;}public void push(char v){c[size++] = v;}public char pop(){return c[--size];}public boolean isEmpty(){return size == 0;}}2)ExplainPostfix类:实现将输入的表达式转成后缀表达式,代码如下:package btwo; public class ExplainPostfix {String in; String out = "";Stack s;public ExplainPostfix(String in){System.out.println("计算表达式为:"+in);this.in = in;}public void display(){System.out.println("后缀表达式为:"+out);}//转换成后缀表达式public void toPraser(){s = new Stack(in.length());for(int i=0;i<in.length();i++){char c = in.charAt(i);switch(c){case'+':case'-':getOpter(c,1);break;case'*':case'/':getOpter(c,2);break;case'(':s.push(c);break;case')':getParen();break;default:out = out + c;}}while(!s.isEmpty()){out = out + s.pop();}}public void getOpter(char c,int prec1){ out = out + 'a';while(!s.isEmpty()){char optop = s.pop();if(optop == '('){s.push(optop);break;}else{int prec2 = 0;if(optop == '+' || optop== '-'){prec2 = 1;}else{prec2 = 2;}if(prec1>prec2){s.push(optop);break;}else{System.out.println("op:"+optop);out = out + optop;}}}s.push(c);}public void getParen(){while(!s.isEmpty()){char c = s.pop();if(c == '(')break;elseout = out + c;}}public static void main(String[] args) {ExplainPostfix p = newExplainPostfix("(11+2)*5");p.toPraser();p.display();}}3)CalculateExpression类:功能实现将后缀表达式进行计算,代码如下:package btwo;public class CalculateExpression {String in;Stack s; public CalculateExpression(String in) { this.in = in;}public CalculateExpression(){play();}public static void main(String args[]){ExplainPostfix p1 = newExplainPostfix("(21+4)*(1+3*2)");p1.toPraser();p1.display();CalculateExpression p = newCalculateExpression(p1.out);p.doPraser();p.display();}//开始计算后缀表达式public void doPraser(){while(true){int a,b,c,d;a = in.indexOf("+");b = in.indexOf("-");c = in.indexOf("*");d = in.indexOf("/");int n = Math.max(a, b);n = Math.max(n, c);n = Math.max(n, d);if(a != -1){n = a;}if(b<n && b!= -1){n = b;}if(c<n && c!= -1){n = c;}if(d<n && d!= -1){n =d;}if(a == -1 && b == -1 && c == -1 && d == -1){break;}String s1 = charAt(n-1);String s2 =charAt(n-2-s1.length());int v = 0;if(n == a){v = Integer.parseInt(s1) +Integer.parseInt(s2);}else if(n == b){v = Integer.parseInt(s2) -Integer.parseInt(s1);}else if(n == c){v = Integer.parseInt(s2) *Integer.parseInt(s1);}else{v = Integer.parseInt(s2) /Integer.parseInt(s1);}String s = ""+v;if(s.equals("0")){s = "";}else{s = s +"a";}in =in.substring(0,stIndexOf(s2))+v+in.substring(n+1,in.length());}}public void display(){System.out.println("结果为:"+in);}public String charAt(int i){String str = "";char c = in.charAt(i);if(c == '+' || c == '-' || c == '*' || c == '/'){str = str + c;return str;}else{while(c != 'a'){str = c + str ;if(i == 0){break;}c = in.charAt(--i);if(c == '+' || c == '-' || c == '*' || c == '/'){break;}}}return str;}}四.实验的结果及分析1. 杨辉三角结果:2. 算术表达式结果:五.实验心得体会试验后熟悉封装思想,使用基本Java算法。
数据结构实验报告实验一杨辉三角形(Pascal’s triangle)一、需求分析1.输入的形式和输入值的范围本程序中,需输入的杨辉三角级数level为正整数,由键盘输入,以回车结束2.输出的形式通过屏幕输出杨辉三角3.程序所能达到的功能用户从键盘输入需要的杨辉三角级数,从屏幕输出杨辉三角4.测试数据输入:5输出: 1 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1二、概要设计以链队列结构实现该实验1.抽象数据类型定义ADT Queue {数据对象:D = { ai | ai∈ElemSet , i = 1,2,…,n,n≥0 }数据关系:R1={<ai-1,ai> | ai-1 , ai∈D, i=2,…,n}约定其中ai端为队列头,an端为队列尾基本操作:InitQueue ( &Q )操作结果:构造一个空队列QDestroyQueue ( &Q )初始条件:队列Q已存在操作结果:队列Q被销毁,不再存在ClearQueue ( &Q )初始条件:队列Q已存在操作结果:将Q清为空队列QueueEmpty ( Q )初始条件:队列Q已存在操作结果:若Q为空队列,则返回TRUE,否则FALSEQueueLength ( Q )初始条件:队列Q已存在操作结果:返回Q的元素个数,即队列长度GetHead ( Q , &e )初始条件:Q为非空队列操作结果:用e返回Q的队头元素EnQueue ( &Q , e )初始条件:队列Q已存在操作结果:插入元素e为Q的新队尾元素DeQueue ( &Q , &e )初始条件:Q为非空队列操作结果:删除Q的队头元素,并用e返回其值QueueTraverse ( Q , visit( ) )初始条件:Q已存在且非空操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit( )。
杨辉三角问题描述编写程序,根据输入的行数,屏幕显示杨辉三角。
基本要求(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. 编程中的应用:杨辉三角形可以通过编程语言来生成和使用,用于解决一些特定的问题。
五、结论杨辉三角形是一种有趣且有用的数学模型,它具有许多特点和规律。
它不仅可以用于计算组合数和展开二项式,而且还可以应用于概率理论和编程中。
通过研究和理解杨辉三角形,我们可以提高数学思维能力,并拓展数学的应用领域。
显示杨辉三角实验报告姓名:许严班级:计122 学号:12130230501.问题描述杨辉三角如图2.4.3所示,其特点是两个腰上数值是1,其他位置上的每一个整数都是它的上一行相邻两个整数之和。
问题是:对于指定的最大行数rmax,要求从第一行到第rmax逐行显示杨辉三角形的所有元素。
2.基本要求⑴设计输出形式,尽量反映杨辉三角的特点。
⑵设计计算杨辉三角形各行数值的方法。
⑶输入:rmax从键盘输入。
⑷输出:屏幕输出杨辉三角形.3.实现提示⑴存储设计计算杨辉三角形第i行时,如果在第i-1行两侧各添加一个0,则第i行的第j 个元素等于第i-1行的第j-1个元素与第j个元素的和。
计算如图2.4.4所示。
第i 行计算完,第i-1行的数据就没有用了,依据第i行数据可计算第i+1行的数据。
11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1…图2.4.3 杨辉三角形从上述计算中不难看出,第i行的元素从左往右依次可被求得,求解过程中也是从左往右依次使用地i-1行的数据,显然,具有先入先出的特点。
所以,可借助一个队列存放计算过程中所需的数据,如图2.4.5所示。
但随着航数的增加,队列会很长。
所以,可以设置一循环队列,队长不少于rmax+2,边计算边出队。
(2)算法设计计算各行元素的算法步骤如下。
Step1:队列初始化,0、1入队。
队头ftont指向0处,队尾指向1后。
Step2:i从1到rmax,循环执行下列操作,求第i行数据。
2.1 0入队。
2.2 从队首起直到队尾,每出队两元素,求和后入队。
输出时注意0不输出。
(3)程序设计#include <iostream>using namespace std;#include <iomanip>int Fd(int x, int y){int t = 1;int k = 1;for(int i = y; i > x ; i--){t = t * i;t = t / k;k++;}return t;}int main(){int nsize;cout<<"请输入大小"<<endl;cout<<"提示:按Ctrl+Z两次退出!"<<endl;while(cin>>nsize){for(int i = 0; i <= nsize; i++){for(int k = 0 ; k <= nsize; k++){if(k > i){cout<<" ";}}for(int j = 0 ; j <= i; j++){cout<<setw(3)<<Fd(j,i)<<" ";}cout<<endl;}cout<<"请输入大小"<<endl;}return 0;}4.测试与运行给出行数,从运行结果验证程序设计是否正确。
C 语言程序设计实验报告1 实验目的1. 练习循环结构for 、while 、do-while 语句的使用。
2. 练习转移语句和标号语句的使用。
3. 使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值。
2 实验内容打印如下杨辉三角形。
1 /*第0行 */ 1 1 /*第1行 */ 12 1 /*第2行 */ 13 3 1 14 6 4 1 15 10 10 5 1 16 15 20 15 6 1 17 21 35 35 21 7 1 18 28 56 70 56 28 8 1 19 36 84 126 126 84 36 9 1每个数据值可以由组合j i C 计算(表示第i 行第j 列位置的值),而j i C 的计算如下:10=i C (i=0,1,2,…)j / 1)j -(i *1+=-j i j i C C (j=0,1,2,3, (i)本程序中为了打印出金字塔效果,要注意空格的数目。
一位数之间是3个空格,两位数之间有2个空格,3位数之间只有一个空格,程序编制过程中要注意区分。
3算法描述流程图4源程序#include<stdio.h>void main(){int a,c=0,n,i,j=0,l=1,sj=1,si=1,sn=1,cn=1;scanf("%d",&n);if(n>12)printf("fault\n");else{for(a=0;c<=n;a++,c++){for(;j<=2*(n-a);j++)putchar(32);for(i=0;i<=c;i++){j=c-i;for(l=1,sj=1;l<=j;l++)sj=sj*l;for(l=1,si=1;l<=i;l++)si*=l;for(l=1,cn=1;l<=c;l++)cn=cn*l;sn=cn/sj/si;if(sn<10)printf(" %d",sn);else{if(sn<100)printf(" %d",sn);elseprintf(" %d",sn);}}printf("\n");}}}5测试数据测试数据为9,106运行结果7出现问题及解决方法(1)在试验中若为for(;j<=n-a;j++)putchar(32);则打不出杨辉三角效果,(2)如果程序中写入2(n-a)是错误的应写为2*(n-a)VC才能识别8实验心得通过该实验,我对循环结构(for,while,do```while)的几种用法更加熟练,并掌握了如何使得打出数据俺自己想要的结果分布并对C程序设计有了总体的认识。
题目:编写程序,根据输入的行数,屏幕显示杨辉三角形(Pascal’s triangle)班级:自动化05 姓名:刘丽丽学号:10054107 完成日期:2011.12.20 一.需求分析1、本演示程序中,利用顺序队列打印杨辉三角。
杨辉三角的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和,故在打印过程中,第i行上的元素要由第i-1行中的元素来生成。
这是一个基于队列的操作来实现杨辉三角不断生成的过程。
2、此次输出的杨辉三角不需要只有一个1的第一行,但只需对输出实际杨辉三角的程序稍作修改即可;3、在计算机终端上显示"提示信息"之后,由用户在键盘上输入演示程序中需要输入的数据,以“回车符”为结束标志。
相应的输入数据和运算结果显示在其后。
4、程序执行的命令包括:1)构造顺序队列;2)分析第 i 行元素与第 i+1行元素的关系目的是从前一行的数据可以计算下一行的数据 从第i 行数据计算并存放第i+1行数据5、 测试数据输入行数 n=3; 输出结果为:1 11 2 1 1 3 3 1二. 概要设计链队列的抽象数据类型定义为: ADT Queue{ 数据对象 :D={ai| ai ∈Elemset ,i=1,2,3,···n ,n >=0}11i = 1 1 2 121 3 3 13 14 6 4 141510 10 5 15 1 6152015 6 16数据关系:R={<ai-1 ,ai>| ai-1 ,ai∈D,i=1,2,···n} (约定其中ai端为队列头,an端为队列尾)基本操作:InitQueue(&Q)操作结果:构造一个空队列DestroyQueue(&Q)初始条件:队列已存在操作结果:队列被销毁ClearQueue(&Q)初始条件:队列已存在操作结果:将Q清空QueueEmpty(Q)若队为空,则返回为TRUE,否则返回为FALSE。
实验三杨辉三角显示一.需求分析(1)行数不大于20行。
(2)基于队列的操作来实现杨辉三角的不断生成过程。
(3)基于数组实现队列的物理数据结构。
二.概要设计抽象数据类型ADT SqQueue数据类型:整数基本操作:int InitQueue(SqQueue &Q)//队列的初始化int EnQueue(SqQueue &Q,int e)//数据进队int DeQueue(SqQueue &Q,int &e)//数据出队程序的流程输入模块:输入层数输出模块:输出杨辉三角三.详细设计物理数据类型typedef struct{int *base;int front;int rear;}SqQueue;int InitQueue(SqQueue &Q)//队列的初始化{Q.base=(int *)malloc(Max*sizeof(int));if(!Q.base)return 0;//分配失败Q.front=Q.rear=0;return 1;}int EnQueue(SqQueue &Q,int e)//数据进队{if((Q.rear+1)%Max==Q.front)//判断队满return 0;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%Max;return 1;}int DeQueue(SqQueue &Q,int &e)//数据出队{if(Q.front==Q.rear)//判断队空return 0;e=Q.base[Q.front];Q.front=(Q.front+1)%Max;return e;}输入输出格式输入:输入杨辉三角的层数:输出:运算结果四.测试结果输入:输入杨辉三角的层数:5输出:11 11 2 11 3 3 11 4 6 4 1 五.源程序#include<stdio.h>#include<malloc.h>#define Max 20typedef struct{int *base;int front;int rear;}SqQueue;int InitQueue(SqQueue &Q)//队列的初始化{Q.base=(int *)malloc(Max*sizeof(int));if(!Q.base)return 0;//分配失败Q.front=Q.rear=0;return 1;}int EnQueue(SqQueue &Q,int e)//数据进队{if((Q.rear+1)%Max==Q.front)//判断队满return 0;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%Max;return 1;}int DeQueue(SqQueue &Q,int &e)//数据出队{if(Q.front==Q.rear)//判断队空return 0;e=Q.base[Q.front];Q.front=(Q.front+1)%Max;return e;}void Print(SqQueue &Q,int n)//显示杨辉{int i,j,k,e,s1;for(i=1;i<=n;i++){for(k=0;k<n-i;k++)printf(" ");for(j=1,s1=0;j<i;j++){int s2;s2=DeQueue(Q,e);printf("%d",s1+s2);printf(" ");EnQueue(Q,s1+s2);s1=s2;}printf("1");EnQueue(Q,1);printf("\n");}}main() //主函数{int n,t;SqQueue Q;InitQueue(Q);printf("输入杨辉三角的层数:\n");scanf("%d",&n);Print(Q,n);return 0;}运行结果:。
实验一杨辉三角实验报告学生姓名:学号:11317119 学院:专业: 计算机科学与技术题目: 杨辉三角指导教师2013年10月14日目录1 问题描述................................................................................... - 0 -2 需求分析................................................................................... - 0 -3、概要设计................................................................................. - 1 - 3、概要设计................................................................................. - 1 -3.1抽象界面设计 .......................................................... - 1 -3.2总体框图以及功能描述 .......................................... - 2 -3.3基本功能实现 .......................................................... - 2 -4 详细设计................................................................................... - 2 -4.1数据类型的定义 ...................................................... - 2 -4.2主要模块的算法描述 .............................................. - 3 -5 测试分析................................................................................... - 5 -6、实现总结................................................................................. - 7 - 附录(主要源程序清单)........................................................... - 8 -1 问题描述利用VS环境编写一段代码实现一维数组,二维数组以及交错数组输出杨辉三角。
题目:编写程序,根据输入的行数,屏幕显示杨辉三角形(Pascal’s triangle)班级:自动化05 姓名:刘丽丽学号:10054107 完成日期:2011.12.20 一.需求分析1、本演示程序中,利用顺序队列打印杨辉三角。
杨辉三角的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和,故在打印过程中,第i行上的元素要由第i-1行中的元素来生成。
这是一个基于队列的操作来实现杨辉三角不断生成的过程。
2、此次输出的杨辉三角不需要只有一个1的第一行,但只需对输出实际杨辉三角的程序稍作修改即可;3、在计算机终端上显示"提示信息"之后,由用户在键盘上输入演示程序中需要输入的数据,以“回车符”为结束标志。
相应的输入数据和运算结果显示在其后。
4、程序执行的命令包括:1)构造顺序队列;2)分析第 i 行元素与第 i+1行元素的关系目的是从前一行的数据可以计算下一行的数据 从第i 行数据计算并存放第i+1行数据5、 测试数据输入行数 n=3; 输出结果为:1 11 2 1 1 3 3 1二. 概要设计链队列的抽象数据类型定义为: ADT Queue{ 数据对象 :D={ai| ai ∈Elemset ,i=1,2,3,···n ,n >=0}11i = 1 1 2 121 3 3 13 14 6 4 141510 10 5 15 1 6152015 6 16数据关系:R={<ai-1 ,ai>| ai-1 ,ai∈D,i=1,2,···n} (约定其中ai端为队列头,an端为队列尾)基本操作:InitQueue(&Q)操作结果:构造一个空队列DestroyQueue(&Q)初始条件:队列已存在操作结果:队列被销毁ClearQueue(&Q)初始条件:队列已存在操作结果:将Q清空QueueEmpty(Q)若队为空,则返回为TRUE,否则返回为FALSE。
显示杨辉三角实验报告摘要:杨辉三角是中国古代数学的传世之作,它以一种独特的方式展示了一系列的数字,被广泛应用于代数、组合数学和概率论等领域。
本实验旨在通过编程实现杨辉三角的显示,进一步探索其数学特性和应用。
引言:杨辉三角是由中国古代数学家杨辉在13世纪发现的一种数列,它的特点是每一行的数字是上一行数字的相邻两个数之和。
这种排列方式形成了一个三角形,被称为杨辉三角。
本实验通过编程实现杨辉三角的显示,以便更好地理解并研究它的数学特性。
方法:本实验选择使用Python编程语言来实现杨辉三角的显示。
Python是一种易于使用和理解的编程语言,具有强大的功能,适合初学者使用。
首先,我们需要确定显示杨辉三角的行数。
我们可以通过用户的输入来实现这一点,也可以在代码中直接设置一个固定值。
然后,我们使用嵌套的for循环来生成杨辉三角的每一行。
外层循环用于确定行数,内层循环用于计算每一行的数字。
内层循环中,我们使用了一个列表来存储每一行的数字。
在生成杨辉三角的过程中,我们要注意每行的数字与上一行数字的关系,这是杨辉三角的核心特性。
例如,每行的第一个和最后一个数字都是1,中间的数字等于上一行的相邻两个数字之和。
我们可以通过索引来访问上一行的数字并进行计算。
最后,我们使用格式化输出的方式将杨辉三角打印出来,以便于观察和研究。
结果和讨论:经过运行上述代码,我们成功地实现了杨辉三角的显示。
以下是当行数设置为5时的实验结果:11 11 2 11 3 3 11 4 6 4 1从结果中可以看出,每一行的数字符合杨辉三角的规律:每行的第一个和最后一个数字都是1,中间的数字等于上一行的相邻两个数字之和。
通过观察杨辉三角的数字,我们可以发现一些有趣的数学特性和规律。
杨辉三角还具有很多应用,例如在代数、组合数学和概率论中。
它可以用于计算二项式系数、展开多项式和预测概率等。
因此,了解和掌握杨辉三角的性质对于深入研究这些领域非常重要。
结论:通过本实验,我们成功地使用Python编程语言实现了杨辉三角的显示,并研究了它的数学特性和应用。
显⽰杨辉三⾓实验报告显⽰杨辉三⾓实验报告姓名:许严班级:计122 学号:12130230501.问题描述杨辉三⾓如图2.4.3所⽰,其特点是两个腰上数值是1,其他位置上的每⼀个整数都是它的上⼀⾏相邻两个整数之和。
问题是:对于指定的最⼤⾏数rmax,要求从第⼀⾏到第rmax逐⾏显⽰杨辉三⾓形的所有元素。
2.基本要求⑴设计输出形式,尽量反映杨辉三⾓的特点。
⑵设计计算杨辉三⾓形各⾏数值的⽅法。
⑶输⼊:rmax从键盘输⼊。
⑷输出:屏幕输出杨辉三⾓形.3.实现提⽰⑴存储设计计算杨辉三⾓形第i⾏时,如果在第i-1⾏两侧各添加⼀个0,则第i⾏的第j个元素等于第i-1⾏的第j-1个元素与第j个元素的和。
计算如图2.4.4所⽰。
第i⾏计算完,第i-1⾏的数据就没有⽤了,依据第i⾏数据可计算第i+1⾏的数据。
11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1…图2.4.3 杨辉三⾓形从上述计算中不难看出,第i⾏的元素从左往右依次可被求得,求解过程中也是从左往右依次使⽤地i-1⾏的数据,显然,具有先⼊先出的特点。
所以,可借助⼀个队列存放计算过程中所需的数据,如图2.4.5所⽰。
但随着航数的增加,队列会很长。
所以,可以设置⼀循环队列,队长不少于rmax+2,边计算边出队。
(2)算法设计计算各⾏元素的算法步骤如下。
Step1:队列初始化,0、1⼊队。
队头ftont指向0处,队尾指向1后。
Step2:i从1到rmax,循环执⾏下列操作,求第i⾏数据。
2.1 0⼊队。
2.2 从队⾸起直到队尾,每出队两元素,求和后⼊队。
输出时注意0不输出。
(3)程序设计#includeusing namespace std;#includeint Fd(int x, int y){int t = 1;int k = 1;for(int i = y; i > x ; i--){t = t * i;t = t / k;k++;}return t;}int main(){int nsize;cout<<"请输⼊⼤⼩"<cout<<"提⽰:按Ctrl+Z两次退出!"<>nsize) {for(int i = 0; i <= nsize; i++){for(int k = 0 ; k <= nsize; k++){if(k > i){cout<<" ";}}for(int j = 0 ; j <= i; j++){cout<}cout<}cout<<"请输⼊⼤⼩"<}return 0;}4.测试与运⾏给出⾏数,从运⾏结果验证程序设计是否正确。