用c语言写的杨辉三角出错,求大神看看哪里错了

用c语言写的杨辉三角出错,求大神看看哪里错了,第1张

其实,用一维数组,就可以了。

#include<stdioh>

void  main(void)

{

    int  x[20] = {0};

    int  i, j, k, t;

    for (i = 0; i < 20; i++)  x[i] = 0;

    x[0] = 1;

    

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

      k = 0;  j = 0;

      while(1) {

        t = j + x[k];

        j = x[k];

        x[k] = t;

        k++;

        if (t == 0)  break;

        printf("%d ", t);

      }

      printf("\n");

    }

}

方法有很多很多

比如 用多维数组

比如用一维数组

比如用动态存储

比如递归计算。。。

太多了

随便给你一种

#include<stdioh>

int main( ) 

{int n,i,j,a[10][10]={1};

 scanf("%d",&n); 

 for(i=0;i<=n;i++)        //共有n+1行

 { a[i][0]=1;    //每行首元素为1

   for(j=1;j<=i;j++)    //其余元素值,等于左上+右上二数之和

     a[i][j]=a[i-1][j-1]+a[i-1][j];

 }

 for(i=0;i<=n;i++)    //打印n+1行

 {

for(j=0;j<n-i;j++)        //打印行前的空格

printf("  ");

for(j=0;j<=i;j++)        //每行上有i+1个值

printf("%4d",a[i][j]);

printf("\n");        //一行结束,换行

 }

 return 0;

}

我很久之前写过这个,但是当时用的是栈区数组固定长度,你改成动态数组即可。

void main()

{

int a[10] = { 1 };

for (int i = 0; i < 10; i++)     //用循环打印第一行

{

if (a[i] == 0)

{

printf("%4c",' ');

}

else

printf("%4d", a[i]);

}

//先输出第一行之后再进行循环

for (int j = 2; j <= 10; j++)

{

printf("\n");                     //回车输入第二行

// printf("1 ");                    //输入每一行开头的1

for (int i = 9; i >= 0; i--)

{

if (i != 0)                    //实现每行的第一个数均为一,后面的数才开始符合规则

{

a[i] = a[i] + a[i - 1];

}

else

a[i] = 1;

}

for (int i = 0; i < 10; i++)          //打印每一行

{

if (a[i] == 0)

printf("%4c",' ');

else

printf("%4d ", a[i]);

}

}

system("pause");

}

第一个问,是为了不让数组超界。

第二个问,同样,赋值这样是为了使得第一排的第一个数为1,这是杨慧三角的定义,顶角必须为1,否则后面的数字算不出来。其他的位置的值都是通过第一排的中间那个1(也就是a[0][10])算出来的,杨慧三角第n层的值和第n-1层有关。

第三个问,因为你中间计算的时候为了成图中的三角形,所以两个数中间隔了一个数,而这个数的值没有被赋值,因为这个位置不是杨辉三角的部分,所以就是你先前给他的那个0,因此当为0时输出空格

用一维数组就搞定了。

 

#include "stdafxh"

#include  <stdioh>

void main()

{ int i,j,a[17]={0,1},l,r;

  for(i=1;i<=6;i++)

  { l=0;

    for(j=1;j<=i;j++)

    { r=a[j];

      a[j]=l+r;  //每个数是上面两数之和

      l=r;

      printf("%5d",a[j]);  //输出杨辉三角

    }

    printf("\n");

  }

}

分步来看,从i=0开始,打印1,j初始化为i即0,不满足第一个for,再初始化j为1,不满足第二个for,换行。第一行输出:1。

第二次,i=1,打印1,j=i=1,满足,由于mamset已使数组全为零。数组[1]=0+1=1。j<=i,输出数组[1],换行。则第二行输出1 1。

不难发现,在第二个for中先输出的,始终是数组[1],而每一次大的for循环中,数组[1]=数组[1]+数组[0],由于数组[0]是1不可更改,所以杨辉三角中每一行从左往右第一个不为一的数字,总是按列逐个+1的。

不难看出,第一个for中,数组[j]总等于数组[j]+数组[j-1],数组j是杨辉三角中每一行最右边的数,它总等于它自己(0)加上上一行最右边的数。所以每一列的最右边总是1。

然后是最重要的一个,除每一行最右边的数组[j]外,每一个数组都等于它原来的值加上它前面数组的值,也就是它的值等于上一行的同列元素(从左往右数序号相同)和该元素左边元素之和,这正好满足了杨辉三角的定义。

所以,第一个for的作用是实现杨辉三角的定义(一个元素等于上一行对应两个元素之和)。

第二个for是从左到右输出数组。

可以不用二维数组,改用一维数组。

如果有改为不用数组,那就使用计算阶乘的方法,计算效率较低,而且容易“溢出”不能算得较多的行数。如果要改为能得到用数组同样的行数,则程序的编写就要用麻烦的算法。

以上就是关于用c语言写的杨辉三角出错,求大神看看哪里错了全部的内容,包括:用c语言写的杨辉三角出错,求大神看看哪里错了、c语言怎么编程杨辉三角有几种方法,请大神解答并写出,要语言编的、c语言程序杨辉三角等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9416654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存