C语言编程 杨辉三角为什么超过19行会有负数

来源:百度知道 编辑:UC知道 时间:2024/06/20 22:02:56
知道的告诉下。。谢谢。。。

#include<stdio.h>

#define N 30

main()
{
int a[N][N];
int n;
int i,j;
printf("请输入你要的行数:\t ");
scanf("%d",&n);
if(n>=N)
{printf("最大只能是%d行",N);
n=N; }

for (i=1;i<n;i++)
{
a[i][1]=1;
a[i][i]=1;
}
for (i=3;i<n;i++)
{for(j=2;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for (i=0;i<n;i++)
{
for(j=1;j<=i;j++)
{
printf("\t%d",a[i][j]);}
printf("\n");
}
getch();
}

因为整数的范围只有-32768 到 +32767 超过了整数的范围之内 所以程序会出!!!!!!

大概overflow
使用32位元的编译器看看

如果输入20行的话,那么最大的数将达到48620
如果你使用的是16位编译器(比如Tubro C),int型只占2字节,所以就会溢出,
导致出现负数。

可是尝试将:
int a[N][N];
改为:
long int a[N][N];
或者:long long int a[N][N];

应该是溢出了,把数组类型定义成unsigned 或者unsigned long试试。