C语言函数题 为什么第二行的答案是10?

#include<stdio.h>#defineS(a,b)(a)>(b)?(a):(b)intf1(charch){intgrade;switch(ch){case'A... #include <stdio.h>
#define S(a, b) (a) > (b) ? (a) : (b)
int f1(char ch)
{ int grade;
switch(ch){
case 'A': grade = 95; break;
case 'B': grade = 85; break;
case 'C': grade = 75;
case 'D': grade = 65; break;
default: grade = 0;
}
return grade;
}
int f2()
{ static int k = 1, s;
s = s + k;
k++;
return s;
}
int f3(int n)
{ if(n == 1) return 2;
else return f3(n-1);
}
int main(void)
{ int i;
printf("%d\n", f1('C'));
for(i = 1; i <= 3; i++)
f2();
printf("%d\n", f2());
printf("%d\n", f3(4));
printf("%d\n", S(3, 2+2));
return 0;
}
展开
 我来答
我爱Xyy
2019-12-03 · TA获得超过280个赞
知道小有建树答主
回答量:508
采纳率:76%
帮助的人:120万
展开全部
第二行执行的是printf("%d\n", f2());,算上前面的for循环,一共执行了4次f2,printf语句是先执行f2然后再输出的。
看到f2里面,其实就是两个静态变量。s初始为0,k=1;然后每次进来k都会自增,进来四次,就相当于是1+2+3+4,所有最后输出出来就是10.
你不知道第二行输出是10,是不知道静态变量是啥意思吧?静态变量你可以理解为全局变量,他只会初始化一次,也就是说,static int k = 1, s;这一句,只会在第一次进入f2的时候执行,后面再进去,是不会执行k=1的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式