运行结果:
请输入X的值 10
求和结果为:55
mc2.编写程序,输入m和n(n>m),求n的值。
分析:已知
n!c?m!(n?m)!
mnmc根据公式,只要自定义一个函数计算阶乘,即可通过函数调用求出n的值。
解:
阶乘函数定义如下: double fact(int k) { int p=1; if((k==0)||(k==1)) return p; else { for(int i=1;i<=k;i++)
p=p*i;
return p; }
}
一个完整的参考程序如下: #include
double fact(int); void main() {
int m,n; double c;
cout<<\l1: cout<<\
} { }
cin>>n;
cout<<\cin>>m; if (n c= fact(n)/( fact(m)* fact(n-m)); cout<<\ //B double fact(int k) int p=1; if((k==0)||(k==1)) return p; else { for(int i=1;i<=k;i++) p=p*i; return p; } 思考: ? 分别输入n=0,1,3,m=0,1,2测试程序。 ? 试用静态存储变量设计阶乘函数。 3.编写程序,求两个自然数m和n的最大公约数和最小公倍数。 分析: 最大公约数就是能同时整除m和n的最大正整数,可用欧几里德算法(也称辗转相除法)求解。应用欧几里德算法计算两个数的最大公约数的方法是:求两个数(m、n)相除的余数r(r=m/n m>n),当余数不为零时,m取n的值,n取r的值,再求两个数相除的余数,反复进行直到余数为零,除数n是最大公约数。 最小公倍数=m×n/最大公约数。 解: #include int r; r=c%d; while(r!=0) { c=d; d=r; r=c%d; } return d; } void main() { int m,n,e,d; cout<<\ cin>>m>>n; e=fun1(m,n); d=m*n/e; cout<<\最大公约数为:\ cout<<\最小公倍数为:\} 思考: ? 输入两个数m=36,n=24观察程序运行结果。 ? 用递归调用的方法实现程序编写,参考程序如下: # include c=d; d=r; fun1(c,d); } return d; } void main() { int m,n,e,d; cout<<\cin>>m>>n; e=fun1(m,n); d=m*n/e; cout<<\最大公约数为:\cout<<\最小公倍数为:\} ? 编写计算三个数最大公约数的程序。 4.分别输入整数半径和实数半径,使用函数重载计算圆的面积。 分析:由于参数只有一个圆的半径,所以只能对不同类型的参数实现重载。 解:程序如下 #include int area(int x) { return PI*x*x; } float area(float x) { return PI*x*x; } 思考: ? 编写重载函数实现对两个整型数、三个整型数、两个实型数、三个实型数等求最小值。 5.使用内联函数计算长方形的面积。 分析:C++编译器在调用遇到内联函数的地方,会用函数体中的代码替换函数。 解: 一个完整的内联函数参考程序如下: #include float a,b; cout<<\ cin>>a>>b; cout<<\} inline float s(float x,float y) { return x*y; } 思考: ? 将程序中的内联函数进行代码替换,并上机运行,观察结果。 (二)完成实验项目 1.编写函数求: 1?12?13?14?15?16?171???n2.用函数调用方法打印 九九表乘法。 3.以下函数是用递归方法计算x的n阶勒让德多项式的值。已有调用语句“p(n,x);”,编写poly函数。递归公式如下: