2道c语言题~求大神不吝赐教。

2025-01-01 17:40:15
推荐回答(2个)
回答1:

1.
int f(int n)
{static int s=1;
while(n) //一样的
{
s=s*n;

n--;
}
return (s);
}
第一次i=f(3)
n=3,s=s * n = 1 * 3 = 3
n=2,s=s * n = 3 * 2 = 6
n=1,s=s * n = 6 * 1 = 6
返回6
i=6

第二次j=f(3)
由于s是static变量,初始化一次,第一次运行时结束后s=6,运行j=f(3)时s初始值为6
n=3,s=s * n = 6 * 3 = 18
n=2,s=s * n = 18 * 2 = 36
n=1,s=s * n = 36 * 1 = 36
返回36
j=36

2.
printf("%s",chp);会打印从chp开始直到遇到'\0'结束符
for(chp=b; *chp; chp+=2) printf("%s",chp);

第一次chp=b
printf("%s",chp);打印出ABCD
之后chp=b+2,指向“ABCD”中的‘C’,
printf("%s",chp);打印出CD

之后chp=b+2,指向“ABCD”后面的'\0'

循环跳出
最终打印:ABCDCD结束

回答2:

1.因为static int s=1;是静态变量,会保留上一次的值.
2.第一次输出ABCD,第2次再输出CD