wpf触摸屏项目案例:关于C编程中的#define小问题

来源:百度文库 编辑:神马品牌网 时间:2024/03/29 14:00:33
#include "Stdio.h"
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{ int i,n=0;
for(i=0;i<=NUM;i++)
{ n++;
printf("%d",n);
}
printf("\n");
getch();
}

写成
#include "Stdio.h"
main()
{ int i,n=0;
for(i=0;i<=6;i++)
{ n++;
printf("%d",n);
}
printf("\n");
getch();
}
结果不一样!!

能告诉我是为什么吗??
#include "Stdio.h"
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{ int i,n=0;
for(i=0;i<=NUM;i++)
{ n++;
printf("%d",n);
}
printf("\n");
getch();
}
运行后输出的结果是123456789,为什么循环执行的次数是8呢(这是一道2级题,答案是8.)??循环执行一次,n增1,最后增到9,那循环也该执行了9次呀?????

在#define NUM (M+1)*M/2 计算的时候其实是没有把M=N+1用括号括起来用
在计算(M+1)*M/2时,变成(N+1+1)*N+1/2
而后面的其实是误导你 它的计算是(N+1+1)*(N+1)/2注意(N+1)多了括号

至于这个循环了几次,应该是9次,参考答案有误,所以不能太迷信答案哦^_^

这是一个预编译的问题,你把M换成N+1你就看出来NUM原来是(M+1)*N+1/2了,要改的话把N+1改成(N+1)就行了.

解题思路是这样的:

NUM = (M+1)*M/2 = (N+1+1)*N+1/2 = (2+1+1)*2 + 1/2 = 8 + 0 = 8

i是从0到8

所以答案是9次循环