Объявление функций
Функции всегда определяются глобально. Они могут быть объявлены с классом памяти static или extern. Объявления функций на локальном и глобальном уровнях имеют одинаковый смысл. Правила определения области видимости для функций отличаются от правил видимости для переменных и состоят в следующем: 1. Функция, объявленная как static, видима в пределах того файла, в котором она определена. Каждая функция может вызвать другую функцию с классом памяти static из своего исходного файла, но не может вызвать функцию определенную с классом static в другом исходном файле. Разные функции с классом памяти static, имеющие одинаковые имена, могут быть определены в разных исходных файлах, и это не ведет к конфликту. 2. Функция, объявленная с классом памяти extern, видима в пределах всех исходных файлов программы. Любая функция может вызывать функции с классом памяти extern. 3. Если в объявлении функции отсутствует спецификатор класса памяти, то по умолчанию принимается класс extern. Все объекты с классом памяти extern компилятор помещает в объектном файле в специальную таблицу внешних ссылок, которая используется редактором связей для разрешения внешних ссылок. Часть внешних ссылок порождается компилятором при обращениях к библиотечным функциям Си, поэтому для разрешения этих ссылок редактору связей должны быть доступны соответствующие библиотеки функций. Приведем пример программы, текст которой размещен в двух файлах (для связи функций программы используется внешняя переменная i).
Пример 9.4 File1.c#include < stdio.h> extern int i; void main(void){ void next(void); i++; printf(“В main i=%d\n”, i); next(); }int i=3; /*описание переменной*/ void next(void){void other(void); i++; printf(“В next i=%d\n”, i); other(); } File2.c#include < stdio.h> extern int i; void other(void){ i++; printf(“В other i=%d\n”, i); } Результат В main i=4В next i=5В other i=6Варианты индивидуальных заданий В каждом задании по возможности ввод, вывод, сортировку оформить как отдельные функции (применить к этим функциям классы хранения), функцию сортировки массива структур поместить в отдельный файл, структурную переменную объявить как статическую, счетчики циклов объявить как регистровые переменные, передачу значений осуществить через внешние переменные, осуществить динамическое распределение памяти под структуры. 1. Описать структуру с именем STUDENT, содержащую следующие поля: фамилия и инициалы, номер группы, успеваемость (массив из пяти элементов). Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив из десяти структур типа STUDENT; упорядочить записи по алфавиту; вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 8 и 9; если таких студентов нет, вывести соответствующее сообщение. 2. Описать структуру с именем AEROFLOT, содержащую следующие поля: название пункта назначения рейса, номер рейса, тип самолета. Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив, состоящий из семи элементов типа AEROFLOT; упорядочить записи по алфавиту; вывод на экран номеров рейсов и типов самолетов, вылетающих в пункт назначения, название которого совпало с названием, введенным с клавиатуры; если таких рейсов нет, выдать на дисплей соответствующее сообщение. 3. Описать структуру с именем WORKER, содержащую следующие поля: фамилия и инициалы работника; название занимаемой должности; год поступления на работу. Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER; упорядочить записи по алфавиту; вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры; если таких работников нет, вывести на дисплей соответствующее сообщение. 4. Описать структуру с именем TRAIN, содержащую следующие поля: название пункта назначения; номер поезда; время отправления. Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив из шести элементов типа TRAIN; упорядочивать записи по алфавиту; вывод на экран информации о поездах, направляющихся в пункт, название которого введено с клавиатуры; если таких поездов нет, выдать на дисплей соответствующее сообщение. 5. Описать структуру с именем MARSH, содержащую следующие поля: название начального пункта маршрута; название конечного пункта маршрута; номер маршрута. Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив, состоящий из восьми элементов типа MARSH; упорядочивать записи по алфавиту; вывод на экран информации о маршрутах, которые начинаются или кончаются в пункте, название которого введено с клавиатуры; если таких маршрутов нет, выдать на дисплей соответствующее сообщение. 6. Описать структуру с именем NOTE, содержащую следующие поля: фамилия, имя; номер телефона; день рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: ввод с. клавиатуры данных в массив, состоящий из восьми элементов типа NOTE; упорядочивать записи по датам дней рождения; вывод на экран информации о человеке, номер телефона которого введен с клавиатуры; если такого нет, выдать на дисплей соответствующее сообщение. 7. Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя; знак зодиака; день рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK; упорядочивать записи по датам дней рождения; вывод на экран информации о людях, родившихся под знаком, наименование которого введено с клавиатуры; если такого нет, выдать на дисплей соответствующее сообщение. 8. Разработать программу учета покупок ювелирного магазина. Данные о покупках хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по стоимости ювелирного украшения. 9. Разработать программу учета жилищного фонда. Данные о жилом фонде хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру жилищного договора. 10. Разработать программу учета стройматериалов. Данные о стройматериалах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру договора. 11. Разработать программу учета посадок на участке в ботаническом саду. Данные о участках хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру участка. 12. Разработать программу расчета закупки сырья промышленного предприятия. Данные о закупках хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по типу сырья. 13. Разработать программу расчета прибыли от выполняемых работ по ремонту офиса многофилиального концерна. Данные о выполняемых работах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по сумме выполненных работ. 14. Разработать программу расчета деталей, использованных при изготовлении какого-либо изделия. Данные о деталях хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по стоимости деталей, используемых в данном изделии. 15. Разработать программу расчета закупки сырья промышленного предприятия. Данные о закупках хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру накладной 16. Разработать программу определения затрат рабочего времени на выполнение строительных работ. Данные о строительных работах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру заказа. 17. Разработать программу определения пробега автомобиля на основе путевых листов. Данные о путевых листах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру путевого листа. 18. Разработать программу определения величины таможенных сборов на базе контрактов коммерческой фирмы. Данные о таможенных сборах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру контракта. 19. Разработать программу определения процента выхода годных изделий на основе актов приема ОТК. Данные о тестируемых партиях хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру заказа. 20. Разработать программу оценки экспорта фирмы. Данные об экспортных операциях хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру контракта. 21. Разработать программу оценки роста промышленного предприятия по данным за последние годы. Данные о финансовых отчетах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по номеру финансового документа. 22. Разработать программу оценки продаж театральных билетов от времени года. Данные о продажах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по величине прибыли. 23. Разработать программу определения суммарной продажи проездных билетов за определенный месяц. Данные о продажах хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по величине прибыли. 24. Разработать программу вывода упорядоченного по алфавиту списка студентов, предусмотрев ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 25. Разработать программу вывода упорядоченного по году рождения списка студентов, предусмотрев ввод исходной информации о пяти студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 26. Разработать программу вывода упорядоченного по году поступления списка студентов-отличников, предусмотрев ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 27. Разработать программу вывода анкетных данных студентов, сдавших сессию на 4 и 5, предусмотрев ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 28. Разработать программу вывода списка студентов, фамилии которых начинаются с буквы Б, и их оценки по всем предметам. Предусмотреть ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 29. Разработать программу вывода анкетных данных отличников. Предусмотреть ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 30. Разработать программу вывода списка студентов, фамилии которых начинаются с буквы А, и их даты рождения. Предусмотреть ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 31. Разработать программу вывода анкетных данных студентов, имеющих хотя бы одну оценку 3 в сессию. Предусмотреть ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 32. Разработать программу вывода списка студентов и их оценки, фамилии студентов начинаются с букв В и Г. Предусмотреть ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 33. Разработать программу вывода фамилий и дат рождения студентов, не имеющих оценок 3. Предусмотреть ввод исходной информации о четырех студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 34. В программе вычислить общий средний балл всех студентов и вывести на экран список студентов со средними баллами выше общего среднего балла. Предусмотреть ввод исходной информации о пяти студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика. 35. Разработать программу вывода анкетных данных студентов, имеющих оценку 4 по физике и оценку 5 по высшей математике. Предусмотреть ввод исходной информации о пяти студентах: фамилия и инициалы, год рождения, год поступления в БГУИР, оценки за первый семестр по предметам: физика, высшая математика, информатика.
|