使用用户定义的函数替代Pascal三角形的方法

时间:2018-10-28 16:42:12

标签: c

   #include <stdio.h>
   #include <conio.h>

   int fact(int x);
   int coeff(int y);

   int main(){
     int n,i,j,k;
     printf("\nENTER THE POWER:");
     scanf("%d",&n);
     for (i=0;i<=n;i++){
       for(k=n;k>i;k--){
          printf("  ");
       }
       printf("%4d",coeff(i));
       printf("\n");
     }
     getch();
   }

   int fact(int x){
      int a , f=1 ;
      for (a=x;a>0;a--){
        if(x==0){
           return 1;
        }
        return f*=a;
      }
   }

   int coeff(int y){
      int m ;
      for(m=0;m<=y;m++) {
        return (fact(y))/(fact(m)*fact(y-m));
      }
   }

我是C编程的新手。我最近开始使用C打印图案。我自己做了 Pascal的三角形的上述编码。但是我的代码在 CODE BLOCKS 编辑器中没有给出正确的答案。我知道网站上对此有解决方案。但是我想发展自己的推理(尽管很长)。但是我在这里找不到错误。有人可以帮我吗?

谢谢...

1 个答案:

答案 0 :(得分:1)

以下解决方案包括纠正代码中的错误以及一些改进:
1)使用getchar中的stdio.h而非非标准getch中的conio.h
2)coeff函数不需要for循环。
3)fact函数将完全计算阶乘,然后才返回值。
4)主回路中包含另一个for循环,可在一行中输出幂的所有系数。

#include <stdio.h>

int fact(int x);
int coeff(int n, int y);

int main(){
 int n,i,j,k;
 n = i = j = k = 0;
 printf("\nENTER THE POWER:");
 scanf("%d",&n);
 for (i=0;i<=n;i++){
   for(k=n;k>i;k--){
      printf("  ");       
   }
   for(j=0;j<=i;j++){
    printf("%4d",coeff(i, j));
   }       
   printf("\n");
 }     
 getchar();
}

int fact(int x){
  int a , f=1 ;
  if(x==0){
       return 1;
    }
  for (a=x;a>0;a--){
    f*=a;
  }
  return f;
}

int coeff(int n, int y){
    return (fact(n))/(fact(y)*fact(n-y));
}

输出:

a.exe
ENTER THE POWER:5
             1
           1   1
         1   2   1
       1   3   3   1
     1   4   6   4   1
   1   5  10  10   5   1

a.exe
ENTER THE POWER:6
               1
             1   1
           1   2   1
         1   3   3   1
       1   4   6   4   1
     1   5  10  10   5   1
   1   6  15  20  15   6   1

a.exe
ENTER THE POWER:7
                 1
               1   1
             1   2   1
           1   3   3   1
         1   4   6   4   1
       1   5  10  10   5   1
     1   6  15  20  15   6   1
   1   7  21  35  35  21   7   1