我用C语言编写杨辉三角,如果是10行10列,结果没问题,如果11行11列,结果出错,请大虾帮忙

cool0cool0 2010-10-27 10:11:33
main()
{
char a[12][12];
unsigned int i,j; /*用int定义也会出错*/
for(i=1;i<12;i++)
for(j=1;j<=i;j++)
{if((j==1)||(j==i))a[i][j]=1;
if(i>2)
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%5u",a[i][j]);
if(i>=1&&j==i)printf("\n");
}
}
...全文
834 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
硅步万里 2010-10-28
  • 打赏
  • 举报
回复
#include <stdio.h>

void main()
{
int i,j;
int n;
int num[100][100];

printf("杨辉三角\n\n");
printf("请输入一个小于100自然数:\n");
scanf("%d",&n);

if(n>100)
{
printf("你输入的数太大了!程序返回");
system("pause");
return ;
}
if(n-(int)n!=0 || n<=0)
{
printf("你输入的不是自然数! 程序返回");
system("pause");
return;
}
printf("\n杨辉三角形(前%d行):\n\n",n);
for (i=0;i<n;i++)
{
for (j=0;j<=i;j++)
{
if (j==0 || i==j)
{
num[i][j]=1;
printf("%10d",num[i][j]);
}
else
{
num[i][j]=num[i-1][j-1]+num[i-1][j];//这个数等于它左上角和它上面的数字之和,也就是杨辉三角形的特点
printf("%10d",num[i][j]);
}

}
printf("\n");
}
system("pause");

}

杨辉三角

请输入一个小于100自然数:
11

杨辉三角形(前11行):

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
请按任意键继续. . .
無_1024 2010-10-27
  • 打赏
  • 举报
回复
建议把 char换掉 换成int double long int
abc_labc 2010-10-27
  • 打赏
  • 举报
回复

//这是改完的
#include<stdio.h>
main()
{
int a[12][12];//同一楼
int i,j;
for(i=1;i<12;i++)
for(j=1;j<=i;j++)
{
if((j==1)||(j==i))a[i][j]=1;
else//这里也改动一下
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%5u ",a[i][j]);
if(i>=1&&j==i)printf("\n");
}
}
如影随从 2010-10-27
  • 打赏
  • 举报
回复
#include<stdio.h>
#define N 10
void main()
{
int i,j;
int num[N][N];
printf("\n杨辉三角形(前%d行):\n\n",N);
for (i=0;i<N;i++)
{
for (j=0;j<=i;j++)
{
if (j==0 || i==j)
{
num[i][j]=1;
printf("%5d",num[i][j]);
}
else
{
num[i][j]=num[i-1][j-1]+num[i-1][j];//这个数等于它左上角和它上面的数字之和,也就是杨辉三角形的特点
printf("%5d",num[i][j]);
}
千杯不醉-sen 2010-10-27
  • 打赏
  • 举报
回复

void main( void )
{
int a[12][12];
int i,j;
for(i=0;i<12;i++)//下标从0开始,代表(a+b)^n展开项的系数
{
a[i][i]=1;
a[i][0]=1;
/*
for(j=1;j<i;j++)//先赋值,在输出
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(j=0;j<=i;j++)
printf("%5u",a[i][j]);
*/
for(j=0;j<=i;j++)////边赋值,边输出
{
if(j>0 && j<i)
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%5u",a[i][j]);
}
printf("\n");
}
}
abc_labc 2010-10-27
  • 打赏
  • 举报
回复

#include<stdio.h>

main()
{
int a[100][100];
int i;
int j;
int k;
int n;
printf("杨辉三角\n\n");
printf("请输入一个自然数\n");
scanf("%d",&n);

for(i=0;i<n;i++)
{

for (k=0;k<n-i-1;k++)
{
printf(" ");
}

for(j=0;j<=i;j++)
{
if (j==0 || j==i)
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("%4d",a[i][j]);
}
printf("\n");
}
}
千杯不醉-sen 2010-10-27
  • 打赏
  • 举报
回复

void main( void )
{
int a[12][12];//char a[12][12];最大为127
int i,j;
for(i=0;i<12;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=0;i<12;i++)
{
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(j=0;j<=i;j++)
printf("%5u",a[i][j]);
printf("\n");
}
}
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
Press any key to continue
//楼主不妨变换为金三角形式的
Qyee 2010-10-27
  • 打赏
  • 举报
回复
数据范围的问题,char a[12][12];
可以换成int doulb等
bluejays 2010-10-27
  • 打赏
  • 举报
回复
{if((j==1)||(j==i))a[i][j]=1;
else if(i>2) // 要加个else,要不然a[i][1]又会被赋值一次
a[i][j]=a[i-1][j-1]+a[i-1][j];
bluejays 2010-10-27
  • 打赏
  • 举报
回复
char a[12][12];
为什么要用char?char的范围是-128~127,太小了
改成
int a[12][12];

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