#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 являются формальными параметрами */
#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); /*печать результатов вычисления*/
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.