Студопедия — Встроенные (заранее определенные) макроимена
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Встроенные (заранее определенные) макроимена






Существуют встроенные (заранее определенные) макроимена, доступные препроцессору во время обработки. Они позволяют получить следующую информацию:

_LINE_ – десятичная константа – номер текущей обрабатываемой строки файла с программой на Си. Принято, что номер первой строки исходного файла равен 1;

_ FILE _ – строка символов – имя компилируемого файла. Имя изменяется всякий раз, когда препроцессор встречает директиву #include с указанием имени другого файла. Когда включения файла по команде #include завершаются, восстанавливается предыдущее значение макроимени _FILE_;

_DATE _ – строка символов в формате: “месяц число год”, определяющая дату начала обработки исходного файла.

_TIME_ – строка символов вида “часы минуты cекунды”, определяющая время начала обработки препроцессором исходного файла;

_STDC_ – константа, равная 1, если компилятор работает в соответствии с ANSI-стандартом. В противном случае значение макроимени _STDC_ не определено. Стандарт языка Си предполагает, что наличие имени _STDC_ определяется реализацией, так как макрос _STDC_ относится к нововведениям стандарта.

В конкретных реализациях компиляторов набор предопределенных имен шире. Например, в препроцессор могут быть дополнительно включены:

_CDECL_ – идентифицирует порядок передачи параметров функциям, значение 1 соответствует порядку, принятому в языке Си (в отличие от языка Паскаль);

_CONSOLE_ – определено для 32-разрядного компилятора и установлено в 1 для программ консольного приложения;

_DLL_ – соответствует работе в режиме Windows DLL;

_PASCAL_ – противоположен _CDECL_;

_WINDOWS_ – означает генерацию кода для Windows;

_WIN32_ – определен для 32-разрядного компилятора и установлен в 1 для консольных приложений.

Для получения более полных сведений о предопределенных препроцессорных именах следует обращаться к документации по конкретному компилятору.

Варианты индивидуальных заданий

 

Рекомендуется выполнять каждое задание, максимально используя возможности препроцессора. Ввод данных выполнять из файла. Все логически законченные части программы оформить в виде отдельных функций. При тестировании программ продемонстрировать работу всех вариантов без удаления кода соответствующего варианта.

1. Разработать несколько вариантов программы вычисления произведения двух матриц с использованием директив препроцессора:

1) для целочисленных значений;

2) для вещественных значений;

3) с использованием указателей.

При тестировании программы продемонстрировать работу всех вариантов без удаления кода соответствующего варианта с помощью директивы мультиветвления препроцессора.

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

3. Разработать программу с использованием массива структур под названием «телефонная книжка» для хранения информации о студентах своей группы в виде: имя, фамилия, телефон. Добавление элементов в «книжку», распечатки элемента «книжки» и печати всей «книжки» целиком оформить в виде отдельных функций. Тела функций и их прототипы поместить в отдельные заголовочные файлы. Все необходимые макроопределения и именованные константы поместить в отдельный заголовочный файл. Собрать проект, максимально используя директивы препроцессора.

4. Разработать несколько вариантов программы вычисления произведения двух матриц с использованием директив препроцессора:

1) для целочисленных значений;

2) для вещественных значений;

3) с использованием указателей.

Присутствие или отсутствие вывода на экран исходной, результирующей матрицы осуществить с помощью директив условной компиляции.

5. Разработать программу вычисления произведения двух вещественных матриц переменных размеров с использованием директив препроцессора. Использовать макросы-функции для организации нетрадиционных для Си обозначений индексированных элементов, но в математическом смысле более традиционных обозначений. Доступ к элементам двумерных массивов организовать как доступ к элементам матрицы с учетом натуральной записи номера столбца (от 1 до N) и номера строки матрицы (от 1 до M) в виде A(i, j).

6. Разработать программу с использованием препроцессорных средств:

1) имеется одномерный массив, в котором расположены по порядку натуральные числа от 1 до 100;

2) из элементов одномерного массива построить все возможные двумерные массивы по возрастанию числа строк, в которых надо просуммировать все элементы, стоящие на главной диагонали соответствующей матрицы;

3) доступ к элементам двумерных массивов организовать как доступ к элементам матрицы с учетом натуральной записи номера столбца (от 1 до N) и номера строки матрицы (от 1 до M) в виде A(i, j).

Максимально использовать макроопределения-функции как для организации доступа к элементам, так и для организации печати результата. Использовать прием создания строк из аргументов макроса с помощь операции препроцессора #.

7. Создать одномерный массив, состоящий из вещественных чисел. Разработайте программу, которая с помощью макроса-функции разделяет массив на два массива с четными и нечетными числами. Создать определение макроса-функции, которая возвращает значение 1, если переменная X представляет число (не обязательно целочисленное) четное и больше числа Y.

8. Создать определение макроса-функции, которая выводит на печать представления и значения двух целочисленных значений. Например, он может выводить данные в виде:

3+4=7, 4*12 = 48,

если аргументами служат выражения 3+4 и 4 * 12.

9. Создать определение макроса, который печатает имя, значение и адрес переменной типа int в следующем формате:

Имя: fop; значение: 23; адрес: ff46016.

10. Создать определение макроса-функции, которая в массиве (необязательно целочисленном) находит заданное значение и возвращает его. С помощью этого макроса-функции разработайте программу упорядочения массива по возрастанию.

