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;
} 展开
#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;
} 展开
1个回答
展开全部
第二行执行的是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的。
看到f2里面,其实就是两个静态变量。s初始为0,k=1;然后每次进来k都会自增,进来四次,就相当于是1+2+3+4,所有最后输出出来就是10.
你不知道第二行输出是10,是不知道静态变量是啥意思吧?静态变量你可以理解为全局变量,他只会初始化一次,也就是说,static int k = 1, s;这一句,只会在第一次进入f2的时候执行,后面再进去,是不会执行k=1的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |