Categories: C/C++ | Tags: | Views: 712

 

运用二项式系数您可以计算,要从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), 转载请注明出处。 版权说明

No comments yet.
;) :| :x :twisted: :roll: :oops: :o :mrgreen: :lol: :idea: :evil: :cry: :arrow: :P :D :?: :? :) :( :!: 8O 8)

你可以使用@somebody:开头, 来邮件通知somebody你回复了他的留言(用户名区分大小写).