⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5.txt

📁 一道程序编译顺序的考题
💻 TXT
字号:
百度首页 | 登录 
 新闻   网页   贴吧   知道   MP3   图片   视频   百科
    帮助 


  
 

百度知道 > 电脑/网络 > C/C++  订阅该问题
 

西安电脑培训,思远+1助您做IT白领 
2002年至今,思远+1已为国家输送计算机软件,网络等领域的高端电脑专业人才10000余名,..
www.add1.org.cn 
免维护电脑气动打标机-雷恩博激光 
打标机行业的三好公司,立足于中国光谷,专业生产打标机,气动打标机,激光打标机,标牌压..
www.whlabel.com 
华瑞激光电脑雕刻机 速度快 质量优 
国际品质,国产价格.华瑞激光为国内外客户提供一整套激光加工解决方案及相关配套设施,..
www.hrht-tech.com 
电脑绣花 精美时尚 
江阴庆华电脑绣花厂是江苏地区最具规模,最专业的,花式最齐全的刺绣企业.庆华电脑绣花..
www.qhdnxh.cn 
宁波顺兴机械专业产销高精度电脑.. 
高标准的配置确保机器的优异性能,机械加工主关零件全部采用进口加工中心加工,确保机..
www.sx7788.cn 
百盾品牌电脑机箱电源, 市场占有.. 
国内领先的电脑外设供应商,主营:机箱,电源,键鼠及其它电脑外设的生产和销售,百盾品牌..
www.hedaoit.cn 
 

您想在自己的网站上展示百度“知道”上的问答吗?来获取免费代码吧! 
--------------------------------------------------------------------------------
如要投诉或提出意见建议,请到
百度知道投诉吧反馈。 
 相关问题添加到搜藏已解决 
一道c语言题
 悬赏分:5 - 解决时间:2008-6-9 09:46
float fun(int x,int y) 
{ return(x+y);} 
main() 
{ int a=2,b=5,c=8; 
printf("%3.0f\n",fun((int)fun(a+c,b),a-c)); 
} 
程序运行后的输出结果是 
A)编译出错 
B)9 
C)21 
D)9.0 
系统给的答案是B,我想知道下为什么选B,麻烦把解题思路说详细点,谢谢
提问者: t181935471 - 试用期 一级 最佳答案
这是一道程序编译顺序的考题,涉及到函数调用的先后顺序及运算符号的优先级等问题。下面我展开给你讲。 
C的程序编译总是从main函数开始的,这道题的重点在“fun((int)fun(a+c,b),a-c)); ”语句。 
系统首先要确定最外层 fun()函数的实参,第一个参数的确定需要递归调用fun()函数(不妨称其为内层函数)。内层函数的两个参数分别为x=a+b=2+8=10、y=b=5,执行函数体x+y=10+5=15,于是得外层函数的参数x=15。其另一个参数y=a-c=2-b=-6,再次执行函数体,得最终返回值x+y=15+(-6)=9。 
应该能看明白吧。
回答者:城北布衣 - 初学弟子 一级 6-8 15:38
提问者对于答案的评价:谢谢您觉得最佳答案好不好?    目前有 0 个人评价
       
50% (0) 
50% (0) 
相关内容
?  急!!一道C语言运算结果题 
?  c语言选这题一道 
?  帮忙解一道C语言题 
?  急!求做一道C语言题!请各位高手帮一下忙! 
?  一道C语言题,请电脑高手帮我做做 
  更多相关问题>> 
查看同主题问题:语言  
其他回答    共 5 条
printf("%3.0f\n",fun((int)fun(a+c,b),a-c)); 中先执行(int)fun(a+c,b),得到的是a + b + c = 15; 
然后执行fun((int)fun(a+c,b),a-c)),其中(int)fun(a+c,b)= 15,fun((int)fun(a+c,b),a-c))等效为fun(15,a-c);结果为9,所以最后输出9;
回答者:snje1987 - 助理 二级 6-8 15:24
解: 
float fun(int x,int y) 
{ return(float)(x+y);} //返回x+y的值,因x、y的类型和函数返回值的不一致,所以用强制类型转换 
main() 
{ int a=2,b=5,c=8; 
printf("%3.0f\n",fun((int)fun(a+c,b),a-c)); 
} 

你的代码很不规范。 
fun((int)fun(a+c,b),a-c)的意思是求(int)fun(a+c,b)和a-c的和 
(int)fun(a+c,b)的值为a+c+b=15,a-c的值为-6 
所以(int)fun(a+c,b)与a-c的和是15+(-6)=9
回答者:ptmary - 初入江湖 三级 6-8 15:33
see see it 吧 
main() 
{ 
int x,y,z,m,n; 
char c; 
for(x=0;x<10;x++) 
for(y=0;y<10;y++) 
for(z=0;z<10;z++) 
{ 
m=1000*(x+y+z)+100*(x+y+z)+10*(x+y+z)+(x+y+z); 
n=10000*y+1000*x+100*x+10*x+z; 
if(m==n) 
{printf("\n\tx=%d,y=%d,z=%d\n",x,y,z);} 
} 
c=getch(); 
} 
答案是 x=9 y=1 z=8 
9999+1111+8888=19998
回答者:MZWDRCAFG - 助理 三级 6-8 15:40
是先做fun((int)fun(a+c,b),a-c)); 里面的fun(a+c,b) 
先把a+c=10;b=5;传给函数float fun(int x,int y) x=10,y=5再由return(x+y)换回x+y=15给(int)fun(a+c,b)再调用外面的fun函数 即再次调用float fun(int x,int y)得到x=15,y=-6;再由return(x+y)换回x+y=9;输出即的答案
回答者:zuicao - 试用期 一级 6-8 16:09
printf("%3.0f\n",fun((int)fun(a+c,b),a-c)); 
这里面有二次调用,第一次(int)fun(a+c,b)这时return(x+y)返回的值是15 
第二次调用是fun(15,-6)这是return(x+y)返回的值是9 
%3.0f是显示格式 
3表示整数部分保留3位,超过3位按实际位数显示,少于3位补空格 
0表示显示的小数部分,0即表示不显示小数 
所以答案是 9 
9前面有两个空格 
如果%3.2的话就是 9.00
回答者:z周云云 - 魔法师 四级 6-9 08:51       对最佳答案的评论: 
评论字数200字以内  

   

?2008 Baidu
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -