|
Nov
11
|
|
运用二项式系数您可以计算,要从n中选出k个元素一共有多少种可能性,例如:k=6,n=49您可以得出彩票抽奖可能的总数。二项式系数被定义如下:
(n,k)=n!/[(n-k)!k!] mit n∈{0;1;2;…},0≤k≤n
重要提示:
再次写一个函数 void fakultaet(int *n);用于计算一个正整数的阶乘。继续写一个函数 int bino(int n,int k);用于按照上面的公式计算二项式系数。请您在主函数中检验使用者输入的n和k。请注意,使用输入一定要满足0≤k≤n,否则使用者必须重新输入。
程序输出如下:(使用输入用粗体字标出)
请输入 n: 5
请输入 k: 3
二项式系数为10
请输入 n: 1
请输入 k: 4
错误的输入。请您输入n: 4
请输入 k: 1
二项式系数为4
此题是不是又是要用到引用调用呢?该怎么编译呢?
我先作一简单的分析。
这题的难点在于计算阶乘的那个函数。
这个函数规定没有返回值
那么计算得到的阶乘就必须存储在传递过来的指针所指的地址中
而开始传递过来的参数事先已经存储在这个指针所指的地址中了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include<stdio.h> void fakultaet(int *n){ //计算指针n指向的地址中的值的阶乘,并将结果存储到n所指向的地址中 int num = *n; // 从地址中把值取出来 int fac = 1; // 存储计算的值 int i; //循环变量 for( i=1; i<=num; i++ ) { fac *= i; } *n = fac; //再把计算得到的值存回指针所指的地址中 } int bino(int n,int k){ //按公式计算二项式系数 int nk = n-k; fakultaet(&n); //分别计算几个数的阶乘并存到传递的指针所指的地址中 fakultaet(&k); fakultaet(&nk); // 这时候n,k,nk已经分别存储了他们的阶乘值 return n / ( nk*k ); } int main(){ int n,k; do{ printf("请输入n:"); scanf("%d", &n); printf("请输入k:"); scanf("%d", &k); if(k>n){ printf("错误的输入。\n"); } }while(k>n); //保证输入的k不比n大 printf("二项式系数为:%d\n", bino(n,k)); system("pause"); } |
这篇文章来自 迷途知返(PWWANG.COM), 转载请注明出处。 版权说明
Leave a comment
| Trackback

