
c语言 a[17][17]={0,1}什么意思
main()
{ int i,j,n=0,a[17][17]={0,1};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<=n;i++)
{ for(j=1;j<=i;j++)
{ a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/
printf("%5d",a[i][j]); /*输出杨辉三角*/
}
printf("\n");
}
} 展开
我想你可能是与 a[17][17] = {0} 混了。 这样写是把所有的初始为零。 上一个则只对头两个付了值。
你的代码为杨辉三角的设计的数据结构是个二维数组,而且是以1为开始的。有些人习惯以0 为数组的起始位置, 当然了,怎样写都行。
只是提一下, 如果以0为起始, 则为 a[17][17] = {1}; //a[0][0] = 1; 其余的未付初始值
下面的循环也要改为 for (i=0; i<n; i++) for (j=0; j<=i; j++)....
为什么执行的时候显示的没有 0 呢
因为你输出的循环用的是 i=1, j=1;
0 1 2 3 4 5 6 7 8 9 10...
0 {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 “0” 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
.......
注意 1 行 1列被双引号括起来的家伙, 你的程序是从这里开始输出的。 而每一行的输出是由你代码中的第二层循环 中的 j控制的。 j=1; j<=i; j++ : 这样, 你每行都是从 第 ‘1’ 列开始输出, 输出 i 次。。
即:定义一个17*17的数组,并赋初值,a[0]=0; a[1]=1;其他值为0
杨辉三角
#include<stdio.h>
main()
{
int a[10][10];
int i,j;
for(i=0;i<10;i++)
{
a[i][0]=1;a[i][i]=1;
}
for(i=2;i<10;i++)
{
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
(2)
#include <stdio.h>
main()
{
int i,j,n=0,a[17][17]={1};
while(n<1 || n>16)
{
printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<n;i++)
{
a[i][0]=1; /*第一列全置为一*/
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/
}
for(i=0;i<n;i++) /*输出杨辉三角*/
{ for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
(3)
#include <stdio.h>
main()
{ int i,j,n=0,a[17]={1},b[17];
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=0;i<n;i++)
{ b[0]=a[0];
for(j=1;j<=i;j++)
b[j]=a[j-1]+a[j]; /*每个数是上面两数之和*/
for(j=0;j<=i;j++)
/*输出杨辉三角*/
{ a[j]=b[j]; /*把算得的新行赋给a,用于打印和下一次计算*/
printf("%5d",a[j]);
}
printf("\n");
}
}
(4)
#include <stdio.h>
main()
{ int i,j,n=0,a[17]={0,1},l,r;
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<=n;i++)
{ l=0;
for(j=1;j<=i;j++)
{ r=a[j];
a[j]=l+r; /*每个数是上面两数之和*/
l=r;
printf("%5d",a[j]); /*输出杨辉三角*/
}
printf("\n");
}
}
a[17][17]=
{0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
……
}你什么意思?
为什么执行的时候没有显示0呢?