要想用C语言实现杨辉三角形的输出,就首先需要明白杨辉三角形是怎么来的。
首先我们规定每一行第一个和最后数一个为1,那么从第一行开始就只有一个1;第二行就有两个1,从第三行开始就体现出杨辉三角形的特点了,即就是——每一个等于它上方两个数的和。就像下图一样:
既然明白了杨辉三角形的底层逻辑,要想使用C语言来实现它那么针对这种元素比较多的又比较又规律的首先就要想到使用数组了。
我们使用一个二维数组实现杨辉三角形,如下是一个6×6的矩阵(我们可以用二维数组表示它)
除了特殊的第一列,从第二行第二列的元素开始,它的值就是它头顶上元素的值加上左上角的值
编写代码:
#include<stdio.h>
#define N 10 //需要显示的行数
int main(void){
int i,j;
int a[N][N]={1}; //定义一个二维数组并将第一个元素置1,其余置0
for(i=0,j=0;i<N;i++){
a[i][j]=1;
//给数组放置杨辉三角形数
for(i=1;i<N;i++){ //从第1行开始到最后一行
for(j=1;j<N;j++){ //从第1列开始到最后一列
a[i][j]=a[i-1][j-1]+a[i-1][j]; //根据规律计算该元素的值
//输出杨辉三角
for(i=0;i<N;i++){
for(j=0;j<N;j++)
if(a[i][j]!=0)printf("%-5d ",a[i][j]); //-5表示左对齐,输出数据域宽为5
printf("\n");
return 0;
运行结果如下(输出了十行)
看完代码可能有人会问:既然你说了要规定每一行第一个和最后数一个为1,你怎么只定义了第一列为1呢。我觉得你可以再看一下本文开头的第二张图,就可以明白每行末尾的1我们是如何定义的了。当然你也可以直接定义。
—————————————以上是第一种输出方式(直三角形型)—————————————
—————————————以下是第二种输出方式(等腰三角形型)————————————
编写代码:
#include<stdio.h>
#define N 10 //需要显示的行数
int main(void){
int i,j,k;
int a[N][N]={1}; //定义一个二维数组并将第一个元素置1,其余置0
for(i=0,j=0;i<N;i++){
a[i][j]=1;
for(i=1;i<N;i++){
for(j=1;j<N;j++){
a[i][j]=a[i-1][j-1]+a[i-1][j]; //根据规律计算该元素的值
//输出等腰三角形型杨辉三角
for(i=0;i<N;i++){
//控制每行前面空格数
for(k=0;k<N-i;k++)
printf(" ");
//元素输出
for(j=0;j<N;j++)
if(a[i][j]!=0)printf("%6d",a[i][j]); //默认右对齐,域宽为6
printf("\n");
return 0;
其实只需要将第一次的代码中的杨辉三角输出的地方添加控制每行首个元素前的空格就行了。
效果如下:
完~~谢谢!
打印n行杨辉三角,n<10。
输入格式:
直接输入一个小于10的正整数n。
输出格式:
输出n行杨辉三角,每个数据输出占4
45用编程计算并输出杨辉三角形的前n行(要求n从键盘输入)输出杨辉三角形前n行(每一行每个数之间空一格,每行最后一个数不需要空格)
//45.用编程计算并输出杨辉三角形的前n行,要求n从键盘输入
//输出杨辉三角形前n行,每一行每个数之间空一格,每行最后一个数不需要空格
#include<stdio.h>
main()
int a[100][100],i,j,b;
scanf("%d",&b);
for(i=0;i<b;i++)
a[i][0]=1;
#include <stdio.h>int main(){ int i,j; int n;//自定义行数,可灵活输出杨辉三角 printf("请输入你想输出的行数:\n"); scanf("%d",&n); int a[n][n]; printf("\n"); for(i=0;i<n;i++) { a[i][...
杨辉,字谦光,汉族,钱塘(今浙江省杭州)人,南宋杰出的数学家。
他曾担任过南宋地方行政官员,为政清廉,足迹遍及苏杭一带。他在总结民间乘除捷算法、“垛积术”、纵横图(幻方)以及数学教育方面,均做出了重大的贡献。他是世界上第一个排出丰富的纵横图和讨论其构成规律的数学家。还曾论证过弧矢公式,时人称为“辉术”。与秦九韶、李冶、朱世杰并称“宋元数学四大家”。主要著有数学著作5种21卷,即《详解九章算法》12卷(1261),《日用算法》2卷(1262),《乘除通变本末》3卷(1274),《田亩比类乘除捷法》
检查j部分,我们必须要使j-1和i-1存在,所以没有办法写在一个程序里面,那样将会使程序变得更复杂。特别特别注意的一点就是这里优化循环,只用一个j在两个内循环中可以减小内存,q4:这里我也没想明白嘿嘿,是抄的大佬的,最后输出结果如下。然后我们考虑的是是否可以边赋值边输出。下一行等于上两行相加。