10、以下程序程序运行后的输出结果是( )。int f(int n){ static int a=1; n+=a++; return n;}main(){ i

10、以下程序程序运行后的输出结果是( )。

int f(int n){ static int a=1;
n+=a++; return n;}

main(){ int a=3,s;
s=f(a);s=s+f(a);printf("%d\n",s);}

A.7 B.8 C.9 D.10
能说的详细点吗?

int f (int n)
int f(int n){ static int a=1;
n+=a++; return n;}
函数里的a是静态变量,函数返回时不内存不回收,所以第一次进入函数时a为1,第二次为2
n+=a++相当于n=n+a++,a++表示先使用a,再自加1。所以第二次进来时a=2;然后选c很清楚了吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-05
9,所以C正确,选C——s=f(a)==n+=a++==3+1==4。s=s+f(a)==4+n+a++==4+3+2==9。为什么a第一次是1第二次是2?因为a是static变量,它的值不随函数退出而消失,而要保留到下一次被访问。毕。本回答被网友采纳
第2个回答  2018-03-02
#include <stdio.h>

int f(int n)

static int a=1; 
n+=a++; 
return n;
}

main()

int a=3,s; 
s=f(a);   // 3=3+ a++ -> n = 3+ a; a++ 所以这时 a=2 返回4
s=s+f(a);   // s = 4 + f(a)    ->   n = n + a->n=n+2;   返回5   4+ 5 = 9
printf("%d\n",s);
}

9
Press any key to continue

第3个回答  2013-02-24
输出结果是
C.9
第4个回答  2019-03-28
#include <stdio.h>
int f(int n){
  static int a=1;
  n+=a++;
  return n;
}
int main(){
  int a=3,s;
  s=f(a);
  s=s+f(a);
  printf("%d\n",s);
  return 0;
}

亲你到 这里 这里 去试一下就知道答案了。这种太简单了的题目不建议问哦

第一次调用 f 函数, 实际参数 main.a = 3, 因此调用 f(3) ,

f.n = 3

f.a = 1

f.n += f.a++ // 这句等价于: f.n = f.n + f.a; f.a++;

因此有: f.n = 4; f.a =2

返回 f.n 到主程序,因此返回 4 到 main, 我们有 main.s = f的返回值 = 4

第二次调用 f 函数, 实际参数 main.a = 3, 因此调用 f(3) 

f.n = 3

此时因为前一次调用之后 f.a = 2. 因此 

f.n += f.a++ // 这句等价于: f.n = f.n + f.a; f.a++;

因此有: f.n = 5; f.a =3

返回 f.n 到主程序,因此返回 5 到 main, 我们有 main.s = main.s + f 的返回值,

也就是:  s = 4 + 5 = 9。

如果这还看不懂,继续踩而不是赞的都是猪头。