| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1574 人关注过本帖
标题:[原创]小弟我因为初学C 只有麻烦各位讲解一下这个程序
只看楼主 加入收藏
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

#define M 3

#define N M+1

#difine NN N*N/2

main ()

{

printf("%d\n",NN);//宏展开后printf("%d\n",3+1*3+1/2);

printf("%d\n",5*NN);//宏展开后printf("%d\n",5*3+1*3+1/2);

}

运行结果:
6
18


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-22 14:13
zhangyibao
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2006-5-24
收藏
得分:0 

哦!是啊!如果要想得到8 40 你可以将

#difine N M+1改为

#difine N (M+1)
这样就可以了否则在编译时系统会直接进行代换成NN=M+1*M+1/2
加上括号后:NN=(M+1)*(M+1)
OK????
把课本好好看一下吧!基础最重要啊!!!

2006-06-23 11:07
will_lan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-23
收藏
得分:0 
引谭老师的书上的例子:

例如:

#define M (y*y+3*y)

它的作用是指定标识符M来代替表达式(y*y+3*y)。在编写源程序时,所有的(y*y+3*y)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(y*y+3*y)表达式去置换所有的宏名M,然后再进行编译。

【例9.1】

#define M (y*y+3*y)

main(){

int s,y;

printf("input a number: ");

scanf("%d",&y);

s=3*M+4*M+5*M;

printf("s=%d\n",s);

}

上例程序中首先进行宏定义,定义M来替代表达式(y*y+3*y),在s=3*M+4*M+5* M中作了宏调用。在预处理时经宏展开后该语句变为:

s=3*(y*y+3*y)+4*(y*y+3*y)+5*(y*y+3*y);

但要注意的是,在宏定义中表达式(y*y+3*y)两边的括号不能少。否则会发生错误。如当作以下定义后:

#difine M y*y+3*y

在宏展开时将得到下述语句:

s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;

这相当于:

3y2+3y+4y2+3y+5y2+3y;

显然与原题意要求不符。计算结果当然是错误的。因此在作宏定义时必须十分注意。应保证在宏代换之后不发生错误。

2006-06-23 16:23
快速回复:[原创]小弟我因为初学C 只有麻烦各位讲解一下这个程序
数据加载中...
 
   



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

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