读书人

C语言一句话有关问题

发布时间: 2012-02-13 17:20:26 作者: rapoo

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;
}

读书人网 >C语言

热点推荐