免费男体全见博客:一道C语言题,在线等!

来源:百度文库 编辑:高考问答 时间:2024/05/03 05:13:16
#include <stdio.h>
#define N 2
#define M N+1
#define K M+M/2
main()
{
int n1,n2,n3;
n1=2;
n2=n1+1;
n3=n2+n2/2;
printf("%d\n",n3);
printf("%d\n",K);
}

各位高手,请问上面程序为什么会答案为:"4,5"
想不通呀

楼上的分析不厚道,人家答案明明是4和5
你把#define N 2 //N=2
#define M N+1 //M=3
#define K M+M/2 //define中为四舍五入答案是4??你信不过楼主给的答案?
我来分析一下吧,刚开始我看到这种题还以为是课本的答题错了,后来和同学们讨论后才知道是这样算的,在一开始的定义中,如果定义有多个,那么不可以一下就把中间的算出来的,要把定义一直用下去,简单说就是#define K M+M/2 把M用对M的定义换 可换为#define K N+1+N+1/2 而不是想当然的 就把M等于3代进来,
这样再把N的定义用上,#define K 2+1+2+1/2结果为5.5
再取正,所以为5。只要记住,一开始放在开头的yu处理语句是比较特别的就行了
关于int 的函数,这个就可以直接算出来,

看来楼上才是正解...

n3=n2+n2/2=n1+1+(n1+1)/2你计算是=4.5,可是前面定义是整型的应该把0.5舍去的,取整数答案就是4了
前面#define K M+M/2就是定义K为M+M/2而不是K=M+M/2
M则为N+1与前面的K 一样也是定义的,则K=N+1+N+1/2=5
而不是K=N+1+(N+1)/2=4就是这样了

n1=2;
n2=n1+1; /可知n2=3/
n3=n2+n2/2; / 因为n2为int ,n2/2等于3/2得1,n3=3+1=4/

#define N 2
#define M N+1
#define K M+M/2 /把N+1替代M ,则K其实为 N+1+N+1/2,由N=2得K为5/