以下程序的执行结果是( )。

以下程序的执行结果是( )。
#include
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main( )
{int I=1,n=0;
while(I<=NUM)
{ n++;
printf("%d",n);
I++;
}
printf("\n");
}
A、0123456 B、12345678 C、123 D、12

答案是 B ,这和宏定义有关;

#define N 2
#define M N+1
#define NUM (M+1)*M/2

宏定义只做符号的替换

#define M N+1
#define NUM (M+1)*M/2

这句后 NUM=(N+1+1)*N+1/2;

注意 :N+1是没有括号的,不是 NUM=(N+1+1)*(N+1)/2;

N=2,代入,NUM=(2+1+1)*2+1/2 =4*2+0=8
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-10
第一次比较,一定I比NUM小,所以程序执行n++,即n=n+1=1,所以第一次输出1,排除法也可以排除A,因为他第一位跟人家不一样。然后根据定义NUM=(M+1)*M/2=(N+1+1)*N+1/2,difine定义不会自动加括号,所以NUM=8.5,所以选B
第2个回答  2013-05-10
代码有问题加载#include <stdio.h>才能用printf函数
宏定义=直接替换;num=8(/函数的特殊性,int自动取整);
结果是:12345678,n是先++,后打印,第一个数一定是1;
第3个回答  2013-05-10
个人感觉是B
如果第一行#include后面加个<stdio.h>的话运行结果就是B了,已上机运行测试
第4个回答  2013-05-10
个人觉得没有正确答案

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网