{ int b=0; static int c=3;
b++; c++; return a+b+c;
}
main ( )
{ int a=3, j;
for( j=0; j<3; j++) printf (“%d\n”,fac (j) );
}
执行以上程序后,第一行的输出是 ,
这道题的答案是7吗?
在int fac(int a)函数中,b是自动变量,c是静态变量.
自动变量在每次调用函数时都将重新初始化,重新分配空间;在函数运行结束所有自动变量都将释放;
静态变量只是在第一次调用函数时初始化,以后再调用此函数时,所有静态变量的值均为上此调用结束保存的值;静态变量是在整个程序结束时才释放。
理解了这点,再来看你这题应该不难了:
第一次运行main()函数中的for循环体时,j=0,将j=0作为实参传给fac()函数中的形参a,则fac()函数中的return a+b+c语句中的表达式
a+b+c=0+1+4=5
因return语句前有 b++;c++;所以b=0+1,c=3+1;
第二次及第三次运行main()函数中的for循环体时就留给你自已想想吧!
1。作为版主,俺不乐意你把论坛当作迎接C二级考的训练基地,虽然这样做可以让帖子的数量大幅上升,但质量就不敢恭维了。
2。所为何事?因为在下曾经是××××年××省高考状元(理科),但深知应试教育之流弊。俺不想把论坛搞成一个铜臭化的广告基地,更不想把论坛弄成一个市井化的应试教育仆从。像你目前这种C语言基础一踏糊涂、就事论事、头痛医头、脚疼治脚的“学习方法”只要肯下死工夫,当然能拿下二级证书。但问题是,持有注水证书跟买注水肉一样,食之无味、弃之可惜,不过“银洋蜡枪头”罢了。动点真格的,你行吗?其次,对应试教育的鼎力支持,无异于对真才实学的糟蹋埋汰。所谓尊重知识、尊重人才,势必蜕变为尊重文凭、尊重庸才。
3。作为坛友,就事论事说说答案倒也无妨:
⑴ 本题意在考察考生对下列知识点的掌握情况:循环、函数、变量的存储类别
⑵ 主函数for()循环3次,故总共有3行输出。题虽问你“第一行”但你得弄明白全部!
⑶ 第i=1,2,3行输出的内容,分别是函数调用fac(0),fac(1),fac(2)的返回值。
⑷ 第一行:实参0传送给了形参a。auto型变量b先等于零,b++后变成1。static型变量c初值是3,c++后变成4。所以表达式a+b+c等于0+1+4等于5,此即fac(0)运算的最终结果。至此本题填空处写上“5”就OK了。
⑸ 第二行:实参1传送给形参a。auto型变量b先等于零,b++后变成1。static型变量c残留值是4,c++后变成5。所以表达式a+b+c等于1+1+5等于7,此即fac(1)运算的最终结果。
⑹ 第三行:实参2传送给形参a。auto型变量b先等于零,b++后变成1。static型变量c残留值是5,c++后变成6。所以表达式a+b+c等于2+1+6等于9,此即fac(2)运算的最终结果。