11. Гармоническое среднее двух чисел получают вычислением среднего от инверсий этих чисел с последующим инвертированием результата. Воспользоваться директивой #define для определения макроса-функции, который выполняет эту операцию и написать простую программу для тестирования этого макроса.

12. Написать программу форматирования текста, читаемого из файла и состоящего из строк ограниченной длины. Слова разделены произвольным количеством пробелов. Программа должна читать файл по строкам, форматировать каждую строку и выводить строку в выходной файл. Форматирование заключается в удалении лишних пробелов и выравнивании границы текста слева. Кроме того, программа должна подсчитать число строк в тексте. Программу разместить в двух исходных файлах и одном заголовочном файле, предусмотрев при этом защиту от повторного включения заголовочных файлов.

13. В полярной системе координат вектор описывается модулем и углом с осью x в направлении против часовой стрелки. В прямоугольной системе координат тот же вектор описывается составляющими х и у, как показано на рис. 10.4. Написать программу, которая считывает значения модуля и угла (в градусах) вектора, а затем отображает составляющие х и у при этом воспользоваться следующими уравнениями:

х = r cos А, у = r sin A.

Для выполнения преобразования применить макрос-функцию, которая принимает структуру, содержащую полярные координаты, и возвращает структуру, содержащую прямоугольные координаты (можно воспользоваться указателями на эти структуры).

Рис. 10.4. Прямоугольные и полярные координаты

 

14. Библиотека ANSI содержит функцию clock () со следующим описанием:

#include < time.h>

clock_t clock (void);

Здесь clock_t – тип данных, определенный в файле time.h. Функция возвращает процессорное время в единицах, которые зависят от реализации языка. (Если процессорное время недоступно или не может быть представлено, функция возвращает значение -1.) Однако в файле time.h также определена константа СLOCKS_PER_SEC, которая представляет количество единиц процессорного времени в секунду. Следовательно, в результате деления разницы между двумя возвращаемымизначениями функции clock () на константу CLOCKS_PER_SEC получается количество секунд, прошедшее между двумя вызовами функции. Приведение значений к типу double до операции деления позволит получать результат в долях секунды. Написать функцию, которая принимает аргумент типа double, представляющий промежуток времени, а затем выполняет цикл до истечения указанного периода времени. Написать простую программу для тестирования этойфункции.

15. Написать макрос - функцию, которая в качестве аргумента принимает имя массива элементов типа int, размер массива и значение, представляющее количество выборок. Функция должна случайным образом выбирать из массива указанное количество элементов и печатать их значения. Ни один элемент массива не должен выбираться более одного раза. (Это модель выбора чисел в лотерее или членов жюри.) Воспользоваться функцией srand(), чтобы инициализировать rand() – генератор случайных чисел.

16. Разработать программу, которая определяет, в каком из двух целочисленных произвольных массивов больше положительных элементов. Создать определение макроса-функции, которая в массиве (необязательно целочисленном) находит заданное значение и возвращает его. Все константы определить через макроопределения.

17. Разработать программу с двумя типами данных «точка» и «прямоугольник», причем второй тип определяется через первый тип. Каждый тип данных и функции работы с ним описываются в отдельном заголовочном файле. В основном модуле просто создается объект типа «прямоугольник» и выводятся координаты его левого верхнего и правого нижнего углов. В основном модуле используются как функции из одного заголовочного файла, так и из другого. С использованием директив условной компиляции предотвратить повторное включение заголовочных файлов.

18. Написать программу, которая для целочисленного массива из 10 элементов определяет, сколько положительных элементов располагается между его максимальным и минимальным элементами. Создать определение макроса-функции, которая в массиве (необязательно целочисленном) находит заданное значение и возвращает его. Все константы определить через макроопределения.

19. Разработать программу вычисления и вывода таблицы умножения для чисел от 1 до 10 так, как это предлагается в школьных тетрадях по арифметике с использованием макросов-функций и препроцессорных операций в строке замещения.

20. Использовать директивы условной компиляции для того, чтобы выводить только один столбец таблицы умножения, без удаления кодов других частей программы из задачи 19.

21. Разработать программу вывода одного столбца календаря для текущего месяца с указанием дней недели с использованием макросов-функций и препроцессорных операций в строке замещения.

22. Разработать как многофайловый проект программу вывода календаря на 2007 год с указанием дней недели с использованием макросов-функций и препроцессорных операций в строке замещения.

23. В одномерном массиве, состоящем из n вещественных элементов, вычислить:

1) сумму положительных элементов массива;

2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.

Упорядочить элементы массива по убыванию. Использовать макроопределения и макросы-функции.

24. Имеется три вложенные друг в друга фигуры: в квадрат встроен круг, в круг встроен равносторонний треугольник. Расположить по убыванию размеры площадей этих фигур. Все оформить в виде макросов-функций. Для вывода результата также использовать макроопределения и препроцессорные операции # и # #.







Дата добавления: 2014-11-10; просмотров: 1255. Нарушение авторских прав; Мы поможем в написании вашей работы!



Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Вопрос 1. Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации К коллективным средствам защиты относятся: вентиляция, отопление, освещение, защита от шума и вибрации...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

Типология суицида. Феномен суицида (самоубийство или попытка самоубийства) чаще всего связывается с представлением о психологическом кризисе личности...

ОСНОВНЫЕ ТИПЫ МОЗГА ПОЗВОНОЧНЫХ Ихтиопсидный тип мозга характерен для низших позвоночных - рыб и амфибий...

Принципы, критерии и методы оценки и аттестации персонала   Аттестация персонала является одной их важнейших функций управления персоналом...

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия