靳润昭C语言教程讲义 2001年2月17日 【例8.4】计算S=22!+32! 本题可编写两个函数,一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的 函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用f2计算其阶乘值, 然后返回f1,再返回主函数,在循环程序中计算累加和。 long fl(int p int k 2 (int) r=f2(k) return r long f2(int g) long c=l for(i=l; i<=g: i++) return c main int s=s+f1(i) printf ("ns=1d\n", s) 在程序中,函数f1和f2均为长整型,都在主函数之前定义,故不必再在主函数中对 f1和f2加以说明。在主程序中,执行循环程序依次把i值作为实参调用函数n1求i值。 在f1中又发生对函数f2的调用,这时是把1的值作为实参去调f2,在f2中完成求1 的计算。f2执行完毕把C值(即i!)返回给f1,再由们返回主函数实现累加。至此,由函 数的嵌套调用实现了题目的要求。由于数值很大,所以函数和一些变量的类型都说明为长整 否则会造成计算错误。 第9页靳润昭 C 语言教程讲义 2001 年 2 月 17 日 第9页 【例 8.4】计算 s=22 !+32 ! 本题可编写两个函数,一个是用来计算平方值的函数 f1,另一个是用来计算阶乘值的 函数 f2。主函数先调 f1 计算出平方值,再在 f1 中以平方值为实参,调用 f2 计算其阶乘值, 然后返回 f1,再返回主函数,在循环程序中计算累加和。 long f1(int p) { int k; long r; long f2(int); k=p*p; r=f2(k); return r; } long f2(int q) { long c=1; int i; for(i=1;i<=q;i++) c=c*i; return c; } main() { int i; long s=0; for (i=2;i<=3;i++) s=s+f1(i); printf("\ns=%ld\n",s); } 在程序中,函数 f1 和 f2 均为长整型,都在主函数之前定义,故不必再在主函数中对 f1 和 f2 加以说明。在主程序中,执行循环程序依次把 i 值作为实参调用函数 f1 求 i 2 值。 在 f1 中又发生对函数 f2 的调用,这时是把 i 2 的值作为实参去调 f2,在 f2 中完成求 i 2 ! 的计算。f2 执行完毕把 C 值(即 i 2 !)返回给 f1,再由 f1 返回主函数实现累加。至此,由函 数的嵌套调用实现了题目的要求。由于数值很大,所以函数和一些变量的类型都说明为长整 型,否则会造成计算错误