Объяснение результатов выполнения команд. Формирование строки для подключения следующего файла, страница 2

#define stack 50 /*  заменить все вхождения идентификатора STACR на 50*/

# endif /*закрываем #if STACKUSE */

# endif /*закрываем #if DLEVEL>5*/

а)DLEVEL определена значением 2, STACKUSE – 0:

Результат: STACK – 50;

б)DLEVEL определена значением 7, STACKUSE – 1:

Результат: STACK – 200;

IV. Сформулировать макроопределение для вычисления выражения:

1)#define MACRO_DIV(x,y,z) (((((x)-(y))*((x)-(z)))+(((x)+(y))*((x)+(z))))/(100*((x)+(y)+(z))))

/*В данном макроопределении x ,y и z являются формальными параметрами */

2)#define MACRO_DIV(r,i,d,t) ((((z)*(i))+((d)+(t))/((r)-(i)))/((r)+(i)))

/*В данном макроопределении r , i, d и t являются формальными параметрами */

3)#define MACRO_DIV(s,v,k) ((((s)+(v))/((s)-(v)))+(((s)-(k))/((s)+(k)))-(((v)-(k))/((v)*(k))))

/*В данном макроопределении s , v и k являются формальными параметрами */

4) #define MACRO_DIV(r,v,p) (((v)/(r))*(p))+(100*((v)+(p)-(r)))

/*В данном макроопределении r , v и p являются формальными параметрами */

5) #define MACRO_DIV(x,y,z) (((143*((x)+(y)))-(((x)-(z))/((y)-(z))))

/*В данном макроопределении x ,y и z являются формальными параметрами */

6) #define MACRO_DIV(x,y,z) ((x**)+(y***))/((x**)-(z***))

/*В данном макроопределении x ,y и z являются формальными параметрами */

7) #define MACRO_DIV(x,y) ((1-(x**))/(2+(y**)))-((x)*(y))

/*В данном макроопределении x  и y являются формальными параметрами */

8) #define MACRO_DIV(x,y,z) ((x)*((y)+(z)))-((y)*((x)+(z)))+((z)/(y))

/*В данном макроопределении x ,y и z являются формальными параметрами */

9) #define MACRO_DIV(x,y,z) ((((x)-(z))/((y)+(z)))**)*((((z)+(x))/((y)-(z)))**)

/*В данном макроопределении x ,y и z являются формальными параметрами */

10) #define MACRO_DIV(x,y) (((x)/(y))+((y)/(x))-((x)*(y)))**

/*В данном макроопределении x  и y являются формальными параметрами */

 5. Сформировать макроопределение для вычисления макровыражения. Если определена именованная константа OS2, то использовать первую формулу. Если определены именованные константы OS2  и MSDOS, то использовать вторую формулу. Если же определены именованные константы  OS2 , MSDOS и WINDOWS, то использовать третью формулу.

#ifdef OS2 /*проверяет, была ли ранее объявлена именованная константа OS2 директивой #define*/

y= (x) - 13                                /*используем первую формулу*/

#ifdef MSDOS /*проверяет, была ли ранее объявлена именованная константа  MSDOS директивой #define*/

y= 1/(x)                                 /*используем вторую формулу*/

#ifdef WINDOWS /*проверяет, была ли ранее объявлена именованная константа WINDOWS директивой     #define*/

y= 18/(30-(x))                                 /*используем третью формулу*/

#endif

#endif

#endif

Задание № 6. Написать простейшую программу  для проверки результатов вычисления макросов из задания 4.

#include <stdio.h>  /*подключение файла*/

#define MACRO_1 (x,y,z) ((((x)-(y))*((x)-(z)))+(((x)+(y)*((x)+(z))))/ (100*((x)+(y)+(z)))

main ()  /*главная функция*/

{

float x=5,y=7,z=9;  /*описание переменных, используемых в выражениях*/

A=MACRO_1(x,y,z);

Printf (“x=%f  y=%f  z=%f \n”,x,y,z); /*печать исходных данных*/

Printf (“A=%f \n”,A);  /*печать результатов вычисления*/

}

Задание  № 7.Написать простейшую программу для вычисления макросов из задания 5.

#include <stdio.h>  /*подключение файла*/

#define OS2 /*объявляем именованную константу OS2*/

#define MSDOS /*объявляем именованную константу MSDOS*/

main ()  /*главная функция*/

{

float x=3,y  /*описание переменных, используемых в выражениях*/

#ifdef OS2  /*проверяет, была ли ранее объявлена именованная константа OS2 директивой #define*/

y=1+x /*используем первую формулу*/

#ifdef MSDOS /*проверяет, была ли ранее объявлена именованная константа MSDOS  директивой #define*/

y=x**  /*используем вторую формулу*/

#ifdef WINDOWS /*проверяет, была ли ранее объявлена именованная константа WINDOWS директивой #define*/

y=2-x  /*используем третью формулу*/

#endif

#endif

#endif

Printf (“x=%f  \n”,x); /*печать исходных данных*/

Printf (“y=%f \n”,y);  /*печать результатов вычисления*/

}