利用循环队列生成杨辉三角
- 格式:doc
- 大小:27.00 KB
- 文档页数:3
杨辉三角显示实验报告1.问题描述:编写程序,根据输入的行数,屏幕显示杨辉三角。
2.基本要求:(1)行数不大于20行。
(2)基于队列的操作来实现杨辉三角的不断生成过程。
(注:不要用其它的公式计算的方法或者二维数组来实现)(3)基于数组实现队列的物理数据结构3.需求分析:1、输入形式:输入一个整数n ,0<=n<=202、输出形式:打印出来前(n+1)行的杨辉三角数列3、功能实现:输出前20层的杨辉三角序列4、样例输入输出:(数据加强版)输入:10输出:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 15、效率分析:O(n)4.概要设计:利用到队列先进先出的性质(First In First Out),基本的算法实现是利用已经进队的元素在其出队之前杨辉三角的下一行数列,----即利用要出队的元素来不断地构造新的进队的元素,即在第N行出队的同时,我们来构造杨辉三角的第N+1行,从而实现打印杨辉三角的目的。
5.详细设计:算法思想已经在概要设计中提到了,现在通过基于队列基本操作的函数以及程序的模块化思想来实现杨辉三角的打印输出问题。
算法函数描述:队列类:队列类的数据成员:int front,rear,//ront和rear分别是指向队头和队尾的指针maxsize;//队列中的元素数int* listArray //存放队列中的元素队列的基本操作:V oid Queue(int ) function://构造一个空队列V oid EnQueue(,int x) :function://将元素x入队V oid outQueue():function://删除队头元素,并用x返回其值int getvalue()/取得队头的值int length()//返回队列中元素的个数通过在main函数中首先打印处第一二行并将大二行的数据存入队列中,根据用户输入的行数n;在for循环中反复的调用V oid EnQueue(,int x)、V oid outQueue()、int getvalue()等函数来实现杨辉三角的打印.调试分析:调试了很久,主要是在答应第二行以后的数列时的算法有点差错,最后,在队列类添加了int getvalue()函数,解决了算法的不足;还有运行时出现的错误,内存溢出,最后发现在对rear和front进行操作时没有除maxsize取余导致内存溢出;6.测试数据:7.实验心得这次试验中做的相对比较轻松,因为在上机课上之前我看了下题目,想了下这个题目的大概算法,并且上网查了些资料,所以上课之前有了大概的思路,所以半个小时左右就做出来了。
c++杨辉三角形程序的原理
C++杨辉三角形程序的原理是利用递推关系来生成杨辉三角形的每一行。
杨辉三角形是一个数列,每个数值等于它上方两数之和。
具体实现过程如下:
1. 用户输入杨辉三角形的行数,保存在变量n中。
2. 创建一个二维数组triangle,用于保存杨辉三角形的每个数值。
数组的行数为n,列数为n。
3. 使用双重循环遍历triangle数组,对每个位置进行计算。
a. 当前位置是第一列或最后一列时,将triangle[i][j]置为1。
b. 其他位置时,将triangle[i][j]的值设置为上方两个数的和,即triangle[i-1][j-1] + triangle[i-1][j]。
4. 打印triangle数组的每行数据,即为生成的杨辉三角形。
这样就可以生成一个n行的杨辉三角形。
整个程序的时间复杂度为O(n^2),其中n为行数。
HUNAN UNIVERSITY 课程实验报告题目杨辉三角学生姓名王家威学生学号201308070217专业班级智能科学与技术1302班指导老师朱宁波一、问题描述:编写程序,根据输入的行数,屏幕显示杨辉三角。
二、基本要求:1.行数不大于20 行。
2.基于队列的操作来实现杨辉三角的不断生成过程。
(注:不要用其它的公式计算的方法或者二维数组来实现)。
3.基于数组实现队列的物理数据结构。
三、输入输出格式例如:输入:n=6;输出为:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1四、具体设计过程①算法思想:1)首先我们设计需要定义一个队列的类,其中要包含出队列,入队列以及能找到队列中值的函数等;2)其次,我们需要在先在定义好的类中先放入三个元素0,1,0;3)接着我们需要用while循环和if语句来执行具体的操作,且把每层的数据存在一个字符数组中,并在最后给队列中进一个0直到结束所有外循环操作。
②程序基本流程1)创建MFC工程,和建立界面并且绑定参数2)写触击事件,并写出杨辉三角3)最后在点击事件中加入函数五、实验代码://全局变量CString s="";int size=0;//入队void inQueue(int *q,int it){q[size++]=it;}//出队outQueue(int *q){int temp=q[0];for(int i=0;i<size-1;i++)q[i]=q[i+1];size--;return temp;}//杨辉三角产生void YCreate(int *q,int input,CString m_out){for(int i=1;i<input+1;i++){ for(int j=0;j<i+1;j++){inQueue(q,q[0]+q[1]);if(q[0]!=0){m_out.Format("%-5d",outQueue(q));//出队并赋值输出s+=m_out;}else outQueue(q);//去除0,使其不输出}inQueue(q,0);m_out.Format("\n");s+=m_out;}}void CMFCDlg::OnOK(){UpdateData(TRUE);// TODO: Add extra validation here//杨辉三角函数如下:int Array[500];s="";size=0;inQueue(Array,0);inQueue(Array,1);inQueue(Array,0);YCreate(Array,m_input,m_out);m_out.Format(s);// CDialog::OnOK();这一行代码是系统自己生成,貌似会不能运行的感觉UpdateData(FALSE);}六:结果截图七、实验心得1.更加深刻了解MFC组成及编写2.学会了使用数组实现队列3.了解了杨辉三角在数组实现的一种方法4.对于界面中的各个参数使用更加了解5.熟练的使用全局变量和参数。
c++杨辉三角形程序的原理(最新版)目录1.C++杨辉三角程序的原理2.杨辉三角的定义和特点3.C++程序实现杨辉三角的原理4.具体的 C++代码示例正文C++杨辉三角程序的原理杨辉三角是一个二维数组的三角形,其特点是每个数字是它左上方和右上方的两个数字之和。
因此,它可以看作是一组斐波那契数列的排列。
在 C++中,我们可以通过循环和条件语句来实现杨辉三角的生成。
杨辉三角的定义和特点杨辉三角是一个二维数组,其形状像一个三角形。
它的特点是每个数字是它左上方和右上方的两个数字之和。
例如,如果杨辉三角的阶数为 4,那么它的第一个数字是 1,第二个数字是 1,第三个数字是 2,第四个数字是 3,第五个数字是 5,以此类推。
C++程序实现杨辉三角的原理在 C++中,我们可以通过循环和条件语句来实现杨辉三角的生成。
具体来说,我们可以使用嵌套循环来遍历二维数组,并根据条件语句来计算每个数字的值。
例如,我们可以使用以下代码来实现杨辉三角的生成:```c++#include <iostream>using namespace std;int main() {int n = 5; // 指定杨辉三角的阶数int triangle[n][n]; // 定义二维数组来存储杨辉三角// 遍历二维数组并计算每个数字的值for (int i = 0; i < n; i++) {for (int j = 0; j < n - i - 1; j++) {triangle[i][j] = triangle[i - 1][j] + triangle[i - 1][j + 1];}}// 输出杨辉三角for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << triangle[i][j] << " ";}cout << endl;}return 0;}```具体的 C++代码示例在上面的代码中,我们首先定义了一个指定杨辉三角阶数的变量 n,然后定义了一个二维数组来存储杨辉三角。
杨辉三角形c语言1.引言1.1 概述杨辉三角形是一个经典的数学图形,它以数学家杨辉的名字命名。
杨辉三角形具有许多有趣的特点和应用,不仅在数学领域广泛应用,而且在计算机科学中也有重要的作用。
本文将介绍杨辉三角形的定义、特点以及它在C语言中的实现方法。
杨辉三角形是一个由数字构成的三角形,它的每个数字是由其上方两个数字相加得到的。
三角形的第一行只有一个数字1,从第二行开始,每个数字都是它上方两个数字的和。
杨辉三角形的形状不仅仅是一个三角形,它还具有许多有趣的数学特性,如对称性、数字排列规律等。
杨辉三角形在数学领域有广泛的应用。
它与二项式展开式密切相关,每一行的数字可以表示二项式系数。
通过杨辉三角形,我们可以轻松地计算组合数、排列数等数学问题。
此外,在统计学、概率论、组合数学等领域中也有许多应用。
在计算机科学中,杨辉三角形的生成方法可以通过编程语言来实现。
本文将以C语言为例,介绍如何使用C语言来生成杨辉三角形。
通过编写相应的算法,我们可以在计算机上生成杨辉三角形,并进行相关的操作,如打印、计算特定位置的数字等。
这对于学习C语言编程和理解算法有重要的意义。
本文的主要目的是介绍杨辉三角形的定义、特点以及在C语言中的实现方法。
通过深入理解杨辉三角形的数学特性和编程实现,读者可以更好地掌握相关的知识和技能。
同时,本文还将探讨杨辉三角形的应用和拓展,展示它在实际问题中的价值和潜力。
希望读者通过本文的学习,能够对杨辉三角形有更深入的了解,并能够运用到实际的计算和研究中。
1.2文章结构1.2 文章结构本文将按照以下结构进行阐述杨辉三角形在C 语言中的实现:1. 引言:介绍杨辉三角形以及本文的目的和意义。
2. 正文:2.1 杨辉三角形的定义和特点:详细介绍杨辉三角形的概念、特点以及其在数学中的应用。
说明杨辉三角形左右对称、每行的第一个和最后一个数均为1、每个数等于它上方两数之和等特点。
2.2 杨辉三角形的生成方法:讲解杨辉三角形的生成方法,包括递推法和组合恒等式法。
c语言杨辉三角形代码# 杨辉三角形的C语言代码实现## 介绍杨辉三角是一种由数字构成的三角形,其中每个数字是它上方两个数字的和。
杨辉三角在组合数学中具有重要的地位,并具有许多有趣的性质。
在本文档中,我们将使用C语言编写程序来生成杨辉三角。
## 算法思路我们可以使用两层循环来生成杨辉三角。
首先,我们定义一个二维数组来存储三角形的数值,数组的大小根据用户输入的行数决定。
然后,我们使用两层循环来遍历数组,并根据杨辉三角的规律进行计算和赋值操作。
具体步骤如下:1. 定义一个二维数组 `triangle` 来存储杨辉三角的数值,数组大小为输入的行数。
2. 使用两层循环来遍历数组,外层循环控制行数,内层循环控制列数。
3. 初始化数组的第一行和第一列为1,表示杨辉三角形的边界。
4. 对于其他位置的元素,使用上方和左上方的元素之和来计算当前位置的值,并赋给数组中相应的位置。
5. 打印输出生成的杨辉三角。
下面是使用C语言编写的杨辉三角代码实现:```c#include <stdio.h>int main() {int rows, i, j, coef = 1;printf("请输入杨辉三角的行数:"); scanf("%d", &rows);for (i = 0; i < rows; i++) {// 打印空格for (j = 0; j < rows - i; j++) {printf(" ");}// 计算并打印每行的元素for (j = 0; j <= i; j++) {if (j == 0 || i == 0) {coef = 1;} else {coef = coef * (i - j + 1) / j;}printf("%d ", coef);}printf("\n");}return 0;}```## 运行结果示例下面是输入行数为5时的运行结果示例:```请输入杨辉三角的行数:511 11 2 11 3 3 11 4 6 4 1```## 总结通过上述代码,我们演示了如何使用C语言编写程序来生成杨辉三角。
打印杨辉三角形C语言程序引言杨辉三角形是数学中一种经典的图形,它具有许多有趣的性质和应用。
在本文中,我们将使用C语言编写一个程序来打印杨辉三角形。
通过分析程序实现过程和结果展示,我们可以深入探讨杨辉三角形的形成规律和数学性质。
程序实现过程步骤一:确定杨辉三角形的行数在开始编写程序之前,我们需要确定要打印的杨辉三角形的行数。
用户可以通过程序输入或者直接在代码中指定。
步骤二:创建二维数组我们将使用一个二维数组来存储杨辉三角形的数字。
数组的行数等于用户指定的行数,而每一行的列数等于该行的索引加1。
例如,第一行只有一个数字,第二行有两个数字,以此类推。
步骤三:初始化数组在创建数组后,我们需要对其进行初始化。
杨辉三角形的第一行和第一列的值都是1,其他位置的值等于其上方数字与左上方数字之和。
步骤四:打印杨辉三角形通过循环遍历数组,并将其值打印出来,我们可以在控制台上输出杨辉三角形的图形。
程序代码示例下面是使用C语言编写的打印杨辉三角形的程序:#include <stdio.h>// 定义最大行数#define MAX_ROWS 10int main() {int rows, coef = 1, space, i, j;// 获取用户输入的行数printf("请输入杨辉三角形的行数:");scanf("%d", &rows);// 判断行数是否超过最大行数rows = (rows > MAX_ROWS) ? MAX_ROWS : rows;// 打印杨辉三角形for(i = 0; i < rows; i++) {for(space = 1; space <= rows - i; space++) printf(" ");for(j = 0; j <= i; j++) {if (j == 0 || i == 0)coef = 1;elsecoef = coef * (i - j + 1) / j;printf("%4d", coef);}printf("\n");}return 0;}程序结果展示通过运行上述代码,我们可以得到以下结果示例:请输入杨辉三角形的行数:611 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1杨辉三角形的数学性质杨辉三角形具有许多有趣的数学性质,下面我们将逐一探讨一些常见的性质:性质一:对称性杨辉三角形是关于中心对称的,也就是每一行的数字从中间开始以对称的方式排列。
轻松用EXCEL做一个杨辉三角课件绥阳中学邹习平作为一个数学老师,有时课堂上总想快速给学生演示一个结果,但是有时现成的课件又不好找,有些课件还要安装专门的软件才能运行,有些现成课件还达不到自己想要的那种结果。
对一个普通中学老师来说,运用编程来制作一个的话,那是一件多么高深的事啊。
要自己做一些课件可谓是有点痴心妄想。
高中数学中的杨辉三角是我们教学中不可避免的一课内容,如果我们要亲手在课堂上写一个杨辉三角,势必会花掉我们宝贵时间。
这里我向大家推荐一个方法,既简单,又方便。
这件事在EXCEL中简单几步就可以完成,而且灵活多变。
比编程员给你定住的还要棒。
如下图所示:方法一:①打开EXCEL,在A1单元格中输入1,根据你所需要的杨辉三角的层数,往下填充到合适位置。
②在B2单元格中输入公式"=a1+b1",向下填充到与A列相同位置。
③依次将B3,B4,……向右填充,每次向右填充到比上一行多一个单元格,如下表:这样一个杨辉三角数阵就生成了。
1111211331146411510105116152015611721353521711828567056288119368412612684369111045120210252210120451011115516533046246233016555111112662204957929247924952206612111378286715128717161716128771528678131显然这样得到的杨辉三角数阵,它不是等腰三角形状,各级的数字也没有错位而排,美感上确实差多了。
要得到上图中等腰三角形状的杨辉三角数,实施起来稍微麻烦一些。
方法二:我们首先要解决如下问题:①位置:根据我们需要的层数定位最底层最左边的数字1靠左;②填充公式时,那些地方留空格;③上下层的数字的错位;④根据需要的层级数快速输出。
见下表(单击表格可以立即使用):说明:在A2单元格中输入杨辉三角的层数,并回车确认.5111121133114641鉴于以上程序需要,作如下设计思想:①把A2单元格留作我们输入需要生成杨辉三角的层数;并将其颜色填充成特殊颜色。
// 杨辉三角.cpp : Defines the entry point for the console application.
//
#include
#include
#define MAXSIZE 20
int N;
typedef struct {
int *base;
int front;
int rear;
}SqQueue;//定义队列
bool InitQueue(SqQueue &Q)//初始化队
{
Q.base=(int *)malloc(MAXSIZE*sizeof(int));
if (!Q.base)
{
printf("OVERFLOW\n");
return false;
}
Q.front=0;
Q.rear=0;
return true;
}
bool QueueEmpty(SqQueue Q)//判断队是否空
{
if (Q.front==Q.rear)
{
return true;
}
else
return false;
}
int GetHead(SqQueue Q,int &e)//取队头元素
{
if (QueueEmpty(Q))
{
return -1;
}
else
{
e=Q.base[Q.front];
return 0;
}
}
int QueueLength(SqQueue Q)//求队长
{
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
bool EnQueue(SqQueue &Q,int e)//入队
{
if (Q.front==(Q.rear+1)%MAXSIZE)
{
printf("Queue full\n");
return false;
}
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return true;
}
bool DeQueue(SqQueue &Q,int &e)//出队
{
if (Q.front==Q.rear)
{
printf("Queue empty\n");
return false;
}
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return true;
}
void print_n(int n)//打印N*3个空格
{
int i;
for(i=0;i
printf(" ");
}
}
void C_Queue(SqQueue &Q,int e)//生产杨辉三角并输出
{
int m=0;
int pre;
int i;
printf("%d:",e);
print_n(N-e);
for(i=0;i<=e;i++)
{ pre=m;
DeQueue(Q,m);
printf("%3d ",m);
EnQueue(Q,m+pre);
}
EnQueue(Q,m);
printf("\n");
}
int main(int argc, char* argv[])
{
SqQueue Q;
InitQueue(Q);
int i;
int n;
printf("请输入杨辉三角的阶数(0-12):");
scanf("%d",&n);
N=n;
if (n>12||n<0)
{
printf("输入不合法\n");
return -1;
}
EnQueue(Q,1);
for(i=0;i<=N;i++)
{
C_Queue(Q,i);
}
return 0;
}