题目要求
有以下程序
#include <stdio.h>
int a=1;
int f(int c)
{static int a=2;
c=c+1;
return (a++)+c;}
main()
{ int i,k=0;
for(i=0;i<2;i++){int a=3;k+=f(a);}
k+=a;
printf(“%d\n”,k);
}
程序运行结果是( )。
思路分析
注意全局变量int a=1,和局部静态变量static int a=2,还有就是(a++),这个很容易忽视,虽然有括号,但是还是要执行完表达式之后,a在自增1,
第一轮for循环时 a=3,k+=f(a),即在函数f(int c)中 c=c+1=3+1=4,return (a++)+c = 2+4= 6 所以k=6
第二轮for循环时 a=3,k+=f(a),即在函数f(int c)中 c=c+1=3+1=4,注意 这个时候局部变量static int a=3, //在括号里自增1,此时return (a++)+c = 3 + 4 =7 这个时候原本的k=6然后+7 所以此时k=6+7=13
结束for循环之后 k+=a,此时a是全局变量 int a=1,所以k=13+1=14
撸写代码
#include<stdio.h>
int a=1;
int f(int c)
{
static int a=2;
c=c+1;
return (a++)+c;
}
int main()
{
int i,k=0;
for(i=0;i<2;i++)
{
int a=3;
k+=f(a);
}
k+=a;
printf("k=%d\n",k);
}