输出结果为什么是26 ? 当最后一句变为printf("%d",F(6));时结果为30 ? 为什么呢?

[复制链接]
查看11 | 回复4 | 2011-10-15 22:26:04 | 显示全部楼层 |阅读模式
你前面的宏定义N=4,F(n)=((N+1)*n)也就是F(n)=((4+1)*n)当你输出F(5+1)时第一步是替换成(N+1)*n),然后代入前面的N变成((4+1)*n)再替换成((4+1)*5+1),所以结果就变成了5*5+1=26因为他是值接把F(5+1)括号中的东东换成F(n)中n并不会把F(5+1)里那个5+1先行计算..只是做一个简单的替换而已..宏定义的时候一定要注意这一点..,而你把5+1改成6以后(N+1)*n)=((4+1)*6)当然就是30了...
回复

使用道具 举报

千问 | 2011-10-15 22:26:04 | 显示全部楼层
当结果是26时,运算时的式子是:(4+1)*5+1=5*5+1=25+1=26;F(6)即当n=6时,5*6=30;这个n的取值如果是一个算式,代入时不加括号;...
回复

使用道具 举报

千问 | 2011-10-15 22:26:04 | 显示全部楼层
宏是直接替换,而不是计算后再替换。F(5+1)= ((N+1)*5+1)=(5*5+1)=26F(6)=((N+1)*6) = 30两者是不一样的。...
回复

使用道具 举报

千问 | 2011-10-15 22:26:04 | 显示全部楼层
宏只是 字符串替换而已 它作用在编译期间 F(5+1) 就是 (5+1+1)*4+1 而已所以下面:printf("%d",(5+1+1)*4+1 输出为 26...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行