利用高中学的组合数C++编程输出杨辉三角
- 格式:doc
- 大小:48.00 KB
- 文档页数:2
c语言杨辉三角形代码杨辉三角形是中国古代数学中较为重要的数学问题之一,也是计算机领域中经典的问题之一。
它形成一个三角形,数字排列成三角形形状,其中每个数字等于它上方两数字之和。
以下是一个用C语言编写的杨辉三角形代码:#include <stdio.h>int main() {int rows, coef = 1;printf("请输入行数: ");scanf("%d", &rows);for (int i = 0; i < rows; i++) {for (int space = 1; space <= rows - i; space++)printf(" ");for (int 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;}在这个代码中,我们首先定义一个整数变量rows来表示杨辉三角形的行数。
然后通过用户输入来获取杨辉三角形的行数。
接着我们使用两个嵌套循环来打印杨辉三角形。
外层循环用来控制打印的行数。
内层循环用来打印每一行的数字。
在内层循环中,首先使用一个循环打印空格,使得每行的数字能够居中显示。
其次,在这个循环中,我们使用一个if语句来判断当前位置是否为杨辉三角形的边界,也就是第一个数字和每一行的最后一个数字。
如果是边界上的数字,我们将其设置为1,否则就使用前一行的数字通过组合公式计算当前位置的数字。
最后我们在内层循环的末尾打印一个换行符,以便换行显示下一行。
运行以上代码,将会看到打印出指定行数的杨辉三角形。
这个代码是很简单但有效的实现了杨辉三角形的打印。
#include <stdio.h>#include <stdlib.h>#include <e:\06.h>/*创建一个空的循环队*/PSeqQueue createEmptyQueue(int m){PSeqQueue p;p=(PSeqQueue)malloc(sizeof(struct SeqQueue));p->q=(DataType)malloc(sizeof(DataType)*m);if(p&&p->q!=NULL){p->MAXNUM=m;p->f=0;p->r=0;return p;}else printf("Out of space!!\n");return NULL;}/*判断队列是否是空队*/int isEmptyQueue_seq(PSeqQueue p){if(p->f==p->r) return 1;else return 0;}/*元素入队*/void enQueue_seq(PSeqQueue p,DataType x){if ( ( p ->r + 1) %p-> MAXNUM == p ->f)printf( "Full queue.\n" );else {p->q[ p->r] = x;p ->r = ( p ->r + 1) % p->MAXNUM;}}/*元素出队*/void deQueue_seq(PSeqQueue p){if ( p->f == p->r )printf( "Empty Queue.\n" );elsep->f = (p->f + 1) % p->MAXNUM;}/*当队列不为空时,取队头元素*/DataType frontQueue_seq(PSeqQueue p){if ( p->f == p->r )printf( "Empty Queue.\n" );elsereturn ( p->q[ p->f ]);}/*打印杨辉三角*/void YangHuiTriangle ( int N ){PSeqQueue p;int temp,new,i=1,m,n,j;printf("请输入要创空队的长度m\n");scanf("%d",&m);p=createEmptyQueue(m); /*创建一个大小为m的空队列*/printf("打印的%d行杨辉三角\n",N);enQueue_seq(p,1); /*第一行元素入队*/if(N==1) printf("%5d\n",i);else {for(j=0;j<N;j++)printf(" ");for(n=2;n<=N+1;n++){/*产生第n行元素并入队,同时打印第n-1行的元素*/enQueue_seq(p,1); /*第n行的第一个元素入队*/for(i=1;i<=n-2;i++){/*利用队中第n-1行元素产生第n行中间n-2元素并入队*/temp=frontQueue_seq(p); /*读队首元素到temp*/deQueue_seq(p); /*删除队首元素*/printf("%6d",temp); /*打印第n-1行元素*/new=frontQueue_seq(p); /*读队首元素到new*/temp=temp+new; /*利用队中第n-1行元素产生第n行元素*/enQueue_seq(p,temp); /*第n行元素入队*/}temp=frontQueue_seq(p); /*第n-1行最后一个出队*/deQueue_seq(p);printf("%6d\n",temp);/*打印第n-1行的元素*/for(j=i;j<N;j++)printf(" ");enQueue_seq(p,1); /*第n行最后一个元素入队*/}}}main(){int N,order=1;while(order){printf("请输入要打印的杨辉三角行数N\n");scanf("%d",&N);YangHuiTriangle (N);printf("继续打印请输入1,停止输入0,请输入:");scanf("%d",&order);}}。
打印杨辉三角形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杨辉三角形的数学性质杨辉三角形具有许多有趣的数学性质,下面我们将逐一探讨一些常见的性质:性质一:对称性杨辉三角形是关于中心对称的,也就是每一行的数字从中间开始以对称的方式排列。
C++输出上三⾓下三⾓菱形杨辉三⾓形1.输出上三⾓形第⼀⾏1个星,第⼆⾏3个星,第三⾏5个星,第四⾏7个星,第五⾏9个星。
分析:三⾓形的形状由输出的空⽩和星组成,通过分析每⼀⾏输出⼏个空格,⼏个星,就可完成输出三⾓形的⼯作。
#include<iostream>using namespace std;int main(){int i=0,j=0;for(i=1;i<=5;i++){//控制⾏数for(j=1;j<=(5-i);j++){cout<<" ";//控制输出空格}for(j=1;j<=(2*i-1);j++){cout<<"*";//控制输出*}cout<<endl;//每⼀⾏进⾏换⾏}return 0;}2.输出下三⾓第⼀⾏9个星,第⼆⾏7个星,第三⾏5个星,第四⾏3个星,第五⾏1个星。
分析:该图形与上三⾓图形相反,思路类似。
#include<iostream>using namespace std;int main(){int i=0,j=0;for(i=1;i<=5;i++){//控制⾏数for(j=1;j<=(i-1);j++){cout<<" ";}for(j=1;j<=(9-2*(i-1));j++){cout<<"*";}cout<<endl;}}3.输出菱形菱形其实就是由⼀个上三⾓和⼀个下三⾓组成。
可以通过两次for循环输出#include<iostream>using namespace std;int main(){int i=0,j=0;for(i=1;i<=5;i++){cout<<"\t";for(j=1;j<=(5-i);j++){cout<<" ";}for(j=1;j<=(2*(i-1)+1);j++){cout<<"*";}cout<<endl;}for(i=4;i>=1;i--){cout<<"\t";for(j=1;j<=(5-i);j++){cout<<" ";}for(j=1;j<=(2*(i-1)+1);j++){cout<<"*";}cout<<endl;}cout<<endl;}4.输出杨辉三⾓111121133114641151010511615201561172135352171 18285670562881 193684126126843691杨辉三⾓形最显著的特点就是每个数等于它上⽅两数之和。
C语⾔实现打印杨辉三⾓的⽅法详细(三种⽅法)⽬录题⽬描述问题分析1. 使⽤数组法(打印直⾓三⾓)2. 使⽤数组法(打印等腰三⾓)3. 使⽤公式法(打印等腰三⾓)⽹上参考题⽬描述打印杨辉三⾓(前N⾏)问题分析杨辉三⾓是中国古代数学的杰出研究成果之⼀,它把⼆项式系数图形化,把组合数内在的⼀些代数性质直观地从图形中体现出来,是⼀种离散型的数与形的结合。
杨辉三⾓的部分规律:1. 每个数等于它上⽅两数之和。
2. 每⾏数字左右对称,由1开始逐渐变⼤。
3. 第n⾏的数字有n项。
4. 第n⾏的m个数可表⽰为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
根据前三个规律,我们可以使⽤数组法获取杨辉三⾓;根据后两个规律,我们可以使⽤公式法求出每⾏每列的数字。
数组法思路:先根据设定的⾏数定义⼀个⼆维数组,然后使⽤⼀个双层循环,外层循环的因数为杨辉三⾓的⾏数,内层循环⽤来将杨辉三⾓每⾏的数字存⼊数组。
每⾏第⼀列和最后⼀列都是1,中间的数字等于它上⽅两数之和。
最后再通过两层循环将⼆维数组中的数字打印。
公式法思路:由于杨辉三⾓满⾜上⾯提到的第4点规律,所以我们可以直接定义⼀个函数求出杨辉三⾓第n⾏的m个数的值。
组合数公式根据上⾯这个组合的公式,我们可以使⽤阶乘及相关计算,求出杨辉三⾓形的每个数,同时打印出来。
1. 使⽤数组法(打印直⾓三⾓)打印直⾓形式的杨辉三⾓形,即打印⼆维数组时不加空格代码#include <stdio.h>#define LINE_MAXIMUM 10 //⾏数int main(){int i = 0, j = 0;int array[LINE_MAXIMUM][LINE_MAXIMUM] = {0};/* 填充⼆维数组 */for(i = 0; i < LINE_MAXIMUM; i++) //⾏数{for(j = 0; j <= i; j++) //每⾏的列数(第n⾏的数字有n项){if(j == 0 || j == i) //每⾏第⼀列和最后⼀列为1array[i][j] = 1;else //每个数等于它上⽅两数之和array[i][j] = array[i - 1][j - 1]\+ array[i - 1][j];}}/* 打印杨辉三⾓(直⾓) */for(i = 0; i < LINE_MAXIMUM; i++){for(j = 0; j <= i; j++)printf("%d ", array[i][j]);printf("\n");}return 0;}运⾏结果2. 使⽤数组法(打印等腰三⾓)打印等腰形式的杨辉三⾓形,需要在每⾏前⾯加若⼲空格,空格的宽度需要根据数字的宽度调整,使三⾓形对称。
c语言杨辉三角形代码杨辉三角形是一种由数字组成的三角形,其中每个数字是它上方两个数字的和。
该三角形以前数学家杨辉的名字命名,其结构如下:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1下面以C语言编写一个打印杨辉三角形的代码示例:```c#include <stdio.h>void printYanghuiTriangle(int n) {int triangle[n][n];// 初始化数组元素为0for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {triangle[i][j] = 0;}}// 计算杨辉三角形for (int i = 0; i < n; i++) {triangle[i][0] = 1;triangle[i][i] = 1;if (i >= 2) {for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; }}}// 打印杨辉三角形for (int i = 0; i < n; i++) {// 添加空格,使三角形居中显示for (int k = 0; k < n - i - 1; k++) {printf(" ");}for (int j = 0; j <= i; j++) {printf("%d ", triangle[i][j]);}printf("\n");}}int main() {int n;printf("请输入杨辉三角形的行数:");scanf("%d", &n);// 打印杨辉三角形printYanghuiTriangle(n);return 0;}```上述代码中,我们定义了一个`printYanghuiTriangle`函数来打印杨辉三角形,并在`main`函数中通过用户输入的行数调用该函数进行打印。