此题怎解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了此题怎解相关的知识,希望对你有一定的参考价值。

有如下程序:
#include<stdio.h>
#define N 2
#define M N+1
#difine NUM 2*M+1
void main()

int i;
for(i=1;i<NUM;i++)
printf(“%d\n”,i);

该程序中的for循环执行的次数是()
A. 5 B. 7 C. 6 D.8

选A。
此题考察的是宏定义的知识
#define M N+1
#difine NUM 2*M+1
将M=N+1带入:即为
M=2*N+1+1=6。
i从1~5,所以for循环5次

与值对应的是
#define M N+1
#difine NUM 2*(M)+1
这样带入的时候就是
2*(N+1)+1=7

阐述明白了没有
参考技术A for执行5次
程序中遇到宏定义时是直接替换,如NUM=2*M+1=2*N+1+1=2*2+1+1=6
所以i从[1,6)共5次.我已经用程序测试过了:)
参考技术B C
NUM=2*M+1=7
循环i从1到6
参考技术C A
NUM=2*M+1=2*N+1+1=2*2+1+1=6
[1-6)共5次,下面的程序,你运行一下就知道了

#include<stdio.h>
#define N 2
#define M N+1
#define NUM 2*M+1
void main()

int i;
for(i=1;i<NUM;i++)
printf("%d\n",i);
参考技术D 5次循环,选择A

#define NUM 2*M+1 定义的宏常量,在编译时会直接将出现NUM的地方全部替换成2*M+1,而不是先计算出2*M+1,再将值替换。

因此对于语句:i<NUM,
对于NUM,会替换成i<2*M+1,
M再被替换成i<2*N+1+1,
N又被替换成2,
因此原语句,最终结果是i<2*2+1+1,因而i<6,会执行5次循环。

以上是关于此题怎解的主要内容,如果未能解决你的问题,请参考以下文章

noip2017"退役"记

求移除链表元素(此题没改动)

求删除链表值为val的节点(此题有改动)

7.整数反转Java版,每日一题系列(此题来自力扣网)

7.整数反转Java版,每日一题系列(此题来自力扣网)

题目1046:求最大值---------------此题较为水,但是仍然有需要注意的地方,原来可以这么输入!!!!