有以下程序: #include<stdio.h> double fun(int n) {static double f=1; f*=n: return f; } main() {int i; double s=0: for(i=1;i<6;i++) s+=

admin2020-07-28  42

问题 有以下程序:
#include<stdio.h>
double fun(int n)
{static double f=1;
f*=n:
return f;
}
main()
{int i;
double s=0:
for(i=1;i<6;i++)
s+=fun(i);
printf("%1f\n",S);
程序计算的是(  )。

选项 A、s=1!+2!+3!+4!+5!
B、s=1+2+3+4+5
C、s=1*2*3*4*5
D、s=1!*2!*3!*4!*5!

答案A

解析 函数fun()中的变量f是静态变量,所以只初始化一次,之后每次调用fun(),f的初值就是上一次fun()结束时的值,对于fun()函数,当传入n=1时,f=1,返回值为1;当传入n=2时,f=1×2=2,返回值为2;当传入n=3时,f=2×3=6,返回值为6;当传入n=4时,f=6×4=24,返回值为24,所以每次调用fun函数时,f变量在上一次fun函数运行结束时保留值的基础上,再与n乘积,并重新赋值给f,所以可以将f理解为记录当前的累乘值,即当main函数中i=1时,f=1!=1;当main()含数i=2时,f=2!=2,当main函数中i=3时,f=3!=6……另外main函数中的s记录调用fun函数的返回值之和,所以s=1!+2!+…+i!,由于i最大值为5,所以s=1!+2!+3!+4!+5!,答案为A。
转载请注明原文地址:https://kaotiyun.com/show/2U3p777K
0

最新回复(0)