| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1056 人关注过本帖
标题:一道二级填空题
只看楼主 加入收藏
youyou1211
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-5-31
收藏
 问题点数:0 回复次数:12 
一道二级填空题
int fac(int a)
{ 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 main static 
2006-06-27 18:40
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

最简单的办法,你编译以下就可以了啊


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2006-06-27 18:55
youyou1211
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-5-31
收藏
得分:0 
可是我想知道为什么啊~

2006-06-27 19:00
cd_tiger
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-6-10
收藏
得分:0 
为什么在书上,我们也是按书上给你说的!
2006-06-27 19:16
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 

运行后是:
5
7
9


2006-06-27 19:32
youyou1211
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-5-31
收藏
得分:0 
麻烦解释一下OK?

2006-06-27 20:15
一叶知秋
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-6-3
收藏
得分:0 
以下是引用youyou1211在2006-6-27 18:40:24的发言:
int fac(int a)
{ 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循环体时就留给你自已想想吧!

2006-06-27 21:36
youyou1211
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-5-31
收藏
得分:0 
哦,明白了,第一行a=0,b=1,c=4,a+b+c=5
第二行a=1,b=1,c=5,a+b+c=7
第三行a=2,b=1,c=6,a+b+c=9
谢谢哦~

2006-06-27 22:58
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用youyou1211在2006-6-27 18:40:24的发言:
int fac(int a)
{ 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) );
}
执行以上程序后,第一行的输出是

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)运算的最终结果。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-28 06:12
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-28 06:17
快速回复:一道二级填空题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051350 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved