赞
踩
已知m,n是正整数,编写程序求m中取n的组合数
源程序:
#include<stdio.h>
long fac(int k) // k 为形式参数,简称形参,它用于接受主调函数中的变量的值。long指明了函数的返回值(在这里也
{ 就是p)的类型是长整形。因为主调函数中c的类型是长整形。
long p;
int i; //i是局部变量,只在本函数中起作用
p=1;
for(i=1;i<=k;i++) // k的值不同,就可以求不同整数的阶乘
p=p*i;
return p; //被调函数返回p的值给主调函数,p称为被调函数的返回值
}
main()
{
int m,n;
long c;
printf("请输入m与n的值:");
scanf("%d%d",&m,&n);
c=fac(m)/(fac(n)*fac(m-n)); //调用fac函数,这时被调函数的返回值就派上用场了
printf("m中取n的组合数为%ld\n",c);
}
结果:
注:
1.这种由多个函数构成的程序,其执行流程是怎样的呢?这种程序总是从主函数开始执行,当遇到被调函数时,它会转到被调函数中执行,然后执行到return,带着return的结果再回到主函数来。
2.如果被调函数在主函数的下方,那么在主函数的上方必须要有一个函数声明,例如在这个程序中,如果我们把long fac(int k)放到main的下面,则必须在main的上面写一条long fac(int k);这就是函数声明,它的作用是告诉编译器,这个程序会用到这个函数。编译器在执行main函数时,如果遇到被调函数,它会想:咦,这个东西好面熟,再往下找找吧。这样就转向被调函数了。
3.参数的传递实际上是一种赋值运算
4.实参必须有确定的值
5.形参必须指定类型,只能是变量
6.实参和形参个数相等,类型一致(类型相同或赋值兼容)
执行这个程序时一定要慎重,一不小心就会超出范围,例如输入20和1,结果是-19,这个问题也让我纠结了很久,后来觉得应该是20的阶乘数值太大,超出了long型的范围,导致了整形数据的溢出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。