C语言排错,打印杨辉三角,行数由键盘输入。我的代码如下,请问错在哪,如何改?

#include<stdio.h>

void myprintf(int N);

main()
{ int N=0;
printf("请输入需要打印的杨辉三角的行数\n");
scanf("%d",&N);
myprintf(N);
}

void myprintf(int N)
{
int i=0,j=0,a[N][N]={0};
for (i=0;i<N;i++)
a[i][0]=a[i][i]=1;
for (i=2;i<N;i++)
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");
}
}

第1个回答  2011-12-24
你在myprintf里面的数组a声明有错误,数组声明的时候长度必须要是确定的,而不能是一个变量, 如N。
如下, 把声明成int **就可以了。
void myprintf(int N)
{
int i=0,j=0, **a; //二维指针
a = new int*[N]; //给a分配空间
for(i=0; i<N; i++) a[i] = new int[N]; //给a[i] 分配空间

for (i=0;i<N;i++)
a[i][0]=a[i][i]=1;
for (i=2;i<N;i++)
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");
}
//删除a数组
for(i = 0; i<N; i++) delete a[i];
delete a;
}
第2个回答  2011-12-24
#include<stdio.h>
void myprintf(int N);
main()
{ int N=0;
printf("请输入需要打印的杨辉三角的行数\n");
scanf("%d",&N);
myprintf(N);
}
void myprintf(int N)
{
//int i=0,j=0,a[N][N]={0};//<<<************不能动态定义数组
int i=0,j=0, **a;//<<<修改和添加的代码 动态分配:>>>>>
a=(int**)malloc(sizeof(int*)*N);
for(i=0;i<N;i++){
a[i] = (int*)malloc(sizeof(int)*N);
for(j=0;j<N;j++) a[i][j] = 0;
} //<<<<< 先分配一个N元素(指针)的指针数组,每个指针再次分配N个元素(整数)
for (i=0;i<N;i++)
a[i][0]=a[i][i]=1;
for (i=2;i<N;i++)
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个回答  2011-12-24
#include<stdio.h>

void myprintf(int N);

int main()
{ int N=0;
printf("请输入需要打印的杨辉三角的行数\n");
scanf("%d",&N);
myprintf(N);
return 0;
}

void myprintf(int N)
{
int i=0,j=0,a[100][100]={0};
for (i=0;i<N;i++)
a[i][0]=a[i][i]=1;
for (i=2;i<N;i++)
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");
}

}

c语言中是不能定义以变量做大小的数组的
你代码中的int i=0,j=0,a[N][N]={0};有错
第4个回答  2011-12-24
a[i][j]=a[i-1][j-1]+a[i-1][j];
改为
a[i][j]=a[i-1][j]+a[i-1][j-1];
第5个回答  2011-12-24
int i=0,j=0,a[20][20]={{0}};
C 不支持定义动态的数组!

C语言,输出杨辉三角
修改:#include"stdio.h" void main(){int a[10][10],i,j;for(i=0;i<=9;i++){ a[i][0]=1;\/\/原代码此处需修改,第一位数为1 a[i][i]=1;}for(i=1;i=9;i++)for(j=1;j<i;j++)\/\/原代码此处需修改 a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<=9;i...

C 语言输出杨辉三角。
1、使用vim创建一个文件yanghui.c,并打开它进行编辑。2、首先输入预处理指令 #include stdio.h,用于调用输出函数printf。3、编译一个函数void yanghui(int n)。其中,n表示二项式的次数。4、首先,对二项式的幂次进行检查,若小于0,说明输入的次数是不合法的,直接结束打印并给出提示。5、然后定义...

用c语言输出杨辉三角
C语言实现输出n层杨辉三角,注意n>34时会导致长整型溢出,参考代码如下:include<stdio.h>int main(){int i,j,n;long a[34]={1};scanf("%d",&n);if(n>34)return 1;for(i=0;i<n;i++){for(j=i;j>0;j--)a[j]=a[j]+a[j-1];for(j=0;j<=i;j++)printf("%ld ",a[j...

c语言问题,求杨辉三角
最后,为了展示生成的杨辉三角,我们使用`printf`函数输出每一行的数字。通过遍历数组的每一行并打印出来,我们可以直观地看到生成的杨辉三角。通过上述代码的实现,我们可以清楚地看到如何使用C语言实现杨辉三角,以及在实现过程中如何根据杨辉三角的特性进行数组的初始化和填充。

用c语言编写,输出杨辉三角形
\/\/a[21]就是告诉你只能存21个数据,也就是说你最多输出20行,再多就不行了!include <stdio.h> void main(){ int a[21],i,j,n ;scanf("%d",&n);printf("\\n");a[0]=1 ;for(i=0;i<=n;i++) \/\/n用来控制要输出的杨辉三角的行数 { for(j=1;j<=40-3*i;j++) \/...

c语言程序杨辉三角
我很久之前写过这个,但是当时用的是栈区数组固定长度,你改成动态数组即可。void main(){ int a[10] = { 1 };for (int i = 0; i < 10; i++) \/\/用循环打印第一行 { if (a[i] == 0){ printf("%4c",' ');} else printf("%4d", a[i]);} \/\/先输出第一行之后再进...

详解C语言用数组表示杨辉三角...
点评:解法一是一般最容易想到的解法,各部分功能独立,程序浅显易懂。解法二 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; \/*第一列全置...

c语言程序杨辉三角
以下是使用动态数组实现杨辉三角的C语言代码:void main() { int* a = malloc(sizeof(int) * 10); \/\/ 动态分配数组内存 a[0] = 1; \/\/ 初始化第一行 \/\/ 打印第一行 for (int i = 0; i < 10; i++) { if (i == 0) { \/\/ 第一行只有一个1 printf("%4d", a[i]);} ...

如何用C语言循环输出杨辉三角?
printf("请输入要打印的行数:");scanf("%d",&n);} printf("%d行杨辉三角如下:\\n",n);for(i=1;i<=n;i++)a[i][1] = a[i][i] = 1; \/*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*\/ for(i=3;i<=n;i++)for(j=2;j<=i-1;j++)a[i][...

C语言 | 打印杨辉三角
在C语言中,我们可以通过编程实现打印杨辉三角。这个经典问题可以分解为三个步骤来理解。首先,处理三角形中的特殊数字,即每行的首尾元素都是1,这部分是赋值的基础。 其次,中间的数通过数学公式计算得出,它们的值取决于上一行的相邻元素。 最后,将这些赋值后的二维数组按行进行遍历,并以图形...

相似回答