计算机二级c语言问题,麻烦讲一下过程,麻烦不懂的千万不要回答,你回答会让我的问题停止推送,谢谢

如题所述

这种题你要弄清楚i++ 和 ++i

还有就是{}之间的变量

//你的for执行2次,分别是0/1,因此你的f里面都是计算else

else{int a = 7; t += a++;}
//这里出来的t = 7;而计算后的a = 8;

//在到return时,return t += a++;
//注意此时的a为f里面的a,而不是else里面的a,因此这里的a=5;
//所以
return 7 + 5;

//执行2次后,因此结果等于24,选B。

追问

为什么else里的a和f里的a不一样?为什么能在elsr里再次定义一个a呢?

else

追答

所以我开始强调了程序段里面的变量,及变量的有效范围

1{
2    int a = 1;
3    {
4        int a = 2;
5    }
6    第二个a的有效性范围是3-5.
另外因为第3-5行中又申明了一个a,此时函数编译器是只识别他函数段里面的,其他地方的a不予识别。

追问

感谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-21
【s=0,i=0】
i<2成立,开始循环:s+=f(i);【i=0,调用f(0)】
f(0): 【n=0,t=0,a=5】n/2等于0条件为假,执行else,else中的a,可称之为aa=7; t+=a++;即t+=aa; aa++;【t=7,aa=8】结束else后aa被舍弃,return t+a++即return t+a; a++; 即return 12; 【a=6】,退出f后f中定义的a被舍弃
s+=f(0);【s=12】
i++; 【i=1】
i<2成立,继续循环:s+=f(i); 【i=1,调用f(1)】
f(1):【n=1,t=0,a=5】n/2是整数除仍等于0,执行else,t+=aa++;【t=7】,返回12
s+=f(1); 【s=12+12=24】
i++;【i=2】
i<2不成立,结束循环
输出24
在子程序中定义的a,虽然也叫a,但与主程序中的不是一个,它起作用的范围在函数f中,换句话说,函数f中用到a变量就是这个a,如果在程序的大括号中定义变量,那么其作用域将是这重大括号,如同else中的变量a,所有大括号中用到的就是这个a而不是外面f定义的a,你为了区别起见,可以修改程序改成aa,或aaa省得混淆,比如:
int f(int n) { int t=0,aa=5;
if ( n/2 ) { int aaa=6; t+=aaa++; } else { int aaa=7; t+=aaa++; }
return t+aa++;
}追问

意思是开始定义了a,在后面还能再次定义一个相同名称的但是互不干扰?

第2个回答  2016-09-21
先从主函数开始,定义s等于0,i等于0
然后进行for循环,其实i可以放进for循环里的,
i<2,意味着进行两次循环,分别是i=0时还有i=1时,
然后s=s+f(i)
这就是进行f(n),把i代入到n里
定义一个t,t等于0,a=5,
如果n/2存在,也就是说n/2不等于0的时候,定义a=6,t+=a++,a++和++a都是自增,但是a++是先计算再自增,也就是说计算完了后进行自增,
如果不存在,定义a=7,t+=a++;解释和上面一样,

int a=一个数字,就是把a重新进行赋值
然后返回t+a++的值追问

我看得懂,你算一下看看结果对吗

追答

第3个回答  2016-09-21
的风格的风格的追问

我真是艹了你的吗

狗。日。的

死。妈。的。狗

你,妈。在。我。胯。下呻。吟

相似回答