359216180.docx答案
(4)定义函数int f ( int n),求n!
源程序:
int f(int n)
{int i; long w=1; for (i=1;i<=n;i++) w=w*i; return w; }
main()
{int n; long j;
printf(\请输入一个正整数:\\n\ scanf(\ j=f(n);
printf(\的阶乘是%ld\\n\}
(5)利用题(4)定义函数f,计算?i!
1n源程序:
int f(int n)
{int i; long w=1; for (i=1;i<=n;i++) w=w*i; return w; }
main()
{int i, n; long s=0;
printf(\请输入一个正整数:\\n\ scanf(\ for(i=1;i<=n;i++) s=s+f(i);
printf(\}
附加编程题
(1)定义函数int f(int x)判断x是否是奇数,若是则函数返回1,否则返回0。
6
359216180.docx答案
源程序: int f(int x)
{if(x%2!=0) /*或写成if(x%2==1)*/ return 1; else
return 0; }
main() {int n,flag;
printf(\请输入一个正整数:\\n\ scanf(\ flag=f(n); if(flag==1)
printf(\是奇数,函数返回值是1\\n\ else
printf(\不是奇数,函数返回值是0\\n\}
(2) 定义函数int f (int m, int n) 求mn。要求用函数递归调用的方法。 源程序:
int f(int m, int n) {int v;
if(n>1) /*或写成if(n!=1)*/ v=m*f(m,n-1); else v=m; return v; }
main() {int m,n;
printf(\请输入两个正整数(第一个为底数,第二个为指数):\\n\ scanf(\
printf(\的%d次方是%d\\n\}
(3) 定义函数int f (int n) 求源程序:
?i。要求用函数递归调用的方法。
1nint f(int n) {int sum;
if(n>1) /*或写成if(n!=1)*/
7
359216180.docx答案
sum=n+f(n-1); else
sum=1; return sum; }
main() {int n;
printf(\请输入一个正整数:\\n\ label: scanf(\
if(n<1) {printf(\输入数据错误,请重新输入:\\n\ printf(\到%d之间的正整数之和为%d\\n\}
(4) 定义函数int f (int a, int b ) 求a, b的最大公约数。 源程序1:
int f(int a, int b) {int c,i;
if(a=1;i--)
if((a%i==0)&&(b%i==0)) return i; }
main() {int m,n;
printf(\请任意输入两个正整数:\\n\ scanf(\
printf(\和%d的最大公约数是%d\\n\}
源程序2:
int f(int a, int b) {int i;
for(i=a;i>=1;i--) /*或写成for(i=b;i>=1;i--)*/ if((a%i==0)&&(b%i==0)) return i; }
main() {int m,n;
printf(\请任意输入两个正整数:\\n\ scanf(\
printf(\和%d的最大公约数是%d\\n\}
8
359216180.docx答案
思考:如何求两个正整数的最小公倍数? 源程序1:
int f(int a, int b) {int i;
for(i=a;i<=a*b;i++) /*或写成for(i=b;i<=a*b;i++)*/ if((i%a==0)&&(i%b==0)) return i; }
main() {int m,n;
printf(\请任意输入两个正整数:\\n\ scanf(\
printf(\和%d的最小公倍数是%d\\n\}
源程序2:
int f(int a, int b) {int i,c;
if(a>b) c=a; else c=b;
for(i=c;i<=a*b;i++)
if((i%a==0)&&(i%b==0)) return i; }
main() {int m,n;
printf(\请任意输入两个正整数:\\n\ scanf(\
printf(\和%d的最小公倍数是%d\\n\}
9