在C中输入此三角形的高度时,打印Pascal三角形
你能帮我找到代码中的错误吗?那是因为你在factorial()函数中编写了错误的逻辑在C中输入此三角形的高度时,打印Pascal三角形,c,C,你能帮我找到代码中的错误吗?那是因为你在factorial()函数中编写了错误的逻辑 for(b=1;b3,循环终止,您得到了正确的答案!! 但如果a=4,那么在第一次迭代中,a=4*1等于4,在第二次迭代中,a=4*2等于8,大于4,因此循环不会进一步执行,您得到了错误的答案! 正确的逻辑是,声明另一个int变量并将其初始化为1,以存储“a”的乘积和变量本身,即 for (b=1;b<=a;b++) a=a*b;//also , you have to return the va
for(b=1;b3,循环终止,您得到了正确的答案!!
但如果a=4,那么在第一次迭代中,a=4*1等于4,在第二次迭代中,a=4*2等于8,大于4,因此循环不会进一步执行,您得到了错误的答案!
正确的逻辑是,声明另一个int变量并将其初始化为1,以存储“a”的乘积和变量本身,即
for (b=1;b<=a;b++)
a=a*b;//also , you have to return the value of a here!
intfac=1;
for(b=1;by您需要在阶乘函数中返回a;
。您的阶乘
函数完全错误。您正在for
循环中修改a
,然后将b
与修改后的值进行比较。您将得到各种整数溢出。那么我应该如何修复它?
1
1 1
1 3 1
1 0 0 1
1 0 0 0 1
1 0 0 0 0 1
for (b=1;b<=a;b++)
a=a*b;//also , you have to return the value of a here!
int fac=1;
for(b=1;b<=a;b++){
fac = fac*b;
}
return fac;
#include<stdio.h>
int factorial(int a){
int b=0;
if (a==0)
return 1;
else{
/* for(b=1;b<=a;b++){
fac = b*(factorial(b-1));// another way to find factorial using recursion
return fac;
}*/
int fac=1;
for(b=1;b<=a;b++){
fac = fac*b;
}
return fac;
}
} //factorial of a
int pascal(int i, int j){
return factorial(i) / (factorial(j) *factorial(i-j));
}
int main()
{
int k,n,m,q;
printf("Input m: ");
scanf("%d", &m);
for(k=0;k<m;k++){
for(n=0;n<=k;n++)
printf("%d ", pascal(k, n));
printf("\n");
}
return 0; // a good habit to add return 0, to let the compiler know that
// the code is executed completely
}