C语言一句话问题
在运行以下程序最后有一句“Abnormal programme termination”,为什么呢?
程序要求是:输出杨辉三角(10行)。
#include<stdio.h>
void main()
{
int i,j,a[10][10];
a[1][1]=1;
for(i=2;i<=10;i++)
{
for(j=1;j<=i;j++)
if(j==1||j==i) a[i][j]=1;
else a[i][j]=a[i-1][j]+a[i-1][j-1];
}
for(i=1;i<=10;i++)
for(j=1;j<=i;j++)
{
printf("%5d",a[i][j]);
if(j==i) printf("\n");
}
printf("\n");
}
[解决办法]
数组越界
数组以0下标开始
[解决办法]
for(i=2;i <=10;i++) //数组越界了,都成a[10],而a[10]不存在,当然就错了
for(j=1;j <=i;j++) //同理
[解决办法]
a[10][10];
这里定义错了,应该是a[11][11]
[解决办法]
- C/C++ code
#include<stdio.h>main(){ int i,j; int a[10][10]; printf("\n"); 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"); } return 0;}
[解决办法]
数组下标从0开始a[10]是a[0]~a[9]
[解决办法]
数组越界 !!!
[解决办法]
额,,来晚了,
注意数组的下标。。。。。
[解决办法]
定义错了,a[10][都不存在怎么行啊,改为a[11][11]试试.
标准的应该是这样:
#include <stdio.h>
void main()
{
int i,j,a[11][11];
a[1][1]=1;
for(i=2;i <=10;i++)
{
for(j=1;j <=i;j++)
if(j==1||j==i) a[i][j]=1;
else a[i][j]=a[i-1][j]+a[i-1][j-1];
}
for(i=1;i <=10;i++)
for(j=1;j <=i;j++)
{
printf("%5d",a[i][j]);
if(j==i) printf("\n");
}
printf("\n");
}
你试一下,行了就给点分吧!!!
[解决办法]
数据越界。
for(i=2;i <=10;i++) //数组越界了,都成a[10],而a[10]不存在,当然就错了
for(j=1;j <=i;j++) //同理
[解决办法]
- C/C++ code
#include <stdio.h> void main() { int i,j,a[10][10]; 这里去掉了一句,好象没意义,因为你在下面的循环语句中也判断了。 for(i=0;i <= 9;i++) { for(j=0;j <=i;j++) if(i==0 ¦ ¦j==0) a[i][j]=1; else a[i][j]=a[i-1][j]+a[i-1][j-1]; } for(i=0;i <=9;i++) for(j=0;j <=i;j++) { printf("%5d",a[i][j]); if(j==i) printf("\n"); } printf("\n"); }
[解决办法]
#include <stdio.h>
int main(){
int i,j,a[10][10];
a[0][0]=1;
/* set the a[i][j] value */
for(i=1;i<10;i++){
for(j=0;j<i+1;j++){
if(j==0 || j==i){
a[i][j]=1;
} else {
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
}
for(i=0;i<10;i++){
for(j=0;j<i+1;j++){
printf("%5d",a[i][j]);
if(i==j){ printf("\n"); }
}
printf("\n");
}
return 0;
}