第12题  按公式计算组合数

试编写函数fun,通过形参m和n分别接收两个整数(m>n),按公式:PROG12-04计算组合数并返回调用者。

例如:若m和n分别为10和6,所得组合数为210。

注意:部分源程序在PROG1.C中,请勿改动已给定的任何内容,只在函数fun的指定位置填入你编写的若干语句。

PROG1.C:

PROG12-01

参考答案:

PROG12-02

运行结果:

PROG12-03

程序解析:

本题是最简单的题目之一。要点就是阶乘的计算,本题以变量mm、nn和mn分别表示并计算m、n和m−n的阶乘。以计算m的阶乘为例,用mm充当累乘变量,也叫累乘器,初值为1。语句mm = nn = mn = 1.0; 统一完成3个累乘器的初始化,把1写作1.0是因为累乘器是double类型,以强调其浮点特性。紧接着,执行语句:

for (i = 2; i <= m; ++i)
­      mm ∗= i;

循控变量i依次取值2,3,…,m,由于语句mm ∗= i; 的反复执行,i的取值依次被乘进变量mm之中,由于mm的初值为1,当for循环终止后,mm的值就是1,2,3,…,m的连乘积,即m的阶乘。

知识点:

① 在C语言中,赋值操作符=,指一种运算,用于构造赋值表达式。赋值表达式的值就是左边变量被赋值后的值。赋值表达式mm = nn = mn = 1.0等价于mm = (nn = (mn = 1.0)),是为多个变量赋同一值的习惯用法。注意:在赋值表达式后面添加分号;后,就变成了赋值语句。一般地,在任何表达式后面添加分号;后,就变成了相应的表达式语句。表达式和语句是两个不同的概念。

② mm ∗= i也是一种赋值表达式,等价于 mm = mm∗i。这种形式,不仅写法简单,而且实现高效。

③ 累乘器的用法。记住!要事先初始化,通常为1。对于浮点变量最好写成1.0的形式,以强调其浮点特性。常量1的类型为int,常量1.0的类型为double

返回