以下程序的执行结果是( )。
#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
#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;
宏定义=直接替换;num=8(/函数的特殊性,int自动取整);
结果是:12345678,n是先++,后打印,第一个数一定是1;
第3个回答 2013-05-10
个人感觉是B
如果第一行#include后面加个<stdio.h>的话运行结果就是B了,已上机运行测试
如果第一行#include后面加个<stdio.h>的话运行结果就是B了,已上机运行测试
第4个回答 2013-05-10
个人觉得没有正确答案